@sumaris-net/ngx-components 18.6.0 → 18.6.1

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,4 +1,4 @@
1
- import { booleanAttribute, ChangeDetectionStrategy, Component, EventEmitter, inject, Input, Optional, Output, } from '@angular/core';
1
+ import { booleanAttribute, ChangeDetectionStrategy, Component, EventEmitter, Inject, inject, Input, Optional, Output, } from '@angular/core';
2
2
  import { LocalSettingsService } from '../../core/services/local-settings.service';
3
3
  import { TranslateService } from '@ngx-translate/core';
4
4
  import { NetworkService } from '../../core/services/network.service';
@@ -10,6 +10,7 @@ import { UrlUtils } from '../file/url.utils';
10
10
  import { isNotEmptyArray, isNotNilOrBlank } from '../functions';
11
11
  import { NavController } from '@ionic/angular';
12
12
  import { MarkdownUtils } from './markdown.utils';
13
+ import { DOCUMENT } from '@angular/common';
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "@angular/router";
15
16
  import * as i2 from "@angular/common";
@@ -21,13 +22,15 @@ import * as i7 from "@ngx-translate/core";
21
22
  export class AppMarkdownContent {
22
23
  cd;
23
24
  element;
25
+ _document;
24
26
  route;
27
+ _printIframe;
28
+ _clickSubscription;
25
29
  navController = inject(NavController);
26
30
  settings = inject(LocalSettingsService);
27
31
  translate = inject(TranslateService);
28
32
  network = inject(NetworkService);
29
33
  markdownService = inject(MarkdownService);
30
- _clickSubscription;
31
34
  loading = true;
32
35
  error = undefined;
33
36
  baseUrl;
@@ -60,10 +63,11 @@ export class AppMarkdownContent {
60
63
  enableNavigationHistory = true;
61
64
  updateRouteLocation = false;
62
65
  markdownUrlChange = new EventEmitter();
63
- constructor(cd, element, route // Modal editor give 'null'
66
+ constructor(cd, element, _document, route // Modal editor give 'null'
64
67
  ) {
65
68
  this.cd = cd;
66
69
  this.element = element;
70
+ this._document = _document;
67
71
  this.route = route;
68
72
  // TODO: for DEV only
69
73
  //this.debug = !environment.production;
@@ -88,6 +92,88 @@ export class AppMarkdownContent {
88
92
  get canGoBack() {
89
93
  return isNotEmptyArray(this._navHistory);
90
94
  }
95
+ print(event) {
96
+ console.debug('[markdown] Print');
97
+ if (!this.element) {
98
+ console.error('Erreur : Élément non trouvé.');
99
+ return;
100
+ }
101
+ // Récupérer le contenu HTML depuis le composant
102
+ const content = this.element.nativeElement.innerHTML;
103
+ // Créer une iframe pour gérer l'impression
104
+ this._printIframe = this.createPrintHiddenIframe(content);
105
+ // Lancer l'impression après un court délai (le temps que l'iframe charge)
106
+ this._printIframe.contentWindow.addEventListener('load', () => {
107
+ this._printIframe.contentWindow?.window.print();
108
+ this._printIframe.remove();
109
+ });
110
+ setTimeout(() => {
111
+ //this._printIframe.contentWindow?.window.print();
112
+ // Supprimer l'iframe après impression
113
+ //this._document.body.removeChild(this._printIframe);
114
+ }, 500);
115
+ }
116
+ /* -- protected functions -- */
117
+ createPrintHiddenIframe(html, style) {
118
+ // Create a iframe with '?print-pdf'
119
+ const iframe = this._document.createElement('iframe');
120
+ iframe.classList.add('cdk-visually-hidden');
121
+ iframe.style.width = '100%';
122
+ iframe.style.height = '100%';
123
+ this._document.body.appendChild(iframe);
124
+ // Charger le contenu HTML dans l'iframe
125
+ const iframeDocument = iframe.contentDocument || iframe.contentWindow?.document;
126
+ if (iframeDocument) {
127
+ iframeDocument.open();
128
+ iframeDocument.write(`
129
+ <html>
130
+ <head>
131
+ <title>${this._document.title}</title>
132
+ <style>
133
+ hr {
134
+ page-break-before: always;
135
+ border: 0 !important;
136
+ padding: 0 !important;
137
+ }
138
+ body {
139
+ font-family: 'Roboto', Helvetica, Arial, sans-serif;
140
+ margin: 0;
141
+ padding: 20px;
142
+ }
143
+ </style>
144
+ </head>
145
+ <body>
146
+ ${html}
147
+ </body>
148
+ </html>
149
+ `);
150
+ iframeDocument.close();
151
+ }
152
+ // Inject App style
153
+ this.injectAppStylesIntoIframe(iframe);
154
+ return iframe;
155
+ }
156
+ injectAppStylesIntoIframe(iframe) {
157
+ const iframeDocument = iframe.contentDocument || iframe.contentWindow?.document;
158
+ if (iframeDocument) {
159
+ // Récupérer tous les styles (liens CSS)
160
+ const links = Array.from(this._document.querySelectorAll('link[rel="stylesheet"]'));
161
+ links.forEach((link) => {
162
+ const newLink = iframeDocument.createElement('link');
163
+ newLink.rel = 'stylesheet';
164
+ newLink.href = link.getAttribute('href');
165
+ if (newLink.href)
166
+ iframeDocument.head.appendChild(newLink);
167
+ });
168
+ // Récupérer tous les `styles` en ligne
169
+ const inlineStyles = Array.from(this._document.querySelectorAll('style'));
170
+ inlineStyles.forEach((style) => {
171
+ const newStyle = iframeDocument.createElement('style');
172
+ newStyle.innerHTML = style.innerHTML;
173
+ iframeDocument.head.appendChild(newStyle);
174
+ });
175
+ }
176
+ }
91
177
  setData(value, opts) {
92
178
  const anchor = opts?.anchor || null;
93
179
  if (this._data !== value || this._anchor !== anchor) {
@@ -224,13 +310,16 @@ export class AppMarkdownContent {
224
310
  this.error = null;
225
311
  this.cd.markForCheck();
226
312
  }
227
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownContent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Component });
228
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppMarkdownContent, selector: "app-markdown-content", inputs: { data: "data", src: "src", anchor: "anchor", debug: ["debug", "debug", booleanAttribute], showError: ["showError", "showError", booleanAttribute], animated: ["animated", "animated", booleanAttribute], enableNavigationHistory: ["enableNavigationHistory", "enableNavigationHistory", booleanAttribute], updateRouteLocation: ["updateRouteLocation", "updateRouteLocation", booleanAttribute] }, outputs: { markdownUrlChange: "markdownUrlChange" }, ngImport: i0, template: "<app-debug *ngIf=\"debug\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n loading: {{ loading }}\n <br />\n error: {{ error }}\n <br />\n <br />\n baseUrl: {{ baseUrl }}\n <br />\n markdownUrl: {{ src }}\n <br />\n markdownFragment: {{ _anchor }}\n <br />\n markdownContent: {{ data }}\n <br />\n </ion-col>\n </ion-row>\n </ion-grid>\n</app-debug>\n\n<!-- error -->\n@if (showError && error; as error) {\n <ion-item lines=\"none\" @slideDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n} @else {\n @if (data) {\n <markdown [data]=\"data\" (ready)=\"onReady()\" emoji></markdown>\n } @else if (src) {\n <markdown [src]=\"src\" (error)=\"onLoadError($event)\" (ready)=\"onReady()\" emoji></markdown>\n }\n}\n\n<!-- loading spinner -->\n@if (loading) {\n <div class=\"loading-spinner\">\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n </div>\n}\n\n<ng-template #loadingParagraph>\n <p>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 75%; margin-inline-start: 5%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n </p>\n</ng-template>\n", styles: [":host ::ng-deep markdown div.logo{display:none;visibility:hidden}:host ::ng-deep markdown blockquote{--block-margin: 16px 0;--block-padding: 4px 16px;--box-shadow: 0 2px 4px rgba(0, 0, 0, .4);display:block;position:relative;width:70%;margin:var(--block-margin);padding:var(--block-padding);font-style:italic;background:var(--ion-color-light);box-shadow:var(--box-shadow)}:host ::ng-deep markdown code{color:rgba(var(--ion-text-color-rgb),.7);background:rgba(var(--ion-text-color-rgb),.03);font-size:.9rem;letter-spacing:-.5px}.loading-spinner ion-skeleton-text{width:100%;height:1.5em}.loading-spinner p{margin-top:var(ion-padding, 16px)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i4.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: i5.DebugComponent, selector: "app-debug", inputs: ["titlePrefix", "title", "enable", "expanded"] }, { kind: "directive", type: i6.MarkdownDirective, selector: "markdown,[markdown]" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], animations: [slideDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
313
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownContent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: DOCUMENT }, { token: i1.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Component });
314
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppMarkdownContent, selector: "app-markdown-content", inputs: { data: "data", src: "src", anchor: "anchor", debug: ["debug", "debug", booleanAttribute], showError: ["showError", "showError", booleanAttribute], animated: ["animated", "animated", booleanAttribute], enableNavigationHistory: ["enableNavigationHistory", "enableNavigationHistory", booleanAttribute], updateRouteLocation: ["updateRouteLocation", "updateRouteLocation", booleanAttribute] }, outputs: { markdownUrlChange: "markdownUrlChange" }, ngImport: i0, template: "<app-debug *ngIf=\"debug\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n loading: {{ loading }}\n <br />\n error: {{ error }}\n <br />\n <br />\n baseUrl: {{ baseUrl }}\n <br />\n markdownUrl: {{ src }}\n <br />\n markdownFragment: {{ _anchor }}\n <br />\n markdownContent: {{ data }}\n <br />\n </ion-col>\n </ion-row>\n </ion-grid>\n</app-debug>\n\n<!-- error -->\n@if (showError && error; as error) {\n <ion-item lines=\"none\" @slideDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n} @else {\n @if (data) {\n <markdown [data]=\"data\" (ready)=\"onReady()\" emoji></markdown>\n } @else if (src) {\n <markdown [src]=\"src\" (error)=\"onLoadError($event)\" (ready)=\"onReady()\" emoji></markdown>\n }\n}\n\n<!-- loading spinner -->\n@if (loading) {\n <div class=\"loading-spinner\">\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n </div>\n}\n\n<ng-template #loadingParagraph>\n <p>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 75%; margin-inline-start: 5%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n </p>\n</ng-template>\n", styles: [":host ::ng-deep markdown div.logo{display:none;visibility:hidden}:host ::ng-deep markdown hr{border-top:1px solid var(--ion-color-medium-tint, #dcdcde);margin:10px 0}:host ::ng-deep markdown blockquote{--block-margin: 16px 0;--block-padding: 4px 16px;--box-shadow: 0 2px 4px rgba(0, 0, 0, .4);display:block;position:relative;width:70%;margin:var(--block-margin);padding:var(--block-padding);font-style:italic;background:var(--ion-color-light);box-shadow:var(--box-shadow)}:host ::ng-deep markdown code{color:rgba(var(--ion-text-color-rgb),.7);background:rgba(var(--ion-text-color-rgb),.03);font-size:.9rem;letter-spacing:-.5px}.loading-spinner ion-skeleton-text{width:100%;height:1.5em}.loading-spinner p{margin-top:var(ion-padding, 16px)}@media print{hr{page-break-before:always;border:none;margin:0}body{font-family:Roboto,Helvetica,Arial,sans-serif;margin:0;padding:20px}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i4.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: i5.DebugComponent, selector: "app-debug", inputs: ["titlePrefix", "title", "enable", "expanded"] }, { kind: "directive", type: i6.MarkdownDirective, selector: "markdown,[markdown]" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], animations: [slideDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
229
315
  }
230
316
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownContent, decorators: [{
231
317
  type: Component,
232
- args: [{ selector: 'app-markdown-content', changeDetection: ChangeDetectionStrategy.OnPush, animations: [slideDownAnimation], template: "<app-debug *ngIf=\"debug\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n loading: {{ loading }}\n <br />\n error: {{ error }}\n <br />\n <br />\n baseUrl: {{ baseUrl }}\n <br />\n markdownUrl: {{ src }}\n <br />\n markdownFragment: {{ _anchor }}\n <br />\n markdownContent: {{ data }}\n <br />\n </ion-col>\n </ion-row>\n </ion-grid>\n</app-debug>\n\n<!-- error -->\n@if (showError && error; as error) {\n <ion-item lines=\"none\" @slideDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n} @else {\n @if (data) {\n <markdown [data]=\"data\" (ready)=\"onReady()\" emoji></markdown>\n } @else if (src) {\n <markdown [src]=\"src\" (error)=\"onLoadError($event)\" (ready)=\"onReady()\" emoji></markdown>\n }\n}\n\n<!-- loading spinner -->\n@if (loading) {\n <div class=\"loading-spinner\">\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n </div>\n}\n\n<ng-template #loadingParagraph>\n <p>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 75%; margin-inline-start: 5%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n </p>\n</ng-template>\n", styles: [":host ::ng-deep markdown div.logo{display:none;visibility:hidden}:host ::ng-deep markdown blockquote{--block-margin: 16px 0;--block-padding: 4px 16px;--box-shadow: 0 2px 4px rgba(0, 0, 0, .4);display:block;position:relative;width:70%;margin:var(--block-margin);padding:var(--block-padding);font-style:italic;background:var(--ion-color-light);box-shadow:var(--box-shadow)}:host ::ng-deep markdown code{color:rgba(var(--ion-text-color-rgb),.7);background:rgba(var(--ion-text-color-rgb),.03);font-size:.9rem;letter-spacing:-.5px}.loading-spinner ion-skeleton-text{width:100%;height:1.5em}.loading-spinner p{margin-top:var(ion-padding, 16px)}\n"] }]
233
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.ActivatedRoute, decorators: [{
318
+ args: [{ selector: 'app-markdown-content', changeDetection: ChangeDetectionStrategy.OnPush, animations: [slideDownAnimation], template: "<app-debug *ngIf=\"debug\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n loading: {{ loading }}\n <br />\n error: {{ error }}\n <br />\n <br />\n baseUrl: {{ baseUrl }}\n <br />\n markdownUrl: {{ src }}\n <br />\n markdownFragment: {{ _anchor }}\n <br />\n markdownContent: {{ data }}\n <br />\n </ion-col>\n </ion-row>\n </ion-grid>\n</app-debug>\n\n<!-- error -->\n@if (showError && error; as error) {\n <ion-item lines=\"none\" @slideDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n} @else {\n @if (data) {\n <markdown [data]=\"data\" (ready)=\"onReady()\" emoji></markdown>\n } @else if (src) {\n <markdown [src]=\"src\" (error)=\"onLoadError($event)\" (ready)=\"onReady()\" emoji></markdown>\n }\n}\n\n<!-- loading spinner -->\n@if (loading) {\n <div class=\"loading-spinner\">\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n </div>\n}\n\n<ng-template #loadingParagraph>\n <p>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 75%; margin-inline-start: 5%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n </p>\n</ng-template>\n", styles: [":host ::ng-deep markdown div.logo{display:none;visibility:hidden}:host ::ng-deep markdown hr{border-top:1px solid var(--ion-color-medium-tint, #dcdcde);margin:10px 0}:host ::ng-deep markdown blockquote{--block-margin: 16px 0;--block-padding: 4px 16px;--box-shadow: 0 2px 4px rgba(0, 0, 0, .4);display:block;position:relative;width:70%;margin:var(--block-margin);padding:var(--block-padding);font-style:italic;background:var(--ion-color-light);box-shadow:var(--box-shadow)}:host ::ng-deep markdown code{color:rgba(var(--ion-text-color-rgb),.7);background:rgba(var(--ion-text-color-rgb),.03);font-size:.9rem;letter-spacing:-.5px}.loading-spinner ion-skeleton-text{width:100%;height:1.5em}.loading-spinner p{margin-top:var(ion-padding, 16px)}@media print{hr{page-break-before:always;border:none;margin:0}body{font-family:Roboto,Helvetica,Arial,sans-serif;margin:0;padding:20px}}\n"] }]
319
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: Document, decorators: [{
320
+ type: Inject,
321
+ args: [DOCUMENT]
322
+ }] }, { type: i1.ActivatedRoute, decorators: [{
234
323
  type: Optional
235
324
  }] }], propDecorators: { data: [{
236
325
  type: Input
@@ -256,4 +345,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
256
345
  }], markdownUrlChange: [{
257
346
  type: Output
258
347
  }] } });
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWFya2Rvd24vbWFya2Rvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWFya2Rvd24vbWFya2Rvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7QUFnQmpELE1BQU0sT0FBTyxrQkFBa0I7SUFrRGpCO0lBQ0E7SUFDWTtJQW5EZCxhQUFhLEdBQUcsTUFB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QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBzbGlkZURvd25BbmltYXRpb24gfSBmcm9tICcuLi9tYXRlcmlhbC9tYXRlcmlhbC5hbmltYXRpb25zJztcbmltcG9ydCB7IE1hcmtkb3duU2VydmljZSB9IGZyb20gJy4vbWFya2Rvd24uc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVybFV0aWxzIH0gZnJvbSAnLi4vZmlsZS91cmwudXRpbHMnO1xuaW1wb3J0IHsgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgTmF2Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IE1hcmtkb3duVXRpbHMgfSBmcm9tICcuL21hcmtkb3duLnV0aWxzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBBcHBNYXJrZG93bk9wdGlvbnMge1xuICBkYXRhPzogc3RyaW5nO1xuICBzcmM/OiBzdHJpbmc7XG4gIHNob3dFcnJvcj86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tYXJrZG93bi1jb250ZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hcmtkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFya2Rvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtzbGlkZURvd25BbmltYXRpb25dLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBNYXJrZG93bkNvbnRlbnQgaW1wbGVtZW50cyBBcHBNYXJrZG93bk9wdGlvbnMsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCBuYXZDb250cm9sbGVyID0gaW5qZWN0KE5hdkNvbnRyb2xsZXIpO1xuICBwcm90ZWN0ZWQgc2V0dGluZ3MgPSBpbmplY3QoTG9jYWxTZXR0aW5nc1NlcnZpY2UpO1xuICBwcm90ZWN0ZWQgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgbmV0d29yayA9IGluamVjdChOZXR3b3JrU2VydmljZSk7XG4gIHByb3RlY3RlZCBtYXJrZG93blNlcnZpY2UgPSBpbmplY3QoTWFya2Rvd25TZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgX2NsaWNrU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBsb2FkaW5nID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIGVycm9yOiBzdHJpbmcgPSB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIGJhc2VVcmw6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgX2RhdGE6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9zcmM6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9mYWxsYmFja1NyYzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2FuY2hvcjogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBfbmF2SGlzdG9yeTogeyBzcmM/OiBzdHJpbmc7IGZhbGxiYWNrU3JjPzogc3RyaW5nOyBkYXRhPzogc3RyaW5nOyBhbmNob3I/OiBzdHJpbmcgfVtdID0gW107XG5cbiAgQElucHV0KCkgc2V0IGRhdGEodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0RGF0YSh2YWx1ZSk7XG4gIH1cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgc3JjKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFNyYyh2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNyYygpIHtcbiAgICByZXR1cm4gdGhpcy5fc3JjO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGFuY2hvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fYW5jaG9yID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGFuY2hvcigpIHtcbiAgICByZXR1cm4gdGhpcy5fYW5jaG9yO1xuICB9XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRlYnVnOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0Vycm9yID0gdHJ1ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFuaW1hdGVkID0gdHJ1ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGVuYWJsZU5hdmlnYXRpb25IaXN0b3J5ID0gdHJ1ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHVwZGF0ZVJvdXRlTG9jYXRpb24gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgbWFya2Rvd25VcmxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlIC8vIE1vZGFsIGVkaXRvciBnaXZlICdudWxsJ1xuICApIHtcbiAgICAvLyBUT0RPOiBmb3IgREVWIG9ubHlcbiAgICAvL3RoaXMuZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2NsaWNrU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMubWFya2Rvd25TZXJ2aWNlLnJlc2V0QmFzZVVybCgpO1xuICB9XG5cbiAgZ29CYWNrKGV2ZW50PzogRXZlbnQpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWFya2Rvd25dIEdvaW5nIGJhY2snKTtcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KHRoaXMuX25hdkhpc3RvcnkpKSB7XG4gICAgICBjb25zdCB7IHNyYywgZmFsbGJhY2tTcmMsIGRhdGEsIGFuY2hvciB9ID0gdGhpcy5fbmF2SGlzdG9yeS5wb3AoKTtcbiAgICAgIGlmIChzcmMpIHRoaXMuc2V0U3JjKHNyYywgeyBmYWxsYmFja1NyYywgYW5jaG9yIH0pO1xuICAgICAgZWxzZSB0aGlzLnNldERhdGEoZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmF2Q29udHJvbGxlci5iYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNhbkdvQmFjaygpIHtcbiAgICByZXR1cm4gaXNOb3RFbXB0eUFycmF5KHRoaXMuX25hdkhpc3RvcnkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldERhdGEodmFsdWU6IHN0cmluZywgb3B0cz86IHsgYW5jaG9yPzogc3RyaW5nOyBhZGRUb05hdmlnYXRpb25IaXN0b3J5PzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgYW5jaG9yID0gb3B0cz8uYW5jaG9yIHx8IG51bGw7XG5cbiAgICBpZiAodGhpcy5fZGF0YSAhPT0gdmFsdWUgfHwgdGhpcy5fYW5jaG9yICE9PSBhbmNob3IpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAvLyBTYXZlIGN1cnJlbnQgc3RhdGUgdG8gbmF2aWdhdGlvbiBoaXN0b3J5XG4gICAgICAgIGlmIChvcHRzPy5hZGRUb05hdmlnYXRpb25IaXN0b3J5KSB7XG4gICAgICAgICAgdGhpcy5fbmF2SGlzdG9yeS5wdXNoKHtcbiAgICAgICAgICAgIHNyYzogdGhpcy5fc3JjLFxuICAgICAgICAgICAgZmFsbGJhY2tTcmM6IHRoaXMuX2ZhbGxiYWNrU3JjLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICAgICAgICAgIGFuY2hvcjogdGhpcy5fYW5jaG9yLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9hbmNob3IgPSBhbmNob3I7XG5cbiAgICAgICAgLy8gQ2xlYXIgc3JjXG4gICAgICAgIHRoaXMuX3NyYyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZhbGxiYWNrU3JjID0gbnVsbDtcblxuICAgICAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0U3JjKHNyYzogc3RyaW5nLCBvcHRzPzogeyBmYWxsYmFja1NyYz86IHN0cmluZzsgYW5jaG9yPzogc3RyaW5nOyBhZGRUb05hdmlnYXRpb25IaXN0b3J5PzogYm9vbGVhbiB9KSB7XG4gICAgLy8gQ2xlYW4gVVJMIChyZW1vdmUgZnJhZ21lbnQgYW5kIHF1ZXJ5KVxuICAgIGNvbnN0IGFuY2hvciA9IG9wdHM/LmFuY2hvciB8fCBVcmxVdGlscy5nZXRGcmFnbWVudChzcmMpO1xuICAgIHNyYyA9IFVybFV0aWxzLnN0cmlwRnJhZ21lbnRBbmRRdWVyeShzcmMpO1xuICAgIGxldCBmYWxsYmFja1NyYyA9IG9wdHM/LmZhbGxiYWNrU3JjID8gVXJsVXRpbHMuc3RyaXBGcmFnbWVudEFuZFF1ZXJ5KG9wdHMuZmFsbGJhY2tTcmMpIDogbnVsbDtcblxuICAgIGlmICh0aGlzLl9zcmMgIT09IHNyYyB8fCB0aGlzLl9mYWxsYmFja1NyYyAhPT0gZmFsbGJhY2tTcmMgfHwgdGhpcy5fYW5jaG9yICE9PSBhbmNob3IpIHtcbiAgICAgIGNvbnN0IHVybCA9IHNyYyA/IHNyYyArIChpc05vdE5pbE9yQmxhbmsoYW5jaG9yKSA/IGAjJHthbmNob3J9YCA6ICcnKSA6IG51bGw7XG4gICAgICBpZiAodXJsKSBjb25zb2xlLmRlYnVnKGBbbWFya2Rvd25dIExvYWRpbmcgJHt1cmx9Li4uYCk7XG5cbiAgICAgIC8vIEdpdmUgYmFzZVVybCB0byB0aGUgc2VydmljZSwgdG8gYmUgYWJsZSB0byByZXNvbHZlIHJlbGF0aXZlIHBhdGggLSBlLmcuIGltYWdlcylcbiAgICAgIGlmIChzcmMgJiYgVXJsVXRpbHMuaXNFeHRlcm5hbFVybChzcmMpKSB7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IFVybFV0aWxzLmdldFBhcmVudChzcmMpO1xuICAgICAgICB0aGlzLm1hcmtkb3duU2VydmljZS5zZXRCYXNlVXJsKHRoaXMuYmFzZVVybCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgLy8gU2F2ZSBjdXJyZW50IHN0YXRlIHRvIG5hdmlnYXRpb24gaGlzdG9yeVxuICAgICAgICBpZiAob3B0cz8uYWRkVG9OYXZpZ2F0aW9uSGlzdG9yeSkge1xuICAgICAgICAgIHRoaXMuX25hdkhpc3RvcnkucHVzaCh7XG4gICAgICAgICAgICBzcmM6IHRoaXMuX3NyYyxcbiAgICAgICAgICAgIGZhbGxiYWNrU3JjOiB0aGlzLl9mYWxsYmFja1NyYyxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBhbmNob3I6IHRoaXMuX2FuY2hvcixcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NyYyA9IHNyYztcbiAgICAgICAgdGhpcy5fZmFsbGJhY2tTcmMgPSBmYWxsYmFja1NyYztcbiAgICAgICAgdGhpcy5fYW5jaG9yID0gYW5jaG9yO1xuXG4gICAgICAgIC8vIENsZWFyIGRhdGFcbiAgICAgICAgdGhpcy5fZGF0YSA9IG51bGw7XG5cbiAgICAgICAgLy8gUmVzZXQgZXJyb3JcbiAgICAgICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc3JjID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmFsbGJhY2tTcmMgPSBudWxsO1xuICAgICAgICB0aGlzLl9hbmNob3IgPSBudWxsO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvblJlYWR5KCkge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuX3NyYyA/IHRoaXMuX3NyYyArIChpc05vdE5pbE9yQmxhbmsodGhpcy5fYW5jaG9yKSA/IGAjJHt0aGlzLl9hbmNob3J9YCA6ICcnKSA6IG51bGw7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbWFya2Rvd25dIFJlYWR5IC0gJHt1cmx9YCk7XG4gICAgICAvLyBDbGVhciBmYWxsYmFjayAobm8gbW9yZSBuZWVkKVxuICAgICAgaWYgKHRoaXMuX2ZhbGxiYWNrU3JjKSB0aGlzLl9mYWxsYmFja1NyYyA9IG51bGw7XG5cbiAgICAgIC8vIEVtaXQgY2hhbmdlXG4gICAgICB0aGlzLm1hcmtkb3duVXJsQ2hhbmdlLmVtaXQodXJsKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0TGlzdGVuQ2xpY2tFdmVudHMoKTtcblxuICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG5cbiAgICAvLyBTY3JvbGwgdG8gYW5jaG9yXG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayh0aGlzLl9hbmNob3IpKSB7XG4gICAgICB0aGlzLm1hcmtkb3duU2VydmljZS5zY3JvbGxUb0FuY2hvcih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy5fYW5jaG9yKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Mb2FkRXJyb3IoZXJyb3I/OiBzdHJpbmcgfCBFcnJvcikge1xuICAgIC8vIFRyYW5zbGF0ZSBlcnJvclxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmIHRoaXMubmV0d29yay5vZmZsaW5lKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbbWFya2Rvd25dIEVycm9yIGxvYWRpbmcgbWFya2Rvd24gVVJMIHske3RoaXMuc3JjfX0gKG9mZmxpbmU6IHRydWUpOiBgLCBlcnJvcik7XG4gICAgICB0aGlzLmVycm9yID0gJ05FVFdPUksuSU5GTy5PRkZMSU5FJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmV0cnkgd2l0aCBmYWxsYmFjayBVUkxcbiAgICAgIGlmICh0aGlzLl9mYWxsYmFja1NyYykge1xuICAgICAgICBjb25zb2xlLmRlYnVnKGBbbWFya2Rvd25dIEVycm9yIGxvYWRpbmcgbWFya2Rvd24gVVJMIHske3RoaXMuc3JjfX0gLSBmYWxsYmFjayB0byBVUkwgJHt0aGlzLl9mYWxsYmFja1NyY31gKTtcbiAgICAgICAgdGhpcy5zZXRTcmModGhpcy5fZmFsbGJhY2tTcmMsIHsgYW5jaG9yOiB0aGlzLl9hbmNob3IgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5lcnJvcihgW21hcmtkb3duXSBFcnJvciBsb2FkaW5nIG1hcmtkb3duIFVSTCB7JHt0aGlzLnNyY319IChvZmZsaW5lOiB0cnVlKTogYCwgZXJyb3IpO1xuICAgICAgdGhpcy5lcnJvciA9ICdFUlJPUi5MT0FEX0RBVEFfRVJST1InO1xuICAgIH1cblxuICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhcnRMaXN0ZW5DbGlja0V2ZW50cygpIHtcbiAgICB0aGlzLl9jbGlja1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9jbGlja1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8vIExpc3RlbiBmb3IgY2xpY2sgbGluayB0byBNYXJrZG93biBVUkxcbiAgICB0aGlzLl9jbGlja1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm1hcmtkb3duU2VydmljZS5vbkNsaWNrTWFya2Rvd25Vcmwuc3Vic2NyaWJlKChocmVmKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1ttYXJrZG93bl0gUmVjZWl2ZWQgY2xpY2sgZXZlbnQsIG9uIGEgbWFya2Rvd24gVVJMJywgaHJlZik7XG5cbiAgICAgICAgbGV0IGZyYWdtZW50ID0gVXJsVXRpbHMuZ2V0RnJhZ21lbnQoaHJlZik7XG4gICAgICAgIGxldCB1cmwgPSBVcmxVdGlscy5zdHJpcEZyYWdtZW50QW5kUXVlcnkoaHJlZik7XG4gICAgICAgIGxldCBmYWxsYmFja1VybCA9IG51bGw7XG5cbiAgICAgICAgLy8gUmVzb2x2ZSByZWxhdGl2ZSBwYXRoXG4gICAgICAgIGlmIChVcmxVdGlscy5pc1JlbGF0aXZlVXJsKGhyZWYpICYmIHRoaXMuYmFzZVVybCkge1xuICAgICAgICAgIC8vIEdldCBhYnNvbHV0ZSB1cmxcbiAgICAgICAgICB1cmwgPSBNYXJrZG93blV0aWxzLnJlc29sdmVSZWxhdGl2ZVVybCh0aGlzLmJhc2VVcmwsIGhyZWYpO1xuXG4gICAgICAgICAgLy8gQ3JlYXRlIGEgZmFsbGJhY2sgdXJsLCBpbiByZWxhdGl2ZSBwYXRoIHdhcyB3cm9uZ1xuICAgICAgICAgIGZhbGxiYWNrVXJsID0gTWFya2Rvd25VdGlscy5yZXNvbHZlUmVsYXRpdmVVcmwodGhpcy5iYXNlVXJsLCBocmVmLCB7IGFic29sdXRlQnlEZWZhdWx0OiB0cnVlIH0pO1xuICAgICAgICAgIGZhbGxiYWNrVXJsID0gdXJsID09PSBmYWxsYmFja1VybCA/IG51bGwgOiBmYWxsYmFja1VybDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9wZW5pbmcgdGhlIG5ldyBVUkxcbiAgICAgICAgdGhpcy5zZXRTcmModXJsLCB7IGZhbGxiYWNrU3JjOiBmYWxsYmFja1VybCwgYW5jaG9yOiBmcmFnbWVudCwgYWRkVG9OYXZpZ2F0aW9uSGlzdG9yeTogdGhpcy5lbmFibGVOYXZpZ2F0aW9uSGlzdG9yeSB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrQXNMb2FkZWQoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrQXNMb2FkaW5nKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldEVycm9yKCkge1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxhcHAtZGVidWcgKm5nSWY9XCJkZWJ1Z1wiPlxuICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgIDxpb24tcm93PlxuICAgICAgPGlvbi1jb2w+XG4gICAgICAgIGxvYWRpbmc6IHt7IGxvYWRpbmcgfX1cbiAgICAgICAgPGJyIC8+XG4gICAgICAgIGVycm9yOiB7eyBlcnJvciB9fVxuICAgICAgICA8YnIgLz5cbiAgICAgICAgPGJyIC8+XG4gICAgICAgIGJhc2VVcmw6IHt7IGJhc2VVcmwgfX1cbiAgICAgICAgPGJyIC8+XG4gICAgICAgIG1hcmtkb3duVXJsOiB7eyBzcmMgfX1cbiAgICAgICAgPGJyIC8+XG4gICAgICAgIG1hcmtkb3duRnJhZ21lbnQ6IHt7IF9hbmNob3IgfX1cbiAgICAgICAgPGJyIC8+XG4gICAgICAgIG1hcmtkb3duQ29udGVudDoge3sgZGF0YSB9fVxuICAgICAgICA8YnIgLz5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICA8L2lvbi1yb3c+XG4gIDwvaW9uLWdyaWQ+XG48L2FwcC1kZWJ1Zz5cblxuPCEtLSBlcnJvciAtLT5cbkBpZiAoc2hvd0Vycm9yICYmIGVycm9yOyBhcyBlcnJvcikge1xuICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgQHNsaWRlRG93bkFuaW1hdGlvbj5cbiAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJlcnJvclwiIFtpbm5lckhUTUxdPVwiZXJyb3IgfCB0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgPC9pb24taXRlbT5cbn0gQGVsc2Uge1xuICBAaWYgKGRhdGEpIHtcbiAgICA8bWFya2Rvd24gW2RhdGFdPVwiZGF0YVwiIChyZWFkeSk9XCJvblJlYWR5KClcIiBlbW9qaT48L21hcmtkb3duPlxuICB9IEBlbHNlIGlmIChzcmMpIHtcbiAgICA8bWFya2Rvd24gW3NyY109XCJzcmNcIiAoZXJyb3IpPVwib25Mb2FkRXJyb3IoJGV2ZW50KVwiIChyZWFkeSk9XCJvblJlYWR5KClcIiBlbW9qaT48L21hcmtkb3duPlxuICB9XG59XG5cbjwhLS0gbG9hZGluZyBzcGlubmVyIC0tPlxuQGlmIChsb2FkaW5nKSB7XG4gIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1BhcmFncmFwaFwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nUGFyYWdyYXBoXCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdQYXJhZ3JhcGhcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG59XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1BhcmFncmFwaD5cbiAgPHA+XG4gICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJhbmltYXRlZFwiIHN0eWxlPVwid2lkdGg6IDc1JTsgbWFyZ2luLWlubGluZS1zdGFydDogNSVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwiYW5pbWF0ZWRcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwiYW5pbWF0ZWRcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwiYW5pbWF0ZWRcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwiYW5pbWF0ZWRcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwiYW5pbWF0ZWRcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICA8L3A+XG48L25nLXRlbXBsYXRlPlxuIl19
348
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWFya2Rvd24vbWFya2Rvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWFya2Rvd24vbWFya2Rvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQWUzQyxN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LHVFQUNoQixnQkFBZ0Isa0ZDeEZ0QywrNURBdURBLDI3RkRoQmMsQ0FBQyxrQkFBa0IsQ0FBQzs7NEZBRXJCLGtCQUFrQjtrQkFQOUIsU0FBUzsrQkFDRSxzQkFBc0IsbUJBR2YsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxDQUFDLGtCQUFrQixDQUFDOzswQkF3RDdCLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsUUFBUTt5Q0FqQ0UsSUFBSTtzQkFBaEIsS0FBSztnQkFPTyxHQUFHO3NCQUFmLEtBQUs7Z0JBT08sTUFBTTtzQkFBbEIsS0FBSztnQkFPa0MsS0FBSztzQkFBNUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsdUJBQXVCO3NCQUE5RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLG1CQUFtQjtzQkFBMUQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFFNUIsaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTmV0d29ya1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHNsaWRlRG93bkFuaW1hdGlvbiB9IGZyb20gJy4uL21hdGVyaWFsL21hdGVyaWFsLmFuaW1hdGlvbnMnO1xuaW1wb3J0IHsgTWFya2Rvd25TZXJ2aWNlIH0gZnJvbSAnLi9tYXJrZG93bi5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXJsVXRpbHMgfSBmcm9tICcuLi9maWxlL3VybC51dGlscyc7XG5pbXBvcnQgeyBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsT3JCbGFuayB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgTWFya2Rvd25VdGlscyB9IGZyb20gJy4vbWFya2Rvd24udXRpbHMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcE1hcmtkb3duT3B0aW9ucyB7XG4gIGRhdGE/OiBzdHJpbmc7XG4gIHNyYz86IHN0cmluZztcbiAgc2hvd0Vycm9yPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1hcmtkb3duLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFya2Rvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXJrZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW3NsaWRlRG93bkFuaW1hdGlvbl0sXG59KVxuZXhwb3J0IGNsYXNzIEFwcE1hcmtkb3duQ29udGVudCBpbXBsZW1lbnRzIEFwcE1hcmtkb3duT3B0aW9ucywgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfcHJpbnRJZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50O1xuICBwcml2YXRlIF9jbGlja1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByb3RlY3RlZCBuYXZDb250cm9sbGVyID0gaW5qZWN0KE5hdkNvbnRyb2xsZXIpO1xuICBwcm90ZWN0ZWQgc2V0dGluZ3MgPSBpbmplY3QoTG9jYWxTZXR0aW5nc1NlcnZpY2UpO1xuICBwcm90ZWN0ZWQgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgbmV0d29yayA9IGluamVjdChOZXR3b3JrU2VydmljZSk7XG4gIHByb3RlY3RlZCBtYXJrZG93blNlcnZpY2UgPSBpbmplY3QoTWFya2Rvd25TZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgbG9hZGluZyA9IHRydWU7XG4gIHByb3RlY3RlZCBlcnJvcjogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBiYXNlVXJsOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIF9kYXRhOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfc3JjOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfZmFsbGJhY2tTcmM6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9hbmNob3I6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgX25hdkhpc3Rvcnk6IHsgc3JjPzogc3RyaW5nOyBmYWxsYmFja1NyYz86IHN0cmluZzsgZGF0YT86IHN0cmluZzsgYW5jaG9yPzogc3RyaW5nIH1bXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNldCBkYXRhKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldERhdGEodmFsdWUpO1xuICB9XG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHNyYyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRTcmModmFsdWUpO1xuICB9XG4gIGdldCBzcmMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NyYztcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBhbmNob3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2FuY2hvciA9IHZhbHVlO1xuICB9XG4gIGdldCBhbmNob3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FuY2hvcjtcbiAgfVxuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkZWJ1ZzogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dFcnJvciA9IHRydWU7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhbmltYXRlZCA9IHRydWU7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBlbmFibGVOYXZpZ2F0aW9uSGlzdG9yeSA9IHRydWU7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB1cGRhdGVSb3V0ZUxvY2F0aW9uID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIG1hcmtkb3duVXJsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUgLy8gTW9kYWwgZWRpdG9yIGdpdmUgJ251bGwnXG4gICkge1xuICAgIC8vIFRPRE86IGZvciBERVYgb25seVxuICAgIC8vdGhpcy5kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fY2xpY2tTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5tYXJrZG93blNlcnZpY2UucmVzZXRCYXNlVXJsKCk7XG4gIH1cblxuICBnb0JhY2soZXZlbnQ/OiBFdmVudCkge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttYXJrZG93bl0gR29pbmcgYmFjaycpO1xuICAgIGlmIChpc05vdEVtcHR5QXJyYXkodGhpcy5fbmF2SGlzdG9yeSkpIHtcbiAgICAgIGNvbnN0IHsgc3JjLCBmYWxsYmFja1NyYywgZGF0YSwgYW5jaG9yIH0gPSB0aGlzLl9uYXZIaXN0b3J5LnBvcCgpO1xuICAgICAgaWYgKHNyYykgdGhpcy5zZXRTcmMoc3JjLCB7IGZhbGxiYWNrU3JjLCBhbmNob3IgfSk7XG4gICAgICBlbHNlIHRoaXMuc2V0RGF0YShkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uYXZDb250cm9sbGVyLmJhY2soKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY2FuR29CYWNrKCkge1xuICAgIHJldHVybiBpc05vdEVtcHR5QXJyYXkodGhpcy5fbmF2SGlzdG9yeSk7XG4gIH1cblxuICBwcmludChldmVudD86IEV2ZW50KSB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21hcmtkb3duXSBQcmludCcpO1xuXG4gICAgaWYgKCF0aGlzLmVsZW1lbnQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VycmV1ciA6IMOJbMOpbWVudCBub24gdHJvdXbDqS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSw6ljdXDDqXJlciBsZSBjb250ZW51IEhUTUwgZGVwdWlzIGxlIGNvbXBvc2FudFxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICAvLyBDcsOpZXIgdW5lIGlmcmFtZSBwb3VyIGfDqXJlciBsJ2ltcHJlc3Npb25cbiAgICB0aGlzLl9wcmludElmcmFtZSA9IHRoaXMuY3JlYXRlUHJpbnRIaWRkZW5JZnJhbWUoY29udGVudCk7XG5cbiAgICAvLyBMYW5jZXIgbCdpbXByZXNzaW9uIGFwcsOocyB1biBjb3VydCBkw6lsYWkgKGxlIHRlbXBzIHF1ZSBsJ2lmcmFtZSBjaGFyZ2UpXG4gICAgdGhpcy5fcHJpbnRJZnJhbWUuY29udGVudFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4ge1xuICAgICAgdGhpcy5fcHJpbnRJZnJhbWUuY29udGVudFdpbmRvdz8ud2luZG93LnByaW50KCk7XG4gICAgICB0aGlzLl9wcmludElmcmFtZS5yZW1vdmUoKTtcbiAgICB9KTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy90aGlzLl9wcmludElmcmFtZS5jb250ZW50V2luZG93Py53aW5kb3cucHJpbnQoKTtcbiAgICAgIC8vIFN1cHByaW1lciBsJ2lmcmFtZSBhcHLDqHMgaW1wcmVzc2lvblxuICAgICAgLy90aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuX3ByaW50SWZyYW1lKTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIGZ1bmN0aW9ucyAtLSAqL1xuXG4gIHByaXZhdGUgY3JlYXRlUHJpbnRIaWRkZW5JZnJhbWUoaHRtbDogc3RyaW5nLCBzdHlsZT86IHN0cmluZyk6IEhUTUxJRnJhbWVFbGVtZW50IHtcbiAgICAvLyBDcmVhdGUgYSBpZnJhbWUgd2l0aCAnP3ByaW50LXBkZidcbiAgICBjb25zdCBpZnJhbWUgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICBpZnJhbWUuY2xhc3NMaXN0LmFkZCgnY2RrLXZpc3VhbGx5LWhpZGRlbicpO1xuICAgIGlmcmFtZS5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBpZnJhbWUuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcblxuICAgIC8vIENoYXJnZXIgbGUgY29udGVudSBIVE1MIGRhbnMgbCdpZnJhbWVcbiAgICBjb25zdCBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgaWZyYW1lLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50O1xuICAgIGlmIChpZnJhbWVEb2N1bWVudCkge1xuICAgICAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICAgICAgaWZyYW1lRG9jdW1lbnQud3JpdGUoYFxuICAgICAgICA8aHRtbD5cbiAgICAgICAgICA8aGVhZD5cbiAgICAgICAgICAgIDx0aXRsZT4ke3RoaXMuX2RvY3VtZW50LnRpdGxlfTwvdGl0bGU+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBociB7XG4gICAgICAgICAgICAgIHBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXM7XG4gICAgICAgICAgICAgIGJvcmRlcjogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5IHtcbiAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zdHlsZT5cbiAgICAgICAgICA8L2hlYWQ+XG4gICAgICAgICAgPGJvZHk+XG4gICAgICAgICAgICAke2h0bWx9XG4gICAgICAgICAgPC9ib2R5PlxuICAgICAgICA8L2h0bWw+XG4gICAgICBgKTtcbiAgICAgIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLy8gSW5qZWN0IEFwcCBzdHlsZVxuICAgIHRoaXMuaW5qZWN0QXBwU3R5bGVzSW50b0lmcmFtZShpZnJhbWUpO1xuXG4gICAgcmV0dXJuIGlmcmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5qZWN0QXBwU3R5bGVzSW50b0lmcmFtZShpZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgY29uc3QgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudERvY3VtZW50IHx8IGlmcmFtZS5jb250ZW50V2luZG93Py5kb2N1bWVudDtcblxuICAgIGlmIChpZnJhbWVEb2N1bWVudCkge1xuICAgICAgLy8gUsOpY3Vww6lyZXIgdG91cyBsZXMgc3R5bGVzIChsaWVucyBDU1MpXG4gICAgICBjb25zdCBsaW5rcyA9IEFycmF5LmZyb20odGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tyZWw9XCJzdHlsZXNoZWV0XCJdJykpO1xuICAgICAgbGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgICBjb25zdCBuZXdMaW5rID0gaWZyYW1lRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICBuZXdMaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgbmV3TGluay5ocmVmID0gbGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgICAgaWYgKG5ld0xpbmsuaHJlZikgaWZyYW1lRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuZXdMaW5rKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBSw6ljdXDDqXJlciB0b3VzIGxlcyBgc3R5bGVzYCBlbiBsaWduZVxuICAgICAgY29uc3QgaW5saW5lU3R5bGVzID0gQXJyYXkuZnJvbSh0aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpKTtcbiAgICAgIGlubGluZVN0eWxlcy5mb3JFYWNoKChzdHlsZSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdTdHlsZSA9IGlmcmFtZURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgIG5ld1N0eWxlLmlubmVySFRNTCA9IHN0eWxlLmlubmVySFRNTDtcbiAgICAgICAgaWZyYW1lRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuZXdTdHlsZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0YSh2YWx1ZTogc3RyaW5nLCBvcHRzPzogeyBhbmNob3I/OiBzdHJpbmc7IGFkZFRvTmF2aWdhdGlvbkhpc3Rvcnk/OiBib29sZWFuIH0pIHtcbiAgICBjb25zdCBhbmNob3IgPSBvcHRzPy5hbmNob3IgfHwgbnVsbDtcblxuICAgIGlmICh0aGlzLl9kYXRhICE9PSB2YWx1ZSB8fCB0aGlzLl9hbmNob3IgIT09IGFuY2hvcikge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIC8vIFNhdmUgY3VycmVudCBzdGF0ZSB0byBuYXZpZ2F0aW9uIGhpc3RvcnlcbiAgICAgICAgaWYgKG9wdHM/LmFkZFRvTmF2aWdhdGlvbkhpc3RvcnkpIHtcbiAgICAgICAgICB0aGlzLl9uYXZIaXN0b3J5LnB1c2goe1xuICAgICAgICAgICAgc3JjOiB0aGlzLl9zcmMsXG4gICAgICAgICAgICBmYWxsYmFja1NyYzogdGhpcy5fZmFsbGJhY2tTcmMsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgYW5jaG9yOiB0aGlzLl9hbmNob3IsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kYXRhID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2FuY2hvciA9IGFuY2hvcjtcblxuICAgICAgICAvLyBDbGVhciBzcmNcbiAgICAgICAgdGhpcy5fc3JjID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmFsbGJhY2tTcmMgPSBudWxsO1xuXG4gICAgICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTcmMoc3JjOiBzdHJpbmcsIG9wdHM/OiB7IGZhbGxiYWNrU3JjPzogc3RyaW5nOyBhbmNob3I/OiBzdHJpbmc7IGFkZFRvTmF2aWdhdGlvbkhpc3Rvcnk/OiBib29sZWFuIH0pIHtcbiAgICAvLyBDbGVhbiBVUkwgKHJlbW92ZSBmcmFnbWVudCBhbmQgcXVlcnkpXG4gICAgY29uc3QgYW5jaG9yID0gb3B0cz8uYW5jaG9yIHx8IFVybFV0aWxzLmdldEZyYWdtZW50KHNyYyk7XG4gICAgc3JjID0gVXJsVXRpbHMuc3RyaXBGcmFnbWVudEFuZFF1ZXJ5KHNyYyk7XG4gICAgbGV0IGZhbGxiYWNrU3JjID0gb3B0cz8uZmFsbGJhY2tTcmMgPyBVcmxVdGlscy5zdHJpcEZyYWdtZW50QW5kUXVlcnkob3B0cy5mYWxsYmFja1NyYykgOiBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3NyYyAhPT0gc3JjIHx8IHRoaXMuX2ZhbGxiYWNrU3JjICE9PSBmYWxsYmFja1NyYyB8fCB0aGlzLl9hbmNob3IgIT09IGFuY2hvcikge1xuICAgICAgY29uc3QgdXJsID0gc3JjID8gc3JjICsgKGlzTm90TmlsT3JCbGFuayhhbmNob3IpID8gYCMke2FuY2hvcn1gIDogJycpIDogbnVsbDtcbiAgICAgIGlmICh1cmwpIGNvbnNvbGUuZGVidWcoYFttYXJrZG93bl0gTG9hZGluZyAke3VybH0uLi5gKTtcblxuICAgICAgLy8gR2l2ZSBiYXNlVXJsIHRvIHRoZSBzZXJ2aWNlLCB0byBiZSBhYmxlIHRvIHJlc29sdmUgcmVsYXRpdmUgcGF0aCAtIGUuZy4gaW1hZ2VzKVxuICAgICAgaWYgKHNyYyAmJiBVcmxVdGlscy5pc0V4dGVybmFsVXJsKHNyYykpIHtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gVXJsVXRpbHMuZ2V0UGFyZW50KHNyYyk7XG4gICAgICAgIHRoaXMubWFya2Rvd25TZXJ2aWNlLnNldEJhc2VVcmwodGhpcy5iYXNlVXJsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNyYykge1xuICAgICAgICAvLyBTYXZlIGN1cnJlbnQgc3RhdGUgdG8gbmF2aWdhdGlvbiBoaXN0b3J5XG4gICAgICAgIGlmIChvcHRzPy5hZGRUb05hdmlnYXRpb25IaXN0b3J5KSB7XG4gICAgICAgICAgdGhpcy5fbmF2SGlzdG9yeS5wdXNoKHtcbiAgICAgICAgICAgIHNyYzogdGhpcy5fc3JjLFxuICAgICAgICAgICAgZmFsbGJhY2tTcmM6IHRoaXMuX2ZhbGxiYWNrU3JjLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICAgICAgICAgIGFuY2hvcjogdGhpcy5fYW5jaG9yLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3JjID0gc3JjO1xuICAgICAgICB0aGlzLl9mYWxsYmFja1NyYyA9IGZhbGxiYWNrU3JjO1xuICAgICAgICB0aGlzLl9hbmNob3IgPSBhbmNob3I7XG5cbiAgICAgICAgLy8gQ2xlYXIgZGF0YVxuICAgICAgICB0aGlzLl9kYXRhID0gbnVsbDtcblxuICAgICAgICAvLyBSZXNldCBlcnJvclxuICAgICAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICAgICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zcmMgPSBudWxsO1xuICAgICAgICB0aGlzLl9mYWxsYmFja1NyYyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2FuY2hvciA9IG51bGw7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uUmVhZHkoKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5fc3JjID8gdGhpcy5fc3JjICsgKGlzTm90TmlsT3JCbGFuayh0aGlzLl9hbmNob3IpID8gYCMke3RoaXMuX2FuY2hvcn1gIDogJycpIDogbnVsbDtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFttYXJrZG93bl0gUmVhZHkgLSAke3VybH1gKTtcbiAgICAgIC8vIENsZWFyIGZhbGxiYWNrIChubyBtb3JlIG5lZWQpXG4gICAgICBpZiAodGhpcy5fZmFsbGJhY2tTcmMpIHRoaXMuX2ZhbGxiYWNrU3JjID0gbnVsbDtcblxuICAgICAgLy8gRW1pdCBjaGFuZ2VcbiAgICAgIHRoaXMubWFya2Rvd25VcmxDaGFuZ2UuZW1pdCh1cmwpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRMaXN0ZW5DbGlja0V2ZW50cygpO1xuXG4gICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcblxuICAgIC8vIFNjcm9sbCB0byBhbmNob3JcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHRoaXMuX2FuY2hvcikpIHtcbiAgICAgIHRoaXMubWFya2Rvd25TZXJ2aWNlLnNjcm9sbFRvQW5jaG9yKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLl9hbmNob3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkxvYWRFcnJvcihlcnJvcj86IHN0cmluZyB8IEVycm9yKSB7XG4gICAgLy8gVHJhbnNsYXRlIGVycm9yXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgdGhpcy5uZXR3b3JrLm9mZmxpbmUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFttYXJrZG93bl0gRXJyb3IgbG9hZGluZyBtYXJrZG93biBVUkwgeyR7dGhpcy5zcmN9fSAob2ZmbGluZTogdHJ1ZSk6IGAsIGVycm9yKTtcbiAgICAgIHRoaXMuZXJyb3IgPSAnTkVUV09SSy5JTkZPLk9GRkxJTkUnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXRyeSB3aXRoIGZhbGxiYWNrIFVSTFxuICAgICAgaWYgKHRoaXMuX2ZhbGxiYWNrU3JjKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoYFttYXJrZG93bl0gRXJyb3IgbG9hZGluZyBtYXJrZG93biBVUkwgeyR7dGhpcy5zcmN9fSAtIGZhbGxiYWNrIHRvIFVSTCAke3RoaXMuX2ZhbGxiYWNrU3JjfWApO1xuICAgICAgICB0aGlzLnNldFNyYyh0aGlzLl9mYWxsYmFja1NyYywgeyBhbmNob3I6IHRoaXMuX2FuY2hvciB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmVycm9yKGBbbWFya2Rvd25dIEVycm9yIGxvYWRpbmcgbWFya2Rvd24gVVJMIHske3RoaXMuc3JjfX0gKG9mZmxpbmU6IHRydWUpOiBgLCBlcnJvcik7XG4gICAgICB0aGlzLmVycm9yID0gJ0VSUk9SLkxPQURfREFUQV9FUlJPUic7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydExpc3RlbkNsaWNrRXZlbnRzKCkge1xuICAgIHRoaXMuX2NsaWNrU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2NsaWNrU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLy8gTGlzdGVuIGZvciBjbGljayBsaW5rIHRvIE1hcmtkb3duIFVSTFxuICAgIHRoaXMuX2NsaWNrU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMubWFya2Rvd25TZXJ2aWNlLm9uQ2xpY2tNYXJrZG93blVybC5zdWJzY3JpYmUoKGhyZWYpID0+IHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW21hcmtkb3duXSBSZWNlaXZlZCBjbGljayBldmVudCwgb24gYSBtYXJrZG93biBVUkwnLCBocmVmKTtcblxuICAgICAgICBsZXQgZnJhZ21lbnQgPSBVcmxVdGlscy5nZXRGcmFnbWVudChocmVmKTtcbiAgICAgICAgbGV0IHVybCA9IFVybFV0aWxzLnN0cmlwRnJhZ21lbnRBbmRRdWVyeShocmVmKTtcbiAgICAgICAgbGV0IGZhbGxiYWNrVXJsID0gbnVsbDtcblxuICAgICAgICAvLyBSZXNvbHZlIHJlbGF0aXZlIHBhdGhcbiAgICAgICAgaWYgKFVybFV0aWxzLmlzUmVsYXRpdmVVcmwoaHJlZikgJiYgdGhpcy5iYXNlVXJsKSB7XG4gICAgICAgICAgLy8gR2V0IGFic29sdXRlIHVybFxuICAgICAgICAgIHVybCA9IE1hcmtkb3duVXRpbHMucmVzb2x2ZVJlbGF0aXZlVXJsKHRoaXMuYmFzZVVybCwgaHJlZik7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgYSBmYWxsYmFjayB1cmwsIGluIHJlbGF0aXZlIHBhdGggd2FzIHdyb25nXG4gICAgICAgICAgZmFsbGJhY2tVcmwgPSBNYXJrZG93blV0aWxzLnJlc29sdmVSZWxhdGl2ZVVybCh0aGlzLmJhc2VVcmwsIGhyZWYsIHsgYWJzb2x1dGVCeURlZmF1bHQ6IHRydWUgfSk7XG4gICAgICAgICAgZmFsbGJhY2tVcmwgPSB1cmwgPT09IGZhbGxiYWNrVXJsID8gbnVsbCA6IGZhbGxiYWNrVXJsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3BlbmluZyB0aGUgbmV3IFVSTFxuICAgICAgICB0aGlzLnNldFNyYyh1cmwsIHsgZmFsbGJhY2tTcmM6IGZhbGxiYWNrVXJsLCBhbmNob3I6IGZyYWdtZW50LCBhZGRUb05hdmlnYXRpb25IaXN0b3J5OiB0aGlzLmVuYWJsZU5hdmlnYXRpb25IaXN0b3J5IH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtBc0xvYWRlZCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtBc0xvYWRpbmcoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0RXJyb3IoKSB7XG4gICAgdGhpcy5lcnJvciA9IG51bGw7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPGFwcC1kZWJ1ZyAqbmdJZj1cImRlYnVnXCI+XG4gIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgPGlvbi1yb3c+XG4gICAgICA8aW9uLWNvbD5cbiAgICAgICAgbG9hZGluZzoge3sgbG9hZGluZyB9fVxuICAgICAgICA8YnIgLz5cbiAgICAgICAgZXJyb3I6IHt7IGVycm9yIH19XG4gICAgICAgIDxiciAvPlxuICAgICAgICA8YnIgLz5cbiAgICAgICAgYmFzZVVybDoge3sgYmFzZVVybCB9fVxuICAgICAgICA8YnIgLz5cbiAgICAgICAgbWFya2Rvd25Vcmw6IHt7IHNyYyB9fVxuICAgICAgICA8YnIgLz5cbiAgICAgICAgbWFya2Rvd25GcmFnbWVudDoge3sgX2FuY2hvciB9fVxuICAgICAgICA8YnIgLz5cbiAgICAgICAgbWFya2Rvd25Db250ZW50OiB7eyBkYXRhIH19XG4gICAgICAgIDxiciAvPlxuICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cbiAgPC9pb24tZ3JpZD5cbjwvYXBwLWRlYnVnPlxuXG48IS0tIGVycm9yIC0tPlxuQGlmIChzaG93RXJyb3IgJiYgZXJyb3I7IGFzIGVycm9yKSB7XG4gIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiBAc2xpZGVEb3duQW5pbWF0aW9uPlxuICAgIDxpb24taWNvbiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJhbGVydC1jaXJjbGVcIj48L2lvbi1pY29uPlxuICAgIDxpb24tbGFiZWwgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cImVycm9yXCIgW2lubmVySFRNTF09XCJlcnJvciB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICA8L2lvbi1pdGVtPlxufSBAZWxzZSB7XG4gIEBpZiAoZGF0YSkge1xuICAgIDxtYXJrZG93biBbZGF0YV09XCJkYXRhXCIgKHJlYWR5KT1cIm9uUmVhZHkoKVwiIGVtb2ppPjwvbWFya2Rvd24+XG4gIH0gQGVsc2UgaWYgKHNyYykge1xuICAgIDxtYXJrZG93biBbc3JjXT1cInNyY1wiIChlcnJvcik9XCJvbkxvYWRFcnJvcigkZXZlbnQpXCIgKHJlYWR5KT1cIm9uUmVhZHkoKVwiIGVtb2ppPjwvbWFya2Rvd24+XG4gIH1cbn1cblxuPCEtLSBsb2FkaW5nIHNwaW5uZXIgLS0+XG5AaWYgKGxvYWRpbmcpIHtcbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nUGFyYWdyYXBoXCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdQYXJhZ3JhcGhcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1BhcmFncmFwaFwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbn1cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nUGFyYWdyYXBoPlxuICA8cD5cbiAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cImFuaW1hdGVkXCIgc3R5bGU9XCJ3aWR0aDogNzUlOyBtYXJnaW4taW5saW5lLXN0YXJ0OiA1JVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJhbmltYXRlZFwiIHN0eWxlPVwid2lkdGg6IDgwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJhbmltYXRlZFwiIHN0eWxlPVwid2lkdGg6IDgwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJhbmltYXRlZFwiIHN0eWxlPVwid2lkdGg6IDgwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJhbmltYXRlZFwiIHN0eWxlPVwid2lkdGg6IDgwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJhbmltYXRlZFwiIHN0eWxlPVwid2lkdGg6IDgwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gIDwvcD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -20,6 +20,7 @@ export class AppMarkdownModal {
20
20
  debug;
21
21
  title;
22
22
  showError = true;
23
+ canPrint = false;
23
24
  markdownContent;
24
25
  markdownUrl;
25
26
  static async show(modalCtrl, options) {
@@ -56,20 +57,22 @@ export class AppMarkdownModal {
56
57
  }
57
58
  }
58
59
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownModal, deps: [{ token: i0.Injector }, { token: i1.ModalController }, { token: i2.PlatformService }, { token: i3.LocalSettingsService }, { token: i4.TranslateService }, { token: i5.NetworkService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
59
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppMarkdownModal, selector: "app-markdown-modal", inputs: { debug: "debug", title: "title", showError: "showError", markdownContent: "markdownContent", markdownUrl: "markdownUrl" }, ngImport: i0, template: "@if (title) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"markdownUrl\"\n [data]=\"markdownContent\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ kind: "component", type: i1.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: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i6.ModalToolbarComponent, selector: "app-modal-toolbar", inputs: ["modalName", "title", "color", "showSpinner", "canValidate", "validateIcon"], outputs: ["cancel", "validate"] }, { kind: "component", type: i7.AppMarkdownContent, selector: "app-markdown-content", inputs: ["data", "src", "anchor", "debug", "showError", "animated", "enableNavigationHistory", "updateRouteLocation"], outputs: ["markdownUrlChange"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
60
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppMarkdownModal, selector: "app-markdown-modal", inputs: { debug: "debug", title: "title", showError: "showError", canPrint: "canPrint", markdownContent: "markdownContent", markdownUrl: "markdownUrl" }, ngImport: i0, template: "@if (title || canPrint) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n @if (canPrint) {\n <ion-button slot=\"end\" class=\"back-button\" (click)=\"content.print($event)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"print\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"markdownUrl\"\n [data]=\"markdownContent\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ kind: "component", type: i1.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: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i6.ModalToolbarComponent, selector: "app-modal-toolbar", inputs: ["modalName", "title", "color", "showSpinner", "canValidate", "validateIcon"], outputs: ["cancel", "validate"] }, { kind: "component", type: i7.AppMarkdownContent, selector: "app-markdown-content", inputs: ["data", "src", "anchor", "debug", "showError", "animated", "enableNavigationHistory", "updateRouteLocation"], outputs: ["markdownUrlChange"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
60
61
  }
61
62
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownModal, decorators: [{
62
63
  type: Component,
63
- args: [{ selector: 'app-markdown-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (title) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"markdownUrl\"\n [data]=\"markdownContent\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n" }]
64
+ args: [{ selector: 'app-markdown-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (title || canPrint) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n @if (canPrint) {\n <ion-button slot=\"end\" class=\"back-button\" (click)=\"content.print($event)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"print\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"markdownUrl\"\n [data]=\"markdownContent\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n" }]
64
65
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.ModalController }, { type: i2.PlatformService }, { type: i3.LocalSettingsService }, { type: i4.TranslateService }, { type: i5.NetworkService }, { type: i0.ChangeDetectorRef }], propDecorators: { debug: [{
65
66
  type: Input
66
67
  }], title: [{
67
68
  type: Input
68
69
  }], showError: [{
69
70
  type: Input
71
+ }], canPrint: [{
72
+ type: Input
70
73
  }], markdownContent: [{
71
74
  type: Input
72
75
  }], markdownUrl: [{
73
76
  type: Input
74
77
  }] } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24ubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXJrZG93bi9tYXJrZG93bi5tb2RhbC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL21hcmtkb3duLm1vZGFsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVksS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFxQnZHLE1BQU0sT0FBTyxnQkFBZ0I7SUF3QmY7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUE3QkYsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNmLEtBQUssR0FBVyxTQUFTLENBQUM7SUFFM0IsS0FBSyxDQUFVO0lBQ2YsS0FBSyxDQUFTO0lBQ2QsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQixlQUFlLENBQVM7SUFDeEIsV0FBVyxDQUFTO0lBRTdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQTBCLEVBQUUsT0FBZ0M7UUFDNUUsTUFBTSxLQUFLLEdBQUcsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ25DLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsY0FBYyxFQUFFLE9BQU87WUFDdkIsYUFBYSxFQUFFLElBQUk7WUFDbkIsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLElBQUksYUFBYTtTQUM3QyxDQUFDLENBQUM7UUFFSCxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV0QixPQUFPLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFDWSxRQUFrQixFQUNsQixRQUF5QixFQUN6QixRQUF5QixFQUN6QixRQUE4QixFQUM5QixTQUEyQixFQUMzQixPQUF1QixFQUN2QixFQUFxQjtRQU5yQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGFBQVEsR0FBUixRQUFRLENBQXNCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBRS9CLHFCQUFxQjtRQUNyQix1Q0FBdUM7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxDQUFTO1FBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBWSxFQUFFLE9BQTJCO1FBQzlDLElBQUksT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7d0dBL0NVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLDhMQ3JCN0Isdy9CQStCQTs7NEZEVmEsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLG9CQUFvQixtQkFFYix1QkFBdUIsQ0FBQyxNQUFNO3dRQU10QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdG9yLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwTWFya2Rvd25Db250ZW50IH0gZnJvbSAnLi9tYXJrZG93bi5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcE1hcmtkb3duTW9kYWxPcHRpb25zIHtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIG1hcmtkb3duQ29udGVudD86IHN0cmluZztcbiAgbWFya2Rvd25Vcmw/OiBzdHJpbmc7XG4gIHNob3dFcnJvcj86IGJvb2xlYW47XG4gIGNzc0NsYXNzPzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWFya2Rvd24tbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFya2Rvd24ubW9kYWwuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBNYXJrZG93bk1vZGFsIGltcGxlbWVudHMgQXBwTWFya2Rvd25Nb2RhbE9wdGlvbnMge1xuICBwcm90ZWN0ZWQgbG9hZGluZyA9IHRydWU7XG4gIHByb3RlY3RlZCBlcnJvcjogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuO1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93RXJyb3IgPSB0cnVlO1xuICBASW5wdXQoKSBtYXJrZG93bkNvbnRlbnQ6IHN0cmluZztcbiAgQElucHV0KCkgbWFya2Rvd25Vcmw6IHN0cmluZztcblxuICBzdGF0aWMgYXN5bmMgc2hvdyhtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlciwgb3B0aW9uczogQXBwTWFya2Rvd25Nb2RhbE9wdGlvbnMpIHtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IG1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBBcHBNYXJrZG93bk1vZGFsLFxuICAgICAgY29tcG9uZW50UHJvcHM6IG9wdGlvbnMsXG4gICAgICBrZXlib2FyZENsb3NlOiB0cnVlLFxuICAgICAgY3NzQ2xhc3M6IG9wdGlvbnM/LmNzc0NsYXNzIHx8ICdtb2RhbC1sYXJnZScsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBtb2RhbC5wcmVzZW50KCk7XG5cbiAgICByZXR1cm4gbW9kYWwub25XaWxsRGlzbWlzcygpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgdmlld0N0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgLy8gVE9ETzogZm9yIERFViBvbmx5XG4gICAgLy90aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBjbG9zZShfPzogRXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy52aWV3Q3RybC5kaXNtaXNzKCk7XG4gIH1cblxuICBnb0JhY2soZXZlbnQ6IEV2ZW50LCBjb250ZW50OiBBcHBNYXJrZG93bkNvbnRlbnQpIHtcbiAgICBpZiAoY29udGVudD8uY2FuR29CYWNrKSB7XG4gICAgICBjb250ZW50LmdvQmFjayhldmVudCk7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlKGV2ZW50KTtcbiAgICB9XG4gIH1cbn1cbiIsIkBpZiAodGl0bGUpIHtcbiAgPGFwcC1tb2RhbC10b29sYmFyIGNvbG9yPVwibGlnaHRcIiBbdGl0bGVdPVwidGl0bGUgfCB0cmFuc2xhdGVcIiAoY2FuY2VsKT1cImNsb3NlKCRldmVudClcIj5cbiAgICBAaWYgKGNvbnRlbnQuY2FuR29CYWNrKSB7XG4gICAgICA8aW9uLWJ1dHRvbiBzbG90PVwic3RhcnRcIiBjbGFzcz1cImJhY2stYnV0dG9uXCIgKGNsaWNrKT1cImdvQmFjaygkZXZlbnQsIGNvbnRlbnQpXCIgcm91dGVyRGlyZWN0aW9uPVwiYmFja1wiPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJhcnJvdy1iYWNrXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICB9XG4gIDwvYXBwLW1vZGFsLXRvb2xiYXI+XG59XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gIDxhcHAtbWFya2Rvd24tY29udGVudFxuICAgICNjb250ZW50XG4gICAgW3NyY109XCJtYXJrZG93blVybFwiXG4gICAgW2RhdGFdPVwibWFya2Rvd25Db250ZW50XCJcbiAgICBbc2hvd0Vycm9yXT1cInNob3dFcnJvclwiXG4gICAgW2RlYnVnXT1cImRlYnVnXCJcbiAgICBbdXBkYXRlUm91dGVMb2NhdGlvbl09XCJmYWxzZVwiXG4gID48L2FwcC1tYXJrZG93bi1jb250ZW50PlxuPC9pb24tY29udGVudD5cblxuPGlvbi1mb290ZXIgaGlkZGVuLXhzIGhpZGRlbi1zbSBoaWRkZW4tbW9iaWxlPlxuICA8aW9uLXRvb2xiYXI+XG4gICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgPGlvbi1jb2w+PC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIChjbGljayk9XCJjbG9zZSgpXCI+e3sgJ0NPTU1PTi5CVE5fQ0xPU0UnIHwgdHJhbnNsYXRlIH19PC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWZvb3Rlcj5cbiJdfQ==
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24ubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXJrZG93bi9tYXJrZG93bi5tb2RhbC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL21hcmtkb3duLm1vZGFsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVksS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFzQnZHLE1BQU0sT0FBTyxnQkFBZ0I7SUF5QmY7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUE5QkYsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNmLEtBQUssR0FBVyxTQUFTLENBQUM7SUFFM0IsS0FBSyxDQUFVO0lBQ2YsS0FBSyxDQUFTO0lBQ2QsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLGVBQWUsQ0FBUztJQUN4QixXQUFXLENBQVM7SUFFN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBMEIsRUFBRSxPQUFnQztRQUM1RSxNQUFNLEtBQUssR0FBRyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDbkMsU0FBUyxFQUFFLGdCQUFnQjtZQUMzQixjQUFjLEVBQUUsT0FBTztZQUN2QixhQUFhLEVBQUUsSUFBSTtZQUNuQixRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsSUFBSSxhQUFhO1NBQzdDLENBQUMsQ0FBQztRQUVILE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXRCLE9BQU8sS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxZQUNZLFFBQWtCLEVBQ2xCLFFBQXlCLEVBQ3pCLFFBQXlCLEVBQ3pCLFFBQThCLEVBQzlCLFNBQTJCLEVBQzNCLE9BQXVCLEVBQ3ZCLEVBQXFCO1FBTnJCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7UUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFFL0IscUJBQXFCO1FBQ3JCLHVDQUF1QztJQUN6QyxDQUFDO0lBRUQsS0FBSyxDQUFDLENBQVM7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFZLEVBQUUsT0FBMkI7UUFDOUMsSUFBSSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDdkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQzt3R0FoRFUsZ0JBQWdCOzRGQUFoQixnQkFBZ0Isb05DdEI3Qix5dUNBb0NBOzs0RkRkYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUViLHVCQUF1QixDQUFDLE1BQU07d1FBTXRDLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3RvciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFBsYXRmb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBOZXR3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcE1hcmtkb3duQ29udGVudCB9IGZyb20gJy4vbWFya2Rvd24uY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBcHBNYXJrZG93bk1vZGFsT3B0aW9ucyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBtYXJrZG93bkNvbnRlbnQ/OiBzdHJpbmc7XG4gIG1hcmtkb3duVXJsPzogc3RyaW5nO1xuICBzaG93RXJyb3I/OiBib29sZWFuO1xuICBjc3NDbGFzcz86IHN0cmluZztcbiAgY2FuUHJpbnQ/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWFya2Rvd24tbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFya2Rvd24ubW9kYWwuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBNYXJrZG93bk1vZGFsIGltcGxlbWVudHMgQXBwTWFya2Rvd25Nb2RhbE9wdGlvbnMge1xuICBwcm90ZWN0ZWQgbG9hZGluZyA9IHRydWU7XG4gIHByb3RlY3RlZCBlcnJvcjogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuO1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93RXJyb3IgPSB0cnVlO1xuICBASW5wdXQoKSBjYW5QcmludCA9IGZhbHNlO1xuICBASW5wdXQoKSBtYXJrZG93bkNvbnRlbnQ6IHN0cmluZztcbiAgQElucHV0KCkgbWFya2Rvd25Vcmw6IHN0cmluZztcblxuICBzdGF0aWMgYXN5bmMgc2hvdyhtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlciwgb3B0aW9uczogQXBwTWFya2Rvd25Nb2RhbE9wdGlvbnMpIHtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IG1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBBcHBNYXJrZG93bk1vZGFsLFxuICAgICAgY29tcG9uZW50UHJvcHM6IG9wdGlvbnMsXG4gICAgICBrZXlib2FyZENsb3NlOiB0cnVlLFxuICAgICAgY3NzQ2xhc3M6IG9wdGlvbnM/LmNzc0NsYXNzIHx8ICdtb2RhbC1sYXJnZScsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBtb2RhbC5wcmVzZW50KCk7XG5cbiAgICByZXR1cm4gbW9kYWwub25XaWxsRGlzbWlzcygpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgdmlld0N0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgLy8gVE9ETzogZm9yIERFViBvbmx5XG4gICAgLy90aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBjbG9zZShfPzogRXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy52aWV3Q3RybC5kaXNtaXNzKCk7XG4gIH1cblxuICBnb0JhY2soZXZlbnQ6IEV2ZW50LCBjb250ZW50OiBBcHBNYXJrZG93bkNvbnRlbnQpIHtcbiAgICBpZiAoY29udGVudD8uY2FuR29CYWNrKSB7XG4gICAgICBjb250ZW50LmdvQmFjayhldmVudCk7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlKGV2ZW50KTtcbiAgICB9XG4gIH1cbn1cbiIsIkBpZiAodGl0bGUgfHwgY2FuUHJpbnQpIHtcbiAgPGFwcC1tb2RhbC10b29sYmFyIGNvbG9yPVwibGlnaHRcIiBbdGl0bGVdPVwidGl0bGUgfCB0cmFuc2xhdGVcIiAoY2FuY2VsKT1cImNsb3NlKCRldmVudClcIj5cbiAgICBAaWYgKGNvbnRlbnQuY2FuR29CYWNrKSB7XG4gICAgICA8aW9uLWJ1dHRvbiBzbG90PVwic3RhcnRcIiBjbGFzcz1cImJhY2stYnV0dG9uXCIgKGNsaWNrKT1cImdvQmFjaygkZXZlbnQsIGNvbnRlbnQpXCIgcm91dGVyRGlyZWN0aW9uPVwiYmFja1wiPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJhcnJvdy1iYWNrXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICB9XG4gICAgQGlmIChjYW5QcmludCkge1xuICAgICAgPGlvbi1idXR0b24gc2xvdD1cImVuZFwiIGNsYXNzPVwiYmFjay1idXR0b25cIiAoY2xpY2spPVwiY29udGVudC5wcmludCgkZXZlbnQpXCIgcm91dGVyRGlyZWN0aW9uPVwiYmFja1wiPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJwcmludFwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgfVxuICA8L2FwcC1tb2RhbC10b29sYmFyPlxufVxuXG48aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICA8YXBwLW1hcmtkb3duLWNvbnRlbnRcbiAgICAjY29udGVudFxuICAgIFtzcmNdPVwibWFya2Rvd25VcmxcIlxuICAgIFtkYXRhXT1cIm1hcmtkb3duQ29udGVudFwiXG4gICAgW3Nob3dFcnJvcl09XCJzaG93RXJyb3JcIlxuICAgIFtkZWJ1Z109XCJkZWJ1Z1wiXG4gICAgW3VwZGF0ZVJvdXRlTG9jYXRpb25dPVwiZmFsc2VcIlxuICA+PC9hcHAtbWFya2Rvd24tY29udGVudD5cbjwvaW9uLWNvbnRlbnQ+XG5cbjxpb24tZm9vdGVyIGhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1vYmlsZT5cbiAgPGlvbi10b29sYmFyPlxuICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgIDxpb24tY29sPjwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIGNvbG9yPVwidGVydGlhcnlcIiAoY2xpY2spPVwiY2xvc2UoKVwiPnt7ICdDT01NT04uQlROX0NMT1NFJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICA8L2lvbi1yb3c+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1mb290ZXI+XG4iXX0=
@@ -186,8 +186,9 @@ export class MarkdownService {
186
186
  // If NOT the h1 (document title)
187
187
  const anchor = MarkdownUtils.textToAnchor(text);
188
188
  if (isNotNilOrBlank(anchor)) {
189
+ const pageBreak = level < 2;
189
190
  console.debug(`[markdown-service] Heading ${level} '${text}' with anchor ${anchor}`);
190
- const link = `<a id="${anchor}" class="anchor" aria-hidden="true" href="#${anchor}"></a>`;
191
+ const link = `<a id="${anchor}" class="anchor ${pageBreak ? 'page-break' : ''}" aria-hidden="true" href="#${anchor}"></a>`;
191
192
  return this._defaultRenderer.heading(link + text, level, raw);
192
193
  }
193
194
  return this._defaultRenderer.heading(text, level, raw);
@@ -199,4 +200,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
199
200
  type: Injectable,
200
201
  args: [{ providedIn: 'root' }]
201
202
  }], ctorParameters: () => [] });
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL21hcmtkb3duLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQVcsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFHdkUsTUFBTSxPQUFPLGVBQWU7SUFDbEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLFFBQVEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0QyxTQUFTLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXBDLE9B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Q0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFUyxPQUFPLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxHQUFXO1FBQ3hELGlDQUFpQztRQUNqQyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsS0FBSyxLQUFLLElBQUksaUJBQWlCLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDckYsTUFBTSxJQUFJLEdBQUcsVUFBVSxNQUFNLDhDQUE4QyxNQUFNLFFBQVEsQ0FBQztZQUMxRixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pELENBQUM7d0dBek5VLGVBQWU7NEdBQWYsZUFBZSxjQURGLE1BQU07OzRGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIsIE5hdkNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBMb2NhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hcmtlZFJlbmRlcmVyIH0gZnJvbSAnbmd4LW1hcmtkb3duJztcbmltcG9ydCB7IFVybFV0aWxzIH0gZnJvbSAnLi4vZmlsZS91cmwudXRpbHMnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgTWFya2Rvd25VdGlscyB9IGZyb20gJy4vbWFya2Rvd24udXRpbHMnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNYXJrZG93blNlcnZpY2Uge1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybSA9IGluamVjdChQbGF0Zm9ybVNlcnZpY2UpO1xuICBwcml2YXRlIGxvY2F0aW9uU3RyYXRlZ3kgPSBpbmplY3QoTG9jYXRpb25TdHJhdGVneSk7XG4gIHByaXZhdGUgbmF2Q29udHJvbGxlciA9IGluamVjdChOYXZDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBtb2RhbEN0cmwgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcblxuICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0UmVuZGVyZXIgPSBuZXcgTWFya2VkUmVuZGVyZXIoKTtcbiAgcHJpdmF0ZSBfbWFya2VkUmVuZGVyZXI6IE1hcmtlZFJlbmRlcmVyO1xuXG4gIGdldCByZW5kZXJlcigpOiBNYXJrZWRSZW5kZXJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlZFJlbmRlcmVyO1xuICB9XG5cbiAgc2V0IHJlbmRlcmVyKHZhbHVlOiBNYXJrZWRSZW5kZXJlcikge1xuICAgIHRoaXMuc2V0UmVuZGVyZXIodmFsdWUpO1xuICB9XG5cbiAgb25DbGlja01hcmtkb3duVXJsID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0UmVuZGVyZXIobmV3IE1hcmtlZFJlbmRlcmVyKCkpO1xuICB9XG5cbiAgc2V0QmFzZVVybChiYXNlVXJsOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWFya2Rvd24tc2VydmljZV0gQmFzZSBVUkw6ICcgKyBiYXNlVXJsKTtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICB9XG5cbiAgcmVzZXRCYXNlVXJsKCkge1xuICAgIHRoaXMuc2V0QmFzZVVybChudWxsKTtcbiAgfVxuXG4gIGdldFVybFRyZWUodXJsOiBzdHJpbmcpOiBVcmxUcmVlIHtcbiAgICB1cmwgPSBVcmxVdGlscy5ub3JtYWxpemVVcmwodXJsKTtcbiAgICBjb25zdCB1cmxQYXRoID0gVXJsVXRpbHMuc3RyaXBGcmFnbWVudEFuZFF1ZXJ5KHVybCkgfHwgVXJsVXRpbHMuc3RyaXBGcmFnbWVudEFuZFF1ZXJ5KHRoaXMucm91dGVyLnVybCk7XG4gICAgY29uc3QgcGFyc2VkVXJsID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodXJsKTtcbiAgICBjb25zdCBmcmFnbWVudCA9IHBhcnNlZFVybC5mcmFnbWVudDtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHBhcnNlZFVybC5xdWVyeVBhcmFtcztcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbdXJsUGF0aF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgZnJhZ21lbnQsIHF1ZXJ5UGFyYW1zIH0pO1xuICB9XG5cbiAgbmF2aWdhdGUodXJsOiBzdHJpbmcsIHJlcGxhY2VVcmwgPSBmYWxzZSkge1xuICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLmdldFVybFRyZWUodXJsKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKHVybFRyZWUsIHsgcmVwbGFjZVVybCB9KTtcbiAgfVxuXG4gIGxpc3RlbkNsaWNrRXZlbnRzKG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50KTogU3Vic2NyaXB0aW9uIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWFya2Rvd24tc2VydmljZV0gU3RhcnQgbGlzdGVuaW5nIGNsaWNrIGV2ZW50cy4uLicpO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBjb25zdCBsaXN0ZW5lciA9IChldmVudDogRXZlbnQpID0+IHRoaXMuY2xpY2soZXZlbnQsIG5hdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IGxpbmtzID0gbmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG4gICAgbGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLXNlcnZpY2VdIEFkZGluZyBjbGljayBsaXN0ZW5lciB0bycsIGxpbmspO1xuICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKTtcbiAgICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gbGluay5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKSk7XG4gICAgfSk7XG5cbiAgICAvLyBERUJVR1xuICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLXNlcnZpY2VdIFN0b3AgbGlzdGVuaW5nIGNsaWNrIGV2ZW50cycpKTtcblxuICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGEgcmVsYXRpdmUgVVJMIHRvIGl0cyBhYnNvbHV0ZSByZXByZXNlbnRhdGlvbiBhY2NvcmRpbmcgdG8gY3VycmVudCByb3V0ZXIgc3RhdGUuXG4gICAqIEBwYXJhbSB1cmwgUmVsYXRpdmUgVVJMIHBhdGguXG4gICAqIEByZXR1cm4gQWJzb2x1dGUgVVJMIGJhc2VkIG9uIHRoZSBjdXJyZW50IHJvdXRlLlxuICAgKi9cbiAgbm9ybWFsaXplVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoVXJsVXRpbHMuaXNFeHRlcm5hbFVybCh1cmwpKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgICBpZiAodGhpcy5iYXNlVXJsICYmIFVybFV0aWxzLmlzUmVsYXRpdmVVcmwodXJsKSkge1xuICAgICAgcmV0dXJuIE1hcmtkb3duVXRpbHMucmVzb2x2ZVJlbGF0aXZlVXJsKHRoaXMuYmFzZVVybCwgdXJsKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5nZXRVcmxUcmVlKHVybCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh1cmxUcmVlKTtcbiAgICByZXR1cm4gdGhpcy5sb2NhdGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybChzZXJpYWxpemVkVXJsKTtcbiAgfVxuXG4gIHNjcm9sbFRvQW5jaG9yKGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBhbmNob3JJZDogc3RyaW5nKSB7XG4gICAgaWYgKCFjb250YWluZXJFbGVtZW50IHx8ICFhbmNob3JJZCkge1xuICAgICAgY29uc29sZS53YXJuKFwiTWlzc2luZyAnY29udGFpbmVyRWxlbWVudCcgb3IgJ2ZyYWdtZW50JyBhcmd1bWVudC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLWFuY2hvcl0gU2Nyb2xsaW5nIHRvIGFuY2hvciAjJyArIGFuY2hvcklkKTtcblxuICAgIC8vIEZpbmQgdGhlIHRhcmdldCBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCBmcmFnbWVudCBJRFxuICAgIGxldCB0YXJnZXRFbGVtZW50ID0gY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHthbmNob3JJZH1gKTtcblxuICAgIC8vIElmIG5vdCBmb3VuZCwgcmV0cnkgZml4IGEgZml4ZWQgYW5jaG9yIGlkLiBUaGlzIGNhbiBvY2N1ciB3aGVuIFRvQyBoYXMgYmVlbiBnZW5lcmF0ZWQgZm9yIHRoZSBtYXZlbi1tYXJrZG93bi1wbHVnaW5cbiAgICBpZiAoIXRhcmdldEVsZW1lbnQpIHtcbiAgICAgIHRhcmdldEVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke01hcmtkb3duVXRpbHMuZml4QW5jaG9yKGFuY2hvcklkKX1gKTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0RWxlbWVudCkge1xuICAgICAgLy8gU2Nyb2xsIHNtb290aGx5IHRvIHRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAgdGFyZ2V0RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJywgLy8gU21vb3RoIHNjcm9sbGluZyBiZWhhdmlvclxuICAgICAgICBibG9jazogJ3N0YXJ0JywgLy8gQWxpZ24gdGhlIHRhcmdldCBlbGVtZW50IHRvIHRoZSB0b3Agb2YgdGhlIGNvbnRhaW5lclxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgTm8gZWxlbWVudCBmb3VuZCB3aXRoIHRoZSBJRCBcIiR7YW5jaG9ySWR9XCIgaW5zaWRlIHRoZSBjb250YWluZXIuYCk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIGZ1bmN0aW9uIC0tICovXG5cbiAgcHJvdGVjdGVkIHNldFJlbmRlcmVyKHJlbmRlcmVyOiBNYXJrZWRSZW5kZXJlcikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttYXJrZG93bi1zZXJ2aWNlXSBTZXQgcmVuZGVyZXInLCByZW5kZXJlcik7XG4gICAgcmVuZGVyZXIubGluayA9IChocmVmLCB0aXRsZSwgdGV4dCkgPT4gdGhpcy5saW5rKGhyZWYsIHRpdGxlLCB0ZXh0KTtcbiAgICByZW5kZXJlci5pbWFnZSA9IChocmVmLCB0aXRsZSwgdGV4dCkgPT4gdGhpcy5pbWFnZShocmVmLCB0aXRsZSwgdGV4dCk7XG4gICAgcmVuZGVyZXIuaGVhZGluZyA9ICh0ZXh0LCBsZXZlbCwgcmF3KSA9PiB0aGlzLmhlYWRpbmcodGV4dCwgbGV2ZWwsIHJhdyk7XG4gICAgdGhpcy5fbWFya2VkUmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjbGljayhldmVudDogRXZlbnQsIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLXNlcnZpY2VdIFByb2Nlc3NpbmcgY2xpY2sgZXZlbnQuLi4nLCBldmVudCk7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaHJlZiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBVcmxVdGlscy5nZXRGcmFnbWVudChocmVmKTtcblxuICAgIC8vIEZyYWdtZW50XG4gICAgaWYgKGhyZWY/LnN0YXJ0c1dpdGgoJyMnKSAmJiBpc05vdE5pbE9yQmxhbmsoZnJhZ21lbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zY3JvbGxUb0FuY2hvcihjb250YWluZXJFbGVtZW50LCBmcmFnbWVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZXJMaW5rID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvdXRlckxpbmsnKTtcbiAgICBpZiAocm91dGVyTGluaykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKHJvdXRlckxpbmspO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgcmVsYXRpdmUgVVJMLCBpZiBiYXNlVXJsIGhhcyBiZWVuIHNldFxuICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgVXJsVXRpbHMuaXNSZWxhdGl2ZVVybChocmVmKSkge1xuICAgICAgaWYgKE1hcmtkb3duVXRpbHMuaXNNYXJrZG93bkZpbGUoaHJlZikgJiYgdGhpcy5vbkNsaWNrTWFya2Rvd25Vcmwub2JzZXJ2ZWQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vbkNsaWNrTWFya2Rvd25VcmwubmV4dChocmVmKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc29sdmUgVVJMLCB0aGVuIG9wZW4gdXNpbmcgdGhlIHBsYXRmb3JtXG4gICAgICBocmVmID0gTWFya2Rvd25VdGlscy5yZXNvbHZlUmVsYXRpdmVVcmwodGhpcy5iYXNlVXJsLCBocmVmKTtcbiAgICB9XG5cbiAgICAvLyBSZXNvbHZlIGludGVybmFsIFVSTCBhcyBhbiBhcHAgcm91dGVcbiAgICBpZiAoVXJsVXRpbHMuaXNJbnRlcm5hbFVybChocmVmKSkge1xuICAgICAgY29uc3Qgcm91dGVQYXRoID0gdGhpcy5ub3JtYWxpemVVcmwoaHJlZi5zdGFydHNXaXRoKCcvJykgPyBocmVmIDogYC8ke2hyZWZ9YCk7XG4gICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5nZXRVcmxUcmVlKHJvdXRlUGF0aCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVkID0gZmFsc2U7XG4gICAgICAvLyBPcGVuaW5nIHJvdXRlXG4gICAgICByZXR1cm4gdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlRm9yd2FyZCh1cmxUcmVlKTtcbiAgICB9XG5cbiAgICAvLyBFeHRlcm5hbCBVUkw6IG9wZW4gdXNpbmcgdGhlIHBsYXRmb3JtXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBhd2FpdCB0aGlzLnBsYXRmb3JtLm9wZW4oaHJlZik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgbGluayhocmVmOiBzdHJpbmcgfCBudWxsLCB0aXRsZTogc3RyaW5nIHwgbnVsbCwgdGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoVXJsVXRpbHMuaXNJbnRlcm5hbFVybChocmVmKSAmJiAhaHJlZi5zdGFydHNXaXRoKCcjJykgJiYgIXRoaXMuYmFzZVVybCkge1xuICAgICAgY29uc3QgZXh0ZXJuYWxVcmwgPSB0aGlzLm5vcm1hbGl6ZVVybChocmVmKTtcbiAgICAgIHJldHVybiBgPGEgaHJlZj1cIiR7ZXh0ZXJuYWxVcmx9XCIgcm91dGVyTGluaz1cIiR7aHJlZn1cIiB0aXRsZT1cIiR7dGl0bGUgfHwgJyd9XCI+JHt0ZXh0fTwvYT5gO1xuICAgIH1cbiAgICByZXR1cm4gYDxhIGhyZWY9XCIke2hyZWYgfHwgJyd9XCIgdGl0bGU9XCIke3RpdGxlIHx8ICcnfVwiPiR7dGV4dH08L2E+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbWFnZShocmVmOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfCBudWxsLCB0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB1cmwgPSBocmVmO1xuICAgIGxldCBmYWxsYmFja1VybDogc3RyaW5nO1xuICAgIGlmIChVcmxVdGlscy5pc1JlbGF0aXZlVXJsKGhyZWYpICYmIHRoaXMuYmFzZVVybCkge1xuICAgICAgLy8gUmVzb2x2ZSByZWxhdGl2ZSBwYXRoXG4gICAgICB1cmwgPSBNYXJrZG93blV0aWxzLnJlc29sdmVSZWxhdGl2ZVVybCh0aGlzLmJhc2VVcmwsIGhyZWYpO1xuXG4gICAgICAvLyBDb21wdXRlIGEgZmFsbGJhY2sgVVJMXG4gICAgICBmYWxsYmFja1VybCA9IE1hcmtkb3duVXRpbHMucmVzb2x2ZVJlbGF0aXZlVXJsKHRoaXMuYmFzZVVybCwgaHJlZiwgeyBhYnNvbHV0ZUJ5RGVmYXVsdDogdHJ1ZSB9KTtcbiAgICAgIGZhbGxiYWNrVXJsID0gZmFsbGJhY2tVcmwgPT09IHVybCA/IG51bGwgOiBmYWxsYmFja1VybDtcblxuICAgICAgLy8gREVCVUdcbiAgICAgIGNvbnNvbGUuZGVidWcoYFttYXJrZG93bi1zZXJ2aWNlXSBSZXBsYWNpbmcgaW1hZ2U6ICR7aHJlZn0gLT4gJHt1cmx9YCk7XG5cbiAgICAgIGlmIChmYWxsYmFja1VybCkge1xuICAgICAgICBjb25zdCBmYWxsYmFja0h0bWwgPSBgPGltZyBzcmM9XCIke2ZhbGxiYWNrVXJsfVwiIHRpdGxlPVwiJHt0aXRsZSB8fCAnJ31cIiBhbHQ9XCIke3RleHR9XCIgb25lcnJvcj1cInRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSc7XCIgLz5gO1xuICAgICAgICByZXR1cm4gYDxpbWcgc3JjPVwiJHt1cmx9XCIgdGl0bGU9XCIke3RpdGxlIHx8ICcnfVwiIGFsdD1cIiR7dGV4dH1cIiBvbmVycm9yPVwidGhpcy5zdHlsZS5kaXNwbGF5PSdub25lJztcIiAvPmAgKyBmYWxsYmFja0h0bWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFJlbmRlcmVyLmltYWdlKHVybCwgdGl0bGUsIHRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFJlbmRlcmVyLmltYWdlKHVybCwgdGl0bGUsIHRleHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhlYWRpbmcodGV4dDogc3RyaW5nLCBsZXZlbDogbnVtYmVyLCByYXc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gSWYgTk9UIHRoZSBoMSAoZG9jdW1lbnQgdGl0bGUpXG4gICAgY29uc3QgYW5jaG9yID0gTWFya2Rvd25VdGlscy50ZXh0VG9BbmNob3IodGV4dCk7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhhbmNob3IpKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbWFya2Rvd24tc2VydmljZV0gSGVhZGluZyAke2xldmVsfSAnJHt0ZXh0fScgd2l0aCBhbmNob3IgJHthbmNob3J9YCk7XG4gICAgICBjb25zdCBsaW5rID0gYDxhIGlkPVwiJHthbmNob3J9XCIgY2xhc3M9XCJhbmNob3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBocmVmPVwiIyR7YW5jaG9yfVwiPjwvYT5gO1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRSZW5kZXJlci5oZWFkaW5nKGxpbmsgKyB0ZXh0LCBsZXZlbCwgcmF3KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRSZW5kZXJlci5oZWFkaW5nKHRleHQsIGxldmVsLCByYXcpO1xuICB9XG59XG4iXX0=
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL21hcmtkb3duLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQVcsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFHdkUsTUFBTSxPQUFPLGVBQWU7SUFDbEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLFFBQVEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0QyxTQUFTLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXBDLE9B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Q0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFUyxPQUFPLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxHQUFXO1FBQ3hELGlDQUFpQztRQUNqQyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixLQUFLLEtBQUssSUFBSSxpQkFBaUIsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNyRixNQUFNLElBQUksR0FBRyxVQUFVLE1BQU0sbUJBQW1CLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLCtCQUErQixNQUFNLFFBQVEsQ0FBQztZQUMzSCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pELENBQUM7d0dBMU5VLGVBQWU7NEdBQWYsZUFBZSxjQURGLE1BQU07OzRGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIsIE5hdkNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBMb2NhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hcmtlZFJlbmRlcmVyIH0gZnJvbSAnbmd4LW1hcmtkb3duJztcbmltcG9ydCB7IFVybFV0aWxzIH0gZnJvbSAnLi4vZmlsZS91cmwudXRpbHMnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgTWFya2Rvd25VdGlscyB9IGZyb20gJy4vbWFya2Rvd24udXRpbHMnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNYXJrZG93blNlcnZpY2Uge1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybSA9IGluamVjdChQbGF0Zm9ybVNlcnZpY2UpO1xuICBwcml2YXRlIGxvY2F0aW9uU3RyYXRlZ3kgPSBpbmplY3QoTG9jYXRpb25TdHJhdGVneSk7XG4gIHByaXZhdGUgbmF2Q29udHJvbGxlciA9IGluamVjdChOYXZDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBtb2RhbEN0cmwgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcblxuICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0UmVuZGVyZXIgPSBuZXcgTWFya2VkUmVuZGVyZXIoKTtcbiAgcHJpdmF0ZSBfbWFya2VkUmVuZGVyZXI6IE1hcmtlZFJlbmRlcmVyO1xuXG4gIGdldCByZW5kZXJlcigpOiBNYXJrZWRSZW5kZXJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlZFJlbmRlcmVyO1xuICB9XG5cbiAgc2V0IHJlbmRlcmVyKHZhbHVlOiBNYXJrZWRSZW5kZXJlcikge1xuICAgIHRoaXMuc2V0UmVuZGVyZXIodmFsdWUpO1xuICB9XG5cbiAgb25DbGlja01hcmtkb3duVXJsID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0UmVuZGVyZXIobmV3IE1hcmtlZFJlbmRlcmVyKCkpO1xuICB9XG5cbiAgc2V0QmFzZVVybChiYXNlVXJsOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWFya2Rvd24tc2VydmljZV0gQmFzZSBVUkw6ICcgKyBiYXNlVXJsKTtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICB9XG5cbiAgcmVzZXRCYXNlVXJsKCkge1xuICAgIHRoaXMuc2V0QmFzZVVybChudWxsKTtcbiAgfVxuXG4gIGdldFVybFRyZWUodXJsOiBzdHJpbmcpOiBVcmxUcmVlIHtcbiAgICB1cmwgPSBVcmxVdGlscy5ub3JtYWxpemVVcmwodXJsKTtcbiAgICBjb25zdCB1cmxQYXRoID0gVXJsVXRpbHMuc3RyaXBGcmFnbWVudEFuZFF1ZXJ5KHVybCkgfHwgVXJsVXRpbHMuc3RyaXBGcmFnbWVudEFuZFF1ZXJ5KHRoaXMucm91dGVyLnVybCk7XG4gICAgY29uc3QgcGFyc2VkVXJsID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodXJsKTtcbiAgICBjb25zdCBmcmFnbWVudCA9IHBhcnNlZFVybC5mcmFnbWVudDtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHBhcnNlZFVybC5xdWVyeVBhcmFtcztcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbdXJsUGF0aF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgZnJhZ21lbnQsIHF1ZXJ5UGFyYW1zIH0pO1xuICB9XG5cbiAgbmF2aWdhdGUodXJsOiBzdHJpbmcsIHJlcGxhY2VVcmwgPSBmYWxzZSkge1xuICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLmdldFVybFRyZWUodXJsKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKHVybFRyZWUsIHsgcmVwbGFjZVVybCB9KTtcbiAgfVxuXG4gIGxpc3RlbkNsaWNrRXZlbnRzKG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50KTogU3Vic2NyaXB0aW9uIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWFya2Rvd24tc2VydmljZV0gU3RhcnQgbGlzdGVuaW5nIGNsaWNrIGV2ZW50cy4uLicpO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBjb25zdCBsaXN0ZW5lciA9IChldmVudDogRXZlbnQpID0+IHRoaXMuY2xpY2soZXZlbnQsIG5hdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IGxpbmtzID0gbmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG4gICAgbGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLXNlcnZpY2VdIEFkZGluZyBjbGljayBsaXN0ZW5lciB0bycsIGxpbmspO1xuICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKTtcbiAgICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gbGluay5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKSk7XG4gICAgfSk7XG5cbiAgICAvLyBERUJVR1xuICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLXNlcnZpY2VdIFN0b3AgbGlzdGVuaW5nIGNsaWNrIGV2ZW50cycpKTtcblxuICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGEgcmVsYXRpdmUgVVJMIHRvIGl0cyBhYnNvbHV0ZSByZXByZXNlbnRhdGlvbiBhY2NvcmRpbmcgdG8gY3VycmVudCByb3V0ZXIgc3RhdGUuXG4gICAqIEBwYXJhbSB1cmwgUmVsYXRpdmUgVVJMIHBhdGguXG4gICAqIEByZXR1cm4gQWJzb2x1dGUgVVJMIGJhc2VkIG9uIHRoZSBjdXJyZW50IHJvdXRlLlxuICAgKi9cbiAgbm9ybWFsaXplVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoVXJsVXRpbHMuaXNFeHRlcm5hbFVybCh1cmwpKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgICBpZiAodGhpcy5iYXNlVXJsICYmIFVybFV0aWxzLmlzUmVsYXRpdmVVcmwodXJsKSkge1xuICAgICAgcmV0dXJuIE1hcmtkb3duVXRpbHMucmVzb2x2ZVJlbGF0aXZlVXJsKHRoaXMuYmFzZVVybCwgdXJsKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5nZXRVcmxUcmVlKHVybCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh1cmxUcmVlKTtcbiAgICByZXR1cm4gdGhpcy5sb2NhdGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybChzZXJpYWxpemVkVXJsKTtcbiAgfVxuXG4gIHNjcm9sbFRvQW5jaG9yKGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBhbmNob3JJZDogc3RyaW5nKSB7XG4gICAgaWYgKCFjb250YWluZXJFbGVtZW50IHx8ICFhbmNob3JJZCkge1xuICAgICAgY29uc29sZS53YXJuKFwiTWlzc2luZyAnY29udGFpbmVyRWxlbWVudCcgb3IgJ2ZyYWdtZW50JyBhcmd1bWVudC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLWFuY2hvcl0gU2Nyb2xsaW5nIHRvIGFuY2hvciAjJyArIGFuY2hvcklkKTtcblxuICAgIC8vIEZpbmQgdGhlIHRhcmdldCBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCBmcmFnbWVudCBJRFxuICAgIGxldCB0YXJnZXRFbGVtZW50ID0gY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHthbmNob3JJZH1gKTtcblxuICAgIC8vIElmIG5vdCBmb3VuZCwgcmV0cnkgZml4IGEgZml4ZWQgYW5jaG9yIGlkLiBUaGlzIGNhbiBvY2N1ciB3aGVuIFRvQyBoYXMgYmVlbiBnZW5lcmF0ZWQgZm9yIHRoZSBtYXZlbi1tYXJrZG93bi1wbHVnaW5cbiAgICBpZiAoIXRhcmdldEVsZW1lbnQpIHtcbiAgICAgIHRhcmdldEVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke01hcmtkb3duVXRpbHMuZml4QW5jaG9yKGFuY2hvcklkKX1gKTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0RWxlbWVudCkge1xuICAgICAgLy8gU2Nyb2xsIHNtb290aGx5IHRvIHRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAgdGFyZ2V0RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJywgLy8gU21vb3RoIHNjcm9sbGluZyBiZWhhdmlvclxuICAgICAgICBibG9jazogJ3N0YXJ0JywgLy8gQWxpZ24gdGhlIHRhcmdldCBlbGVtZW50IHRvIHRoZSB0b3Agb2YgdGhlIGNvbnRhaW5lclxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgTm8gZWxlbWVudCBmb3VuZCB3aXRoIHRoZSBJRCBcIiR7YW5jaG9ySWR9XCIgaW5zaWRlIHRoZSBjb250YWluZXIuYCk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIGZ1bmN0aW9uIC0tICovXG5cbiAgcHJvdGVjdGVkIHNldFJlbmRlcmVyKHJlbmRlcmVyOiBNYXJrZWRSZW5kZXJlcikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttYXJrZG93bi1zZXJ2aWNlXSBTZXQgcmVuZGVyZXInLCByZW5kZXJlcik7XG4gICAgcmVuZGVyZXIubGluayA9IChocmVmLCB0aXRsZSwgdGV4dCkgPT4gdGhpcy5saW5rKGhyZWYsIHRpdGxlLCB0ZXh0KTtcbiAgICByZW5kZXJlci5pbWFnZSA9IChocmVmLCB0aXRsZSwgdGV4dCkgPT4gdGhpcy5pbWFnZShocmVmLCB0aXRsZSwgdGV4dCk7XG4gICAgcmVuZGVyZXIuaGVhZGluZyA9ICh0ZXh0LCBsZXZlbCwgcmF3KSA9PiB0aGlzLmhlYWRpbmcodGV4dCwgbGV2ZWwsIHJhdyk7XG4gICAgdGhpcy5fbWFya2VkUmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjbGljayhldmVudDogRXZlbnQsIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLXNlcnZpY2VdIFByb2Nlc3NpbmcgY2xpY2sgZXZlbnQuLi4nLCBldmVudCk7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaHJlZiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBVcmxVdGlscy5nZXRGcmFnbWVudChocmVmKTtcblxuICAgIC8vIEZyYWdtZW50XG4gICAgaWYgKGhyZWY/LnN0YXJ0c1dpdGgoJyMnKSAmJiBpc05vdE5pbE9yQmxhbmsoZnJhZ21lbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zY3JvbGxUb0FuY2hvcihjb250YWluZXJFbGVtZW50LCBmcmFnbWVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZXJMaW5rID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvdXRlckxpbmsnKTtcbiAgICBpZiAocm91dGVyTGluaykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKHJvdXRlckxpbmspO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgcmVsYXRpdmUgVVJMLCBpZiBiYXNlVXJsIGhhcyBiZWVuIHNldFxuICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgVXJsVXRpbHMuaXNSZWxhdGl2ZVVybChocmVmKSkge1xuICAgICAgaWYgKE1hcmtkb3duVXRpbHMuaXNNYXJrZG93bkZpbGUoaHJlZikgJiYgdGhpcy5vbkNsaWNrTWFya2Rvd25Vcmwub2JzZXJ2ZWQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vbkNsaWNrTWFya2Rvd25VcmwubmV4dChocmVmKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc29sdmUgVVJMLCB0aGVuIG9wZW4gdXNpbmcgdGhlIHBsYXRmb3JtXG4gICAgICBocmVmID0gTWFya2Rvd25VdGlscy5yZXNvbHZlUmVsYXRpdmVVcmwodGhpcy5iYXNlVXJsLCBocmVmKTtcbiAgICB9XG5cbiAgICAvLyBSZXNvbHZlIGludGVybmFsIFVSTCBhcyBhbiBhcHAgcm91dGVcbiAgICBpZiAoVXJsVXRpbHMuaXNJbnRlcm5hbFVybChocmVmKSkge1xuICAgICAgY29uc3Qgcm91dGVQYXRoID0gdGhpcy5ub3JtYWxpemVVcmwoaHJlZi5zdGFydHNXaXRoKCcvJykgPyBocmVmIDogYC8ke2hyZWZ9YCk7XG4gICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5nZXRVcmxUcmVlKHJvdXRlUGF0aCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVkID0gZmFsc2U7XG4gICAgICAvLyBPcGVuaW5nIHJvdXRlXG4gICAgICByZXR1cm4gdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlRm9yd2FyZCh1cmxUcmVlKTtcbiAgICB9XG5cbiAgICAvLyBFeHRlcm5hbCBVUkw6IG9wZW4gdXNpbmcgdGhlIHBsYXRmb3JtXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBhd2FpdCB0aGlzLnBsYXRmb3JtLm9wZW4oaHJlZik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgbGluayhocmVmOiBzdHJpbmcgfCBudWxsLCB0aXRsZTogc3RyaW5nIHwgbnVsbCwgdGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoVXJsVXRpbHMuaXNJbnRlcm5hbFVybChocmVmKSAmJiAhaHJlZi5zdGFydHNXaXRoKCcjJykgJiYgIXRoaXMuYmFzZVVybCkge1xuICAgICAgY29uc3QgZXh0ZXJuYWxVcmwgPSB0aGlzLm5vcm1hbGl6ZVVybChocmVmKTtcbiAgICAgIHJldHVybiBgPGEgaHJlZj1cIiR7ZXh0ZXJuYWxVcmx9XCIgcm91dGVyTGluaz1cIiR7aHJlZn1cIiB0aXRsZT1cIiR7dGl0bGUgfHwgJyd9XCI+JHt0ZXh0fTwvYT5gO1xuICAgIH1cbiAgICByZXR1cm4gYDxhIGhyZWY9XCIke2hyZWYgfHwgJyd9XCIgdGl0bGU9XCIke3RpdGxlIHx8ICcnfVwiPiR7dGV4dH08L2E+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbWFnZShocmVmOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfCBudWxsLCB0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB1cmwgPSBocmVmO1xuICAgIGxldCBmYWxsYmFja1VybDogc3RyaW5nO1xuICAgIGlmIChVcmxVdGlscy5pc1JlbGF0aXZlVXJsKGhyZWYpICYmIHRoaXMuYmFzZVVybCkge1xuICAgICAgLy8gUmVzb2x2ZSByZWxhdGl2ZSBwYXRoXG4gICAgICB1cmwgPSBNYXJrZG93blV0aWxzLnJlc29sdmVSZWxhdGl2ZVVybCh0aGlzLmJhc2VVcmwsIGhyZWYpO1xuXG4gICAgICAvLyBDb21wdXRlIGEgZmFsbGJhY2sgVVJMXG4gICAgICBmYWxsYmFja1VybCA9IE1hcmtkb3duVXRpbHMucmVzb2x2ZVJlbGF0aXZlVXJsKHRoaXMuYmFzZVVybCwgaHJlZiwgeyBhYnNvbHV0ZUJ5RGVmYXVsdDogdHJ1ZSB9KTtcbiAgICAgIGZhbGxiYWNrVXJsID0gZmFsbGJhY2tVcmwgPT09IHVybCA/IG51bGwgOiBmYWxsYmFja1VybDtcblxuICAgICAgLy8gREVCVUdcbiAgICAgIGNvbnNvbGUuZGVidWcoYFttYXJrZG93bi1zZXJ2aWNlXSBSZXBsYWNpbmcgaW1hZ2U6ICR7aHJlZn0gLT4gJHt1cmx9YCk7XG5cbiAgICAgIGlmIChmYWxsYmFja1VybCkge1xuICAgICAgICBjb25zdCBmYWxsYmFja0h0bWwgPSBgPGltZyBzcmM9XCIke2ZhbGxiYWNrVXJsfVwiIHRpdGxlPVwiJHt0aXRsZSB8fCAnJ31cIiBhbHQ9XCIke3RleHR9XCIgb25lcnJvcj1cInRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSc7XCIgLz5gO1xuICAgICAgICByZXR1cm4gYDxpbWcgc3JjPVwiJHt1cmx9XCIgdGl0bGU9XCIke3RpdGxlIHx8ICcnfVwiIGFsdD1cIiR7dGV4dH1cIiBvbmVycm9yPVwidGhpcy5zdHlsZS5kaXNwbGF5PSdub25lJztcIiAvPmAgKyBmYWxsYmFja0h0bWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFJlbmRlcmVyLmltYWdlKHVybCwgdGl0bGUsIHRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFJlbmRlcmVyLmltYWdlKHVybCwgdGl0bGUsIHRleHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhlYWRpbmcodGV4dDogc3RyaW5nLCBsZXZlbDogbnVtYmVyLCByYXc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gSWYgTk9UIHRoZSBoMSAoZG9jdW1lbnQgdGl0bGUpXG4gICAgY29uc3QgYW5jaG9yID0gTWFya2Rvd25VdGlscy50ZXh0VG9BbmNob3IodGV4dCk7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhhbmNob3IpKSB7XG4gICAgICBjb25zdCBwYWdlQnJlYWsgPSBsZXZlbCA8IDI7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbWFya2Rvd24tc2VydmljZV0gSGVhZGluZyAke2xldmVsfSAnJHt0ZXh0fScgd2l0aCBhbmNob3IgJHthbmNob3J9YCk7XG4gICAgICBjb25zdCBsaW5rID0gYDxhIGlkPVwiJHthbmNob3J9XCIgY2xhc3M9XCJhbmNob3IgJHtwYWdlQnJlYWsgPyAncGFnZS1icmVhaycgOiAnJ31cIiBhcmlhLWhpZGRlbj1cInRydWVcIiBocmVmPVwiIyR7YW5jaG9yfVwiPjwvYT5gO1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRSZW5kZXJlci5oZWFkaW5nKGxpbmsgKyB0ZXh0LCBsZXZlbCwgcmF3KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRSZW5kZXJlci5oZWFkaW5nKHRleHQsIGxldmVsLCByYXcpO1xuICB9XG59XG4iXX0=
@@ -10,8 +10,8 @@ export class MarkdownTestPage {
10
10
  cd;
11
11
  markdownModalTitle = 'Markdown modal';
12
12
  // URL from a starting markdown
13
- markdownUrl = 'http://localhost:3000/user-manual/index.md';
14
- //protected markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/projects/pifil/man/quick_start_guide_fr.md';
13
+ //protected markdownUrl = 'http://localhost:3000/user-manual/index.md';
14
+ markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/projects/pifil/man/quick_start_guide_fr.md';
15
15
  //protected markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/README.md';
16
16
  //protected markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/model/index.md';
17
17
  //protected markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/model/administration/index.md';
@@ -33,6 +33,7 @@ export class MarkdownTestPage {
33
33
  return AppMarkdownModal.show(this.modalCtrl, {
34
34
  title: this.markdownModalTitle,
35
35
  markdownUrl: this.markdownUrl,
36
+ canPrint: true,
36
37
  });
37
38
  }
38
39
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownTestPage, deps: [{ token: i1.ModalController }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
@@ -42,4 +43,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
42
43
  type: Component,
43
44
  args: [{ selector: 'app-markdown-test', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n @if (content.canGoBack) {\n <ion-button class=\"back-button\" (click)=\"content.goBack($event)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n } @else {\n <ion-back-button></ion-back-button>\n }\n </ion-buttons>\n\n <ion-title>Markdown test page</ion-title>\n\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"openHelpModal($event)\">Open in modal</ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <ion-input\n #input\n fill=\"outline\"\n [ngModel]=\"markdownUrl\"\n placeholder=\"Markdown URL\"\n label=\"URL: \"\n (keyup.enter)=\"onSubmit($event, input.value)\"\n >\n <ion-button\n slot=\"end\"\n [fill]=\"markdownUrl !== input.value ? 'solid' : 'clear'\"\n (click)=\"onSubmit($event, input.value)\"\n >\n {{ 'COMMON.BTN_OK' | translate }}\n </ion-button>\n </ion-input>\n\n <app-markdown-content\n #content\n [src]=\"markdownUrl\"\n enableNavigationHistory=\"true\"\n debug=\"true\"\n (markdownUrlChange)=\"updateInputUrl($event)\"\n ></app-markdown-content>\n</ion-content>\n" }]
44
45
  }], ctorParameters: () => [{ type: i1.ModalController }, { type: i0.ChangeDetectorRef }] });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24udGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL3Rlc3RpbmcvbWFya2Rvd24udGVzdC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL3Rlc3RpbmcvbWFya2Rvd24udGVzdC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7QUFRckQsTUFBTSxPQUFPLGdCQUFnQjtJQWFqQjtJQUNBO0lBYkEsa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUM7SUFFaEQsK0JBQStCO0lBQ3JCLFdBQVcsR0FBRyw0Q0FBNEMsQ0FBQztJQUNyRSw2SUFBNkk7SUFDN0ksNEdBQTRHO0lBQzVHLGlIQUFpSDtJQUNqSCxnSUFBZ0k7SUFDaEksdUpBQXVKO0lBQ3ZKLHdIQUF3SDtJQUV4SCxZQUNVLFNBQTBCLEVBQzFCLEVBQXFCO1FBRHJCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLE9BQUUsR0FBRixFQUFFLENBQW1CO0lBQzVCLENBQUM7SUFFSixRQUFRLENBQUMsS0FBWSxFQUFFLE1BQXVCO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBVztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBWTtRQUN4QixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNDLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQzlCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQWhDVSxnQkFBZ0I7NEZBQWhCLGdCQUFnQix5RENUN0IsZ3lDQThDQTs7NEZEckNhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxtQkFBbUIsbUJBRVosdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBNYXJrZG93bk1vZGFsIH0gZnJvbSAnLi4vbWFya2Rvd24ubW9kYWwnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWFya2Rvd24tdGVzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXJrZG93bi50ZXN0Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWFya2Rvd25UZXN0UGFnZSB7XG4gIHByb3RlY3RlZCBtYXJrZG93bk1vZGFsVGl0bGUgPSAnTWFya2Rvd24gbW9kYWwnO1xuXG4gIC8vIFVSTCBmcm9tIGEgc3RhcnRpbmcgbWFya2Rvd25cbiAgcHJvdGVjdGVkIG1hcmtkb3duVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC91c2VyLW1hbnVhbC9pbmRleC5tZCc7XG4gIC8vcHJvdGVjdGVkIG1hcmtkb3duVXJsID0gJ2h0dHBzOi8vZ2l0bGFiLmlmcmVtZXIuZnIvc2loLXB1YmxpYy9zdW1hcmlzL3N1bWFyaXMtZG9jLy0vcmF3L21hc3Rlci9wcm9qZWN0cy9waWZpbC9tYW4vcXVpY2tfc3RhcnRfZ3VpZGVfZnIubWQnO1xuICAvL3Byb3RlY3RlZCBtYXJrZG93blVybCA9ICdodHRwczovL2dpdGxhYi5pZnJlbWVyLmZyL3NpaC1wdWJsaWMvc3VtYXJpcy9zdW1hcmlzLWRvYy8tL3Jhdy9tYXN0ZXIvUkVBRE1FLm1kJztcbiAgLy9wcm90ZWN0ZWQgbWFya2Rvd25VcmwgPSAnaHR0cHM6Ly9naXRsYWIuaWZyZW1lci5mci9zaWgtcHVibGljL3N1bWFyaXMvc3VtYXJpcy1kb2MvLS9yYXcvbWFzdGVyL21vZGVsL2luZGV4Lm1kJztcbiAgLy9wcm90ZWN0ZWQgbWFya2Rvd25VcmwgPSAnaHR0cHM6Ly9naXRsYWIuaWZyZW1lci5mci9zaWgtcHVibGljL3N1bWFyaXMvc3VtYXJpcy1kb2MvLS9yYXcvbWFzdGVyL21vZGVsL2FkbWluaXN0cmF0aW9uL2luZGV4Lm1kJztcbiAgLy9wcm90ZWN0ZWQgbWFya2Rvd25VcmwgPSdodHRwczovL2dpdGxhYi5pZnJlbWVyLmZyL3NpaC1wdWJsaWMvc3VtYXJpcy9zdW1hcmlzLWRvYy8tL3Jhdy9tYXN0ZXIvcHJvamVjdHMvYWN0aXZpdHktY2FsZW5kYXIvc3BlL2NvbGxlY3RlX2RlX2Rvbm5lZXMubWQnO1xuICAvL3Byb3RlY3RlZCBtYXJrZG93blVybCA9J2h0dHBzOi8vZ2l0bGFiLmlmcmVtZXIuZnIvc2loLXB1YmxpYy9zdW1hcmlzL3N1bWFyaXMtYXBwLy0vcmF3L2RldmVsb3AvZG9jL3ByaXZhY3lfcG9saWN5Lm1kJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBvblN1Ym1pdChldmVudDogRXZlbnQsIG5ld1VybDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5tYXJrZG93blVybCA9ICcnICsgbmV3VXJsO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB1cGRhdGVJbnB1dFVybCh1cmw6IHN0cmluZykge1xuICAgIHRoaXMubWFya2Rvd25VcmwgPSB1cmw7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9wZW5IZWxwTW9kYWwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgcmV0dXJuIEFwcE1hcmtkb3duTW9kYWwuc2hvdyh0aGlzLm1vZGFsQ3RybCwge1xuICAgICAgdGl0bGU6IHRoaXMubWFya2Rvd25Nb2RhbFRpdGxlLFxuICAgICAgbWFya2Rvd25Vcmw6IHRoaXMubWFya2Rvd25VcmwsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgQGlmIChjb250ZW50LmNhbkdvQmFjaykge1xuICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImJhY2stYnV0dG9uXCIgKGNsaWNrKT1cImNvbnRlbnQuZ29CYWNrKCRldmVudClcIiByb3V0ZXJEaXJlY3Rpb249XCJiYWNrXCI+XG4gICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiYXJyb3ctYmFja1wiPjwvaW9uLWljb24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8aW9uLWJhY2stYnV0dG9uPjwvaW9uLWJhY2stYnV0dG9uPlxuICAgICAgfVxuICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICA8aW9uLXRpdGxlPk1hcmtkb3duIHRlc3QgcGFnZTwvaW9uLXRpdGxlPlxuXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJvcGVuSGVscE1vZGFsKCRldmVudClcIj5PcGVuIGluIG1vZGFsPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gIDxpb24taW5wdXRcbiAgICAjaW5wdXRcbiAgICBmaWxsPVwib3V0bGluZVwiXG4gICAgW25nTW9kZWxdPVwibWFya2Rvd25VcmxcIlxuICAgIHBsYWNlaG9sZGVyPVwiTWFya2Rvd24gVVJMXCJcbiAgICBsYWJlbD1cIlVSTDogXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwib25TdWJtaXQoJGV2ZW50LCBpbnB1dC52YWx1ZSlcIlxuICA+XG4gICAgPGlvbi1idXR0b25cbiAgICAgIHNsb3Q9XCJlbmRcIlxuICAgICAgW2ZpbGxdPVwibWFya2Rvd25VcmwgIT09IGlucHV0LnZhbHVlID8gJ3NvbGlkJyA6ICdjbGVhcidcIlxuICAgICAgKGNsaWNrKT1cIm9uU3VibWl0KCRldmVudCwgaW5wdXQudmFsdWUpXCJcbiAgICA+XG4gICAgICB7eyAnQ09NTU9OLkJUTl9PSycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2lvbi1idXR0b24+XG4gIDwvaW9uLWlucHV0PlxuXG4gIDxhcHAtbWFya2Rvd24tY29udGVudFxuICAgICNjb250ZW50XG4gICAgW3NyY109XCJtYXJrZG93blVybFwiXG4gICAgZW5hYmxlTmF2aWdhdGlvbkhpc3Rvcnk9XCJ0cnVlXCJcbiAgICBkZWJ1Zz1cInRydWVcIlxuICAgIChtYXJrZG93blVybENoYW5nZSk9XCJ1cGRhdGVJbnB1dFVybCgkZXZlbnQpXCJcbiAgPjwvYXBwLW1hcmtkb3duLWNvbnRlbnQ+XG48L2lvbi1jb250ZW50PlxuIl19
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24udGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL3Rlc3RpbmcvbWFya2Rvd24udGVzdC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL3Rlc3RpbmcvbWFya2Rvd24udGVzdC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7QUFRckQsTUFBTSxPQUFPLGdCQUFnQjtJQWFqQjtJQUNBO0lBYkEsa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUM7SUFFaEQsK0JBQStCO0lBQy9CLHVFQUF1RTtJQUM3RCxXQUFXLEdBQUcsa0hBQWtILENBQUM7SUFDM0ksNEdBQTRHO0lBQzVHLGlIQUFpSDtJQUNqSCxnSUFBZ0k7SUFDaEksdUpBQXVKO0lBQ3ZKLHdIQUF3SDtJQUV4SCxZQUNVLFNBQTBCLEVBQzFCLEVBQXFCO1FBRHJCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLE9BQUUsR0FBRixFQUFFLENBQW1CO0lBQzVCLENBQUM7SUFFSixRQUFRLENBQUMsS0FBWSxFQUFFLE1BQXVCO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBVztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBWTtRQUN4QixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNDLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQzlCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBakNVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLHlEQ1Q3QixneUNBOENBOzs0RkRyQ2EsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLG1CQUFtQixtQkFFWix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcE1hcmtkb3duTW9kYWwgfSBmcm9tICcuLi9tYXJrZG93bi5tb2RhbCc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tYXJrZG93bi10ZXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hcmtkb3duLnRlc3QuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXJrZG93blRlc3RQYWdlIHtcbiAgcHJvdGVjdGVkIG1hcmtkb3duTW9kYWxUaXRsZSA9ICdNYXJrZG93biBtb2RhbCc7XG5cbiAgLy8gVVJMIGZyb20gYSBzdGFydGluZyBtYXJrZG93blxuICAvL3Byb3RlY3RlZCBtYXJrZG93blVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvdXNlci1tYW51YWwvaW5kZXgubWQnO1xuICBwcm90ZWN0ZWQgbWFya2Rvd25VcmwgPSAnaHR0cHM6Ly9naXRsYWIuaWZyZW1lci5mci9zaWgtcHVibGljL3N1bWFyaXMvc3VtYXJpcy1kb2MvLS9yYXcvbWFzdGVyL3Byb2plY3RzL3BpZmlsL21hbi9xdWlja19zdGFydF9ndWlkZV9mci5tZCc7XG4gIC8vcHJvdGVjdGVkIG1hcmtkb3duVXJsID0gJ2h0dHBzOi8vZ2l0bGFiLmlmcmVtZXIuZnIvc2loLXB1YmxpYy9zdW1hcmlzL3N1bWFyaXMtZG9jLy0vcmF3L21hc3Rlci9SRUFETUUubWQnO1xuICAvL3Byb3RlY3RlZCBtYXJrZG93blVybCA9ICdodHRwczovL2dpdGxhYi5pZnJlbWVyLmZyL3NpaC1wdWJsaWMvc3VtYXJpcy9zdW1hcmlzLWRvYy8tL3Jhdy9tYXN0ZXIvbW9kZWwvaW5kZXgubWQnO1xuICAvL3Byb3RlY3RlZCBtYXJrZG93blVybCA9ICdodHRwczovL2dpdGxhYi5pZnJlbWVyLmZyL3NpaC1wdWJsaWMvc3VtYXJpcy9zdW1hcmlzLWRvYy8tL3Jhdy9tYXN0ZXIvbW9kZWwvYWRtaW5pc3RyYXRpb24vaW5kZXgubWQnO1xuICAvL3Byb3RlY3RlZCBtYXJrZG93blVybCA9J2h0dHBzOi8vZ2l0bGFiLmlmcmVtZXIuZnIvc2loLXB1YmxpYy9zdW1hcmlzL3N1bWFyaXMtZG9jLy0vcmF3L21hc3Rlci9wcm9qZWN0cy9hY3Rpdml0eS1jYWxlbmRhci9zcGUvY29sbGVjdGVfZGVfZG9ubmVlcy5tZCc7XG4gIC8vcHJvdGVjdGVkIG1hcmtkb3duVXJsID0naHR0cHM6Ly9naXRsYWIuaWZyZW1lci5mci9zaWgtcHVibGljL3N1bWFyaXMvc3VtYXJpcy1hcHAvLS9yYXcvZGV2ZWxvcC9kb2MvcHJpdmFjeV9wb2xpY3kubWQnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG9uU3VibWl0KGV2ZW50OiBFdmVudCwgbmV3VXJsOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICB0aGlzLm1hcmtkb3duVXJsID0gJycgKyBuZXdVcmw7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHVwZGF0ZUlucHV0VXJsKHVybDogc3RyaW5nKSB7XG4gICAgdGhpcy5tYXJrZG93blVybCA9IHVybDtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb3BlbkhlbHBNb2RhbChldmVudDogRXZlbnQpIHtcbiAgICByZXR1cm4gQXBwTWFya2Rvd25Nb2RhbC5zaG93KHRoaXMubW9kYWxDdHJsLCB7XG4gICAgICB0aXRsZTogdGhpcy5tYXJrZG93bk1vZGFsVGl0bGUsXG4gICAgICBtYXJrZG93blVybDogdGhpcy5tYXJrZG93blVybCxcbiAgICAgIGNhblByaW50OiB0cnVlLFxuICAgIH0pO1xuICB9XG59XG4iLCI8aW9uLWhlYWRlcj5cbiAgPGlvbi10b29sYmFyIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgIEBpZiAoY29udGVudC5jYW5Hb0JhY2spIHtcbiAgICAgICAgPGlvbi1idXR0b24gY2xhc3M9XCJiYWNrLWJ1dHRvblwiIChjbGljayk9XCJjb250ZW50LmdvQmFjaygkZXZlbnQpXCIgcm91dGVyRGlyZWN0aW9uPVwiYmFja1wiPlxuICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImFycm93LWJhY2tcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGlvbi1iYWNrLWJ1dHRvbj48L2lvbi1iYWNrLWJ1dHRvbj5cbiAgICAgIH1cbiAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgPGlvbi10aXRsZT5NYXJrZG93biB0ZXN0IHBhZ2U8L2lvbi10aXRsZT5cblxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwib3BlbkhlbHBNb2RhbCgkZXZlbnQpXCI+T3BlbiBpbiBtb2RhbDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuXG48aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICA8aW9uLWlucHV0XG4gICAgI2lucHV0XG4gICAgZmlsbD1cIm91dGxpbmVcIlxuICAgIFtuZ01vZGVsXT1cIm1hcmtkb3duVXJsXCJcbiAgICBwbGFjZWhvbGRlcj1cIk1hcmtkb3duIFVSTFwiXG4gICAgbGFiZWw9XCJVUkw6IFwiXG4gICAgKGtleXVwLmVudGVyKT1cIm9uU3VibWl0KCRldmVudCwgaW5wdXQudmFsdWUpXCJcbiAgPlxuICAgIDxpb24tYnV0dG9uXG4gICAgICBzbG90PVwiZW5kXCJcbiAgICAgIFtmaWxsXT1cIm1hcmtkb3duVXJsICE9PSBpbnB1dC52YWx1ZSA/ICdzb2xpZCcgOiAnY2xlYXInXCJcbiAgICAgIChjbGljayk9XCJvblN1Ym1pdCgkZXZlbnQsIGlucHV0LnZhbHVlKVwiXG4gICAgPlxuICAgICAge3sgJ0NPTU1PTi5CVE5fT0snIHwgdHJhbnNsYXRlIH19XG4gICAgPC9pb24tYnV0dG9uPlxuICA8L2lvbi1pbnB1dD5cblxuICA8YXBwLW1hcmtkb3duLWNvbnRlbnRcbiAgICAjY29udGVudFxuICAgIFtzcmNdPVwibWFya2Rvd25VcmxcIlxuICAgIGVuYWJsZU5hdmlnYXRpb25IaXN0b3J5PVwidHJ1ZVwiXG4gICAgZGVidWc9XCJ0cnVlXCJcbiAgICAobWFya2Rvd25VcmxDaGFuZ2UpPVwidXBkYXRlSW5wdXRVcmwoJGV2ZW50KVwiXG4gID48L2FwcC1tYXJrZG93bi1jb250ZW50PlxuPC9pb24tY29udGVudD5cbiJdfQ==