ngx-histaff-alpha 2.5.6 → 2.5.7

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 { Component, Input, ViewChild } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, Input, ViewChild, effect, input } from '@angular/core';
2
2
  import * as d3 from 'd3';
3
3
  import * as i0 from "@angular/core";
4
4
  export var EnumHrComparisonCode;
@@ -14,8 +14,11 @@ export var EnumICoreStatisticWidgetDataType;
14
14
  })(EnumICoreStatisticWidgetDataType || (EnumICoreStatisticWidgetDataType = {}));
15
15
  export class CoreStatisticWidgetComponent {
16
16
  constructor() {
17
- this.value = undefined;
18
- this.comparisonValue = 0.54;
17
+ this.metric = input.required();
18
+ this.dataset = input.required();
19
+ this.value = input.required();
20
+ this.comparisonValue = input.required();
21
+ this.innerGroupBackgroundColor = input('transparent');
19
22
  this.margin = { top: 30, right: 30, bottom: 30, left: 30 };
20
23
  this.padding = { top: 30, right: 30, bottom: 30, left: 30 };
21
24
  this.outerWidth = 320;
@@ -55,6 +58,13 @@ export class CoreStatisticWidgetComponent {
55
58
  this.yAxisCall = d3.axisLeft(this.y)
56
59
  .tickSizeInner(10) // Adjust the length of the ticks as needed
57
60
  .tickSizeOuter(10); // Hide outer ticks
61
+ effect(() => {
62
+ this.updateMetricName();
63
+ this.updateMetricValue();
64
+ this.updateMetricComparisonValue();
65
+ this.updateMetricComparisonText();
66
+ this.updateDataset();
67
+ });
58
68
  }
59
69
  ngOnChanges(changes) {
60
70
  if (!!changes['metric']) {
@@ -74,14 +84,14 @@ export class CoreStatisticWidgetComponent {
74
84
  }
75
85
  }
76
86
  updateMetricName() {
77
- var nameElement = d3.select("#metric_" + this.metric.id + "_name");
78
- nameElement.transition().text(this.metric.name);
87
+ var nameElement = d3.select("#metric_" + this.metric().id + "_name");
88
+ nameElement.transition().text(this.metric().name);
79
89
  }
80
90
  updateMetricValue() {
81
- var valueElement = d3.select("#metric_" + this.metric.id + "_value");
91
+ var valueElement = d3.select("#metric_" + this.metric().id + "_value");
82
92
  const start = this.previousValue || undefined;
83
- const end = this.value || undefined;
84
- switch (this.metric.dataType) {
93
+ const end = this.value() || undefined;
94
+ switch (this.metric().dataType) {
85
95
  case EnumICoreStatisticWidgetDataType.INTEGER:
86
96
  valueElement
87
97
  .transition()
@@ -140,22 +150,22 @@ export class CoreStatisticWidgetComponent {
140
150
  .duration(500);
141
151
  break;
142
152
  default:
143
- valueElement.transition().text((this.value || 'N/A').toString());
153
+ valueElement.transition().text((this.value() || 'N/A').toString());
144
154
  break;
145
155
  }
146
- this.previousValue = this.value;
156
+ this.previousValue = this.value();
147
157
  }
148
158
  updateMetricComparisonValue() {
149
159
  const start = this.previousComparisonValue;
150
- const end = this.comparisonValue;
151
- var comparisonValueElement = d3.select("#metric_" + this.metric.id + "_comparisonValue");
152
- comparisonValueElement.attr("fill", (this.comparisonValue || 0) >= 0 ? this.comparisonTextFillColor : d3.color("red"));
153
- switch (this.metric.dataType) {
160
+ const end = this.comparisonValue();
161
+ var comparisonValueElement = d3.select("#metric_" + this.metric().id + "_comparisonValue");
162
+ comparisonValueElement.attr("fill", (this.comparisonValue() || 0) >= 0 ? this.comparisonTextFillColor : d3.color("red"));
163
+ switch (this.metric().dataType) {
154
164
  case EnumICoreStatisticWidgetDataType.INTEGER:
155
165
  comparisonValueElement
156
166
  .transition()
157
167
  .tween("text", () => {
158
- if (!!this.value && !!start && !!end) {
168
+ if (!!this.value() && !!start && !!end) {
159
169
  const interpolator = d3.interpolateNumber(start, end);
160
170
  return t => {
161
171
  comparisonValueElement.text(Math.round(interpolator(t)));
@@ -171,7 +181,7 @@ export class CoreStatisticWidgetComponent {
171
181
  comparisonValueElement
172
182
  .transition()
173
183
  .tween("text", () => {
174
- if (!!this.value && !!start && !!end) {
184
+ if (!!this.value() && !!start && !!end) {
175
185
  const interpolator = d3.interpolateNumber(start, end);
176
186
  return t => {
177
187
  comparisonValueElement.text(Math.round(interpolator(t) * 100) / 100);
@@ -187,7 +197,7 @@ export class CoreStatisticWidgetComponent {
187
197
  comparisonValueElement
188
198
  .transition()
189
199
  .tween("text", () => {
190
- if (!!this.value && !!start && !!end) {
200
+ if (!!this.value() && !!start && !!end) {
191
201
  const interpolator = d3.interpolateNumber(start, end);
192
202
  return t => {
193
203
  comparisonValueElement.text(Math.round(interpolator(t) * 10000) / 100 + "%");
@@ -200,13 +210,13 @@ export class CoreStatisticWidgetComponent {
200
210
  .duration(500);
201
211
  break;
202
212
  default:
203
- comparisonValueElement.transition().text((this.comparisonValue || 'N/A').toString());
213
+ comparisonValueElement.transition().text((this.comparisonValue() || 'N/A').toString());
204
214
  break;
205
215
  }
206
216
  }
207
217
  updateMetricComparisonText() {
208
- var comparisonTextElement = d3.select("#metric_" + this.metric.id + "_comparisonText");
209
- switch (this.metric.comparisonCode) {
218
+ var comparisonTextElement = d3.select("#metric_" + this.metric().id + "_comparisonText");
219
+ switch (this.metric().comparisonCode) {
210
220
  case EnumHrComparisonCode.WITH_PREVIOUS_MONTH:
211
221
  comparisonTextElement.text("vs. previous month");
212
222
  break;
@@ -219,11 +229,11 @@ export class CoreStatisticWidgetComponent {
219
229
  }
220
230
  }
221
231
  updateDataset() {
222
- const minPoint = this.dataset.reduce((min, current) => current.y < min.y ? current : min);
223
- const maxPoint = this.dataset.reduce((max, current) => current.y > max.y ? current : max);
232
+ const minPoint = this.dataset().reduce((min, current) => current.y < min.y ? current : min);
233
+ const maxPoint = this.dataset().reduce((max, current) => current.y > max.y ? current : max);
224
234
  // Update scales
225
235
  const xScale = d3.scaleLinear()
226
- .domain([0, d3.max(this.dataset, (d) => d.x)])
236
+ .domain([0, d3.max(this.dataset(), (d) => d.x)])
227
237
  .range([0, this.graphWidth]);
228
238
  const yScale = d3.scaleLinear()
229
239
  .domain([minPoint.y, maxPoint.y])
@@ -241,15 +251,15 @@ export class CoreStatisticWidgetComponent {
241
251
  this.connectingLine = d3.line()
242
252
  .x((d) => xScale(d.x))
243
253
  .y((d) => yScale(d.y))
244
- .defined((d, i) => i >= 0 && i < this.dataset.length);
245
- d3.select("#metric_" + this.metric.id + "_scatter-plot").select("path")
246
- .datum(this.dataset)
254
+ .defined((d, i) => i >= 0 && i < this.dataset().length);
255
+ d3.select("#metric_" + this.metric().id + "_scatter-plot").select("path")
256
+ .datum(this.dataset())
247
257
  .transition()
248
258
  .duration(500)
249
259
  .attr("d", this.connectingLine);
250
260
  // Update circles
251
- const circles = d3.select("#metric_" + this.metric.id + "_scatter-plot").selectAll("circle")
252
- .data(this.dataset);
261
+ const circles = d3.select("#metric_" + this.metric().id + "_scatter-plot").selectAll("circle")
262
+ .data(this.dataset());
253
263
  circles.exit().remove();
254
264
  circles.enter()
255
265
  .append("circle")
@@ -288,7 +298,7 @@ export class CoreStatisticWidgetComponent {
288
298
  .attr("transform", "translate(" + this.margin.left + "," + this.margin.top + ")");
289
299
  this.innerGroup.append("rect")
290
300
  .attr("class", "blue-rect")
291
- .attr("fill", "transparent")
301
+ .attr("fill", this.innerGroupBackgroundColor())
292
302
  .attr("width", this.innerWidth)
293
303
  .attr("height", this.innerHeight);
294
304
  this.greenGroup = this.innerGroup.append("g")
@@ -308,7 +318,7 @@ export class CoreStatisticWidgetComponent {
308
318
  .attr("width", this.titleRectWidth)
309
319
  .attr("height", this.titleRectHeight);
310
320
  this.titleGroup.append("text")
311
- .attr("id", "metric_" + this.metric.id + "_name")
321
+ .attr("id", "metric_" + this.metric().id + "_name")
312
322
  .attr("x", this.titleRectWidth / 2)
313
323
  .attr("y", this.titleRectHeight / 2)
314
324
  .attr("class", "graph-title")
@@ -316,7 +326,7 @@ export class CoreStatisticWidgetComponent {
316
326
  .attr("font-size", this.titleRectHeight)
317
327
  .attr("text-anchor", "middle")
318
328
  .attr("alignment-baseline", "middle")
319
- .text(this.metric.name);
329
+ .text(this.metric().name);
320
330
  this.greenGroup.append("line")
321
331
  .attr("x1", this.divisorLineMargin.left)
322
332
  .attr("y1", this.graphHeight * 2 / 3)
@@ -335,7 +345,7 @@ export class CoreStatisticWidgetComponent {
335
345
  .attr("width", this.valueRectWidth)
336
346
  .attr("height", this.valueRectHeight);
337
347
  this.valueText = this.valueGroup.append("text")
338
- .attr("id", "metric_" + this.metric.id + "_value")
348
+ .attr("id", "metric_" + this.metric().id + "_value")
339
349
  .attr("x", this.valueRectWidth / 2)
340
350
  .attr("y", this.valueRectHeight / 2)
341
351
  .attr("class", "graph-value")
@@ -344,8 +354,8 @@ export class CoreStatisticWidgetComponent {
344
354
  .attr("text-anchor", "middle")
345
355
  .attr("alignment-baseline", "middle");
346
356
  const start = 0;
347
- const end = this.value;
348
- switch (this.metric.dataType) {
357
+ const end = this.value();
358
+ switch (this.metric().dataType) {
349
359
  case EnumICoreStatisticWidgetDataType.INTEGER:
350
360
  this.valueText
351
361
  .transition()
@@ -395,12 +405,12 @@ export class CoreStatisticWidgetComponent {
395
405
  .duration(500);
396
406
  break;
397
407
  default:
398
- this.valueText.text((this.value || 'N/A').toString());
408
+ this.valueText.text((this.value() || 'N/A').toString());
399
409
  break;
400
410
  }
401
- this.previousValue = this.value;
411
+ this.previousValue = this.value();
402
412
  this.grayGroup = this.greenGroup.append("g")
403
- .attr("id", "metric_" + this.metric.id + "_scatter-plot")
413
+ .attr("id", "metric_" + this.metric().id + "_scatter-plot")
404
414
  .attr("transform", "translate(" + this.divisorLineMargin.left + ", " + this.height / 2 + ")");
405
415
  this.grayGroup.append("rect")
406
416
  .attr("class", "graph-container")
@@ -427,15 +437,15 @@ export class CoreStatisticWidgetComponent {
427
437
  .attr("width", this.comparisonValueRectWidth)
428
438
  .attr("height", this.comparisonValueRectHeight);
429
439
  const comparisonValueText = this.comparisonValueGroup.append("text")
430
- .attr("id", "metric_" + this.metric.id + "_comparisonValue")
440
+ .attr("id", "metric_" + this.metric().id + "_comparisonValue")
431
441
  .attr("x", this.comparisonValueRectWidth / 2)
432
442
  .attr("y", this.comparisonValueRectHeight / 2)
433
443
  .attr("class", "graph-value")
434
- .attr("fill", (this.comparisonValue || 0) >= 0 ? this.comparisonValueFillColor : d3.color("red"))
444
+ .attr("fill", (this.comparisonValue() || 0) >= 0 ? this.comparisonValueFillColor : d3.color("red"))
435
445
  .attr("font-size", this.comparisonValueRectHeight + "px")
436
446
  .attr("text-anchor", "middle")
437
447
  .attr("alignment-baseline", "middle");
438
- switch (this.metric.dataType) {
448
+ switch (this.metric().dataType) {
439
449
  case EnumICoreStatisticWidgetDataType.INTEGER:
440
450
  comparisonValueText
441
451
  .transition()
@@ -485,10 +495,10 @@ export class CoreStatisticWidgetComponent {
485
495
  .duration(500);
486
496
  break;
487
497
  default:
488
- comparisonValueText.text((this.comparisonValue || 'N/A').toString());
498
+ comparisonValueText.text((this.comparisonValue() || 'N/A').toString());
489
499
  break;
490
500
  }
491
- this.previousComparisonValue = this.comparisonValue;
501
+ this.previousComparisonValue = this.comparisonValue();
492
502
  const comparisonTextGroupTranslateY = this.height * 3 / 4 + this.divisorLineMargin.bottom + this.comparisonTextRectHeight;
493
503
  this.comparisonTextGroup = this.greenGroup.append("g")
494
504
  .attr("class", "comparison-text-group")
@@ -500,7 +510,7 @@ export class CoreStatisticWidgetComponent {
500
510
  .attr("width", this.comparisonTextRectWidth)
501
511
  .attr("height", this.comparisonTextRectHeight);
502
512
  this.comparisonTextText = this.comparisonTextGroup.append("text")
503
- .attr("id", "metric_" + this.metric.id + "_comparisonText")
513
+ .attr("id", "metric_" + this.metric().id + "_comparisonText")
504
514
  .attr("x", this.comparisonTextRectWidth / 2)
505
515
  .attr("y", this.comparisonTextRectHeight / 2)
506
516
  .attr("class", "graph-text")
@@ -508,7 +518,7 @@ export class CoreStatisticWidgetComponent {
508
518
  .attr("font-size", this.comparisonTextRectHeight / 2 + "px")
509
519
  .attr("text-anchor", "middle")
510
520
  .attr("alignment-baseline", "middle");
511
- switch (this.metric.comparisonCode) {
521
+ switch (this.metric().comparisonCode) {
512
522
  case EnumHrComparisonCode.WITH_PREVIOUS_MONTH:
513
523
  this.comparisonTextText.text("vs. previous month");
514
524
  break;
@@ -520,7 +530,7 @@ export class CoreStatisticWidgetComponent {
520
530
  break;
521
531
  }
522
532
  /*===============================*/
523
- const initialDataset = this.dataset;
533
+ const initialDataset = this.dataset();
524
534
  const minPoint = initialDataset.reduce((min, current) => current.y < min.y ? current : min);
525
535
  const maxPoint = initialDataset.reduce((max, current) => current.y > max.y ? current : max);
526
536
  const xScale = d3.scaleLinear()
@@ -570,24 +580,12 @@ export class CoreStatisticWidgetComponent {
570
580
  });
571
581
  }
572
582
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreStatisticWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
573
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CoreStatisticWidgetComponent, isStandalone: true, selector: "core-statistic-widget", inputs: { metric: "metric", dataset: "dataset", value: "value", comparisonValue: "comparisonValue", valueFontSize: "valueFontSize", margin: "margin", padding: "padding", outerWidth: "outerWidth", outerHeight: "outerHeight", divisorLineMargin: "divisorLineMargin", titleFillColor: "titleFillColor", divisorLineStrokeColor: "divisorLineStrokeColor", divisorLineStrokeWidth: "divisorLineStrokeWidth", valueFillColor: "valueFillColor", comparisonValueFillColor: "comparisonValueFillColor", comparisonTextFillColor: "comparisonTextFillColor", showAxes: "showAxes" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-statistic-widget-container\">\r\n \r\n</div>", styles: [""] }); }
583
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.2.3", type: CoreStatisticWidgetComponent, isStandalone: true, selector: "core-statistic-widget", inputs: { metric: { classPropertyName: "metric", publicName: "metric", isSignal: true, isRequired: true, transformFunction: null }, dataset: { classPropertyName: "dataset", publicName: "dataset", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, comparisonValue: { classPropertyName: "comparisonValue", publicName: "comparisonValue", isSignal: true, isRequired: true, transformFunction: null }, innerGroupBackgroundColor: { classPropertyName: "innerGroupBackgroundColor", publicName: "innerGroupBackgroundColor", isSignal: true, isRequired: false, transformFunction: null }, valueFontSize: { classPropertyName: "valueFontSize", publicName: "valueFontSize", isSignal: false, isRequired: false, transformFunction: null }, margin: { classPropertyName: "margin", publicName: "margin", isSignal: false, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: false, isRequired: false, transformFunction: null }, outerWidth: { classPropertyName: "outerWidth", publicName: "outerWidth", isSignal: false, isRequired: false, transformFunction: null }, outerHeight: { classPropertyName: "outerHeight", publicName: "outerHeight", isSignal: false, isRequired: false, transformFunction: null }, divisorLineMargin: { classPropertyName: "divisorLineMargin", publicName: "divisorLineMargin", isSignal: false, isRequired: false, transformFunction: null }, titleFillColor: { classPropertyName: "titleFillColor", publicName: "titleFillColor", isSignal: false, isRequired: false, transformFunction: null }, divisorLineStrokeColor: { classPropertyName: "divisorLineStrokeColor", publicName: "divisorLineStrokeColor", isSignal: false, isRequired: false, transformFunction: null }, divisorLineStrokeWidth: { classPropertyName: "divisorLineStrokeWidth", publicName: "divisorLineStrokeWidth", isSignal: false, isRequired: false, transformFunction: null }, valueFillColor: { classPropertyName: "valueFillColor", publicName: "valueFillColor", isSignal: false, isRequired: false, transformFunction: null }, comparisonValueFillColor: { classPropertyName: "comparisonValueFillColor", publicName: "comparisonValueFillColor", isSignal: false, isRequired: false, transformFunction: null }, comparisonTextFillColor: { classPropertyName: "comparisonTextFillColor", publicName: "comparisonTextFillColor", isSignal: false, isRequired: false, transformFunction: null }, showAxes: { classPropertyName: "showAxes", publicName: "showAxes", isSignal: false, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-statistic-widget-container\">\r\n \r\n</div>", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
574
584
  }
575
585
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreStatisticWidgetComponent, decorators: [{
576
586
  type: Component,
577
- args: [{ selector: 'core-statistic-widget', standalone: true, imports: [], template: "<div #container class=\"core-statistic-widget-container\">\r\n \r\n</div>" }]
578
- }], propDecorators: { metric: [{
579
- type: Input,
580
- args: [{ required: true }]
581
- }], dataset: [{
582
- type: Input,
583
- args: [{ required: true }]
584
- }], value: [{
585
- type: Input,
586
- args: [{ required: true }]
587
- }], comparisonValue: [{
588
- type: Input,
589
- args: [{ required: true }]
590
- }], valueFontSize: [{
587
+ args: [{ selector: 'core-statistic-widget', standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #container class=\"core-statistic-widget-container\">\r\n \r\n</div>" }]
588
+ }], ctorParameters: () => [], propDecorators: { valueFontSize: [{
591
589
  type: Input
592
590
  }], margin: [{
593
591
  type: Input
@@ -617,4 +615,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
617
615
  type: ViewChild,
618
616
  args: ['container']
619
617
  }] } });
620
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLEtBQUssRUFBNEIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDOztBQUV6QixNQUFNLENBQU4sSUFBWSxvQkFHWDtBQUhELFdBQVksb0JBQW9CO0lBQzlCLG1FQUEyQyxDQUFBO0lBQzNDLGlFQUF5QyxDQUFBO0FBQzNDLENBQUMsRUFIVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBRy9CO0FBU0QsTUFBTSxDQUFOLElBQVksZ0NBSVg7QUFKRCxXQUFZLGdDQUFnQztJQUMxQyx1REFBbUIsQ0FBQTtJQUNuQix1REFBbUIsQ0FBQTtJQUNuQiw2REFBeUIsQ0FBQTtBQUMzQixDQUFDLEVBSlcsZ0NBQWdDLEtBQWhDLGdDQUFnQyxRQUkzQztBQThCRCxNQUFNLE9BQU8sNEJBQTRCO0lBVHpDO1FBYTZCLFVBQUssR0FBdUIsU0FBUyxDQUFDO1FBQ3RDLG9CQUFlLEdBQXVCLElBQUksQ0FBQztRQUc3RCxXQUFNLEdBQXdCLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFF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Uzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5cclxuZXhwb3J0IGVudW0gRW51bUhyQ29tcGFyaXNvbkNvZGUge1xyXG4gIFdJVEhfUFJFVklPVVNfTU9OVEggPSAnV0lUSF9QUkVWSU9VU19NT05USCcsXHJcbiAgV0lUSF9QUkVWSU9VU19ZRUFSID0gJ1dJVEhfUFJFVklPVVNfWUVBUicsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUhyTWV0cmljIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBjb21wYXJpc29uQ29kZTogRW51bUhyQ29tcGFyaXNvbkNvZGU7XHJcbiAgZGF0YVR5cGU6IEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZSB7XHJcbiAgSU5URUdFUiA9ICdJTlRFR0VSJyxcclxuICBERUNJTUFMID0gJ0RFQ0lNQUwnLFxyXG4gIFBFUkNFTlRBR0UgPSAnUEVSQ0VOVEFHRScsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdyYXBoTWFyZ2luUGFkZGluZyB7XHJcbiAgdG9wOiBudW1iZXI7XHJcbiAgcmlnaHQ6IG51bWJlcjtcclxuICBib3R0b206IG51bWJlcjtcclxuICBsZWZ0OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhc2V0IHtcclxuICB4OiBudW1iZXI7XHJcbiAgeTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlU3RhdGlzdGljV2lkZ2V0SW5wdXRzIHtcclxuICBtZXRyaWM6IElIck1ldHJpYztcclxuICBkYXRhc2V0OiBJQ29yZVN0YXRpc3RpY1dpZGdldERhdGFzZXRbXTtcclxuICB2YWx1ZTogbnVtYmVyO1xyXG4gIGNvbXBhcmlzb25WYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtc3RhdGlzdGljLXdpZGdldCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcblxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtc3RhdGlzdGljLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2NvcmUtc3RhdGlzdGljLXdpZGdldC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVTdGF0aXN0aWNXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBtZXRyaWMhOiBJSHJNZXRyaWM7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZGF0YXNldCE6IElDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YXNldFtdO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY29tcGFyaXNvblZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPSAwLjU0O1xyXG5cclxuICBASW5wdXQoKSB2YWx1ZUZvbnRTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG1hcmdpbjogSUdyYXBoTWFyZ2luUGFkZGluZyA9IHsgdG9wOiAzMCwgcmlnaHQ6IDMwLCBib3R0b206IDMwLCBsZWZ0OiAzMCB9O1xyXG4gIEBJbnB1dCgpIHBhZGRpbmc6IElHcmFwaE1hcmdpblBhZGRpbmcgPSB7IHRvcDogMzAsIHJpZ2h0OiAzMCwgYm90dG9tOiAzMCwgbGVmdDogMzAgfTtcclxuICBASW5wdXQoKSBvdXRlcldpZHRoOiBudW1iZXIgPSAzMjA7XHJcbiAgQElucHV0KCkgb3V0ZXJIZWlnaHQ6IG51bWJlciA9IDMyMDtcclxuICBASW5wdXQoKSBkaXZpc29yTGluZU1hcmdpbjogSUdyYXBoTWFyZ2luUGFkZGluZyA9IHsgdG9wOiA0LCByaWdodDogOCwgYm90dG9tOiA4LCBsZWZ0OiA4IH07XHJcbiAgQElucHV0KCkgdGl0bGVGaWxsQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiYmxhY2tcIik7XHJcbiAgQElucHV0KCkgZGl2aXNvckxpbmVTdHJva2VDb2xvcjogYW55ID0gZDMuY29sb3IoXCJncmF5XCIpO1xyXG4gIEBJbnB1dCgpIGRpdmlzb3JMaW5lU3Ryb2tlV2lkdGg6IG51bWJlciA9IDM7XHJcbiAgQElucHV0KCkgdmFsdWVGaWxsQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiYmxhY2tcIik7XHJcblxyXG4gIEBJbnB1dCgpIGNvbXBhcmlzb25WYWx1ZUZpbGxDb2xvcjogYW55ID0gZDMuY29sb3IoXCJibGFja1wiKTtcclxuICBASW5wdXQoKSBjb21wYXJpc29uVGV4dEZpbGxDb2xvcjogYW55ID0gZDMuY29sb3IoXCJibGFja1wiKTtcclxuICBASW5wdXQoKSBzaG93QXhlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG5cclxuICBpbm5lcldpZHRoID0gdGhpcy5vdXRlcldpZHRoIC0gdGhpcy5tYXJnaW4ubGVmdCAtIHRoaXMubWFyZ2luLnJpZ2h0O1xyXG4gIGlubmVySGVpZ2h0ID0gdGhpcy5vdXRlckhlaWdodCAtIHRoaXMubWFyZ2luLnRvcCAtIHRoaXMubWFyZ2luLmJvdHRvbTtcclxuICB3aWR0aCA9IHRoaXMuaW5uZXJXaWR0aCAtIHRoaXMucGFkZGluZy5sZWZ0IC0gdGhpcy5wYWRkaW5nLnJpZ2h0O1xyXG4gIGhlaWdodCA9IHRoaXMuaW5uZXJIZWlnaHQgLSB0aGlzLnBhZGRpbmcudG9wIC0gdGhpcy5wYWRkaW5nLmJvdHRvbTtcclxuXHJcbiAgZ3JhcGhXaWR0aCA9IHRoaXMud2lkdGggLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLnJpZ2h0O1xyXG4gIGdyYXBoSGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyA0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b207XHJcbiAgdGl0bGVSZWN0V2lkdGggPSB0aGlzLndpZHRoIC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5yaWdodDtcclxuICB0aXRsZVJlY3RIZWlnaHQgPSB0aGlzLmdyYXBoSGVpZ2h0ICogMiAvIDMgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLnRvcCAqIDI7XHJcbiAgdmFsdWVSZWN0V2lkdGggPSB0aGlzLnRpdGxlUmVjdFdpZHRoO1xyXG4gIHZhbHVlUmVjdEhlaWdodCA9IHRoaXMuaGVpZ2h0IC8gMyAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tO1xyXG4gIGNvbXBhcmlzb25WYWx1ZVJlY3RXaWR0aCA9IHRoaXMudGl0bGVSZWN0V2lkdGg7XHJcbiAgY29tcGFyaXNvblZhbHVlUmVjdEhlaWdodCA9ICh0aGlzLmhlaWdodCAvIDQgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmJvdHRvbSkgLyAyO1xyXG4gIGNvbXBhcmlzb25UZXh0UmVjdFdpZHRoID0gdGhpcy50aXRsZVJlY3RXaWR0aDtcclxuICBjb21wYXJpc29uVGV4dFJlY3RIZWlnaHQgPSAodGhpcy5oZWlnaHQgLyA0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b20pIC8gMjtcclxuXHJcbiAgeCA9IGQzLnNjYWxlTGluZWFyKCkucmFuZ2UoWzAsIHRoaXMuZ3JhcGhXaWR0aF0pO1xyXG4gIHkgPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlKFt0aGlzLmdyYXBoSGVpZ2h0LCAwXSk7XHJcblxyXG4gIHByaXZhdGUgcHJldmlvdXNWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgcHJldmlvdXNDb21wYXJpc29uVmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgLy9UbyByZW1vdmUgb25seSB0aGUgbnVtYmVycyB3aGlsZSBrZWVwaW5nIHRoZSB0aWNrcyBvbiB0aGUgYXhlcywgXHJcbiAgLy95b3UgY2FuIHNlbGVjdCB0aGUgdGV4dCBlbGVtZW50cyBvZiB0aGUgdGlja3MgYW5kIGhpZGUgdGhlbSB1c2luZyBDU1MuIFxyXG4gIC8vSGVyZSdzIGhvdyB5b3UgY2FuIG1vZGlmeSB0aGUgY29kZSB0byBhY2hpZXZlIHRoYXQ6XHJcblxyXG4gIHhBeGlzQ2FsbCA9IGQzLmF4aXNCb3R0b20odGhpcy54KVxyXG4gICAgLnRpY2tTaXplSW5uZXIoMTApIC8vIEFkanVzdCB0aGUgbGVuZ3RoIG9mIHRoZSB0aWNrcyBhcyBuZWVkZWRcclxuICAgIC50aWNrU2l6ZU91dGVyKDApOyAvLyBIaWRlIG91dGVyIHRpY2tzXHJcblxyXG4gIHlBeGlzQ2FsbCA9IGQzLmF4aXNMZWZ0KHRoaXMueSlcclxuICAgIC50aWNrU2l6ZUlubmVyKDEwKSAvLyBBZGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgdGlja3MgYXMgbmVlZGVkXHJcbiAgICAudGlja1NpemVPdXRlcigxMCk7IC8vIEhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKCEhY2hhbmdlc1snbWV0cmljJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNOYW1lKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlTWV0cmljVmFsdWUoKTtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNDb21wYXJpc29uVmFsdWUoKTtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNDb21wYXJpc29uVGV4dCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhY2hhbmdlc1snZGF0YXNldCddKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YXNldCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhY2hhbmdlc1sndmFsdWUnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY1ZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoISFjaGFuZ2VzWydjb21wYXJpc29uVmFsdWUnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY0NvbXBhcmlzb25WYWx1ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlTWV0cmljTmFtZSgpOiB2b2lkIHtcclxuICAgIHZhciBuYW1lRWxlbWVudCA9IGQzLnNlbGVjdChcIiNtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYy5pZCArIFwiX25hbWVcIilcclxuICAgIG5hbWVFbGVtZW50LnRyYW5zaXRpb24oKS50ZXh0KHRoaXMubWV0cmljLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTWV0cmljVmFsdWUoKTogdm9pZCB7XHJcbiAgICB2YXIgdmFsdWVFbGVtZW50ID0gZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljLmlkICsgXCJfdmFsdWVcIik7XHJcbiAgICBjb25zdCBzdGFydCA9IHRoaXMucHJldmlvdXNWYWx1ZSB8fCB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBlbmQgPSB0aGlzLnZhbHVlIHx8IHVuZGVmaW5lZDtcclxuICAgIHN3aXRjaCAodGhpcy5tZXRyaWMuZGF0YVR5cGUpIHtcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5JTlRFR0VSOlxyXG4gICAgICAgIHZhbHVlRWxlbWVudFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAoISFzdGFydCAmJiAhIWVuZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlTnVtYmVyKHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICAgIHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoISFlbmQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiB2YWx1ZUVsZW1lbnQudGV4dChNYXRoLnJvdW5kKGVuZCkpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gdmFsdWVFbGVtZW50LnRleHQoJ04vQScpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5ERUNJTUFMOlxyXG4gICAgICAgIHZhbHVlRWxlbWVudFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAoISFzdGFydCAmJiAhIWVuZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlTnVtYmVyKHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICAgIHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwKSAvIDEwMClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoISFlbmQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiB2YWx1ZUVsZW1lbnQudGV4dChNYXRoLnJvdW5kKGVuZCAqIDEwMCkgLyAxMDApXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gdmFsdWVFbGVtZW50LnRleHQoXCJOL0FcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5QRVJDRU5UQUdFOlxyXG4gICAgICAgIHZhbHVlRWxlbWVudFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVFbGVtZW50LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDAwMCkgLyAxMDAgKyBcIiVcIilcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoISFlbmQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiB2YWx1ZUVsZW1lbnQudGV4dChNYXRoLnJvdW5kKGVuZCAqIDEwMDAwKSAvIDEwMCArIFwiJVwiKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IHZhbHVlRWxlbWVudC50ZXh0KFwiTi9BXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB2YWx1ZUVsZW1lbnQudHJhbnNpdGlvbigpLnRleHQoKHRoaXMudmFsdWUgfHwgJ04vQScpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gdGhpcy52YWx1ZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU1ldHJpY0NvbXBhcmlzb25WYWx1ZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXJ0OiBudW1iZXIgfCB1bmRlZmluZWQgPSB0aGlzLnByZXZpb3VzQ29tcGFyaXNvblZhbHVlO1xyXG4gICAgY29uc3QgZW5kOiBudW1iZXIgfCB1bmRlZmluZWQgPSB0aGlzLmNvbXBhcmlzb25WYWx1ZTtcclxuICAgIHZhciBjb21wYXJpc29uVmFsdWVFbGVtZW50ID0gZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljLmlkICsgXCJfY29tcGFyaXNvblZhbHVlXCIpO1xyXG4gICAgY29tcGFyaXNvblZhbHVlRWxlbWVudC5hdHRyKFwiZmlsbFwiLCAodGhpcy5jb21wYXJpc29uVmFsdWUgfHwgMCkgPj0gMCA/IHRoaXMuY29tcGFyaXNvblRleHRGaWxsQ29sb3IgOiBkMy5jb2xvcihcInJlZFwiKSk7XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljLmRhdGFUeXBlKSB7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuSU5URUdFUjpcclxuICAgICAgICBjb21wYXJpc29uVmFsdWVFbGVtZW50XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy52YWx1ZSAmJiAhIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gY29tcGFyaXNvblZhbHVlRWxlbWVudC50ZXh0KFwiTi9BXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5ERUNJTUFMOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLnZhbHVlICYmICEhc3RhcnQgJiYgISFlbmQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVFbGVtZW50LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDApIC8gMTAwKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiBjb21wYXJpc29uVmFsdWVFbGVtZW50LnRleHQoXCJOL0FcIilcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLlBFUkNFTlRBR0U6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlRWxlbWVudFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMudmFsdWUgJiYgISFzdGFydCAmJiAhIWVuZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlTnVtYmVyKHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSAqIDEwMDAwKSAvIDEwMCArIFwiJVwiKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiBjb21wYXJpc29uVmFsdWVFbGVtZW50LnRleHQoXCJOL0FcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlRWxlbWVudC50cmFuc2l0aW9uKCkudGV4dCgodGhpcy5jb21wYXJpc29uVmFsdWUgfHwgJ04vQScpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlTWV0cmljQ29tcGFyaXNvblRleHQoKTogdm9pZCB7XHJcbiAgICB2YXIgY29tcGFyaXNvblRleHRFbGVtZW50ID0gZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljLmlkICsgXCJfY29tcGFyaXNvblRleHRcIik7XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljLmNvbXBhcmlzb25Db2RlKSB7XHJcbiAgICAgIGNhc2UgRW51bUhyQ29tcGFyaXNvbkNvZGUuV0lUSF9QUkVWSU9VU19NT05USDpcclxuICAgICAgICBjb21wYXJpc29uVGV4dEVsZW1lbnQudGV4dChcInZzLiBwcmV2aW91cyBtb250aFwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSHJDb21wYXJpc29uQ29kZS5XSVRIX1BSRVZJT1VTX1lFQVI6XHJcbiAgICAgICAgY29tcGFyaXNvblRleHRFbGVtZW50LnRleHQoXCJ2cy4gcHJldmlvdXMgeWVhclwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb21wYXJpc29uVGV4dEVsZW1lbnQudGV4dChcIi1cIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXRhc2V0KCk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IG1pblBvaW50ID0gdGhpcy5kYXRhc2V0LnJlZHVjZSgobWluLCBjdXJyZW50KSA9PiBjdXJyZW50LnkgPCBtaW4ueSA/IGN1cnJlbnQgOiBtaW4pO1xyXG4gICAgY29uc3QgbWF4UG9pbnQgPSB0aGlzLmRhdGFzZXQucmVkdWNlKChtYXgsIGN1cnJlbnQpID0+IGN1cnJlbnQueSA+IG1heC55ID8gY3VycmVudCA6IG1heCk7XHJcblxyXG4gICAgLy8gVXBkYXRlIHNjYWxlc1xyXG4gICAgY29uc3QgeFNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAuZG9tYWluKFswLCBkMy5tYXgodGhpcy5kYXRhc2V0LCAoZDogYW55KSA9PiBkLngpXSlcclxuICAgICAgLnJhbmdlKFswLCB0aGlzLmdyYXBoV2lkdGhdKTtcclxuXHJcbiAgICBjb25zdCB5U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpXHJcbiAgICAgIC5kb21haW4oW21pblBvaW50LnksIG1heFBvaW50LnldKVxyXG4gICAgICAucmFuZ2UoW3RoaXMuZ3JhcGhIZWlnaHQsIDBdKTtcclxuXHJcbiAgICBjb25zdCB4QXhpc0NhbGwgPSBkMy5heGlzQm90dG9tKHhTY2FsZSlcclxuICAgICAgLnRpY2tTaXplSW5uZXIoMTApIC8vIEFkanVzdCB0aGUgbGVuZ3RoIG9mIHRoZSB0aWNrcyBhcyBuZWVkZWRcclxuICAgICAgLnRpY2tTaXplT3V0ZXIoMCk7IC8vIEhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgICBjb25zdCB5QXhpc0NhbGwgPSBkMy5heGlzTGVmdCh5U2NhbGUpXHJcbiAgICAgIC50aWNrU2l6ZUlubmVyKDEwKSAvLyBBZGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgdGlja3MgYXMgbmVlZGVkXHJcbiAgICAgIC50aWNrU2l6ZU91dGVyKDEwKTsgLy8gRG8gbm90IGhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgICAvLyBVcGRhdGUgYXhlc1xyXG4gICAgLy94QXhpcy5jYWxsKHhBeGlzQ2FsbCk7XHJcbiAgICAvL3lBeGlzLmNhbGwoeUF4aXNDYWxsKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgY29ubmVjdGluZyBsaW5lXHJcbiAgICB0aGlzLmNvbm5lY3RpbmdMaW5lID0gZDMubGluZSgpXHJcbiAgICAgIC54KChkOiBhbnkpID0+IHhTY2FsZShkLngpKVxyXG4gICAgICAueSgoZDogYW55KSA9PiB5U2NhbGUoZC55KSlcclxuICAgICAgLmRlZmluZWQoKGQsIGkpID0+IGkgPj0gMCAmJiBpIDwgdGhpcy5kYXRhc2V0Lmxlbmd0aCk7XHJcblxyXG4gICAgZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljLmlkICsgXCJfc2NhdHRlci1wbG90XCIpLnNlbGVjdChcInBhdGhcIilcclxuICAgICAgLmRhdHVtKHRoaXMuZGF0YXNldClcclxuICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAuYXR0cihcImRcIiwgdGhpcy5jb25uZWN0aW5nTGluZSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGNpcmNsZXNcclxuICAgIGNvbnN0IGNpcmNsZXM6IGFueSA9IGQzLnNlbGVjdChcIiNtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYy5pZCArIFwiX3NjYXR0ZXItcGxvdFwiKS5zZWxlY3RBbGwoXCJjaXJjbGVcIilcclxuICAgICAgLmRhdGEodGhpcy5kYXRhc2V0KTtcclxuXHJcbiAgICBjaXJjbGVzLmV4aXQoKS5yZW1vdmUoKTtcclxuXHJcbiAgICBjaXJjbGVzLmVudGVyKClcclxuICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAubWVyZ2UoY2lyY2xlcylcclxuICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAuYXR0cihcImN4XCIsIGQgPT4geFNjYWxlKGQueCkpXHJcbiAgICAgIC5hdHRyKFwiY3lcIiwgZCA9PiB5U2NhbGUoZC55KSlcclxuICAgICAgLmF0dHIoXCJyXCIsIDUpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBkID0+IHtcclxuICAgICAgICBpZiAoZCA9PT0gbWluUG9pbnQpIHJldHVybiBcIiNGRjhDMDBcIjsgLy8gU2V0IGxvd2VzdCBwb2ludCB0byAjRkY4QzAwXHJcbiAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gXCIjMzE1ODk3XCI7IC8vIFNldCBoaWdoZXN0IHBvaW50IHRvICMzMTU4OTdcclxuICAgICAgICByZXR1cm4gXCJub25lXCI7IC8vIE1ha2UgdGhlIG90aGVyIHBvaW50cyB0cmFuc3BhcmVudFxyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChkID09PSBtaW5Qb2ludCkgcmV0dXJuIGQzLmNvbG9yKFwiI0ZGOEMwMFwiKSEuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjRkY4QzAwIGNvbG9yXHJcbiAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gZDMuY29sb3IoXCIjMzE1ODk3XCIpIS5kYXJrZXIoMC4yKTsgLy8gRGFya2VuICMzMTU4OTcgY29sb3JcclxuICAgICAgICByZXR1cm4gXCJub25lXCI7IC8vIE5vIHN0cm9rZSBmb3Igb3RoZXIgcG9pbnRzXHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDMpOyAvLyBTZXQgc3Ryb2tlIHdpZHRoXHJcbiAgfVxyXG5cclxuICBzdmc6IGFueTtcclxuICBpbm5lckdyb3VwOiBhbnk7XHJcbiAgZ3JlZW5Hcm91cDogYW55O1xyXG4gIHRpdGxlR3JvdXA6IGFueTtcclxuICB2YWx1ZUdyb3VwOiBhbnk7XHJcbiAgdmFsdWVUZXh0OiBhbnk7XHJcbiAgZ3JheUdyb3VwOiBhbnk7XHJcbiAgY29tcGFyaXNvblZhbHVlR3JvdXA6IGFueTtcclxuICBjb21wYXJpc29uVGV4dEdyb3VwOiBhbnk7XHJcbiAgY29tcGFyaXNvblZhbHVlVGV4dDogYW55O1xyXG4gIGNvbXBhcmlzb25UZXh0VGV4dDogYW55O1xyXG4gIGNvbm5lY3RpbmdMaW5lOiBhbnk7XHJcblxyXG4gIGludGVydmFsSWQ6IGFueTtcclxuXHJcbiAgYXN5bmMgZHJhd0dyYXBoKCkge1xyXG4gICAgdGhpcy5zdmcgPSBkMy5zZWxlY3QodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudClcclxuICAgICAgLmFwcGVuZChcInN2Z1wiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMub3V0ZXJXaWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5vdXRlckhlaWdodCk7XHJcblxyXG4gICAgdGhpcy5zdmcuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMub3V0ZXJXaWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5vdXRlckhlaWdodClcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XHJcblxyXG4gICAgdGhpcy5pbm5lckdyb3VwID0gdGhpcy5zdmcuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMubWFyZ2luLmxlZnQgKyBcIixcIiArIHRoaXMubWFyZ2luLnRvcCArIFwiKVwiKTtcclxuXHJcbiAgICB0aGlzLmlubmVyR3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiYmx1ZS1yZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy5pbm5lcldpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmlubmVySGVpZ2h0KTtcclxuXHJcbiAgICB0aGlzLmdyZWVuR3JvdXAgPSB0aGlzLmlubmVyR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMucGFkZGluZy5sZWZ0ICsgXCIsXCIgKyB0aGlzLnBhZGRpbmcudG9wICsgXCIpXCIpO1xyXG5cclxuICAgIHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmVlbi1yZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy53aWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5oZWlnaHQpO1xyXG5cclxuICAgIHRoaXMudGl0bGVHcm91cCA9IHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0aXRsZS1ncm91cFwiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCArIFwiLFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi50b3AgKyBcIilcIik7XHJcblxyXG4gICAgdGhpcy50aXRsZUdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwidGl0bGUtcmVjdFwiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMudGl0bGVSZWN0V2lkdGgpXHJcbiAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMudGl0bGVSZWN0SGVpZ2h0KTtcclxuXHJcbiAgICB0aGlzLnRpdGxlR3JvdXAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAuYXR0cihcImlkXCIsIFwibWV0cmljX1wiICsgdGhpcy5tZXRyaWMuaWQgKyBcIl9uYW1lXCIpXHJcbiAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnRpdGxlUmVjdFdpZHRoIC8gMilcclxuICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMudGl0bGVSZWN0SGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXRpdGxlXCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCB0aGlzLnRpdGxlRmlsbENvbG9yKVxyXG4gICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCB0aGlzLnRpdGxlUmVjdEhlaWdodClcclxuICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAudGV4dCh0aGlzLm1ldHJpYy5uYW1lKTtcclxuXHJcbiAgICB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwibGluZVwiKVxyXG4gICAgICAuYXR0cihcIngxXCIsIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdClcclxuICAgICAgLmF0dHIoXCJ5MVwiLCB0aGlzLmdyYXBoSGVpZ2h0ICogMiAvIDMpXHJcbiAgICAgIC5hdHRyKFwieDJcIiwgdGhpcy53aWR0aCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ucmlnaHQpXHJcbiAgICAgIC5hdHRyKFwieTJcIiwgdGhpcy5ncmFwaEhlaWdodCAqIDIgLyAzKVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCB0aGlzLmRpdmlzb3JMaW5lU3Ryb2tlQ29sb3IpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIHRoaXMuZGl2aXNvckxpbmVTdHJva2VXaWR0aCk7XHJcblxyXG4gICAgY29uc3QgdmFsdWVHcm91cFRyYW5zbGF0ZVkgPSB0aGlzLmhlaWdodCAvIDIgLyAzICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b207XHJcbiAgICB0aGlzLnZhbHVlR3JvdXAgPSB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwidmFsdWUtZ3JvdXBcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIixcIiArIHZhbHVlR3JvdXBUcmFuc2xhdGVZICsgXCIpXCIpO1xyXG5cclxuICAgIHRoaXMudmFsdWVHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZhbHVlLXJlY3RcIilcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLnZhbHVlUmVjdFdpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLnZhbHVlUmVjdEhlaWdodCk7XHJcblxyXG4gICAgdGhpcy52YWx1ZVRleHQgPSB0aGlzLnZhbHVlR3JvdXAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAuYXR0cihcImlkXCIsIFwibWV0cmljX1wiICsgdGhpcy5tZXRyaWMuaWQgKyBcIl92YWx1ZVwiKVxyXG4gICAgICAuYXR0cihcInhcIiwgdGhpcy52YWx1ZVJlY3RXaWR0aCAvIDIpXHJcbiAgICAgIC5hdHRyKFwieVwiLCB0aGlzLnZhbHVlUmVjdEhlaWdodCAvIDIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmFwaC12YWx1ZVwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgdGhpcy52YWx1ZUZpbGxDb2xvcilcclxuICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgKHRoaXMudmFsdWVGb250U2l6ZSB8fCB0aGlzLnZhbHVlUmVjdEhlaWdodCkgKyBcInB4XCIpXHJcbiAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIilcclxuICAgICAgLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIik7XHJcblxyXG4gICAgY29uc3Qgc3RhcnQgPSAwO1xyXG4gICAgY29uc3QgZW5kID0gdGhpcy52YWx1ZTtcclxuICAgIHN3aXRjaCAodGhpcy5tZXRyaWMuZGF0YVR5cGUpIHtcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5JTlRFR0VSOlxyXG4gICAgICAgIHRoaXMudmFsdWVUZXh0XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhc3RhcnQgJiYgISFlbmQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlVGV4dC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gdGhpcy52YWx1ZVRleHQudGV4dChcIk4vQVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuREVDSU1BTDpcclxuICAgICAgICB0aGlzLnZhbHVlVGV4dFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSAqIDEwMCkgLyAxMDApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IHRoaXMudmFsdWVUZXh0LnRleHQoXCJOL0FcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5QRVJDRU5UQUdFOlxyXG4gICAgICAgIHRoaXMudmFsdWVUZXh0XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhc3RhcnQgJiYgISFlbmQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlVGV4dC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwMDApIC8gMTAwICsgXCIlXCIpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IHRoaXMudmFsdWVUZXh0LnRleHQoXCJOL0FcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLnZhbHVlVGV4dC50ZXh0KCh0aGlzLnZhbHVlIHx8ICdOL0EnKS50b1N0cmluZygpKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMucHJldmlvdXNWYWx1ZSA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgdGhpcy5ncmF5R3JvdXAgPSB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAuYXR0cihcImlkXCIsIFwibWV0cmljX1wiICsgdGhpcy5tZXRyaWMuaWQgKyBcIl9zY2F0dGVyLXBsb3RcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIiwgXCIgKyB0aGlzLmhlaWdodCAvIDIgKyBcIilcIik7XHJcblxyXG4gICAgdGhpcy5ncmF5R3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiZ3JhcGgtY29udGFpbmVyXCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBkMy5jb2xvcihcInRyYW5zcGFyZW50XCIpIS5icmlnaHRlcigxKSlcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLmdyYXBoV2lkdGgpXHJcbiAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMuZ3JhcGhIZWlnaHQpO1xyXG5cclxuXHJcbiAgICBjb25zdCB4QXhpcyA9IHRoaXMuZ3JheUdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInggYXhpc1wiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZSgwLFwiICsgdGhpcy5ncmFwaEhlaWdodCArIFwiKVwiKTtcclxuXHJcbiAgICBjb25zdCB5QXhpcyA9IHRoaXMuZ3JheUdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInkgYXhpc1wiKTtcclxuXHJcbiAgICAvL3hBeGlzLmNhbGwoeEF4aXNDYWxsKTtcclxuICAgIC8veUF4aXMuY2FsbCh5QXhpc0NhbGwpO1xyXG5cclxuICAgIC8vIFNlbGVjdCB0ZXh0IGVsZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aWNrcyBhbmQgaGlkZSB0aGVtXHJcbiAgICB0aGlzLmdyYXlHcm91cC5zZWxlY3RBbGwoXCIudGljayB0ZXh0XCIpLmF0dHIoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuXHJcbiAgICBjb25zdCBjb21wYXJpc29uVmFsdWVHcm91cFRyYW5zbGF0ZVkgPSB0aGlzLmhlaWdodCAqIDMgLyA0ICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b207XHJcbiAgICB0aGlzLmNvbXBhcmlzb25WYWx1ZUdyb3VwID0gdGhpcy5ncmVlbkdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImNvbXBhcmlzb24tdmFsdWUtZ3JvdXBcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIixcIiArIGNvbXBhcmlzb25WYWx1ZUdyb3VwVHJhbnNsYXRlWSArIFwiKVwiKTtcclxuXHJcbiAgICB0aGlzLmNvbXBhcmlzb25WYWx1ZUdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwidmFsdWUtcmVjdFwiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMuY29tcGFyaXNvblZhbHVlUmVjdFdpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RIZWlnaHQpO1xyXG5cclxuICAgIGNvbnN0IGNvbXBhcmlzb25WYWx1ZVRleHQgPSB0aGlzLmNvbXBhcmlzb25WYWx1ZUdyb3VwLmFwcGVuZChcInRleHRcIilcclxuICAgICAgLmF0dHIoXCJpZFwiLCBcIm1ldHJpY19cIiArIHRoaXMubWV0cmljLmlkICsgXCJfY29tcGFyaXNvblZhbHVlXCIpXHJcbiAgICAgIC5hdHRyKFwieFwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RXaWR0aCAvIDIpXHJcbiAgICAgIC5hdHRyKFwieVwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RIZWlnaHQgLyAyKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiZ3JhcGgtdmFsdWVcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsICh0aGlzLmNvbXBhcmlzb25WYWx1ZSB8fCAwKSA+PSAwID8gdGhpcy5jb21wYXJpc29uVmFsdWVGaWxsQ29sb3IgOiBkMy5jb2xvcihcInJlZFwiKSlcclxuICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgdGhpcy5jb21wYXJpc29uVmFsdWVSZWN0SGVpZ2h0ICsgXCJweFwiKVxyXG4gICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpXHJcbiAgICAgIC5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5tZXRyaWMuZGF0YVR5cGUpIHtcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5JTlRFR0VSOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZVRleHRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoISFzdGFydCAmJiAhIWVuZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlTnVtYmVyKHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1ZVRleHQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IGNvbXBhcmlzb25WYWx1ZVRleHQudGV4dChcIk4vQVwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLkRFQ0lNQUw6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlVGV4dFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlVGV4dC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwKSAvIDEwMClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gY29tcGFyaXNvblZhbHVlVGV4dC50ZXh0KFwiTi9BXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuUEVSQ0VOVEFHRTpcclxuICAgICAgICBjb21wYXJpc29uVmFsdWVUZXh0XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhc3RhcnQgJiYgISFlbmQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDAwMCkgLyAxMDAgKyBcIiVcIilcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gY29tcGFyaXNvblZhbHVlVGV4dC50ZXh0KFwiTi9BXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlVGV4dC50ZXh0KCh0aGlzLmNvbXBhcmlzb25WYWx1ZSB8fCAnTi9BJykudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLnByZXZpb3VzQ29tcGFyaXNvblZhbHVlID0gdGhpcy5jb21wYXJpc29uVmFsdWU7XHJcblxyXG4gICAgY29uc3QgY29tcGFyaXNvblRleHRHcm91cFRyYW5zbGF0ZVkgPSB0aGlzLmhlaWdodCAqIDMgLyA0ICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b20gKyB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdEhlaWdodDtcclxuICAgIHRoaXMuY29tcGFyaXNvblRleHRHcm91cCA9IHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb21wYXJpc29uLXRleHQtZ3JvdXBcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIixcIiArIGNvbXBhcmlzb25UZXh0R3JvdXBUcmFuc2xhdGVZICsgXCIpXCIpO1xyXG5cclxuICAgIHRoaXMuY29tcGFyaXNvblRleHRHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRleHQtcmVjdFwiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMuY29tcGFyaXNvblRleHRSZWN0V2lkdGgpXHJcbiAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMuY29tcGFyaXNvblRleHRSZWN0SGVpZ2h0KTtcclxuXHJcbiAgICB0aGlzLmNvbXBhcmlzb25UZXh0VGV4dCA9IHRoaXMuY29tcGFyaXNvblRleHRHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgIC5hdHRyKFwiaWRcIiwgXCJtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYy5pZCArIFwiX2NvbXBhcmlzb25UZXh0XCIpXHJcbiAgICAgIC5hdHRyKFwieFwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdFdpZHRoIC8gMilcclxuICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMuY29tcGFyaXNvblRleHRSZWN0SGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXRleHRcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIHRoaXMuY29tcGFyaXNvblRleHRGaWxsQ29sb3IpXHJcbiAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIHRoaXMuY29tcGFyaXNvblRleHRSZWN0SGVpZ2h0IC8gMiArIFwicHhcIilcclxuICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljLmNvbXBhcmlzb25Db2RlKSB7XHJcbiAgICAgIGNhc2UgRW51bUhyQ29tcGFyaXNvbkNvZGUuV0lUSF9QUkVWSU9VU19NT05USDpcclxuICAgICAgICB0aGlzLmNvbXBhcmlzb25UZXh0VGV4dC50ZXh0KFwidnMuIHByZXZpb3VzIG1vbnRoXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1IckNvbXBhcmlzb25Db2RlLldJVEhfUFJFVklPVVNfWUVBUjpcclxuICAgICAgICB0aGlzLmNvbXBhcmlzb25UZXh0VGV4dC50ZXh0KFwidnMuIHByZXZpb3VzIHllYXJcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5jb21wYXJpc29uVGV4dFRleHQudGV4dChcIi1cIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cclxuXHJcbiAgICBjb25zdCBpbml0aWFsRGF0YXNldDogYW55W10gPSB0aGlzLmRhdGFzZXQ7XHJcbiAgICBjb25zdCBtaW5Qb2ludDogYW55ID0gaW5pdGlhbERhdGFzZXQucmVkdWNlKChtaW4sIGN1cnJlbnQpID0+IGN1cnJlbnQueSA8IG1pbi55ID8gY3VycmVudCA6IG1pbik7XHJcbiAgICBjb25zdCBtYXhQb2ludDogYW55ID0gaW5pdGlhbERhdGFzZXQucmVkdWNlKChtYXgsIGN1cnJlbnQpID0+IGN1cnJlbnQueSA+IG1heC55ID8gY3VycmVudCA6IG1heCk7XHJcblxyXG4gICAgY29uc3QgeFNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAuZG9tYWluKFswLCBkMy5tYXgoaW5pdGlhbERhdGFzZXQsIGQgPT4gZC54KV0pXHJcbiAgICAgIC5yYW5nZShbMCwgdGhpcy5ncmFwaFdpZHRoXSk7XHJcblxyXG4gICAgY29uc3QgeVNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAuZG9tYWluKFttaW5Qb2ludC55LCBtYXhQb2ludC55XSlcclxuICAgICAgLnJhbmdlKFt0aGlzLmdyYXBoSGVpZ2h0LCAwXSk7XHJcblxyXG4gICAgdGhpcy5jb25uZWN0aW5nTGluZSA9IGQzLmxpbmUoKVxyXG4gICAgICAueCgoZDogYW55KSA9PiB4U2NhbGUoZC54KSlcclxuICAgICAgLnkoKGQ6IGFueSkgPT4geVNjYWxlKGQueSkpXHJcbiAgICAgIC5kZWZpbmVkKChkLCBpKSA9PiBpID49IDAgJiYgaSA8IGluaXRpYWxEYXRhc2V0Lmxlbmd0aCk7XHJcblxyXG4gICAgdGhpcy5ncmF5R3JvdXAuYXBwZW5kKFwicGF0aFwiKVxyXG4gICAgICAuZGF0dW0oaW5pdGlhbERhdGFzZXQpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJkYXJrZ3JheVwiKVxyXG4gICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAzKVxyXG4gICAgICAuYXR0cihcImRcIiwgdGhpcy5jb25uZWN0aW5nTGluZSk7XHJcblxyXG4gICAgdGhpcy5ncmF5R3JvdXAuc2VsZWN0QWxsKFwiY2lyY2xlXCIpXHJcbiAgICAgIC5kYXRhKGluaXRpYWxEYXRhc2V0KVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXHJcbiAgICAgIC5hdHRyKFwiY3hcIiwgZCA9PiB4U2NhbGUoZC54KSlcclxuICAgICAgLmF0dHIoXCJjeVwiLCBkID0+IHlTY2FsZShkLnkpKVxyXG4gICAgICAuYXR0cihcInJcIiwgNSlcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIGQgPT4ge1xyXG4gICAgICAgIGlmIChkID09PSBtaW5Qb2ludCkgcmV0dXJuIFwiI0ZGOEMwMFwiOyAvLyBTZXQgbG93ZXN0IHBvaW50IHRvICNGRjhDMDBcclxuICAgICAgICBpZiAoZCA9PT0gbWF4UG9pbnQpIHJldHVybiBcIiMzMTU4OTdcIjsgLy8gU2V0IGhpZ2hlc3QgcG9pbnQgdG8gIzMxNTg5N1xyXG4gICAgICAgIHJldHVybiBcIm5vbmVcIjsgLy8gU2V0IHRoZSBvdGhlciBwb2ludHMgdHJhbnNwYXJlbnRcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoZCA9PT0gbWluUG9pbnQpIHJldHVybiBkMy5jb2xvcihcIiNGRjhDMDBcIikhLmRhcmtlcigwLjIpOyAvLyBEYXJrZW4gI0ZGOEMwMCBjb2xvclxyXG4gICAgICAgIGlmIChkID09PSBtYXhQb2ludCkgcmV0dXJuIGQzLmNvbG9yKFwiIzMxNTg5N1wiKSEuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjMzE1ODk3IGNvbG9yXHJcbiAgICAgICAgcmV0dXJuIFwibm9uZVwiOyAvLyBObyBzdHJva2UgZm9yIG90aGVyIHBvaW50c1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAzKTsgLy8gU2V0IHN0cm9rZSB3aWR0aFxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlTWV0cmljVmFsdWUoKTtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNDb21wYXJpc29uVmFsdWUoKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxufSIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtc3RhdGlzdGljLXdpZGdldC1jb250YWluZXJcIj5cclxuICAgIFxyXG48L2Rpdj4iXX0=
618
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBNEIsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekosT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7O0FBRXpCLE1BQU0sQ0FBTixJQUFZLG9CQUdYO0FBSEQsV0FBWSxvQkFBb0I7SUFDOUIsbUVBQTJDLENBQUE7SUFDM0MsaUVBQXlDLENBQUE7QUFDM0MsQ0FBQyxFQUhXLG9CQUFvQixLQUFwQixvQkFBb0IsUUFHL0I7QUFTRCxNQUFNLENBQU4sSUFBWSxnQ0FJWDtBQUpELFdBQVksZ0NBQWdDO0lBQzFDLHVEQUFtQixDQUFBO0lBQ25CLHVEQUFtQixDQUFBO0lBQ25CLDZEQUF5QixDQUFBO0FBQzNCLENBQUMsRUFKVyxnQ0FBZ0MsS0FBaEMsZ0NBQWdDLFFBSTNDO0FBK0JELE1BQU0sT0FBTyw0QkFBNEI7SUFnRXZDO1FBOURBLFdBQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFhLENBQUM7UUFDckMsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWlDLENBQUM7UUFDMUQsVUFBSyxHQUFH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Q2xEekMsOEVBRU07OzJGRGdETyw0QkFBNEI7a0JBVnhDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxFQUVSLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNO3dEQWlCdEMsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVrQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIGVmZmVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5cclxuZXhwb3J0IGVudW0gRW51bUhyQ29tcGFyaXNvbkNvZGUge1xyXG4gIFdJVEhfUFJFVklPVVNfTU9OVEggPSAnV0lUSF9QUkVWSU9VU19NT05USCcsXHJcbiAgV0lUSF9QUkVWSU9VU19ZRUFSID0gJ1dJVEhfUFJFVklPVVNfWUVBUicsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUhyTWV0cmljIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBjb21wYXJpc29uQ29kZTogRW51bUhyQ29tcGFyaXNvbkNvZGU7XHJcbiAgZGF0YVR5cGU6IEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZSB7XHJcbiAgSU5URUdFUiA9ICdJTlRFR0VSJyxcclxuICBERUNJTUFMID0gJ0RFQ0lNQUwnLFxyXG4gIFBFUkNFTlRBR0UgPSAnUEVSQ0VOVEFHRScsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdyYXBoTWFyZ2luUGFkZGluZyB7XHJcbiAgdG9wOiBudW1iZXI7XHJcbiAgcmlnaHQ6IG51bWJlcjtcclxuICBib3R0b206IG51bWJlcjtcclxuICBsZWZ0OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhc2V0IHtcclxuICB4OiBudW1iZXI7XHJcbiAgeTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlU3RhdGlzdGljV2lkZ2V0SW5wdXRzIHtcclxuICBtZXRyaWM6IElIck1ldHJpYztcclxuICBkYXRhc2V0OiBJQ29yZVN0YXRpc3RpY1dpZGdldERhdGFzZXRbXTtcclxuICB2YWx1ZTogbnVtYmVyO1xyXG4gIGNvbXBhcmlzb25WYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtc3RhdGlzdGljLXdpZGdldCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcblxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtc3RhdGlzdGljLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2NvcmUtc3RhdGlzdGljLXdpZGdldC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVTdGF0aXN0aWNXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBtZXRyaWMgPSBpbnB1dC5yZXF1aXJlZDxJSHJNZXRyaWM+KCk7XHJcbiAgZGF0YXNldCA9IGlucHV0LnJlcXVpcmVkPElDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YXNldFtdPigpO1xyXG4gIHZhbHVlID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xyXG4gIGNvbXBhcmlzb25WYWx1ZSA9IGlucHV0LnJlcXVpcmVkPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcclxuICBpbm5lckdyb3VwQmFja2dyb3VuZENvbG9yID0gaW5wdXQ8c3RyaW5nPigndHJhbnNwYXJlbnQnKTtcclxuXHJcbiAgLy9ASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBtZXRyaWMhOiBJSHJNZXRyaWM7XHJcbiAgLy9ASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBkYXRhc2V0ITogSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhc2V0W107XHJcbiAgLy9ASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIC8vQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY29tcGFyaXNvblZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPSAwLjU0O1xyXG5cclxuICBASW5wdXQoKSB2YWx1ZUZvbnRTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG1hcmdpbjogSUdyYXBoTWFyZ2luUGFkZGluZyA9IHsgdG9wOiAzMCwgcmlnaHQ6IDMwLCBib3R0b206IDMwLCBsZWZ0OiAzMCB9O1xyXG4gIEBJbnB1dCgpIHBhZGRpbmc6IElHcmFwaE1hcmdpblBhZGRpbmcgPSB7IHRvcDogMzAsIHJpZ2h0OiAzMCwgYm90dG9tOiAzMCwgbGVmdDogMzAgfTtcclxuICBASW5wdXQoKSBvdXRlcldpZHRoOiBudW1iZXIgPSAzMjA7XHJcbiAgQElucHV0KCkgb3V0ZXJIZWlnaHQ6IG51bWJlciA9IDMyMDtcclxuICBASW5wdXQoKSBkaXZpc29yTGluZU1hcmdpbjogSUdyYXBoTWFyZ2luUGFkZGluZyA9IHsgdG9wOiA0LCByaWdodDogOCwgYm90dG9tOiA4LCBsZWZ0OiA4IH07XHJcbiAgQElucHV0KCkgdGl0bGVGaWxsQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiYmxhY2tcIik7XHJcbiAgQElucHV0KCkgZGl2aXNvckxpbmVTdHJva2VDb2xvcjogYW55ID0gZDMuY29sb3IoXCJncmF5XCIpO1xyXG4gIEBJbnB1dCgpIGRpdmlzb3JMaW5lU3Ryb2tlV2lkdGg6IG51bWJlciA9IDM7XHJcbiAgQElucHV0KCkgdmFsdWVGaWxsQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiYmxhY2tcIik7XHJcblxyXG4gIEBJbnB1dCgpIGNvbXBhcmlzb25WYWx1ZUZpbGxDb2xvcjogYW55ID0gZDMuY29sb3IoXCJibGFja1wiKTtcclxuICBASW5wdXQoKSBjb21wYXJpc29uVGV4dEZpbGxDb2xvcjogYW55ID0gZDMuY29sb3IoXCJibGFja1wiKTtcclxuICBASW5wdXQoKSBzaG93QXhlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG5cclxuICBpbm5lcldpZHRoID0gdGhpcy5vdXRlcldpZHRoIC0gdGhpcy5tYXJnaW4ubGVmdCAtIHRoaXMubWFyZ2luLnJpZ2h0O1xyXG4gIGlubmVySGVpZ2h0ID0gdGhpcy5vdXRlckhlaWdodCAtIHRoaXMubWFyZ2luLnRvcCAtIHRoaXMubWFyZ2luLmJvdHRvbTtcclxuICB3aWR0aCA9IHRoaXMuaW5uZXJXaWR0aCAtIHRoaXMucGFkZGluZy5sZWZ0IC0gdGhpcy5wYWRkaW5nLnJpZ2h0O1xyXG4gIGhlaWdodCA9IHRoaXMuaW5uZXJIZWlnaHQgLSB0aGlzLnBhZGRpbmcudG9wIC0gdGhpcy5wYWRkaW5nLmJvdHRvbTtcclxuXHJcbiAgZ3JhcGhXaWR0aCA9IHRoaXMud2lkdGggLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLnJpZ2h0O1xyXG4gIGdyYXBoSGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyA0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b207XHJcbiAgdGl0bGVSZWN0V2lkdGggPSB0aGlzLndpZHRoIC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5yaWdodDtcclxuICB0aXRsZVJlY3RIZWlnaHQgPSB0aGlzLmdyYXBoSGVpZ2h0ICogMiAvIDMgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLnRvcCAqIDI7XHJcbiAgdmFsdWVSZWN0V2lkdGggPSB0aGlzLnRpdGxlUmVjdFdpZHRoO1xyXG4gIHZhbHVlUmVjdEhlaWdodCA9IHRoaXMuaGVpZ2h0IC8gMyAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tO1xyXG4gIGNvbXBhcmlzb25WYWx1ZVJlY3RXaWR0aCA9IHRoaXMudGl0bGVSZWN0V2lkdGg7XHJcbiAgY29tcGFyaXNvblZhbHVlUmVjdEhlaWdodCA9ICh0aGlzLmhlaWdodCAvIDQgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmJvdHRvbSkgLyAyO1xyXG4gIGNvbXBhcmlzb25UZXh0UmVjdFdpZHRoID0gdGhpcy50aXRsZVJlY3RXaWR0aDtcclxuICBjb21wYXJpc29uVGV4dFJlY3RIZWlnaHQgPSAodGhpcy5oZWlnaHQgLyA0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b20pIC8gMjtcclxuXHJcbiAgeCA9IGQzLnNjYWxlTGluZWFyKCkucmFuZ2UoWzAsIHRoaXMuZ3JhcGhXaWR0aF0pO1xyXG4gIHkgPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlKFt0aGlzLmdyYXBoSGVpZ2h0LCAwXSk7XHJcblxyXG4gIHByaXZhdGUgcHJldmlvdXNWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgcHJldmlvdXNDb21wYXJpc29uVmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgLy9UbyByZW1vdmUgb25seSB0aGUgbnVtYmVycyB3aGlsZSBrZWVwaW5nIHRoZSB0aWNrcyBvbiB0aGUgYXhlcywgXHJcbiAgLy95b3UgY2FuIHNlbGVjdCB0aGUgdGV4dCBlbGVtZW50cyBvZiB0aGUgdGlja3MgYW5kIGhpZGUgdGhlbSB1c2luZyBDU1MuIFxyXG4gIC8vSGVyZSdzIGhvdyB5b3UgY2FuIG1vZGlmeSB0aGUgY29kZSB0byBhY2hpZXZlIHRoYXQ6XHJcblxyXG4gIHhBeGlzQ2FsbCA9IGQzLmF4aXNCb3R0b20odGhpcy54KVxyXG4gICAgLnRpY2tTaXplSW5uZXIoMTApIC8vIEFkanVzdCB0aGUgbGVuZ3RoIG9mIHRoZSB0aWNrcyBhcyBuZWVkZWRcclxuICAgIC50aWNrU2l6ZU91dGVyKDApOyAvLyBIaWRlIG91dGVyIHRpY2tzXHJcblxyXG4gIHlBeGlzQ2FsbCA9IGQzLmF4aXNMZWZ0KHRoaXMueSlcclxuICAgIC50aWNrU2l6ZUlubmVyKDEwKSAvLyBBZGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgdGlja3MgYXMgbmVlZGVkXHJcbiAgICAudGlja1NpemVPdXRlcigxMCk7IC8vIEhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY05hbWUoKTtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNWYWx1ZSgpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY0NvbXBhcmlzb25WYWx1ZSgpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY0NvbXBhcmlzb25UZXh0KCk7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YXNldCgpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICghIWNoYW5nZXNbJ21ldHJpYyddKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlTWV0cmljTmFtZSgpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY1ZhbHVlKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlTWV0cmljQ29tcGFyaXNvblZhbHVlKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlTWV0cmljQ29tcGFyaXNvblRleHQoKTtcclxuICAgIH1cclxuICAgIGlmICghIWNoYW5nZXNbJ2RhdGFzZXQnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZURhdGFzZXQoKTtcclxuICAgIH1cclxuICAgIGlmICghIWNoYW5nZXNbJ3ZhbHVlJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhY2hhbmdlc1snY29tcGFyaXNvblZhbHVlJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNDb21wYXJpc29uVmFsdWUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZU1ldHJpY05hbWUoKTogdm9pZCB7XHJcbiAgICB2YXIgbmFtZUVsZW1lbnQgPSBkMy5zZWxlY3QoXCIjbWV0cmljX1wiICsgdGhpcy5tZXRyaWMoKS5pZCArIFwiX25hbWVcIilcclxuICAgIG5hbWVFbGVtZW50LnRyYW5zaXRpb24oKS50ZXh0KHRoaXMubWV0cmljKCkubmFtZSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVNZXRyaWNWYWx1ZSgpOiB2b2lkIHtcclxuICAgIHZhciB2YWx1ZUVsZW1lbnQgPSBkMy5zZWxlY3QoXCIjbWV0cmljX1wiICsgdGhpcy5tZXRyaWMoKS5pZCArIFwiX3ZhbHVlXCIpO1xyXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByZXZpb3VzVmFsdWUgfHwgdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgZW5kID0gdGhpcy52YWx1ZSgpIHx8IHVuZGVmaW5lZDtcclxuICAgIHN3aXRjaCAodGhpcy5tZXRyaWMoKS5kYXRhVHlwZSkge1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLklOVEVHRVI6XHJcbiAgICAgICAgdmFsdWVFbGVtZW50XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGlmICghIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVFbGVtZW50LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghIWVuZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoZW5kKSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiB2YWx1ZUVsZW1lbnQudGV4dCgnTi9BJylcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLkRFQ0lNQUw6XHJcbiAgICAgICAgdmFsdWVFbGVtZW50XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGlmICghIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVFbGVtZW50LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDApIC8gMTAwKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghIWVuZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoZW5kICogMTAwKSAvIDEwMClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiB2YWx1ZUVsZW1lbnQudGV4dChcIk4vQVwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLlBFUkNFTlRBR0U6XHJcbiAgICAgICAgdmFsdWVFbGVtZW50XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhc3RhcnQgJiYgISFlbmQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZUVsZW1lbnQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSAqIDEwMDAwKSAvIDEwMCArIFwiJVwiKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghIWVuZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoZW5kICogMTAwMDApIC8gMTAwICsgXCIlXCIpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gdmFsdWVFbGVtZW50LnRleHQoXCJOL0FcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHZhbHVlRWxlbWVudC50cmFuc2l0aW9uKCkudGV4dCgodGhpcy52YWx1ZSgpIHx8ICdOL0EnKS50b1N0cmluZygpKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMucHJldmlvdXNWYWx1ZSA9IHRoaXMudmFsdWUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU1ldHJpY0NvbXBhcmlzb25WYWx1ZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXJ0OiBudW1iZXIgfCB1bmRlZmluZWQgPSB0aGlzLnByZXZpb3VzQ29tcGFyaXNvblZhbHVlO1xyXG4gICAgY29uc3QgZW5kOiBudW1iZXIgfCB1bmRlZmluZWQgPSB0aGlzLmNvbXBhcmlzb25WYWx1ZSgpO1xyXG4gICAgdmFyIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnQgPSBkMy5zZWxlY3QoXCIjbWV0cmljX1wiICsgdGhpcy5tZXRyaWMoKS5pZCArIFwiX2NvbXBhcmlzb25WYWx1ZVwiKTtcclxuICAgIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnQuYXR0cihcImZpbGxcIiwgKHRoaXMuY29tcGFyaXNvblZhbHVlKCkgfHwgMCkgPj0gMCA/IHRoaXMuY29tcGFyaXNvblRleHRGaWxsQ29sb3IgOiBkMy5jb2xvcihcInJlZFwiKSk7XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljKCkuZGF0YVR5cGUpIHtcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5JTlRFR0VSOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLnZhbHVlKCkgJiYgISFzdGFydCAmJiAhIWVuZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlTnVtYmVyKHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IGNvbXBhcmlzb25WYWx1ZUVsZW1lbnQudGV4dChcIk4vQVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuREVDSU1BTDpcclxuICAgICAgICBjb21wYXJpc29uVmFsdWVFbGVtZW50XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy52YWx1ZSgpICYmICEhc3RhcnQgJiYgISFlbmQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVFbGVtZW50LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDApIC8gMTAwKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiBjb21wYXJpc29uVmFsdWVFbGVtZW50LnRleHQoXCJOL0FcIilcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLlBFUkNFTlRBR0U6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlRWxlbWVudFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMudmFsdWUoKSAmJiAhIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwMDApIC8gMTAwICsgXCIlXCIpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IGNvbXBhcmlzb25WYWx1ZUVsZW1lbnQudGV4dChcIk4vQVwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb21wYXJpc29uVmFsdWVFbGVtZW50LnRyYW5zaXRpb24oKS50ZXh0KCh0aGlzLmNvbXBhcmlzb25WYWx1ZSgpIHx8ICdOL0EnKS50b1N0cmluZygpKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZU1ldHJpY0NvbXBhcmlzb25UZXh0KCk6IHZvaWQge1xyXG4gICAgdmFyIGNvbXBhcmlzb25UZXh0RWxlbWVudCA9IGQzLnNlbGVjdChcIiNtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYygpLmlkICsgXCJfY29tcGFyaXNvblRleHRcIik7XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljKCkuY29tcGFyaXNvbkNvZGUpIHtcclxuICAgICAgY2FzZSBFbnVtSHJDb21wYXJpc29uQ29kZS5XSVRIX1BSRVZJT1VTX01PTlRIOlxyXG4gICAgICAgIGNvbXBhcmlzb25UZXh0RWxlbWVudC50ZXh0KFwidnMuIHByZXZpb3VzIG1vbnRoXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1IckNvbXBhcmlzb25Db2RlLldJVEhfUFJFVklPVVNfWUVBUjpcclxuICAgICAgICBjb21wYXJpc29uVGV4dEVsZW1lbnQudGV4dChcInZzLiBwcmV2aW91cyB5ZWFyXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbXBhcmlzb25UZXh0RWxlbWVudC50ZXh0KFwiLVwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZURhdGFzZXQoKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3QgbWluUG9pbnQgPSB0aGlzLmRhdGFzZXQoKS5yZWR1Y2UoKG1pbiwgY3VycmVudCkgPT4gY3VycmVudC55IDwgbWluLnkgPyBjdXJyZW50IDogbWluKTtcclxuICAgIGNvbnN0IG1heFBvaW50ID0gdGhpcy5kYXRhc2V0KCkucmVkdWNlKChtYXgsIGN1cnJlbnQpID0+IGN1cnJlbnQueSA+IG1heC55ID8gY3VycmVudCA6IG1heCk7XHJcblxyXG4gICAgLy8gVXBkYXRlIHNjYWxlc1xyXG4gICAgY29uc3QgeFNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAuZG9tYWluKFswLCBkMy5tYXgodGhpcy5kYXRhc2V0KCksIChkOiBhbnkpID0+IGQueCldKVxyXG4gICAgICAucmFuZ2UoWzAsIHRoaXMuZ3JhcGhXaWR0aF0pO1xyXG5cclxuICAgIGNvbnN0IHlTY2FsZSA9IGQzLnNjYWxlTGluZWFyKClcclxuICAgICAgLmRvbWFpbihbbWluUG9pbnQueSwgbWF4UG9pbnQueV0pXHJcbiAgICAgIC5yYW5nZShbdGhpcy5ncmFwaEhlaWdodCwgMF0pO1xyXG5cclxuICAgIGNvbnN0IHhBeGlzQ2FsbCA9IGQzLmF4aXNCb3R0b20oeFNjYWxlKVxyXG4gICAgICAudGlja1NpemVJbm5lcigxMCkgLy8gQWRqdXN0IHRoZSBsZW5ndGggb2YgdGhlIHRpY2tzIGFzIG5lZWRlZFxyXG4gICAgICAudGlja1NpemVPdXRlcigwKTsgLy8gSGlkZSBvdXRlciB0aWNrc1xyXG5cclxuICAgIGNvbnN0IHlBeGlzQ2FsbCA9IGQzLmF4aXNMZWZ0KHlTY2FsZSlcclxuICAgICAgLnRpY2tTaXplSW5uZXIoMTApIC8vIEFkanVzdCB0aGUgbGVuZ3RoIG9mIHRoZSB0aWNrcyBhcyBuZWVkZWRcclxuICAgICAgLnRpY2tTaXplT3V0ZXIoMTApOyAvLyBEbyBub3QgaGlkZSBvdXRlciB0aWNrc1xyXG5cclxuICAgIC8vIFVwZGF0ZSBheGVzXHJcbiAgICAvL3hBeGlzLmNhbGwoeEF4aXNDYWxsKTtcclxuICAgIC8veUF4aXMuY2FsbCh5QXhpc0NhbGwpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBjb25uZWN0aW5nIGxpbmVcclxuICAgIHRoaXMuY29ubmVjdGluZ0xpbmUgPSBkMy5saW5lKClcclxuICAgICAgLngoKGQ6IGFueSkgPT4geFNjYWxlKGQueCkpXHJcbiAgICAgIC55KChkOiBhbnkpID0+IHlTY2FsZShkLnkpKVxyXG4gICAgICAuZGVmaW5lZCgoZCwgaSkgPT4gaSA+PSAwICYmIGkgPCB0aGlzLmRhdGFzZXQoKS5sZW5ndGgpO1xyXG5cclxuICAgIGQzLnNlbGVjdChcIiNtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYygpLmlkICsgXCJfc2NhdHRlci1wbG90XCIpLnNlbGVjdChcInBhdGhcIilcclxuICAgICAgLmRhdHVtKHRoaXMuZGF0YXNldCgpKVxyXG4gICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgIC5hdHRyKFwiZFwiLCB0aGlzLmNvbm5lY3RpbmdMaW5lKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgY2lyY2xlc1xyXG4gICAgY29uc3QgY2lyY2xlczogYW55ID0gZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljKCkuaWQgKyBcIl9zY2F0dGVyLXBsb3RcIikuc2VsZWN0QWxsKFwiY2lyY2xlXCIpXHJcbiAgICAgIC5kYXRhKHRoaXMuZGF0YXNldCgpKTtcclxuXHJcbiAgICBjaXJjbGVzLmV4aXQoKS5yZW1vdmUoKTtcclxuXHJcbiAgICBjaXJjbGVzLmVudGVyKClcclxuICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAubWVyZ2UoY2lyY2xlcylcclxuICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAuYXR0cihcImN4XCIsIGQgPT4geFNjYWxlKGQueCkpXHJcbiAgICAgIC5hdHRyKFwiY3lcIiwgZCA9PiB5U2NhbGUoZC55KSlcclxuICAgICAgLmF0dHIoXCJyXCIsIDUpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBkID0+IHtcclxuICAgICAgICBpZiAoZCA9PT0gbWluUG9pbnQpIHJldHVybiBcIiNGRjhDMDBcIjsgLy8gU2V0IGxvd2VzdCBwb2ludCB0byAjRkY4QzAwXHJcbiAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gXCIjMzE1ODk3XCI7IC8vIFNldCBoaWdoZXN0IHBvaW50IHRvICMzMTU4OTdcclxuICAgICAgICByZXR1cm4gXCJub25lXCI7IC8vIE1ha2UgdGhlIG90aGVyIHBvaW50cyB0cmFuc3BhcmVudFxyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChkID09PSBtaW5Qb2ludCkgcmV0dXJuIGQzLmNvbG9yKFwiI0ZGOEMwMFwiKSEuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjRkY4QzAwIGNvbG9yXHJcbiAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gZDMuY29sb3IoXCIjMzE1ODk3XCIpIS5kYXJrZXIoMC4yKTsgLy8gRGFya2VuICMzMTU4OTcgY29sb3JcclxuICAgICAgICByZXR1cm4gXCJub25lXCI7IC8vIE5vIHN0cm9rZSBmb3Igb3RoZXIgcG9pbnRzXHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDMpOyAvLyBTZXQgc3Ryb2tlIHdpZHRoXHJcbiAgfVxyXG5cclxuICBzdmc6IGFueTtcclxuICBpbm5lckdyb3VwOiBhbnk7XHJcbiAgZ3JlZW5Hcm91cDogYW55O1xyXG4gIHRpdGxlR3JvdXA6IGFueTtcclxuICB2YWx1ZUdyb3VwOiBhbnk7XHJcbiAgdmFsdWVUZXh0OiBhbnk7XHJcbiAgZ3JheUdyb3VwOiBhbnk7XHJcbiAgY29tcGFyaXNvblZhbHVlR3JvdXA6IGFueTtcclxuICBjb21wYXJpc29uVGV4dEdyb3VwOiBhbnk7XHJcbiAgY29tcGFyaXNvblZhbHVlVGV4dDogYW55O1xyXG4gIGNvbXBhcmlzb25UZXh0VGV4dDogYW55O1xyXG4gIGNvbm5lY3RpbmdMaW5lOiBhbnk7XHJcblxyXG4gIGludGVydmFsSWQ6IGFueTtcclxuXHJcbiAgYXN5bmMgZHJhd0dyYXBoKCkge1xyXG4gICAgdGhpcy5zdmcgPSBkMy5zZWxlY3QodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudClcclxuICAgICAgLmFwcGVuZChcInN2Z1wiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMub3V0ZXJXaWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5vdXRlckhlaWdodCk7XHJcblxyXG4gICAgdGhpcy5zdmcuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMub3V0ZXJXaWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5vdXRlckhlaWdodClcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XHJcblxyXG4gICAgdGhpcy5pbm5lckdyb3VwID0gdGhpcy5zdmcuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMubWFyZ2luLmxlZnQgKyBcIixcIiArIHRoaXMubWFyZ2luLnRvcCArIFwiKVwiKTtcclxuXHJcbiAgICB0aGlzLmlubmVyR3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiYmx1ZS1yZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCB0aGlzLmlubmVyR3JvdXBCYWNrZ3JvdW5kQ29sb3IoKSlcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLmlubmVyV2lkdGgpXHJcbiAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMuaW5uZXJIZWlnaHQpO1xyXG5cclxuICAgIHRoaXMuZ3JlZW5Hcm91cCA9IHRoaXMuaW5uZXJHcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5wYWRkaW5nLmxlZnQgKyBcIixcIiArIHRoaXMucGFkZGluZy50b3AgKyBcIilcIik7XHJcblxyXG4gICAgdGhpcy5ncmVlbkdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyZWVuLXJlY3RcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLndpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmhlaWdodCk7XHJcblxyXG4gICAgdGhpcy50aXRsZUdyb3VwID0gdGhpcy5ncmVlbkdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRpdGxlLWdyb3VwXCIpXHJcbiAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0ICsgXCIsXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLnRvcCArIFwiKVwiKTtcclxuXHJcbiAgICB0aGlzLnRpdGxlR3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0aXRsZS1yZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy50aXRsZVJlY3RXaWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy50aXRsZVJlY3RIZWlnaHQpO1xyXG5cclxuICAgIHRoaXMudGl0bGVHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgIC5hdHRyKFwiaWRcIiwgXCJtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYygpLmlkICsgXCJfbmFtZVwiKVxyXG4gICAgICAuYXR0cihcInhcIiwgdGhpcy50aXRsZVJlY3RXaWR0aCAvIDIpXHJcbiAgICAgIC5hdHRyKFwieVwiLCB0aGlzLnRpdGxlUmVjdEhlaWdodCAvIDIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmFwaC10aXRsZVwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgdGhpcy50aXRsZUZpbGxDb2xvcilcclxuICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgdGhpcy50aXRsZVJlY3RIZWlnaHQpXHJcbiAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIilcclxuICAgICAgLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIilcclxuICAgICAgLnRleHQodGhpcy5tZXRyaWMoKS5uYW1lKTtcclxuXHJcbiAgICB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwibGluZVwiKVxyXG4gICAgICAuYXR0cihcIngxXCIsIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdClcclxuICAgICAgLmF0dHIoXCJ5MVwiLCB0aGlzLmdyYXBoSGVpZ2h0ICogMiAvIDMpXHJcbiAgICAgIC5hdHRyKFwieDJcIiwgdGhpcy53aWR0aCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ucmlnaHQpXHJcbiAgICAgIC5hdHRyKFwieTJcIiwgdGhpcy5ncmFwaEhlaWdodCAqIDIgLyAzKVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCB0aGlzLmRpdmlzb3JMaW5lU3Ryb2tlQ29sb3IpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIHRoaXMuZGl2aXNvckxpbmVTdHJva2VXaWR0aCk7XHJcblxyXG4gICAgY29uc3QgdmFsdWVHcm91cFRyYW5zbGF0ZVkgPSB0aGlzLmhlaWdodCAvIDIgLyAzICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b207XHJcbiAgICB0aGlzLnZhbHVlR3JvdXAgPSB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwidmFsdWUtZ3JvdXBcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIixcIiArIHZhbHVlR3JvdXBUcmFuc2xhdGVZICsgXCIpXCIpO1xyXG5cclxuICAgIHRoaXMudmFsdWVHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZhbHVlLXJlY3RcIilcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLnZhbHVlUmVjdFdpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLnZhbHVlUmVjdEhlaWdodCk7XHJcblxyXG4gICAgdGhpcy52YWx1ZVRleHQgPSB0aGlzLnZhbHVlR3JvdXAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAuYXR0cihcImlkXCIsIFwibWV0cmljX1wiICsgdGhpcy5tZXRyaWMoKS5pZCArIFwiX3ZhbHVlXCIpXHJcbiAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnZhbHVlUmVjdFdpZHRoIC8gMilcclxuICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMudmFsdWVSZWN0SGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXZhbHVlXCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCB0aGlzLnZhbHVlRmlsbENvbG9yKVxyXG4gICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCAodGhpcy52YWx1ZUZvbnRTaXplIHx8IHRoaXMudmFsdWVSZWN0SGVpZ2h0KSArIFwicHhcIilcclxuICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKTtcclxuXHJcbiAgICBjb25zdCBzdGFydCA9IDA7XHJcbiAgICBjb25zdCBlbmQgPSB0aGlzLnZhbHVlKCk7XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljKCkuZGF0YVR5cGUpIHtcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5JTlRFR0VSOlxyXG4gICAgICAgIHRoaXMudmFsdWVUZXh0XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhc3RhcnQgJiYgISFlbmQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlVGV4dC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gdGhpcy52YWx1ZVRleHQudGV4dChcIk4vQVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuREVDSU1BTDpcclxuICAgICAgICB0aGlzLnZhbHVlVGV4dFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSAqIDEwMCkgLyAxMDApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IHRoaXMudmFsdWVUZXh0LnRleHQoXCJOL0FcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5QRVJDRU5UQUdFOlxyXG4gICAgICAgIHRoaXMudmFsdWVUZXh0XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhc3RhcnQgJiYgISFlbmQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlVGV4dC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwMDApIC8gMTAwICsgXCIlXCIpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IHRoaXMudmFsdWVUZXh0LnRleHQoXCJOL0FcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLnZhbHVlVGV4dC50ZXh0KCh0aGlzLnZhbHVlKCkgfHwgJ04vQScpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gdGhpcy52YWx1ZSgpO1xyXG5cclxuICAgIHRoaXMuZ3JheUdyb3VwID0gdGhpcy5ncmVlbkdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJpZFwiLCBcIm1ldHJpY19cIiArIHRoaXMubWV0cmljKCkuaWQgKyBcIl9zY2F0dGVyLXBsb3RcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIiwgXCIgKyB0aGlzLmhlaWdodCAvIDIgKyBcIilcIik7XHJcblxyXG4gICAgdGhpcy5ncmF5R3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiZ3JhcGgtY29udGFpbmVyXCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBkMy5jb2xvcihcInRyYW5zcGFyZW50XCIpIS5icmlnaHRlcigxKSlcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLmdyYXBoV2lkdGgpXHJcbiAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMuZ3JhcGhIZWlnaHQpO1xyXG5cclxuXHJcbiAgICBjb25zdCB4QXhpcyA9IHRoaXMuZ3JheUdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInggYXhpc1wiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZSgwLFwiICsgdGhpcy5ncmFwaEhlaWdodCArIFwiKVwiKTtcclxuXHJcbiAgICBjb25zdCB5QXhpcyA9IHRoaXMuZ3JheUdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInkgYXhpc1wiKTtcclxuXHJcbiAgICAvL3hBeGlzLmNhbGwoeEF4aXNDYWxsKTtcclxuICAgIC8veUF4aXMuY2FsbCh5QXhpc0NhbGwpO1xyXG5cclxuICAgIC8vIFNlbGVjdCB0ZXh0IGVsZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aWNrcyBhbmQgaGlkZSB0aGVtXHJcbiAgICB0aGlzLmdyYXlHcm91cC5zZWxlY3RBbGwoXCIudGljayB0ZXh0XCIpLmF0dHIoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuXHJcbiAgICBjb25zdCBjb21wYXJpc29uVmFsdWVHcm91cFRyYW5zbGF0ZVkgPSB0aGlzLmhlaWdodCAqIDMgLyA0ICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b207XHJcbiAgICB0aGlzLmNvbXBhcmlzb25WYWx1ZUdyb3VwID0gdGhpcy5ncmVlbkdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImNvbXBhcmlzb24tdmFsdWUtZ3JvdXBcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIixcIiArIGNvbXBhcmlzb25WYWx1ZUdyb3VwVHJhbnNsYXRlWSArIFwiKVwiKTtcclxuXHJcbiAgICB0aGlzLmNvbXBhcmlzb25WYWx1ZUdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwidmFsdWUtcmVjdFwiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMuY29tcGFyaXNvblZhbHVlUmVjdFdpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RIZWlnaHQpO1xyXG5cclxuICAgIGNvbnN0IGNvbXBhcmlzb25WYWx1ZVRleHQgPSB0aGlzLmNvbXBhcmlzb25WYWx1ZUdyb3VwLmFwcGVuZChcInRleHRcIilcclxuICAgICAgLmF0dHIoXCJpZFwiLCBcIm1ldHJpY19cIiArIHRoaXMubWV0cmljKCkuaWQgKyBcIl9jb21wYXJpc29uVmFsdWVcIilcclxuICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMuY29tcGFyaXNvblZhbHVlUmVjdFdpZHRoIC8gMilcclxuICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMuY29tcGFyaXNvblZhbHVlUmVjdEhlaWdodCAvIDIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmFwaC12YWx1ZVwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgKHRoaXMuY29tcGFyaXNvblZhbHVlKCkgfHwgMCkgPj0gMCA/IHRoaXMuY29tcGFyaXNvblZhbHVlRmlsbENvbG9yIDogZDMuY29sb3IoXCJyZWRcIikpXHJcbiAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIHRoaXMuY29tcGFyaXNvblZhbHVlUmVjdEhlaWdodCArIFwicHhcIilcclxuICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljKCkuZGF0YVR5cGUpIHtcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5JTlRFR0VSOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZVRleHRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoISFzdGFydCAmJiAhIWVuZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlTnVtYmVyKHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1ZVRleHQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IGNvbXBhcmlzb25WYWx1ZVRleHQudGV4dChcIk4vQVwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLkRFQ0lNQUw6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlVGV4dFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlVGV4dC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwKSAvIDEwMClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gY29tcGFyaXNvblZhbHVlVGV4dC50ZXh0KFwiTi9BXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuUEVSQ0VOVEFHRTpcclxuICAgICAgICBjb21wYXJpc29uVmFsdWVUZXh0XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhc3RhcnQgJiYgISFlbmQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDAwMCkgLyAxMDAgKyBcIiVcIilcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gY29tcGFyaXNvblZhbHVlVGV4dC50ZXh0KFwiTi9BXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlVGV4dC50ZXh0KCh0aGlzLmNvbXBhcmlzb25WYWx1ZSgpIHx8ICdOL0EnKS50b1N0cmluZygpKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMucHJldmlvdXNDb21wYXJpc29uVmFsdWUgPSB0aGlzLmNvbXBhcmlzb25WYWx1ZSgpO1xyXG5cclxuICAgIGNvbnN0IGNvbXBhcmlzb25UZXh0R3JvdXBUcmFuc2xhdGVZID0gdGhpcy5oZWlnaHQgKiAzIC8gNCArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tICsgdGhpcy5jb21wYXJpc29uVGV4dFJlY3RIZWlnaHQ7XHJcbiAgICB0aGlzLmNvbXBhcmlzb25UZXh0R3JvdXAgPSB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiY29tcGFyaXNvbi10ZXh0LWdyb3VwXCIpXHJcbiAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0ICsgXCIsXCIgKyBjb21wYXJpc29uVGV4dEdyb3VwVHJhbnNsYXRlWSArIFwiKVwiKTtcclxuXHJcbiAgICB0aGlzLmNvbXBhcmlzb25UZXh0R3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0ZXh0LXJlY3RcIilcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdFdpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdEhlaWdodCk7XHJcblxyXG4gICAgdGhpcy5jb21wYXJpc29uVGV4dFRleHQgPSB0aGlzLmNvbXBhcmlzb25UZXh0R3JvdXAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAuYXR0cihcImlkXCIsIFwibWV0cmljX1wiICsgdGhpcy5tZXRyaWMoKS5pZCArIFwiX2NvbXBhcmlzb25UZXh0XCIpXHJcbiAgICAgIC5hdHRyKFwieFwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdFdpZHRoIC8gMilcclxuICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMuY29tcGFyaXNvblRleHRSZWN0SGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXRleHRcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIHRoaXMuY29tcGFyaXNvblRleHRGaWxsQ29sb3IpXHJcbiAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIHRoaXMuY29tcGFyaXNvblRleHRSZWN0SGVpZ2h0IC8gMiArIFwicHhcIilcclxuICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljKCkuY29tcGFyaXNvbkNvZGUpIHtcclxuICAgICAgY2FzZSBFbnVtSHJDb21wYXJpc29uQ29kZS5XSVRIX1BSRVZJT1VTX01PTlRIOlxyXG4gICAgICAgIHRoaXMuY29tcGFyaXNvblRleHRUZXh0LnRleHQoXCJ2cy4gcHJldmlvdXMgbW9udGhcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUhyQ29tcGFyaXNvbkNvZGUuV0lUSF9QUkVWSU9VU19ZRUFSOlxyXG4gICAgICAgIHRoaXMuY29tcGFyaXNvblRleHRUZXh0LnRleHQoXCJ2cy4gcHJldmlvdXMgeWVhclwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLmNvbXBhcmlzb25UZXh0VGV4dC50ZXh0KFwiLVwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xyXG5cclxuICAgIGNvbnN0IGluaXRpYWxEYXRhc2V0OiBhbnlbXSA9IHRoaXMuZGF0YXNldCgpO1xyXG4gICAgY29uc3QgbWluUG9pbnQ6IGFueSA9IGluaXRpYWxEYXRhc2V0LnJlZHVjZSgobWluLCBjdXJyZW50KSA9PiBjdXJyZW50LnkgPCBtaW4ueSA/IGN1cnJlbnQgOiBtaW4pO1xyXG4gICAgY29uc3QgbWF4UG9pbnQ6IGFueSA9IGluaXRpYWxEYXRhc2V0LnJlZHVjZSgobWF4LCBjdXJyZW50KSA9PiBjdXJyZW50LnkgPiBtYXgueSA/IGN1cnJlbnQgOiBtYXgpO1xyXG5cclxuICAgIGNvbnN0IHhTY2FsZSA9IGQzLnNjYWxlTGluZWFyKClcclxuICAgICAgLmRvbWFpbihbMCwgZDMubWF4KGluaXRpYWxEYXRhc2V0LCBkID0+IGQueCldKVxyXG4gICAgICAucmFuZ2UoWzAsIHRoaXMuZ3JhcGhXaWR0aF0pO1xyXG5cclxuICAgIGNvbnN0IHlTY2FsZSA9IGQzLnNjYWxlTGluZWFyKClcclxuICAgICAgLmRvbWFpbihbbWluUG9pbnQueSwgbWF4UG9pbnQueV0pXHJcbiAgICAgIC5yYW5nZShbdGhpcy5ncmFwaEhlaWdodCwgMF0pO1xyXG5cclxuICAgIHRoaXMuY29ubmVjdGluZ0xpbmUgPSBkMy5saW5lKClcclxuICAgICAgLngoKGQ6IGFueSkgPT4geFNjYWxlKGQueCkpXHJcbiAgICAgIC55KChkOiBhbnkpID0+IHlTY2FsZShkLnkpKVxyXG4gICAgICAuZGVmaW5lZCgoZCwgaSkgPT4gaSA+PSAwICYmIGkgPCBpbml0aWFsRGF0YXNldC5sZW5ndGgpO1xyXG5cclxuICAgIHRoaXMuZ3JheUdyb3VwLmFwcGVuZChcInBhdGhcIilcclxuICAgICAgLmRhdHVtKGluaXRpYWxEYXRhc2V0KVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgXCJub25lXCIpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiZGFya2dyYXlcIilcclxuICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMylcclxuICAgICAgLmF0dHIoXCJkXCIsIHRoaXMuY29ubmVjdGluZ0xpbmUpO1xyXG5cclxuICAgIHRoaXMuZ3JheUdyb3VwLnNlbGVjdEFsbChcImNpcmNsZVwiKVxyXG4gICAgICAuZGF0YShpbml0aWFsRGF0YXNldClcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAuYXR0cihcImN4XCIsIGQgPT4geFNjYWxlKGQueCkpXHJcbiAgICAgIC5hdHRyKFwiY3lcIiwgZCA9PiB5U2NhbGUoZC55KSlcclxuICAgICAgLmF0dHIoXCJyXCIsIDUpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBkID0+IHtcclxuICAgICAgICBpZiAoZCA9PT0gbWluUG9pbnQpIHJldHVybiBcIiNGRjhDMDBcIjsgLy8gU2V0IGxvd2VzdCBwb2ludCB0byAjRkY4QzAwXHJcbiAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gXCIjMzE1ODk3XCI7IC8vIFNldCBoaWdoZXN0IHBvaW50IHRvICMzMTU4OTdcclxuICAgICAgICByZXR1cm4gXCJub25lXCI7IC8vIFNldCB0aGUgb3RoZXIgcG9pbnRzIHRyYW5zcGFyZW50XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKGQgPT09IG1pblBvaW50KSByZXR1cm4gZDMuY29sb3IoXCIjRkY4QzAwXCIpIS5kYXJrZXIoMC4yKTsgLy8gRGFya2VuICNGRjhDMDAgY29sb3JcclxuICAgICAgICBpZiAoZCA9PT0gbWF4UG9pbnQpIHJldHVybiBkMy5jb2xvcihcIiMzMTU4OTdcIikhLmRhcmtlcigwLjIpOyAvLyBEYXJrZW4gIzMxNTg5NyBjb2xvclxyXG4gICAgICAgIHJldHVybiBcIm5vbmVcIjsgLy8gTm8gc3Ryb2tlIGZvciBvdGhlciBwb2ludHNcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMyk7IC8vIFNldCBzdHJva2Ugd2lkdGhcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY1ZhbHVlKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlTWV0cmljQ29tcGFyaXNvblZhbHVlKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbn0iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLXN0YXRpc3RpYy13aWRnZXQtY29udGFpbmVyXCI+XHJcbiAgICBcclxuPC9kaXY+Il19