simpo-component-library 3.6.858 → 3.6.862

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,20 +1,14 @@
1
1
  // text-editor.component.ts
2
- import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
3
- import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, HostListener, Input, Output, ViewChild, PLATFORM_ID, inject } from '@angular/core';
3
+ import { CommonModule, isPlatformBrowser } from '@angular/common';
4
4
  import { FormsModule } from '@angular/forms';
5
5
  import { MatIconModule } from '@angular/material/icon';
6
- import { Editor } from '@tiptap/core';
7
- import StarterKit from '@tiptap/starter-kit';
8
6
  import { CdkDrag } from '@angular/cdk/drag-drop';
9
- import { TextStyle } from '@tiptap/extension-text-style';
10
- import Color from '@tiptap/extension-color';
11
- import { GradientExtension } from '../../styles/gradient-extension';
12
- import { FontSize } from '../../styles/text-size.extension';
13
- import Underline from '@tiptap/extension-underline';
14
- import TextAlign from '@tiptap/extension-text-align';
15
7
  import { MatSelectModule } from '@angular/material/select';
16
8
  import { MatFormFieldModule } from '@angular/material/form-field';
17
9
  import { ContenteditableValueAccessor } from '../../directive/contenteditable.directive';
10
+ import { GradientExtension } from '../../styles/gradient-extension';
11
+ import { FontSize } from '../../styles/text-size.extension';
18
12
  import * as i0 from "@angular/core";
19
13
  import * as i1 from "@angular/common";
20
14
  import * as i2 from "@angular/forms";
@@ -23,10 +17,17 @@ import * as i4 from "@angular/material/form-field";
23
17
  import * as i5 from "@angular/material/select";
24
18
  import * as i6 from "@angular/material/core";
25
19
  export class TextEditorComponent {
20
+ async ngAfterViewInit() {
21
+ if (this.editable &&
22
+ isPlatformBrowser(this.platformId)) {
23
+ await this.initializeEditor();
24
+ }
25
+ }
26
26
  constructor() {
27
27
  this.value = '<p>Hello this is palash makhija</p>';
28
28
  this.valueChange = new EventEmitter();
29
29
  this.editable = false;
30
+ this.platformId = inject(PLATFORM_ID);
30
31
  this.selectedFontSize = '';
31
32
  this.showToolbar = false;
32
33
  this.toolbarX = 0;
@@ -37,31 +38,44 @@ export class TextEditorComponent {
37
38
  this.isColorPickerOpen = false;
38
39
  this.selectedColorType = 'SOLID';
39
40
  this.savedSelection = null;
41
+ this.isFontSizeMenuOpen = false;
42
+ this.toolbarData = {
43
+ selectedSize: ''
44
+ };
40
45
  this.handleWindowFocus = () => {
41
46
  setTimeout(() => {
42
47
  this.isColorPickerOpen = false;
43
48
  }, 300);
44
49
  };
45
- this.isFontSizeMenuOpen = false;
46
- this.toolbarData = {
47
- selectedSize: ''
48
- };
50
+ console.log(this.value);
49
51
  }
50
52
  ngOnDestroy() {
51
- if (this.editor) {
53
+ if (this.editor &&
54
+ isPlatformBrowser(this.platformId)) {
52
55
  this.editor.destroy();
53
56
  }
54
57
  }
55
- ngAfterViewInit() {
56
- if (this.editable) {
57
- this.initializeEditor();
58
- }
59
- }
60
- initializeEditor() {
58
+ async initializeEditor() {
61
59
  if (!this.editorElement)
62
60
  return;
61
+ // dynamic imports for SSR safety
62
+ const { Editor } = await import('@tiptap/core');
63
+ const StarterKit = (await import('@tiptap/starter-kit')).default;
64
+ const TextStyle = (await import('@tiptap/extension-text-style'))
65
+ .TextStyle;
66
+ const Color = (await import('@tiptap/extension-color'))
67
+ .default;
68
+ const Underline = (await import('@tiptap/extension-underline'))
69
+ .default;
70
+ const TextAlign = (await import('@tiptap/extension-text-align'))
71
+ .default;
63
72
  this.editor = new Editor({
64
73
  element: this.editorElement.nativeElement,
74
+ editorProps: {
75
+ attributes: {
76
+ class: 'ProseMirror'
77
+ }
78
+ },
65
79
  extensions: [
66
80
  StarterKit,
67
81
  TextStyle,
@@ -70,7 +84,11 @@ export class TextEditorComponent {
70
84
  GradientExtension,
71
85
  Underline,
72
86
  TextAlign.configure({
73
- types: ['heading', 'paragraph', 'listItem'],
87
+ types: [
88
+ 'heading',
89
+ 'paragraph',
90
+ 'listItem'
91
+ ],
74
92
  }),
75
93
  ],
76
94
  content: this.value,
@@ -81,17 +99,32 @@ export class TextEditorComponent {
81
99
  const html = editor.getHTML();
82
100
  this.value = html;
83
101
  this.valueChange.emit(html);
102
+ this.updateEmptyEditorClass();
84
103
  }
85
104
  });
105
+ this.updateEmptyEditorClass();
106
+ }
107
+ updateEmptyEditorClass() {
108
+ if (!this.editorElement)
109
+ return;
110
+ const editorWrapper = this.editorElement.nativeElement
111
+ .closest('.editable-text');
112
+ if (!editorWrapper)
113
+ return;
114
+ if (this.editor?.isEmpty) {
115
+ editorWrapper.classList.add('editor-empty');
116
+ }
117
+ else {
118
+ editorWrapper.classList.remove('editor-empty');
119
+ }
86
120
  }
87
121
  saveSelection() {
88
122
  this.savedSelection =
89
123
  this.editor.state.selection;
90
124
  }
91
125
  restoreSelection() {
92
- if (!this.savedSelection) {
126
+ if (!this.savedSelection)
93
127
  return;
94
- }
95
128
  this.editor
96
129
  .chain()
97
130
  .focus()
@@ -134,30 +167,30 @@ export class TextEditorComponent {
134
167
  return;
135
168
  }
136
169
  const selection = window.getSelection();
137
- if (!selection || selection.rangeCount === 0) {
170
+ if (!selection ||
171
+ selection.rangeCount === 0) {
138
172
  this.showToolbar = false;
139
173
  return;
140
174
  }
141
175
  const range = selection.getRangeAt(0);
142
176
  const rect = range.getBoundingClientRect();
143
- const editorRect = this.editorElement.nativeElement.getBoundingClientRect();
177
+ const editorRect = this.editorElement.nativeElement
178
+ .getBoundingClientRect();
144
179
  this.showToolbar = true;
145
180
  setTimeout(() => {
146
181
  const toolbar = document.querySelector('.toolbar');
147
182
  if (!toolbar)
148
183
  return;
149
184
  const toolbarWidth = toolbar.offsetWidth;
150
- // centered position
151
185
  let left = rect.left -
152
186
  editorRect.left +
153
187
  (rect.width / 2) -
154
188
  (toolbarWidth / 2);
155
- // left limit
156
189
  left = Math.max(10, left);
157
- // right limit
158
- const maxLeft = editorRect.width - toolbarWidth - 10;
190
+ const maxLeft = editorRect.width -
191
+ toolbarWidth -
192
+ 10;
159
193
  left = Math.min(left, maxLeft);
160
- // prevent negative value
161
194
  left = Math.max(10, left);
162
195
  this.toolbarX = left;
163
196
  this.toolbarY =
@@ -217,7 +250,10 @@ export class TextEditorComponent {
217
250
  this.editor
218
251
  .chain()
219
252
  .focus()
220
- .setTextSelection({ from, to })
253
+ .setTextSelection({
254
+ from,
255
+ to
256
+ })
221
257
  .setMark('textStyle', {
222
258
  ...existingStyles,
223
259
  color: this.selectedColor,
@@ -234,16 +270,19 @@ export class TextEditorComponent {
234
270
  return;
235
271
  const existingStyles = this.editor.getAttributes('textStyle');
236
272
  const gradient = `
237
- linear-gradient(
238
- to right,
239
- ${this.primaryColor},
240
- ${this.secondaryColor}
241
- )
242
- `;
273
+ linear-gradient(
274
+ to right,
275
+ ${this.primaryColor},
276
+ ${this.secondaryColor}
277
+ )
278
+ `;
243
279
  this.editor
244
280
  .chain()
245
281
  .focus()
246
- .setTextSelection({ from, to })
282
+ .setTextSelection({
283
+ from,
284
+ to
285
+ })
247
286
  .setMark('textStyle', {
248
287
  ...existingStyles,
249
288
  backgroundImage: gradient,
@@ -259,11 +298,13 @@ export class TextEditorComponent {
259
298
  if (!this.editor)
260
299
  return;
261
300
  const { from, to } = this.editor.state.selection;
262
- this.showToolbar = from !== to;
301
+ this.showToolbar =
302
+ from !== to;
263
303
  });
264
304
  }
265
305
  toggleFontSizeMenu(event) {
266
- this.isFontSizeMenuOpen = !this.isFontSizeMenuOpen;
306
+ this.isFontSizeMenuOpen =
307
+ !this.isFontSizeMenuOpen;
267
308
  event.stopPropagation();
268
309
  }
269
310
  getDisplayFontSize() {
@@ -286,19 +327,22 @@ export class TextEditorComponent {
286
327
  selectCustomFontSize(cssSize, event) {
287
328
  event.stopPropagation();
288
329
  this.changeFontSize(cssSize);
289
- this.isFontSizeMenuOpen = false;
330
+ this.isFontSizeMenuOpen =
331
+ false;
290
332
  }
291
333
  changeFontSize(fontSize) {
292
- this.selectedFontSize = fontSize;
334
+ this.selectedFontSize =
335
+ fontSize;
293
336
  const { from, to } = this.editor.state.selection;
294
- if (from === to) {
337
+ if (from === to)
295
338
  return;
296
- }
297
339
  this.editor
298
340
  .chain()
299
341
  .focus()
300
- .setTextSelection({ from, to })
301
- // merges with existing styles
342
+ .setTextSelection({
343
+ from,
344
+ to
345
+ })
302
346
  .setMark('textStyle', {
303
347
  fontSize
304
348
  })
@@ -318,7 +362,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
318
362
  MatFormFieldModule,
319
363
  ContenteditableValueAccessor
320
364
  ], template: "<!-- text-editor.component.html -->\r\n\r\n<div class=\"editor-container\" *ngIf=\"editable; else viewMode\">\r\n\r\n <!-- FLOATING TOOLBAR -->\r\n <div class=\"toolbar\" *ngIf=\"showToolbar\" [style.top.px]=\"toolbarY\" [style.left.px]=\"toolbarX\" cdkDrag>\r\n <button class=\"tool drag-handle w-auto\" cdkDragHandle>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"lucide lucide-grip-vertical\">\r\n <circle cx=\"9\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"9\" cy=\"5\" r=\"1\" />\r\n <circle cx=\"9\" cy=\"19\" r=\"1\" />\r\n <circle cx=\"15\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"15\" cy=\"5\" r=\"1\" />\r\n <circle cx=\"15\" cy=\"19\" r=\"1\" />\r\n </svg>\r\n </button>\r\n <mat-form-field appearance=\"outline\" class=\"font-size-field\">\r\n\r\n <mat-select [value]=\"selectedFontSize\" (selectionChange)=\"changeFontSize($event.value)\" disableOptionCentering>\r\n\r\n <mat-option value=\"\">\r\n Default\r\n </mat-option>\r\n\r\n <mat-option value=\"clamp(0.75rem, 2vw, 1rem)\">\r\n 14\r\n </mat-option>\r\n\r\n <mat-option value=\"clamp(0.75rem, 2vw, 1.25rem)\">\r\n 16\r\n </mat-option>\r\n\r\n <mat-option value=\"clamp(1rem, 3vw, 1.5rem)\">\r\n 20\r\n </mat-option>\r\n\r\n <mat-option value=\"clamp(1.25rem, 4vw, 2rem)\">\r\n 24\r\n </mat-option>\r\n <mat-option value=\"clamp(2rem, 5vw, 3rem)\">\r\n 32\r\n </mat-option>\r\n <mat-option value=\"clamp(3.1rem, 7vw, 4.5rem)\">\r\n 48\r\n </mat-option>\r\n </mat-select>\r\n\r\n </mat-form-field>\r\n <!-- BOLD -->\r\n <button class=\"tool w-auto\" [class.selectedTool]=\"editor?.isActive('bold')\" (click)=\"toggleBold()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"lucide lucide-bold\">\r\n <path d=\"M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- ITALIC -->\r\n <button class=\"tool w-auto\" [class.selectedTool]=\"editor?.isActive('italic')\" (click)=\"toggleItalic()\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"lucide lucide-italic\">\r\n <line x1=\"19\" x2=\"10\" y1=\"4\" y2=\"4\" />\r\n <line x1=\"14\" x2=\"5\" y1=\"20\" y2=\"20\" />\r\n <line x1=\"15\" x2=\"9\" y1=\"4\" y2=\"20\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- UNDERLINE -->\r\n <button class=\"tool w-auto\" [class.selectedTool]=\"editor?.isActive('underline')\" (click)=\"toggleUnderline()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"lucide lucide-underline\">\r\n <path d=\"M6 4v6a6 6 0 0 0 12 0V4\" />\r\n <line x1=\"4\" x2=\"20\" y1=\"20\" y2=\"20\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- ALIGN LEFT -->\r\n <button class=\"tool w-auto\" (click)=\"setAlign('left')\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"lucide lucide-align-left\">\r\n <line x1=\"21\" x2=\"3\" y1=\"6\" y2=\"6\" />\r\n <line x1=\"15\" x2=\"3\" y1=\"12\" y2=\"12\" />\r\n <line x1=\"17\" x2=\"3\" y1=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- ALIGN CENTER -->\r\n <button class=\"tool w-auto\" (click)=\"setAlign('center')\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"lucide lucide-align-center\">\r\n <line x1=\"21\" x2=\"3\" y1=\"6\" y2=\"6\" />\r\n <line x1=\"17\" x2=\"7\" y1=\"12\" y2=\"12\" />\r\n <line x1=\"19\" x2=\"5\" y1=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- ALIGN RIGHT -->\r\n <button class=\"tool w-auto\" (click)=\"setAlign('right')\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"lucide lucide-align-right\">\r\n <line x1=\"21\" x2=\"3\" y1=\"6\" y2=\"6\" />\r\n <line x1=\"21\" x2=\"9\" y1=\"12\" y2=\"12\" />\r\n <line x1=\"21\" x2=\"7\" y1=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- ORDERED LIST -->\r\n <button class=\"tool w-auto\" (click)=\"toggleOrderedList()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"lucide lucide-list-ordered\">\r\n <line x1=\"10\" x2=\"21\" y1=\"6\" y2=\"6\" />\r\n <line x1=\"10\" x2=\"21\" y1=\"12\" y2=\"12\" />\r\n <line x1=\"10\" x2=\"21\" y1=\"18\" y2=\"18\" />\r\n <path d=\"M4 6h1v4\" />\r\n <path d=\"M4 10h2\" />\r\n <path d=\"M6 18H4c0-1 2-2 2-3s-1-1.5-2-1\" />\r\n </svg>\r\n </button>\r\n <!-- BULLET LIST -->\r\n <button class=\"tool w-auto\" (click)=\"toggleBulletList()\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"lucide lucide-list\">\r\n <line x1=\"8\" x2=\"21\" y1=\"6\" y2=\"6\" />\r\n <line x1=\"8\" x2=\"21\" y1=\"12\" y2=\"12\" />\r\n <line x1=\"8\" x2=\"21\" y1=\"18\" y2=\"18\" />\r\n <line x1=\"3\" x2=\"3.01\" y1=\"6\" y2=\"6\" />\r\n <line x1=\"3\" x2=\"3.01\" y1=\"12\" y2=\"12\" />\r\n <line x1=\"3\" x2=\"3.01\" y1=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- SOLID / GRADIENT -->\r\n <!-- SOLID / GRADIENT -->\r\n <div class=\"colorType\">\r\n\r\n <button class=\"solid w-auto\" [class.solidColorSelected]=\"selectedColorType === 'SOLID'\"\r\n (mousedown)=\"$event.preventDefault()\" (click)=\"switchToSolid($event)\">\r\n Solid\r\n </button>\r\n\r\n <button class=\"gradient w-auto\" [class.gradientColorSelected]=\"selectedColorType === 'GRADIENT'\"\r\n (mousedown)=\"$event.preventDefault()\" (click)=\"switchToGradient($event)\">\r\n Gradient\r\n </button>\r\n\r\n </div>\r\n\r\n <!-- SOLID COLOR -->\r\n <button class=\"tool color-picker-btn w-auto\" *ngIf=\"selectedColorType === 'SOLID'\">\r\n\r\n <mat-icon>format_color_text</mat-icon>\r\n\r\n <input type=\"color\" class=\"hidden-color-picker\" [(ngModel)]=\"selectedColor\" (click)=\"openColorPicker()\"\r\n (input)=\"changeColor()\">\r\n\r\n </button>\r\n\r\n <!-- GRADIENT -->\r\n <div class=\"gradient-picker\" *ngIf=\"selectedColorType === 'GRADIENT'\">\r\n <input type=\"color\" [(ngModel)]=\"primaryColor\" (click)=\"openColorPicker()\" (input)=\"applyGradient()\" />\r\n\r\n <input type=\"color\" [(ngModel)]=\"secondaryColor\" (click)=\"openColorPicker()\" (input)=\"applyGradient()\" />\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- TIPTAP EDITOR -->\r\n <div #editorContainer class=\"editable-text\">\r\n </div>\r\n\r\n</div>\r\n<ng-template #viewMode>\r\n <div class=\"read-only-text\" [innerHTML]=\"value\">\r\n </div>\r\n</ng-template>", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.editor-container{position:relative;width:100%}.editable-text{cursor:text;width:100%;border:1px solid lightgrey;border-radius:10px}.editable-text ::ng-deep p{margin-bottom:0!important}::ng-deep .ProseMirror ol,::ng-deep .ProseMirror ul{padding-left:2rem;margin-left:0;list-style-position:inside}::ng-deep .ProseMirror li{text-align:inherit;margin-bottom:5px}::ng-deep .ProseMirror li p{display:inline}.ProseMirror{outline:none;min-height:120px;padding:5px}.ProseMirror p{margin:0}.toolbar{position:absolute;left:0;top:0;display:flex;align-items:center;gap:5px;background:#fff;padding:8px 14px;border-radius:22px;z-index:100000;box-shadow:#00000029 0 1px 4px;max-width:calc(100vw - 20px);overflow-x:auto;box-sizing:border-box}.tool{background:none;border:none;padding:5px 8px;cursor:pointer;display:flex;align-items:center}.tool:hover{background:#eee;border-radius:5px}.selectedTool{background:var(--primary-bg-color)!important;color:#fff;border-radius:5px}.color-picker-btn{position:relative}.color-picker-btn mat-icon{font-size:22px!important}.hidden-color-picker{position:absolute;inset:0;opacity:0;cursor:pointer}.gradient-text{background:linear-gradient(to right,var(--gradient-start),var(--gradient-end));background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;color:transparent;display:inline-block}.colorType{display:flex;border:1px solid #E9E9E9;border-radius:9px;overflow:hidden}.colorType button{font-size:12px!important;padding:7px 9px!important;border:none;background:#fff;cursor:pointer}.solid{border-right:1px solid #E9E9E9!important}.solidColorSelected,.gradientColorSelected{background:var(--primary-bg-color)!important;color:#fff}.gradient-picker{display:flex;gap:5px}.gradient-picker input{width:32px;height:32px;border:none;padding:0;cursor:pointer}.white-space-nowrap{white-space:nowrap}.font-size-field{width:120px;border:1px solid lightgrey;border-radius:10px}::ng-deep .font-size-field .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .font-size-field .mdc-notched-outline{display:none}::ng-deep .font-size-field .mat-mdc-text-field-wrapper{background:transparent!important;padding-left:8px!important;padding-right:8px!important;height:36px!important}::ng-deep .font-size-field .mat-mdc-select-value{font-size:14px;font-weight:600}::ng-deep .mat-mdc-select-panel{border-radius:12px!important}@media screen and (max-width: 475px){.toolbar{max-width:95%;flex-wrap:wrap;row-gap:10px}}@media screen and (max-width: 768px){.toolbar{width:max-content;max-width:calc(100vw - 20px);flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden}}\n"] }]
321
- }], propDecorators: { value: [{
365
+ }], ctorParameters: () => [], propDecorators: { value: [{
322
366
  type: Input
323
367
  }], valueChange: [{
324
368
  type: Output
@@ -337,4 +381,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
337
381
  type: HostListener,
338
382
  args: ['document:mousedown']
339
383
  }] } });
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUUzQixPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV0QyxPQUFPLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sS0FBSyxNQUFNLHlCQUF5QixDQUFDO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RCxPQUFPLFNBQVMsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRCxPQUFPLFNBQVMsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBC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RkFPVCxtQkFBbUI7a0JBakIvQixTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBRVA7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsT0FBTzt3QkFDUCxlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsNEJBQTRCO3FCQUM3Qjs4QkFPUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDd0IsYUFBYTtzQkFBMUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBZ1c1QixXQUFXO3NCQURWLFlBQVk7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdGV4dC1lZGl0b3IuY29tcG9uZW50LnRzXHJcblxyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5cclxuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcclxuXHJcbmltcG9ydCBTdGFydGVyS2l0IGZyb20gJ0B0aXB0YXAvc3RhcnRlci1raXQnO1xyXG5pbXBvcnQgeyBDZGtEcmFnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IFRleHRTdHlsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQtc3R5bGUnO1xyXG5pbXBvcnQgQ29sb3IgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29sb3InO1xyXG5pbXBvcnQgeyBHcmFkaWVudEV4dGVuc2lvbiB9IGZyb20gJy4uLy4uL3N0eWxlcy9ncmFkaWVudC1leHRlbnNpb24nO1xyXG5pbXBvcnQgeyBGb250U2l6ZSB9IGZyb20gJy4uLy4uL3N0eWxlcy90ZXh0LXNpemUuZXh0ZW5zaW9uJztcclxuaW1wb3J0IFVuZGVybGluZSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi11bmRlcmxpbmUnO1xyXG5pbXBvcnQgVGV4dEFsaWduIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQtYWxpZ24nO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgQ29udGVudGVkaXRhYmxlVmFsdWVBY2Nlc3NvciB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50ZWRpdGFibGUuZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tdGV4dC1lZGl0b3InLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcblxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIENka0RyYWcsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBDb250ZW50ZWRpdGFibGVWYWx1ZUFjY2Vzc29yXHJcbiAgXSxcclxuXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90ZXh0LWVkaXRvci5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRleHRFZGl0b3JDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZyA9ICc8cD5IZWxsbyB0aGlzIGlzIHBhbGFzaCBtYWtoaWphPC9wPic7XHJcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQElucHV0KCkgZWRpdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWN0aW9uSWQ/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGFiZWw/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdHlwZT86IHN0cmluZztcclxuICBAVmlld0NoaWxkKCdlZGl0b3JDb250YWluZXInKSBlZGl0b3JFbGVtZW50ITogRWxlbWVudFJlZjtcclxuXHJcblxyXG4gIGVkaXRvciE6IEVkaXRvcjtcclxuICBzZWxlY3RlZEZvbnRTaXplID0gJyc7XHJcbiAgc2hvd1Rvb2xiYXIgPSBmYWxzZTtcclxuXHJcbiAgdG9vbGJhclggPSAwO1xyXG4gIHRvb2xiYXJZID0gMTAwO1xyXG5cclxuICBzZWxlY3RlZENvbG9yID0gJyMwMDAwMDAnO1xyXG5cclxuICBwcmltYXJ5Q29sb3IgPSAnIzAwMDAwMCc7XHJcbiAgc2Vjb25kYXJ5Q29sb3IgPSAnI2ZmMDAwMCc7XHJcbiAgaXNDb2xvclBpY2tlck9wZW4gPSBmYWxzZTtcclxuICBzZWxlY3RlZENvbG9yVHlwZTogJ1NPTElEJyB8ICdHUkFESUVOVCcgPSAnU09MSUQnO1xyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5lZGl0b3IpIHtcclxuICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRWRpdG9yKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGluaXRpYWxpemVFZGl0b3IoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZWRpdG9yRWxlbWVudClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XHJcblxyXG4gICAgICBlbGVtZW50OiB0aGlzLmVkaXRvckVsZW1lbnQubmF0aXZlRWxlbWVudCxcclxuXHJcbiAgICAgIGV4dGVuc2lvbnM6IFtcclxuXHJcbiAgICAgICAgU3RhcnRlcktpdCxcclxuXHJcbiAgICAgICAgVGV4dFN0eWxlLFxyXG4gICAgICAgIEZvbnRTaXplLFxyXG5cclxuICAgICAgICBDb2xvcixcclxuXHJcbiAgICAgICAgR3JhZGllbnRFeHRlbnNpb24sXHJcblxyXG4gICAgICAgIFVuZGVybGluZSxcclxuXHJcbiAgICAgICAgVGV4dEFsaWduLmNvbmZpZ3VyZSh7XHJcbiAgICAgICAgICB0eXBlczogWydoZWFkaW5nJywgJ3BhcmFncmFwaCcsICdsaXN0SXRlbSddLFxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgXSxcclxuXHJcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUsXHJcblxyXG4gICAgICBvblNlbGVjdGlvblVwZGF0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0aW9uKCk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBvblVwZGF0ZTogKHsgZWRpdG9yIH0pID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGVkaXRvci5nZXRIVE1MKCk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBodG1sO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoaHRtbCk7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBzYXZlZFNlbGVjdGlvbjogYW55ID0gbnVsbDtcclxuICBzYXZlU2VsZWN0aW9uKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuc2F2ZWRTZWxlY3Rpb24gPVxyXG4gICAgICB0aGlzLmVkaXRvci5zdGF0ZS5zZWxlY3Rpb247XHJcblxyXG4gIH1cclxuICByZXN0b3JlU2VsZWN0aW9uKCk6IHZvaWQge1xyXG5cclxuICAgIGlmICghdGhpcy5zYXZlZFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lZGl0b3JcclxuICAgICAgLmNoYWluKClcclxuICAgICAgLmZvY3VzKClcclxuICAgICAgLnNldFRleHRTZWxlY3Rpb24odGhpcy5zYXZlZFNlbGVjdGlvbilcclxuICAgICAgLnJ1bigpO1xyXG5cclxuICB9XHJcbiAgc3dpdGNoVG9Tb2xpZChldmVudDogRXZlbnQpOiB2b2lkIHtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbG9yVHlwZSA9ICdTT0xJRCc7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzdG9yZVNlbGVjdGlvbigpO1xyXG4gICAgICB0aGlzLnNob3dUb29sYmFyID0gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHN3aXRjaFRvR3JhZGllbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIHRoaXMuc2F2ZVNlbGVjdGlvbigpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDb2xvclR5cGUgPSAnR1JBRElFTlQnO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb24oKTtcclxuICAgICAgdGhpcy5zaG93VG9vbGJhciA9IHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG4gIG9wZW5Db2xvclBpY2tlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNDb2xvclBpY2tlck9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICdmb2N1cycsXHJcbiAgICAgICAgdGhpcy5oYW5kbGVXaW5kb3dGb2N1cyxcclxuICAgICAgICB7IG9uY2U6IHRydWUgfVxyXG4gICAgICApO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgaGFuZGxlV2luZG93Rm9jdXMgPSAoKTogdm9pZCA9PiB7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLmlzQ29sb3JQaWNrZXJPcGVuID0gZmFsc2U7XHJcblxyXG4gICAgfSwgMzAwKTtcclxuXHJcbiAgfVxyXG4gIGhhbmRsZVNlbGVjdGlvbigpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCB7IGZyb20sIHRvIH0gPSB0aGlzLmVkaXRvci5zdGF0ZS5zZWxlY3Rpb247XHJcblxyXG4gICAgaWYgKGZyb20gPT09IHRvKSB7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuaXNDb2xvclBpY2tlck9wZW4pIHtcclxuICAgICAgICB0aGlzLnNob3dUb29sYmFyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHtcclxuICAgICAgdGhpcy5zaG93VG9vbGJhciA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuXHJcbiAgICBjb25zdCByZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgY29uc3QgZWRpdG9yUmVjdCA9XHJcbiAgICAgIHRoaXMuZWRpdG9yRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSB0cnVlO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgY29uc3QgdG9vbGJhciA9XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRvb2xiYXInKSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgIGlmICghdG9vbGJhcikgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgdG9vbGJhcldpZHRoID0gdG9vbGJhci5vZmZzZXRXaWR0aDtcclxuXHJcbiAgICAgIC8vIGNlbnRlcmVkIHBvc2l0aW9uXHJcbiAgICAgIGxldCBsZWZ0ID1cclxuICAgICAgICByZWN0LmxlZnQgLVxyXG4gICAgICAgIGVkaXRvclJlY3QubGVmdCArXHJcbiAgICAgICAgKHJlY3Qud2lkdGggLyAyKSAtXHJcbiAgICAgICAgKHRvb2xiYXJXaWR0aCAvIDIpO1xyXG5cclxuICAgICAgLy8gbGVmdCBsaW1pdFxyXG4gICAgICBsZWZ0ID0gTWF0aC5tYXgoMTAsIGxlZnQpO1xyXG5cclxuICAgICAgLy8gcmlnaHQgbGltaXRcclxuICAgICAgY29uc3QgbWF4TGVmdCA9XHJcbiAgICAgICAgZWRpdG9yUmVjdC53aWR0aCAtIHRvb2xiYXJXaWR0aCAtIDEwO1xyXG5cclxuICAgICAgbGVmdCA9IE1hdGgubWluKGxlZnQsIG1heExlZnQpO1xyXG5cclxuICAgICAgLy8gcHJldmVudCBuZWdhdGl2ZSB2YWx1ZVxyXG4gICAgICBsZWZ0ID0gTWF0aC5tYXgoMTAsIGxlZnQpO1xyXG5cclxuICAgICAgdGhpcy50b29sYmFyWCA9IGxlZnQ7XHJcblxyXG4gICAgICB0aGlzLnRvb2xiYXJZID1cclxuICAgICAgICByZWN0LmJvdHRvbSAtXHJcbiAgICAgICAgZWRpdG9yUmVjdC50b3AgK1xyXG4gICAgICAgIDEwO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHRvZ2dsZUJvbGQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5lZGl0b3JcclxuICAgICAgLmNoYWluKClcclxuICAgICAgLmZvY3VzKClcclxuICAgICAgLnRvZ2dsZUJvbGQoKVxyXG4gICAgICAucnVuKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlSXRhbGljKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZWRpdG9yXHJcbiAgICAgIC5jaGFpbigpXHJcbiAgICAgIC5mb2N1cygpXHJcbiAgICAgIC50b2dnbGVJdGFsaWMoKVxyXG4gICAgICAucnVuKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlVW5kZXJsaW5lKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZWRpdG9yXHJcbiAgICAgIC5jaGFpbigpXHJcbiAgICAgIC5mb2N1cygpXHJcbiAgICAgIC50b2dnbGVVbmRlcmxpbmUoKVxyXG4gICAgICAucnVuKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlT3JkZXJlZExpc3QoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5lZGl0b3JcclxuICAgICAgLmNoYWluKClcclxuICAgICAgLmZvY3VzKClcclxuICAgICAgLnRvZ2dsZU9yZGVyZWRMaXN0KClcclxuICAgICAgLnJ1bigpO1xyXG5cclxuICB9XHJcblxyXG4gIHRvZ2dsZUJ1bGxldExpc3QoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5lZGl0b3JcclxuICAgICAgLmNoYWluKClcclxuICAgICAgLmZvY3VzKClcclxuICAgICAgLnRvZ2dsZUJ1bGxldExpc3QoKVxyXG4gICAgICAucnVuKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgc2V0QWxpZ24oXHJcbiAgICBhbGlnbm1lbnQ6ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0J1xyXG4gICk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZWRpdG9yXHJcbiAgICAgIC5jaGFpbigpXHJcbiAgICAgIC5mb2N1cygpXHJcbiAgICAgIC5zZXRUZXh0QWxpZ24oYWxpZ25tZW50KVxyXG4gICAgICAucnVuKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgY2hhbmdlQ29sb3IoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgeyBmcm9tLCB0byB9ID1cclxuICAgICAgdGhpcy5lZGl0b3Iuc3RhdGUuc2VsZWN0aW9uO1xyXG5cclxuICAgIGlmIChmcm9tID09PSB0bylcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGV4aXN0aW5nU3R5bGVzID1cclxuICAgICAgdGhpcy5lZGl0b3IuZ2V0QXR0cmlidXRlcygndGV4dFN0eWxlJyk7XHJcblxyXG4gICAgdGhpcy5lZGl0b3JcclxuICAgICAgLmNoYWluKClcclxuICAgICAgLmZvY3VzKClcclxuICAgICAgLnNldFRleHRTZWxlY3Rpb24oeyBmcm9tLCB0byB9KVxyXG4gICAgICAuc2V0TWFyaygndGV4dFN0eWxlJywge1xyXG4gICAgICAgIC4uLmV4aXN0aW5nU3R5bGVzLFxyXG4gICAgICAgIGNvbG9yOiB0aGlzLnNlbGVjdGVkQ29sb3IsXHJcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiBudWxsLFxyXG4gICAgICAgIFdlYmtpdEJhY2tncm91bmRDbGlwOiBudWxsLFxyXG4gICAgICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6IG51bGxcclxuICAgICAgfSlcclxuICAgICAgLnJ1bigpO1xyXG5cclxuICB9XHJcblxyXG4gIGFwcGx5R3JhZGllbnQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgeyBmcm9tLCB0byB9ID1cclxuICAgICAgdGhpcy5lZGl0b3Iuc3RhdGUuc2VsZWN0aW9uO1xyXG5cclxuICAgIGlmIChmcm9tID09PSB0bylcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGV4aXN0aW5nU3R5bGVzID1cclxuICAgICAgdGhpcy5lZGl0b3IuZ2V0QXR0cmlidXRlcygndGV4dFN0eWxlJyk7XHJcblxyXG4gICAgY29uc3QgZ3JhZGllbnQgPSBgXHJcbiAgICBsaW5lYXItZ3JhZGllbnQoXHJcbiAgICAgIHRvIHJpZ2h0LFxyXG4gICAgICAke3RoaXMucHJpbWFyeUNvbG9yfSxcclxuICAgICAgJHt0aGlzLnNlY29uZGFyeUNvbG9yfVxyXG4gICAgKVxyXG4gIGA7XHJcblxyXG4gICAgdGhpcy5lZGl0b3JcclxuICAgICAgLmNoYWluKClcclxuICAgICAgLmZvY3VzKClcclxuICAgICAgLnNldFRleHRTZWxlY3Rpb24oeyBmcm9tLCB0byB9KVxyXG4gICAgICAuc2V0TWFyaygndGV4dFN0eWxlJywge1xyXG5cclxuICAgICAgICAuLi5leGlzdGluZ1N0eWxlcyxcclxuXHJcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiBncmFkaWVudCxcclxuXHJcbiAgICAgICAgYmFja2dyb3VuZENsaXA6ICd0ZXh0JyxcclxuXHJcbiAgICAgICAgV2Via2l0QmFja2dyb3VuZENsaXA6ICd0ZXh0JyxcclxuXHJcbiAgICAgICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXHJcblxyXG4gICAgICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6ICd0cmFuc3BhcmVudCdcclxuXHJcbiAgICAgIH0pXHJcbiAgICAgIC5ydW4oKTtcclxuXHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nKVxyXG4gIG9uTW91c2VEb3duKCk6IHZvaWQge1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmVkaXRvcilcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCB7IGZyb20sIHRvIH0gPVxyXG4gICAgICAgIHRoaXMuZWRpdG9yLnN0YXRlLnNlbGVjdGlvbjtcclxuXHJcbiAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSBmcm9tICE9PSB0bztcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG4gIGlzRm9udFNpemVNZW51T3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRvb2xiYXJEYXRhOiBhbnkgPSB7XHJcbiAgICBzZWxlY3RlZFNpemU6ICcnXHJcbiAgfTtcclxuICB0b2dnbGVGb250U2l6ZU1lbnUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLmlzRm9udFNpemVNZW51T3BlbiA9ICF0aGlzLmlzRm9udFNpemVNZW51T3BlbjtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuICBnZXREaXNwbGF5Rm9udFNpemUoKTogc3RyaW5nIHtcclxuXHJcbiAgICBjb25zdCBzaXplID1cclxuICAgICAgdGhpcy5lZGl0b3JcclxuICAgICAgICA/LmdldEF0dHJpYnV0ZXMoJ3RleHRTdHlsZScpXHJcbiAgICAgID8uWydmb250U2l6ZSddO1xyXG5cclxuICAgIGlmICghc2l6ZSlcclxuICAgICAgcmV0dXJuICcxNic7XHJcblxyXG4gICAgaWYgKHNpemUuaW5jbHVkZXMoJzAuNzVyZW0nKSlcclxuICAgICAgcmV0dXJuICcxNCc7XHJcblxyXG4gICAgaWYgKHNpemUuaW5jbHVkZXMoJzFyZW0sIDN2dycpKVxyXG4gICAgICByZXR1cm4gJzIwJztcclxuXHJcbiAgICBpZiAoc2l6ZS5pbmNsdWRlcygnMS4yNXJlbScpKVxyXG4gICAgICByZXR1cm4gJzI0JztcclxuXHJcbiAgICBpZiAoc2l6ZS5pbmNsdWRlcygnMnJlbScpKVxyXG4gICAgICByZXR1cm4gJzMyJztcclxuXHJcbiAgICBpZiAoc2l6ZS5pbmNsdWRlcygnMy4xcmVtJykpXHJcbiAgICAgIHJldHVybiAnNDgnO1xyXG5cclxuICAgIHJldHVybiAnMTYnO1xyXG5cclxuICB9XHJcbiAgc2VsZWN0Q3VzdG9tRm9udFNpemUoXHJcbiAgICBjc3NTaXplOiBzdHJpbmcsXHJcbiAgICBldmVudDogRXZlbnRcclxuICApOiB2b2lkIHtcclxuXHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICB0aGlzLmNoYW5nZUZvbnRTaXplKGNzc1NpemUpO1xyXG5cclxuICAgIHRoaXMuaXNGb250U2l6ZU1lbnVPcGVuID0gZmFsc2U7XHJcblxyXG4gIH1cclxuICBjaGFuZ2VGb250U2l6ZShmb250U2l6ZTogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEZvbnRTaXplID0gZm9udFNpemU7XHJcblxyXG4gICAgY29uc3QgeyBmcm9tLCB0byB9ID1cclxuICAgICAgdGhpcy5lZGl0b3Iuc3RhdGUuc2VsZWN0aW9uO1xyXG5cclxuICAgIGlmIChmcm9tID09PSB0bykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lZGl0b3JcclxuICAgICAgLmNoYWluKClcclxuICAgICAgLmZvY3VzKClcclxuICAgICAgLnNldFRleHRTZWxlY3Rpb24oeyBmcm9tLCB0byB9KVxyXG5cclxuICAgICAgLy8gbWVyZ2VzIHdpdGggZXhpc3Rpbmcgc3R5bGVzXHJcbiAgICAgIC5zZXRNYXJrKCd0ZXh0U3R5bGUnLCB7XHJcbiAgICAgICAgZm9udFNpemVcclxuICAgICAgfSlcclxuXHJcbiAgICAgIC5ydW4oKTtcclxuXHJcbiAgfVxyXG59IiwiPCEtLSB0ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCAtLT5cclxuXHJcbjxkaXYgY2xhc3M9XCJlZGl0b3ItY29udGFpbmVyXCIgKm5nSWY9XCJlZGl0YWJsZTsgZWxzZSB2aWV3TW9kZVwiPlxyXG5cclxuICA8IS0tIEZMT0FUSU5HIFRPT0xCQVIgLS0+XHJcbiAgPGRpdiBjbGFzcz1cInRvb2xiYXJcIiAqbmdJZj1cInNob3dUb29sYmFyXCIgW3N0eWxlLnRvcC5weF09XCJ0b29sYmFyWVwiIFtzdHlsZS5sZWZ0LnB4XT1cInRvb2xiYXJYXCIgY2RrRHJhZz5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIGRyYWctaGFuZGxlIHctYXV0b1wiIGNka0RyYWdIYW5kbGU+XHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgY2xhc3M9XCJsdWNpZGUgbHVjaWRlLWdyaXAtdmVydGljYWxcIj5cclxuICAgICAgICA8Y2lyY2xlIGN4PVwiOVwiIGN5PVwiMTJcIiByPVwiMVwiIC8+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjlcIiBjeT1cIjVcIiByPVwiMVwiIC8+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjlcIiBjeT1cIjE5XCIgcj1cIjFcIiAvPlxyXG4gICAgICAgIDxjaXJjbGUgY3g9XCIxNVwiIGN5PVwiMTJcIiByPVwiMVwiIC8+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjE1XCIgY3k9XCI1XCIgcj1cIjFcIiAvPlxyXG4gICAgICAgIDxjaXJjbGUgY3g9XCIxNVwiIGN5PVwiMTlcIiByPVwiMVwiIC8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZvbnQtc2l6ZS1maWVsZFwiPlxyXG5cclxuICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cInNlbGVjdGVkRm9udFNpemVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cImNoYW5nZUZvbnRTaXplKCRldmVudC52YWx1ZSlcIiBkaXNhYmxlT3B0aW9uQ2VudGVyaW5nPlxyXG5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlwiPlxyXG4gICAgICAgICAgRGVmYXVsdFxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuXHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJjbGFtcCgwLjc1cmVtLCAydncsIDFyZW0pXCI+XHJcbiAgICAgICAgICAxNFxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuXHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJjbGFtcCgwLjc1cmVtLCAydncsIDEuMjVyZW0pXCI+XHJcbiAgICAgICAgICAxNlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuXHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJjbGFtcCgxcmVtLCAzdncsIDEuNXJlbSlcIj5cclxuICAgICAgICAgIDIwXHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cImNsYW1wKDEuMjVyZW0sIDR2dywgMnJlbSlcIj5cclxuICAgICAgICAgIDI0XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiY2xhbXAoMnJlbSwgNXZ3LCAzcmVtKVwiPlxyXG4gICAgICAgICAgMzJcclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJjbGFtcCgzLjFyZW0sIDd2dywgNC41cmVtKVwiPlxyXG4gICAgICAgICAgNDhcclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuXHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPCEtLSBCT0xEIC0tPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2wgdy1hdXRvXCIgW2NsYXNzLnNlbGVjdGVkVG9vbF09XCJlZGl0b3I/LmlzQWN0aXZlKCdib2xkJylcIiAoY2xpY2spPVwidG9nZ2xlQm9sZCgpXCI+XHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgY2xhc3M9XCJsdWNpZGUgbHVjaWRlLWJvbGRcIj5cclxuICAgICAgICA8cGF0aCBkPVwiTTYgMTJoOWE0IDQgMCAwIDEgMCA4SDdhMSAxIDAgMCAxLTEtMVY1YTEgMSAwIDAgMSAxLTFoN2E0IDQgMCAwIDEgMCA4XCIgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8IS0tIElUQUxJQyAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIHctYXV0b1wiIFtjbGFzcy5zZWxlY3RlZFRvb2xdPVwiZWRpdG9yPy5pc0FjdGl2ZSgnaXRhbGljJylcIiAoY2xpY2spPVwidG9nZ2xlSXRhbGljKClcIj5cclxuXHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgY2xhc3M9XCJsdWNpZGUgbHVjaWRlLWl0YWxpY1wiPlxyXG4gICAgICAgIDxsaW5lIHgxPVwiMTlcIiB4Mj1cIjEwXCIgeTE9XCI0XCIgeTI9XCI0XCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjE0XCIgeDI9XCI1XCIgeTE9XCIyMFwiIHkyPVwiMjBcIiAvPlxyXG4gICAgICAgIDxsaW5lIHgxPVwiMTVcIiB4Mj1cIjlcIiB5MT1cIjRcIiB5Mj1cIjIwXCIgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8IS0tIFVOREVSTElORSAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIHctYXV0b1wiIFtjbGFzcy5zZWxlY3RlZFRvb2xdPVwiZWRpdG9yPy5pc0FjdGl2ZSgndW5kZXJsaW5lJylcIiAoY2xpY2spPVwidG9nZ2xlVW5kZXJsaW5lKClcIj5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICBjbGFzcz1cImx1Y2lkZSBsdWNpZGUtdW5kZXJsaW5lXCI+XHJcbiAgICAgICAgPHBhdGggZD1cIk02IDR2NmE2IDYgMCAwIDAgMTIgMFY0XCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjRcIiB4Mj1cIjIwXCIgeTE9XCIyMFwiIHkyPVwiMjBcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gQUxJR04gTEVGVCAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIHctYXV0b1wiIChjbGljayk9XCJzZXRBbGlnbignbGVmdCcpXCI+XHJcblxyXG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgIGNsYXNzPVwibHVjaWRlIGx1Y2lkZS1hbGlnbi1sZWZ0XCI+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIyMVwiIHgyPVwiM1wiIHkxPVwiNlwiIHkyPVwiNlwiIC8+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIxNVwiIHgyPVwiM1wiIHkxPVwiMTJcIiB5Mj1cIjEyXCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjE3XCIgeDI9XCIzXCIgeTE9XCIxOFwiIHkyPVwiMThcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gQUxJR04gQ0VOVEVSIC0tPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2wgdy1hdXRvXCIgKGNsaWNrKT1cInNldEFsaWduKCdjZW50ZXInKVwiPlxyXG5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICBjbGFzcz1cImx1Y2lkZSBsdWNpZGUtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIyMVwiIHgyPVwiM1wiIHkxPVwiNlwiIHkyPVwiNlwiIC8+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIxN1wiIHgyPVwiN1wiIHkxPVwiMTJcIiB5Mj1cIjEyXCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjE5XCIgeDI9XCI1XCIgeTE9XCIxOFwiIHkyPVwiMThcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gQUxJR04gUklHSFQgLS0+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbCB3LWF1dG9cIiAoY2xpY2spPVwic2V0QWxpZ24oJ3JpZ2h0JylcIj5cclxuXHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgY2xhc3M9XCJsdWNpZGUgbHVjaWRlLWFsaWduLXJpZ2h0XCI+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIyMVwiIHgyPVwiM1wiIHkxPVwiNlwiIHkyPVwiNlwiIC8+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIyMVwiIHgyPVwiOVwiIHkxPVwiMTJcIiB5Mj1cIjEyXCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjIxXCIgeDI9XCI3XCIgeTE9XCIxOFwiIHkyPVwiMThcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gT1JERVJFRCBMSVNUIC0tPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2wgdy1hdXRvXCIgKGNsaWNrKT1cInRvZ2dsZU9yZGVyZWRMaXN0KClcIj5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICBjbGFzcz1cImx1Y2lkZSBsdWNpZGUtbGlzdC1vcmRlcmVkXCI+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIxMFwiIHgyPVwiMjFcIiB5MT1cIjZcIiB5Mj1cIjZcIiAvPlxyXG4gICAgICAgIDxsaW5lIHgxPVwiMTBcIiB4Mj1cIjIxXCIgeTE9XCIxMlwiIHkyPVwiMTJcIiAvPlxyXG4gICAgICAgIDxsaW5lIHgxPVwiMTBcIiB4Mj1cIjIxXCIgeTE9XCIxOFwiIHkyPVwiMThcIiAvPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNNCA2aDF2NFwiIC8+XHJcbiAgICAgICAgPHBhdGggZD1cIk00IDEwaDJcIiAvPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNNiAxOEg0YzAtMSAyLTIgMi0zcy0xLTEuNS0yLTFcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPCEtLSBCVUxMRVQgTElTVCAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIHctYXV0b1wiIChjbGljayk9XCJ0b2dnbGVCdWxsZXRMaXN0KClcIj5cclxuXHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgY2xhc3M9XCJsdWNpZGUgbHVjaWRlLWxpc3RcIj5cclxuICAgICAgICA8bGluZSB4MT1cIjhcIiB4Mj1cIjIxXCIgeTE9XCI2XCIgeTI9XCI2XCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjhcIiB4Mj1cIjIxXCIgeTE9XCIxMlwiIHkyPVwiMTJcIiAvPlxyXG4gICAgICAgIDxsaW5lIHgxPVwiOFwiIHgyPVwiMjFcIiB5MT1cIjE4XCIgeTI9XCIxOFwiIC8+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIzXCIgeDI9XCIzLjAxXCIgeTE9XCI2XCIgeTI9XCI2XCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjNcIiB4Mj1cIjMuMDFcIiB5MT1cIjEyXCIgeTI9XCIxMlwiIC8+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIzXCIgeDI9XCIzLjAxXCIgeTE9XCIxOFwiIHkyPVwiMThcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gU09MSUQgLyBHUkFESUVOVCAtLT5cclxuICAgIDwhLS0gU09MSUQgLyBHUkFESUVOVCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xvclR5cGVcIj5cclxuXHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJzb2xpZCB3LWF1dG9cIiBbY2xhc3Muc29saWRDb2xvclNlbGVjdGVkXT1cInNlbGVjdGVkQ29sb3JUeXBlID09PSAnU09MSUQnXCJcclxuICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgKGNsaWNrKT1cInN3aXRjaFRvU29saWQoJGV2ZW50KVwiPlxyXG4gICAgICAgIFNvbGlkXHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImdyYWRpZW50IHctYXV0b1wiIFtjbGFzcy5ncmFkaWVudENvbG9yU2VsZWN0ZWRdPVwic2VsZWN0ZWRDb2xvclR5cGUgPT09ICdHUkFESUVOVCdcIlxyXG4gICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAoY2xpY2spPVwic3dpdGNoVG9HcmFkaWVudCgkZXZlbnQpXCI+XHJcbiAgICAgICAgR3JhZGllbnRcclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBTT0xJRCBDT0xPUiAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIGNvbG9yLXBpY2tlci1idG4gdy1hdXRvXCIgKm5nSWY9XCJzZWxlY3RlZENvbG9yVHlwZSA9PT0gJ1NPTElEJ1wiPlxyXG5cclxuICAgICAgPG1hdC1pY29uPmZvcm1hdF9jb2xvcl90ZXh0PC9tYXQtaWNvbj5cclxuXHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBjbGFzcz1cImhpZGRlbi1jb2xvci1waWNrZXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29sb3JcIiAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKClcIlxyXG4gICAgICAgIChpbnB1dCk9XCJjaGFuZ2VDb2xvcigpXCI+XHJcblxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPCEtLSBHUkFESUVOVCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJncmFkaWVudC1waWNrZXJcIiAqbmdJZj1cInNlbGVjdGVkQ29sb3JUeXBlID09PSAnR1JBRElFTlQnXCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBbKG5nTW9kZWwpXT1cInByaW1hcnlDb2xvclwiIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoKVwiIChpbnB1dCk9XCJhcHBseUdyYWRpZW50KClcIiAvPlxyXG5cclxuICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIFsobmdNb2RlbCldPVwic2Vjb25kYXJ5Q29sb3JcIiAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKClcIiAoaW5wdXQpPVwiYXBwbHlHcmFkaWVudCgpXCIgLz5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gVElQVEFQIEVESVRPUiAtLT5cclxuICA8ZGl2ICNlZGl0b3JDb250YWluZXIgY2xhc3M9XCJlZGl0YWJsZS10ZXh0XCI+XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlICN2aWV3TW9kZT5cclxuICA8ZGl2IGNsYXNzPVwicmVhZC1vbmx5LXRleHRcIiBbaW5uZXJIVE1MXT1cInZhbHVlXCI+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUUzQixPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUV6RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7O0FBb0I1RCxNQUFNLE9BQU8sbUJBQW1CO0lBMEQ5QixLQUFLLENBQUMsZUFBZTtRQUVuQixJQUNFLElBQUksQ0FBQyxRQUFRO1lBQ2IsaUJB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QUFZO3dCQUNaLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixPQUFPO3dCQUNQLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQiw0QkFBNEI7cUJBQzdCO3dEQVVELEtBQUs7c0JBREosS0FBSztnQkFLTixXQUFXO3NCQURWLE1BQU07Z0JBS1AsUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxpQkFBaUI7Z0JBa2dCNUIsV0FBVztzQkFKVixZQUFZO3VCQUNYLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRleHQtZWRpdG9yLmNvbXBvbmVudC50c1xyXG5cclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgaW5qZWN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIENvbW1vbk1vZHVsZSxcclxuICBpc1BsYXRmb3JtQnJvd3NlclxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuXHJcbmltcG9ydCB7IENka0RyYWcgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuXHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcblxyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuXHJcbmltcG9ydCB7IENvbnRlbnRlZGl0YWJsZVZhbHVlQWNjZXNzb3IgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudGVkaXRhYmxlLmRpcmVjdGl2ZSc7XHJcblxyXG5pbXBvcnQgeyBHcmFkaWVudEV4dGVuc2lvbiB9IGZyb20gJy4uLy4uL3N0eWxlcy9ncmFkaWVudC1leHRlbnNpb24nO1xyXG5cclxuaW1wb3J0IHsgRm9udFNpemUgfSBmcm9tICcuLi8uLi9zdHlsZXMvdGV4dC1zaXplLmV4dGVuc2lvbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLXRleHQtZWRpdG9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG5cclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBDZGtEcmFnLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgQ29udGVudGVkaXRhYmxlVmFsdWVBY2Nlc3NvclxyXG4gIF0sXHJcblxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC1lZGl0b3IuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dEVkaXRvckNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQElucHV0KClcclxuICB2YWx1ZTogc3RyaW5nID1cclxuICAgICc8cD5IZWxsbyB0aGlzIGlzIHBhbGFzaCBtYWtoaWphPC9wPic7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHZhbHVlQ2hhbmdlID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGVkaXRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2VjdGlvbklkPzogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGxhYmVsPzogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHR5cGU/OiBzdHJpbmc7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvckNvbnRhaW5lcicpXHJcbiAgZWRpdG9yRWxlbWVudCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgcGxhdGZvcm1JZCA9XHJcbiAgICBpbmplY3QoUExBVEZPUk1fSUQpO1xyXG5cclxuICBlZGl0b3I6IGFueTtcclxuXHJcbiAgc2VsZWN0ZWRGb250U2l6ZSA9ICcnO1xyXG5cclxuICBzaG93VG9vbGJhciA9IGZhbHNlO1xyXG5cclxuICB0b29sYmFyWCA9IDA7XHJcblxyXG4gIHRvb2xiYXJZID0gMTAwO1xyXG5cclxuICBzZWxlY3RlZENvbG9yID0gJyMwMDAwMDAnO1xyXG5cclxuICBwcmltYXJ5Q29sb3IgPSAnIzAwMDAwMCc7XHJcblxyXG4gIHNlY29uZGFyeUNvbG9yID0gJyNmZjAwMDAnO1xyXG5cclxuICBpc0NvbG9yUGlja2VyT3BlbiA9IGZhbHNlO1xyXG5cclxuICBzZWxlY3RlZENvbG9yVHlwZTpcclxuICAgICdTT0xJRCcgfCAnR1JBRElFTlQnID0gJ1NPTElEJztcclxuXHJcbiAgc2F2ZWRTZWxlY3Rpb246IGFueSA9IG51bGw7XHJcblxyXG4gIGlzRm9udFNpemVNZW51T3BlbiA9IGZhbHNlO1xyXG5cclxuICB0b29sYmFyRGF0YTogYW55ID0ge1xyXG4gICAgc2VsZWN0ZWRTaXplOiAnJ1xyXG4gIH07XHJcblxyXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZWRpdGFibGUgJiZcclxuICAgICAgaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKVxyXG4gICAgKSB7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVFZGl0b3IoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmVkaXRvciAmJlxyXG4gICAgICBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpXHJcbiAgICApIHtcclxuXHJcbiAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTtcclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5pdGlhbGl6ZUVkaXRvcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBpZiAoIXRoaXMuZWRpdG9yRWxlbWVudClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIC8vIGR5bmFtaWMgaW1wb3J0cyBmb3IgU1NSIHNhZmV0eVxyXG4gICAgY29uc3QgeyBFZGl0b3IgfSA9XHJcbiAgICAgIGF3YWl0IGltcG9ydCgnQHRpcHRhcC9jb3JlJyk7XHJcblxyXG4gICAgY29uc3QgU3RhcnRlcktpdCA9XHJcbiAgICAgIChhd2FpdCBpbXBvcnQoJ0B0aXB0YXAvc3RhcnRlci1raXQnKSkuZGVmYXVsdDtcclxuXHJcbiAgICBjb25zdCBUZXh0U3R5bGUgPVxyXG4gICAgICAoYXdhaXQgaW1wb3J0KCdAdGlwdGFwL2V4dGVuc2lvbi10ZXh0LXN0eWxlJykpXHJcbiAgICAgICAgLlRleHRTdHlsZTtcclxuXHJcbiAgICBjb25zdCBDb2xvciA9XHJcbiAgICAgIChhd2FpdCBpbXBvcnQoJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvbG9yJykpXHJcbiAgICAgICAgLmRlZmF1bHQ7XHJcblxyXG4gICAgY29uc3QgVW5kZXJsaW5lID1cclxuICAgICAgKGF3YWl0IGltcG9ydCgnQHRpcHRhcC9leHRlbnNpb24tdW5kZXJsaW5lJykpXHJcbiAgICAgICAgLmRlZmF1bHQ7XHJcblxyXG4gICAgY29uc3QgVGV4dEFsaWduID1cclxuICAgICAgKGF3YWl0IGltcG9ydCgnQHRpcHRhcC9leHRlbnNpb24tdGV4dC1hbGlnbicpKVxyXG4gICAgICAgIC5kZWZhdWx0O1xyXG5cclxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XHJcblxyXG4gICAgICBlbGVtZW50OlxyXG4gICAgICAgIHRoaXMuZWRpdG9yRWxlbWVudC5uYXRpdmVFbGVtZW50LFxyXG5cclxuICAgICAgZWRpdG9yUHJvcHM6IHtcclxuXHJcbiAgICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgICAgY2xhc3M6ICdQcm9zZU1pcnJvcidcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9LFxyXG5cclxuICAgICAgZXh0ZW5zaW9uczogW1xyXG5cclxuICAgICAgICBTdGFydGVyS2l0LFxyXG5cclxuICAgICAgICBUZXh0U3R5bGUsXHJcblxyXG4gICAgICAgIEZvbnRTaXplLFxyXG5cclxuICAgICAgICBDb2xvcixcclxuXHJcbiAgICAgICAgR3JhZGllbnRFeHRlbnNpb24sXHJcblxyXG4gICAgICAgIFVuZGVybGluZSxcclxuXHJcbiAgICAgICAgVGV4dEFsaWduLmNvbmZpZ3VyZSh7XHJcbiAgICAgICAgICB0eXBlczogW1xyXG4gICAgICAgICAgICAnaGVhZGluZycsXHJcbiAgICAgICAgICAgICdwYXJhZ3JhcGgnLFxyXG4gICAgICAgICAgICAnbGlzdEl0ZW0nXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgXSxcclxuICAgICAgY29udGVudDogdGhpcy52YWx1ZSxcclxuXHJcbiAgICAgIG9uU2VsZWN0aW9uVXBkYXRlOiAoKSA9PiB7XHJcblxyXG4gICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0aW9uKCk7XHJcblxyXG4gICAgICB9LFxyXG5cclxuICAgICAgb25VcGRhdGU6ICh7IGVkaXRvciB9OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBodG1sID0gZWRpdG9yLmdldEhUTUwoKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gaHRtbDtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoaHRtbCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVFbXB0eUVkaXRvckNsYXNzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUVtcHR5RWRpdG9yQ2xhc3MoKTtcclxuXHJcbiAgfVxyXG5cclxuICB1cGRhdGVFbXB0eUVkaXRvckNsYXNzKCk6IHZvaWQge1xyXG5cclxuICAgIGlmICghdGhpcy5lZGl0b3JFbGVtZW50KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZWRpdG9yV3JhcHBlciA9XHJcbiAgICAgIHRoaXMuZWRpdG9yRWxlbWVudC5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgLmNsb3Nlc3QoJy5lZGl0YWJsZS10ZXh0Jyk7XHJcblxyXG4gICAgaWYgKCFlZGl0b3JXcmFwcGVyKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMuZWRpdG9yPy5pc0VtcHR5KSB7XHJcblxyXG4gICAgICBlZGl0b3JXcmFwcGVyLmNsYXNzTGlzdC5hZGQoXHJcbiAgICAgICAgJ2VkaXRvci1lbXB0eSdcclxuICAgICAgKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgZWRpdG9yV3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKFxyXG4gICAgICAgICdlZGl0b3ItZW1wdHknXHJcbiAgICAgICk7XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHNhdmVTZWxlY3Rpb24oKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zYXZlZFNlbGVjdGlvbiA9XHJcbiAgICAgIHRoaXMuZWRpdG9yLnN0YXRlLnNlbGVjdGlvbjtcclxuXHJcbiAgfVxyXG5cclxuICByZXN0b3JlU2VsZWN0aW9uKCk6IHZvaWQge1xyXG5cclxuICAgIGlmICghdGhpcy5zYXZlZFNlbGVjdGlvbilcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZWRpdG9yXHJcbiAgICAgIC5jaGFpbigpXHJcbiAgICAgIC5mb2N1cygpXHJcbiAgICAgIC5zZXRUZXh0U2VsZWN0aW9uKFxyXG4gICAgICAgIHRoaXMuc2F2ZWRTZWxlY3Rpb25cclxuICAgICAgKVxyXG4gICAgICAucnVuKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgc3dpdGNoVG9Tb2xpZChldmVudDogRXZlbnQpOiB2b2lkIHtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIHRoaXMuc2F2ZVNlbGVjdGlvbigpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDb2xvclR5cGUgPSAnU09MSUQnO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uKCk7XHJcblxyXG4gICAgICB0aGlzLnNob3dUb29sYmFyID0gdHJ1ZTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBzd2l0Y2hUb0dyYWRpZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG5cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbG9yVHlwZSA9ICdHUkFESUVOVCc7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb24oKTtcclxuXHJcbiAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSB0cnVlO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG9wZW5Db2xvclBpY2tlcigpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmlzQ29sb3JQaWNrZXJPcGVuID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnNhdmVTZWxlY3Rpb24oKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICdmb2N1cycsXHJcbiAgICAgICAgdGhpcy5oYW5kbGVXaW5kb3dGb2N1cyxcclxuICAgICAgICB7IG9uY2U6IHRydWUgfVxyXG4gICAgICApO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIGhhbmRsZVdpbmRvd0ZvY3VzID0gKCk6IHZvaWQgPT4ge1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5pc0NvbG9yUGlja2VyT3BlbiA9IGZhbHNlO1xyXG5cclxuICAgIH0sIDMwMCk7XHJcblxyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2VsZWN0aW9uKCk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IHsgZnJvbSwgdG8gfSA9XHJcbiAgICAgIHRoaXMuZWRpdG9yLnN0YXRlLnNlbGVjdGlvbjtcclxuXHJcbiAgICBpZiAoZnJvbSA9PT0gdG8pIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5pc0NvbG9yUGlja2VyT3Blbikge1xyXG5cclxuICAgICAgICB0aGlzLnNob3dUb29sYmFyID0gZmFsc2U7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9XHJcbiAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFzZWxlY3Rpb24gfHxcclxuICAgICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDBcclxuICAgICkge1xyXG5cclxuICAgICAgdGhpcy5zaG93VG9vbGJhciA9IGZhbHNlO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByYW5nZSA9XHJcbiAgICAgIHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG5cclxuICAgIGNvbnN0IHJlY3QgPVxyXG4gICAgICByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICBjb25zdCBlZGl0b3JSZWN0ID1cclxuICAgICAgdGhpcy5lZGl0b3JFbGVtZW50Lm5hdGl2ZUVsZW1lbnRcclxuICAgICAgICAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgdGhpcy5zaG93VG9vbGJhciA9IHRydWU7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICBjb25zdCB0b29sYmFyID1cclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgJy50b29sYmFyJ1xyXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgICBpZiAoIXRvb2xiYXIpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgdG9vbGJhcldpZHRoID1cclxuICAgICAgICB0b29sYmFyLm9mZnNldFdpZHRoO1xyXG5cclxuICAgICAgbGV0IGxlZnQgPVxyXG4gICAgICAgIHJlY3QubGVmdCAtXHJcbiAgICAgICAgZWRpdG9yUmVjdC5sZWZ0ICtcclxuICAgICAgICAocmVjdC53aWR0aCAvIDIpIC1cclxuICAgICAgICAodG9vbGJhcldpZHRoIC8gMik7XHJcblxyXG4gICAgICBsZWZ0ID0gTWF0aC5tYXgoMTAsIGxlZnQpO1xyXG5cclxuICAgICAgY29uc3QgbWF4TGVmdCA9XHJcbiAgICAgICAgZWRpdG9yUmVjdC53aWR0aCAtXHJcbiAgICAgICAgdG9vbGJhcldpZHRoIC1cclxuICAgICAgICAxMDtcclxuXHJcbiAgICAgIGxlZnQgPSBNYXRoLm1pbihsZWZ0LCBtYXhMZWZ0KTtcclxuXHJcbiAgICAgIGxlZnQgPSBNYXRoLm1heCgxMCwgbGVmdCk7XHJcblxyXG4gICAgICB0aGlzLnRvb2xiYXJYID0gbGVmdDtcclxuXHJcbiAgICAgIHRoaXMudG9vbGJhclkgPVxyXG4gICAgICAgIHJlY3QuYm90dG9tIC1cclxuICAgICAgICBlZGl0b3JSZWN0LnRvcCArXHJcbiAgICAgICAgMTA7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQm9sZCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmVkaXRvclxyXG4gICAgICAuY2hhaW4oKVxyXG4gICAgICAuZm9jdXMoKVxyXG4gICAgICAudG9nZ2xlQm9sZCgpXHJcbiAgICAgIC5ydW4oKTtcclxuXHJcbiAgfVxyXG5cclxuICB0b2dnbGVJdGFsaWMoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5lZGl0b3JcclxuICAgICAgLmNoYWluKClcclxuICAgICAgLmZvY3VzKClcclxuICAgICAgLnRvZ2dsZUl0YWxpYygpXHJcbiAgICAgIC5ydW4oKTtcclxuXHJcbiAgfVxyXG5cclxuICB0b2dnbGVVbmRlcmxpbmUoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5lZGl0b3JcclxuICAgICAgLmNoYWluKClcclxuICAgICAgLmZvY3VzKClcclxuICAgICAgLnRvZ2dsZVVuZGVybGluZSgpXHJcbiAgICAgIC5ydW4oKTtcclxuXHJcbiAgfVxyXG5cclxuICB0b2dnbGVPcmRlcmVkTGlzdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmVkaXRvclxyXG4gICAgICAuY2hhaW4oKVxyXG4gICAgICAuZm9jdXMoKVxyXG4gICAgICAudG9nZ2xlT3JkZXJlZExpc3QoKVxyXG4gICAgICAucnVuKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQnVsbGV0TGlzdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmVkaXRvclxyXG4gICAgICAuY2hhaW4oKVxyXG4gICAgICAuZm9jdXMoKVxyXG4gICAgICAudG9nZ2xlQnVsbGV0TGlzdCgpXHJcbiAgICAgIC5ydW4oKTtcclxuXHJcbiAgfVxyXG5cclxuICBzZXRBbGlnbihcclxuICAgIGFsaWdubWVudDpcclxuICAgICAgJ2xlZnQnIHxcclxuICAgICAgJ2NlbnRlcicgfFxyXG4gICAgICAncmlnaHQnXHJcbiAgKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5lZGl0b3JcclxuICAgICAgLmNoYWluKClcclxuICAgICAgLmZvY3VzKClcclxuICAgICAgLnNldFRleHRBbGlnbihhbGlnbm1lbnQpXHJcbiAgICAgIC5ydW4oKTtcclxuXHJcbiAgfVxyXG5cclxuICBjaGFuZ2VDb2xvcigpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb24oKTtcclxuXHJcbiAgICBjb25zdCB7IGZyb20sIHRvIH0gPVxyXG4gICAgICB0aGlzLmVkaXRvci5zdGF0ZS5zZWxlY3Rpb247XHJcblxyXG4gICAgaWYgKGZyb20gPT09IHRvKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZXhpc3RpbmdTdHlsZXMgPVxyXG4gICAgICB0aGlzLmVkaXRvci5nZXRBdHRyaWJ1dGVzKFxyXG4gICAgICAgICd0ZXh0U3R5bGUnXHJcbiAgICAgICk7XHJcblxyXG4gICAgdGhpcy5lZGl0b3JcclxuICAgICAgLmNoYWluKClcclxuICAgICAgLmZvY3VzKClcclxuICAgICAgLnNldFRleHRTZWxlY3Rpb24oe1xyXG4gICAgICAgIGZyb20sXHJcbiAgICAgICAgdG9cclxuICAgICAgfSlcclxuICAgICAgLnNldE1hcmsoJ3RleHRTdHlsZScsIHtcclxuXHJcbiAgICAgICAgLi4uZXhpc3RpbmdTdHlsZXMsXHJcblxyXG4gICAgICAgIGNvbG9yOlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbG9yLFxyXG5cclxuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IG51bGwsXHJcblxyXG4gICAgICAgIFdlYmtpdEJhY2tncm91bmRDbGlwOiBudWxsLFxyXG5cclxuICAgICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiBudWxsXHJcblxyXG4gICAgICB9KVxyXG4gICAgICAucnVuKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgYXBwbHlHcmFkaWVudCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb24oKTtcclxuXHJcbiAgICBjb25zdCB7IGZyb20sIHRvIH0gPVxyXG4gICAgICB0aGlzLmVkaXRvci5zdGF0ZS5zZWxlY3Rpb247XHJcblxyXG4gICAgaWYgKGZyb20gPT09IHRvKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZXhpc3RpbmdTdHlsZXMgPVxyXG4gICAgICB0aGlzLmVkaXRvci5nZXRBdHRyaWJ1dGVzKFxyXG4gICAgICAgICd0ZXh0U3R5bGUnXHJcbiAgICAgICk7XHJcblxyXG4gICAgY29uc3QgZ3JhZGllbnQgPSBgXHJcbiAgICAgIGxpbmVhci1ncmFkaWVudChcclxuICAgICAgICB0byByaWdodCxcclxuICAgICAgICAke3RoaXMucHJpbWFyeUNvbG9yfSxcclxuICAgICAgICAke3RoaXMuc2Vjb25kYXJ5Q29sb3J9XHJcbiAgICAgIClcclxuICAgIGA7XHJcblxyXG4gICAgdGhpcy5lZGl0b3JcclxuICAgICAgLmNoYWluKClcclxuICAgICAgLmZvY3VzKClcclxuICAgICAgLnNldFRleHRTZWxlY3Rpb24oe1xyXG4gICAgICAgIGZyb20sXHJcbiAgICAgICAgdG9cclxuICAgICAgfSlcclxuICAgICAgLnNldE1hcmsoJ3RleHRTdHlsZScsIHtcclxuXHJcbiAgICAgICAgLi4uZXhpc3RpbmdTdHlsZXMsXHJcblxyXG4gICAgICAgIGJhY2tncm91bmRJbWFnZTpcclxuICAgICAgICAgIGdyYWRpZW50LFxyXG5cclxuICAgICAgICBiYWNrZ3JvdW5kQ2xpcDpcclxuICAgICAgICAgICd0ZXh0JyxcclxuXHJcbiAgICAgICAgV2Via2l0QmFja2dyb3VuZENsaXA6XHJcbiAgICAgICAgICAndGV4dCcsXHJcblxyXG4gICAgICAgIGNvbG9yOlxyXG4gICAgICAgICAgJ3RyYW5zcGFyZW50JyxcclxuXHJcbiAgICAgICAgV2Via2l0VGV4dEZpbGxDb2xvcjpcclxuICAgICAgICAgICd0cmFuc3BhcmVudCdcclxuXHJcbiAgICAgIH0pXHJcbiAgICAgIC5ydW4oKTtcclxuXHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKFxyXG4gICAgJ2RvY3VtZW50Om1vdXNlZG93bidcclxuICApXHJcblxyXG4gIG9uTW91c2VEb3duKCk6IHZvaWQge1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmVkaXRvcilcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCB7IGZyb20sIHRvIH0gPVxyXG4gICAgICAgIHRoaXMuZWRpdG9yLnN0YXRlLnNlbGVjdGlvbjtcclxuXHJcbiAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPVxyXG4gICAgICAgIGZyb20gIT09IHRvO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHRvZ2dsZUZvbnRTaXplTWVudShcclxuICAgIGV2ZW50OiBFdmVudFxyXG4gICk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuaXNGb250U2l6ZU1lbnVPcGVuID1cclxuICAgICAgIXRoaXMuaXNGb250U2l6ZU1lbnVPcGVuO1xyXG5cclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICB9XHJcblxyXG4gIGdldERpc3BsYXlGb250U2l6ZSgpOiBzdHJpbmcge1xyXG5cclxuICAgIGNvbnN0IHNpemUgPVxyXG4gICAgICB0aGlzLmVkaXRvclxyXG4gICAgICAgID8uZ2V0QXR0cmlidXRlcyhcclxuICAgICAgICAgICd0ZXh0U3R5bGUnXHJcbiAgICAgICAgKVxyXG4gICAgICA/LlsnZm9udFNpemUnXTtcclxuXHJcbiAgICBpZiAoIXNpemUpXHJcbiAgICAgIHJldHVybiAnMTYnO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgc2l6ZS5pbmNsdWRlcygnMC43NXJlbScpXHJcbiAgICApXHJcbiAgICAgIHJldHVybiAnMTQnO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgc2l6ZS5pbmNsdWRlcygnMXJlbSwgM3Z3JylcclxuICAgIClcclxuICAgICAgcmV0dXJuICcyMCc7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBzaXplLmluY2x1ZGVzKCcxLjI1cmVtJylcclxuICAgIClcclxuICAgICAgcmV0dXJuICcyNCc7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBzaXplLmluY2x1ZGVzKCcycmVtJylcclxuICAgIClcclxuICAgICAgcmV0dXJuICczMic7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBzaXplLmluY2x1ZGVzKCczLjFyZW0nKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm4gJzQ4JztcclxuXHJcbiAgICByZXR1cm4gJzE2JztcclxuXHJcbiAgfVxyXG5cclxuICBzZWxlY3RDdXN0b21Gb250U2l6ZShcclxuICAgIGNzc1NpemU6IHN0cmluZyxcclxuICAgIGV2ZW50OiBFdmVudFxyXG4gICk6IHZvaWQge1xyXG5cclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIHRoaXMuY2hhbmdlRm9udFNpemUoY3NzU2l6ZSk7XHJcblxyXG4gICAgdGhpcy5pc0ZvbnRTaXplTWVudU9wZW4gPVxyXG4gICAgICBmYWxzZTtcclxuXHJcbiAgfVxyXG5cclxuICBjaGFuZ2VGb250U2l6ZShcclxuICAgIGZvbnRTaXplOiBzdHJpbmdcclxuICApOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkRm9udFNpemUgPVxyXG4gICAgICBmb250U2l6ZTtcclxuXHJcbiAgICBjb25zdCB7IGZyb20sIHRvIH0gPVxyXG4gICAgICB0aGlzLmVkaXRvci5zdGF0ZS5zZWxlY3Rpb247XHJcblxyXG4gICAgaWYgKGZyb20gPT09IHRvKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgdGhpcy5lZGl0b3JcclxuICAgICAgLmNoYWluKClcclxuICAgICAgLmZvY3VzKClcclxuICAgICAgLnNldFRleHRTZWxlY3Rpb24oe1xyXG4gICAgICAgIGZyb20sXHJcbiAgICAgICAgdG9cclxuICAgICAgfSlcclxuICAgICAgLnNldE1hcmsoXHJcbiAgICAgICAgJ3RleHRTdHlsZScsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZm9udFNpemVcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICAgLnJ1bigpO1xyXG5cclxuICB9XHJcblxyXG59IiwiPCEtLSB0ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCAtLT5cclxuXHJcbjxkaXYgY2xhc3M9XCJlZGl0b3ItY29udGFpbmVyXCIgKm5nSWY9XCJlZGl0YWJsZTsgZWxzZSB2aWV3TW9kZVwiPlxyXG5cclxuICA8IS0tIEZMT0FUSU5HIFRPT0xCQVIgLS0+XHJcbiAgPGRpdiBjbGFzcz1cInRvb2xiYXJcIiAqbmdJZj1cInNob3dUb29sYmFyXCIgW3N0eWxlLnRvcC5weF09XCJ0b29sYmFyWVwiIFtzdHlsZS5sZWZ0LnB4XT1cInRvb2xiYXJYXCIgY2RrRHJhZz5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIGRyYWctaGFuZGxlIHctYXV0b1wiIGNka0RyYWdIYW5kbGU+XHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgY2xhc3M9XCJsdWNpZGUgbHVjaWRlLWdyaXAtdmVydGljYWxcIj5cclxuICAgICAgICA8Y2lyY2xlIGN4PVwiOVwiIGN5PVwiMTJcIiByPVwiMVwiIC8+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjlcIiBjeT1cIjVcIiByPVwiMVwiIC8+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjlcIiBjeT1cIjE5XCIgcj1cIjFcIiAvPlxyXG4gICAgICAgIDxjaXJjbGUgY3g9XCIxNVwiIGN5PVwiMTJcIiByPVwiMVwiIC8+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjE1XCIgY3k9XCI1XCIgcj1cIjFcIiAvPlxyXG4gICAgICAgIDxjaXJjbGUgY3g9XCIxNVwiIGN5PVwiMTlcIiByPVwiMVwiIC8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZvbnQtc2l6ZS1maWVsZFwiPlxyXG5cclxuICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cInNlbGVjdGVkRm9udFNpemVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cImNoYW5nZUZvbnRTaXplKCRldmVudC52YWx1ZSlcIiBkaXNhYmxlT3B0aW9uQ2VudGVyaW5nPlxyXG5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlwiPlxyXG4gICAgICAgICAgRGVmYXVsdFxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuXHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJjbGFtcCgwLjc1cmVtLCAydncsIDFyZW0pXCI+XHJcbiAgICAgICAgICAxNFxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuXHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJjbGFtcCgwLjc1cmVtLCAydncsIDEuMjVyZW0pXCI+XHJcbiAgICAgICAgICAxNlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuXHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJjbGFtcCgxcmVtLCAzdncsIDEuNXJlbSlcIj5cclxuICAgICAgICAgIDIwXHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cImNsYW1wKDEuMjVyZW0sIDR2dywgMnJlbSlcIj5cclxuICAgICAgICAgIDI0XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiY2xhbXAoMnJlbSwgNXZ3LCAzcmVtKVwiPlxyXG4gICAgICAgICAgMzJcclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJjbGFtcCgzLjFyZW0sIDd2dywgNC41cmVtKVwiPlxyXG4gICAgICAgICAgNDhcclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuXHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPCEtLSBCT0xEIC0tPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2wgdy1hdXRvXCIgW2NsYXNzLnNlbGVjdGVkVG9vbF09XCJlZGl0b3I/LmlzQWN0aXZlKCdib2xkJylcIiAoY2xpY2spPVwidG9nZ2xlQm9sZCgpXCI+XHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgY2xhc3M9XCJsdWNpZGUgbHVjaWRlLWJvbGRcIj5cclxuICAgICAgICA8cGF0aCBkPVwiTTYgMTJoOWE0IDQgMCAwIDEgMCA4SDdhMSAxIDAgMCAxLTEtMVY1YTEgMSAwIDAgMSAxLTFoN2E0IDQgMCAwIDEgMCA4XCIgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8IS0tIElUQUxJQyAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIHctYXV0b1wiIFtjbGFzcy5zZWxlY3RlZFRvb2xdPVwiZWRpdG9yPy5pc0FjdGl2ZSgnaXRhbGljJylcIiAoY2xpY2spPVwidG9nZ2xlSXRhbGljKClcIj5cclxuXHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgY2xhc3M9XCJsdWNpZGUgbHVjaWRlLWl0YWxpY1wiPlxyXG4gICAgICAgIDxsaW5lIHgxPVwiMTlcIiB4Mj1cIjEwXCIgeTE9XCI0XCIgeTI9XCI0XCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjE0XCIgeDI9XCI1XCIgeTE9XCIyMFwiIHkyPVwiMjBcIiAvPlxyXG4gICAgICAgIDxsaW5lIHgxPVwiMTVcIiB4Mj1cIjlcIiB5MT1cIjRcIiB5Mj1cIjIwXCIgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8IS0tIFVOREVSTElORSAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIHctYXV0b1wiIFtjbGFzcy5zZWxlY3RlZFRvb2xdPVwiZWRpdG9yPy5pc0FjdGl2ZSgndW5kZXJsaW5lJylcIiAoY2xpY2spPVwidG9nZ2xlVW5kZXJsaW5lKClcIj5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICBjbGFzcz1cImx1Y2lkZSBsdWNpZGUtdW5kZXJsaW5lXCI+XHJcbiAgICAgICAgPHBhdGggZD1cIk02IDR2NmE2IDYgMCAwIDAgMTIgMFY0XCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjRcIiB4Mj1cIjIwXCIgeTE9XCIyMFwiIHkyPVwiMjBcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gQUxJR04gTEVGVCAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIHctYXV0b1wiIChjbGljayk9XCJzZXRBbGlnbignbGVmdCcpXCI+XHJcblxyXG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgIGNsYXNzPVwibHVjaWRlIGx1Y2lkZS1hbGlnbi1sZWZ0XCI+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIyMVwiIHgyPVwiM1wiIHkxPVwiNlwiIHkyPVwiNlwiIC8+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIxNVwiIHgyPVwiM1wiIHkxPVwiMTJcIiB5Mj1cIjEyXCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjE3XCIgeDI9XCIzXCIgeTE9XCIxOFwiIHkyPVwiMThcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gQUxJR04gQ0VOVEVSIC0tPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2wgdy1hdXRvXCIgKGNsaWNrKT1cInNldEFsaWduKCdjZW50ZXInKVwiPlxyXG5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICBjbGFzcz1cImx1Y2lkZSBsdWNpZGUtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIyMVwiIHgyPVwiM1wiIHkxPVwiNlwiIHkyPVwiNlwiIC8+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIxN1wiIHgyPVwiN1wiIHkxPVwiMTJcIiB5Mj1cIjEyXCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjE5XCIgeDI9XCI1XCIgeTE9XCIxOFwiIHkyPVwiMThcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gQUxJR04gUklHSFQgLS0+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbCB3LWF1dG9cIiAoY2xpY2spPVwic2V0QWxpZ24oJ3JpZ2h0JylcIj5cclxuXHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgY2xhc3M9XCJsdWNpZGUgbHVjaWRlLWFsaWduLXJpZ2h0XCI+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIyMVwiIHgyPVwiM1wiIHkxPVwiNlwiIHkyPVwiNlwiIC8+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIyMVwiIHgyPVwiOVwiIHkxPVwiMTJcIiB5Mj1cIjEyXCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjIxXCIgeDI9XCI3XCIgeTE9XCIxOFwiIHkyPVwiMThcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gT1JERVJFRCBMSVNUIC0tPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2wgdy1hdXRvXCIgKGNsaWNrKT1cInRvZ2dsZU9yZGVyZWRMaXN0KClcIj5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICBjbGFzcz1cImx1Y2lkZSBsdWNpZGUtbGlzdC1vcmRlcmVkXCI+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIxMFwiIHgyPVwiMjFcIiB5MT1cIjZcIiB5Mj1cIjZcIiAvPlxyXG4gICAgICAgIDxsaW5lIHgxPVwiMTBcIiB4Mj1cIjIxXCIgeTE9XCIxMlwiIHkyPVwiMTJcIiAvPlxyXG4gICAgICAgIDxsaW5lIHgxPVwiMTBcIiB4Mj1cIjIxXCIgeTE9XCIxOFwiIHkyPVwiMThcIiAvPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNNCA2aDF2NFwiIC8+XHJcbiAgICAgICAgPHBhdGggZD1cIk00IDEwaDJcIiAvPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNNiAxOEg0YzAtMSAyLTIgMi0zcy0xLTEuNS0yLTFcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPCEtLSBCVUxMRVQgTElTVCAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIHctYXV0b1wiIChjbGljayk9XCJ0b2dnbGVCdWxsZXRMaXN0KClcIj5cclxuXHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgY2xhc3M9XCJsdWNpZGUgbHVjaWRlLWxpc3RcIj5cclxuICAgICAgICA8bGluZSB4MT1cIjhcIiB4Mj1cIjIxXCIgeTE9XCI2XCIgeTI9XCI2XCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjhcIiB4Mj1cIjIxXCIgeTE9XCIxMlwiIHkyPVwiMTJcIiAvPlxyXG4gICAgICAgIDxsaW5lIHgxPVwiOFwiIHgyPVwiMjFcIiB5MT1cIjE4XCIgeTI9XCIxOFwiIC8+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIzXCIgeDI9XCIzLjAxXCIgeTE9XCI2XCIgeTI9XCI2XCIgLz5cclxuICAgICAgICA8bGluZSB4MT1cIjNcIiB4Mj1cIjMuMDFcIiB5MT1cIjEyXCIgeTI9XCIxMlwiIC8+XHJcbiAgICAgICAgPGxpbmUgeDE9XCIzXCIgeDI9XCIzLjAxXCIgeTE9XCIxOFwiIHkyPVwiMThcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gU09MSUQgLyBHUkFESUVOVCAtLT5cclxuICAgIDwhLS0gU09MSUQgLyBHUkFESUVOVCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xvclR5cGVcIj5cclxuXHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJzb2xpZCB3LWF1dG9cIiBbY2xhc3Muc29saWRDb2xvclNlbGVjdGVkXT1cInNlbGVjdGVkQ29sb3JUeXBlID09PSAnU09MSUQnXCJcclxuICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgKGNsaWNrKT1cInN3aXRjaFRvU29saWQoJGV2ZW50KVwiPlxyXG4gICAgICAgIFNvbGlkXHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImdyYWRpZW50IHctYXV0b1wiIFtjbGFzcy5ncmFkaWVudENvbG9yU2VsZWN0ZWRdPVwic2VsZWN0ZWRDb2xvclR5cGUgPT09ICdHUkFESUVOVCdcIlxyXG4gICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAoY2xpY2spPVwic3dpdGNoVG9HcmFkaWVudCgkZXZlbnQpXCI+XHJcbiAgICAgICAgR3JhZGllbnRcclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBTT0xJRCBDT0xPUiAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIGNvbG9yLXBpY2tlci1idG4gdy1hdXRvXCIgKm5nSWY9XCJzZWxlY3RlZENvbG9yVHlwZSA9PT0gJ1NPTElEJ1wiPlxyXG5cclxuICAgICAgPG1hdC1pY29uPmZvcm1hdF9jb2xvcl90ZXh0PC9tYXQtaWNvbj5cclxuXHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBjbGFzcz1cImhpZGRlbi1jb2xvci1waWNrZXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29sb3JcIiAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKClcIlxyXG4gICAgICAgIChpbnB1dCk9XCJjaGFuZ2VDb2xvcigpXCI+XHJcblxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPCEtLSBHUkFESUVOVCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJncmFkaWVudC1waWNrZXJcIiAqbmdJZj1cInNlbGVjdGVkQ29sb3JUeXBlID09PSAnR1JBRElFTlQnXCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBbKG5nTW9kZWwpXT1cInByaW1hcnlDb2xvclwiIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoKVwiIChpbnB1dCk9XCJhcHBseUdyYWRpZW50KClcIiAvPlxyXG5cclxuICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIFsobmdNb2RlbCldPVwic2Vjb25kYXJ5Q29sb3JcIiAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKClcIiAoaW5wdXQpPVwiYXBwbHlHcmFkaWVudCgpXCIgLz5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gVElQVEFQIEVESVRPUiAtLT5cclxuICA8ZGl2ICNlZGl0b3JDb250YWluZXIgY2xhc3M9XCJlZGl0YWJsZS10ZXh0XCI+XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlICN2aWV3TW9kZT5cclxuICA8ZGl2IGNsYXNzPVwicmVhZC1vbmx5LXRleHRcIiBbaW5uZXJIVE1MXT1cInZhbHVlXCI+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19