ngx-histaff-alpha 2.5.7 → 2.5.8
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.
- package/esm2022/lib/app/libraries/d3/core-statistic-widget/core-statistic-widget.component.mjs +23 -17
- package/fesm2022/ngx-histaff-alpha.mjs +22 -16
- package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
- package/lib/app/libraries/d3/core-statistic-widget/core-statistic-widget.component.d.ts +3 -4
- package/package.json +1 -1
package/esm2022/lib/app/libraries/d3/core-statistic-widget/core-statistic-widget.component.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input, ViewChild,
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, ViewChild, input, signal } from '@angular/core';
|
|
2
2
|
import * as d3 from 'd3';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export var EnumHrComparisonCode;
|
|
@@ -47,8 +47,8 @@ export class CoreStatisticWidgetComponent {
|
|
|
47
47
|
this.comparisonTextRectHeight = (this.height / 4 - this.divisorLineMargin.bottom) / 2;
|
|
48
48
|
this.x = d3.scaleLinear().range([0, this.graphWidth]);
|
|
49
49
|
this.y = d3.scaleLinear().range([this.graphHeight, 0]);
|
|
50
|
-
this.previousValue = undefined;
|
|
51
|
-
this.previousComparisonValue = undefined;
|
|
50
|
+
this.previousValue = signal(undefined);
|
|
51
|
+
this.previousComparisonValue = signal(undefined);
|
|
52
52
|
//To remove only the numbers while keeping the ticks on the axes,
|
|
53
53
|
//you can select the text elements of the ticks and hide them using CSS.
|
|
54
54
|
//Here's how you can modify the code to achieve that:
|
|
@@ -58,14 +58,18 @@ export class CoreStatisticWidgetComponent {
|
|
|
58
58
|
this.yAxisCall = d3.axisLeft(this.y)
|
|
59
59
|
.tickSizeInner(10) // Adjust the length of the ticks as needed
|
|
60
60
|
.tickSizeOuter(10); // Hide outer ticks
|
|
61
|
-
effect(() => {
|
|
62
|
-
this.updateMetricName();
|
|
63
|
-
this.updateMetricValue();
|
|
64
|
-
this.updateMetricComparisonValue();
|
|
65
|
-
this.updateMetricComparisonText();
|
|
66
|
-
this.updateDataset();
|
|
67
|
-
});
|
|
68
61
|
}
|
|
62
|
+
/*
|
|
63
|
+
constructor() {
|
|
64
|
+
effect(() => {
|
|
65
|
+
this.updateMetricName();
|
|
66
|
+
this.updateMetricValue();
|
|
67
|
+
this.updateMetricComparisonValue();
|
|
68
|
+
this.updateMetricComparisonText();
|
|
69
|
+
this.updateDataset();
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
*/
|
|
69
73
|
ngOnChanges(changes) {
|
|
70
74
|
if (!!changes['metric']) {
|
|
71
75
|
this.updateMetricName();
|
|
@@ -89,8 +93,9 @@ export class CoreStatisticWidgetComponent {
|
|
|
89
93
|
}
|
|
90
94
|
updateMetricValue() {
|
|
91
95
|
var valueElement = d3.select("#metric_" + this.metric().id + "_value");
|
|
92
|
-
const start = this.previousValue || undefined;
|
|
96
|
+
const start = this.previousValue() || undefined;
|
|
93
97
|
const end = this.value() || undefined;
|
|
98
|
+
console.log("start, end: ", start, end);
|
|
94
99
|
switch (this.metric().dataType) {
|
|
95
100
|
case EnumICoreStatisticWidgetDataType.INTEGER:
|
|
96
101
|
valueElement
|
|
@@ -153,10 +158,10 @@ export class CoreStatisticWidgetComponent {
|
|
|
153
158
|
valueElement.transition().text((this.value() || 'N/A').toString());
|
|
154
159
|
break;
|
|
155
160
|
}
|
|
156
|
-
this.previousValue
|
|
161
|
+
this.previousValue.set(this.value());
|
|
157
162
|
}
|
|
158
163
|
updateMetricComparisonValue() {
|
|
159
|
-
const start = this.previousComparisonValue;
|
|
164
|
+
const start = this.previousComparisonValue();
|
|
160
165
|
const end = this.comparisonValue();
|
|
161
166
|
var comparisonValueElement = d3.select("#metric_" + this.metric().id + "_comparisonValue");
|
|
162
167
|
comparisonValueElement.attr("fill", (this.comparisonValue() || 0) >= 0 ? this.comparisonTextFillColor : d3.color("red"));
|
|
@@ -355,6 +360,7 @@ export class CoreStatisticWidgetComponent {
|
|
|
355
360
|
.attr("alignment-baseline", "middle");
|
|
356
361
|
const start = 0;
|
|
357
362
|
const end = this.value();
|
|
363
|
+
console.log("start, end: ", start, end);
|
|
358
364
|
switch (this.metric().dataType) {
|
|
359
365
|
case EnumICoreStatisticWidgetDataType.INTEGER:
|
|
360
366
|
this.valueText
|
|
@@ -408,7 +414,7 @@ export class CoreStatisticWidgetComponent {
|
|
|
408
414
|
this.valueText.text((this.value() || 'N/A').toString());
|
|
409
415
|
break;
|
|
410
416
|
}
|
|
411
|
-
this.previousValue
|
|
417
|
+
this.previousValue.set(this.value());
|
|
412
418
|
this.grayGroup = this.greenGroup.append("g")
|
|
413
419
|
.attr("id", "metric_" + this.metric().id + "_scatter-plot")
|
|
414
420
|
.attr("transform", "translate(" + this.divisorLineMargin.left + ", " + this.height / 2 + ")");
|
|
@@ -498,7 +504,7 @@ export class CoreStatisticWidgetComponent {
|
|
|
498
504
|
comparisonValueText.text((this.comparisonValue() || 'N/A').toString());
|
|
499
505
|
break;
|
|
500
506
|
}
|
|
501
|
-
this.previousComparisonValue
|
|
507
|
+
this.previousComparisonValue.set(this.comparisonValue());
|
|
502
508
|
const comparisonTextGroupTranslateY = this.height * 3 / 4 + this.divisorLineMargin.bottom + this.comparisonTextRectHeight;
|
|
503
509
|
this.comparisonTextGroup = this.greenGroup.append("g")
|
|
504
510
|
.attr("class", "comparison-text-group")
|
|
@@ -585,7 +591,7 @@ export class CoreStatisticWidgetComponent {
|
|
|
585
591
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreStatisticWidgetComponent, decorators: [{
|
|
586
592
|
type: Component,
|
|
587
593
|
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
|
-
}],
|
|
594
|
+
}], propDecorators: { valueFontSize: [{
|
|
589
595
|
type: Input
|
|
590
596
|
}], margin: [{
|
|
591
597
|
type: Input
|
|
@@ -615,4 +621,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
615
621
|
type: ViewChild,
|
|
616
622
|
args: ['container']
|
|
617
623
|
}] } });
|
|
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
|
|
624
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBNEIsU0FBUyxFQUEwQixLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pMLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDOztBQUV6QixNQUFNLENBQU4sSUFBWSxvQkFHWDtBQUhELFdBQVksb0JBQW9CO0lBQzlCLG1FQUEyQyxDQUFBO0lBQzNDLGlFQUF5QyxDQUFBO0FBQzNDLENBQUMsRUFIVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBRy9CO0FBU0QsTUFBTSxDQUFOLElBQVksZ0NBSVg7QUFKRCxXQUFZLGdDQUFnQztJQUMxQyx1REFBbUIsQ0FBQTtJQUNuQix1REFBbUIsQ0FBQTtJQUNuQiw2REFBeUIsQ0FBQTtBQUMzQixDQUFDLEVBSlcsZ0NBQWdDLEtBQWhDLGdDQUFnQyxRQUkzQztBQStCRCxNQUFNLE9BQU8sNEJBQTRCO0lBVnpDO1FBWUUsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWEsQ0FBQztRQUNyQyxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBaUMsQ0FBQztRQUMxRCxVQUFLLEdBQUcs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O2tHQUE1Qiw0QkFBNEIsZ3pGQ2xEekMsOEVBRU07OzJGRGdETyw0QkFBNEI7a0JBVnhDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxFQUVSLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNOzhCQWlCdEMsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVrQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIFdyaXRhYmxlU2lnbmFsLCBlZmZlY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5cclxuZXhwb3J0IGVudW0gRW51bUhyQ29tcGFyaXNvbkNvZGUge1xyXG4gIFdJVEhfUFJFVklPVVNfTU9OVEggPSAnV0lUSF9QUkVWSU9VU19NT05USCcsXHJcbiAgV0lUSF9QUkVWSU9VU19ZRUFSID0gJ1dJVEhfUFJFVklPVVNfWUVBUicsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUhyTWV0cmljIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBjb21wYXJpc29uQ29kZTogRW51bUhyQ29tcGFyaXNvbkNvZGU7XHJcbiAgZGF0YVR5cGU6IEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZSB7XHJcbiAgSU5URUdFUiA9ICdJTlRFR0VSJyxcclxuICBERUNJTUFMID0gJ0RFQ0lNQUwnLFxyXG4gIFBFUkNFTlRBR0UgPSAnUEVSQ0VOVEFHRScsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdyYXBoTWFyZ2luUGFkZGluZyB7XHJcbiAgdG9wOiBudW1iZXI7XHJcbiAgcmlnaHQ6IG51bWJlcjtcclxuICBib3R0b206IG51bWJlcjtcclxuICBsZWZ0OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhc2V0IHtcclxuICB4OiBudW1iZXI7XHJcbiAgeTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlU3RhdGlzdGljV2lkZ2V0SW5wdXRzIHtcclxuICBtZXRyaWM6IElIck1ldHJpYztcclxuICBkYXRhc2V0OiBJQ29yZVN0YXRpc3RpY1dpZGdldERhdGFzZXRbXTtcclxuICB2YWx1ZTogbnVtYmVyO1xyXG4gIGNvbXBhcmlzb25WYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtc3RhdGlzdGljLXdpZGdldCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcblxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtc3RhdGlzdGljLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2NvcmUtc3RhdGlzdGljLXdpZGdldC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVTdGF0aXN0aWNXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBtZXRyaWMgPSBpbnB1dC5yZXF1aXJlZDxJSHJNZXRyaWM+KCk7XHJcbiAgZGF0YXNldCA9IGlucHV0LnJlcXVpcmVkPElDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YXNldFtdPigpO1xyXG4gIHZhbHVlID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xyXG4gIGNvbXBhcmlzb25WYWx1ZSA9IGlucHV0LnJlcXVpcmVkPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcclxuICBpbm5lckdyb3VwQmFja2dyb3VuZENvbG9yID0gaW5wdXQ8c3RyaW5nPigndHJhbnNwYXJlbnQnKTtcclxuXHJcbiAgLy9ASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBtZXRyaWMhOiBJSHJNZXRyaWM7XHJcbiAgLy9ASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBkYXRhc2V0ITogSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhc2V0W107XHJcbiAgLy9ASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIC8vQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY29tcGFyaXNvblZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPSAwLjU0O1xyXG5cclxuICBASW5wdXQoKSB2YWx1ZUZvbnRTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG1hcmdpbjogSUdyYXBoTWFyZ2luUGFkZGluZyA9IHsgdG9wOiAzMCwgcmlnaHQ6IDMwLCBib3R0b206IDMwLCBsZWZ0OiAzMCB9O1xyXG4gIEBJbnB1dCgpIHBhZGRpbmc6IElHcmFwaE1hcmdpblBhZGRpbmcgPSB7IHRvcDogMzAsIHJpZ2h0OiAzMCwgYm90dG9tOiAzMCwgbGVmdDogMzAgfTtcclxuICBASW5wdXQoKSBvdXRlcldpZHRoOiBudW1iZXIgPSAzMjA7XHJcbiAgQElucHV0KCkgb3V0ZXJIZWlnaHQ6IG51bWJlciA9IDMyMDtcclxuICBASW5wdXQoKSBkaXZpc29yTGluZU1hcmdpbjogSUdyYXBoTWFyZ2luUGFkZGluZyA9IHsgdG9wOiA0LCByaWdodDogOCwgYm90dG9tOiA4LCBsZWZ0OiA4IH07XHJcbiAgQElucHV0KCkgdGl0bGVGaWxsQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiYmxhY2tcIik7XHJcbiAgQElucHV0KCkgZGl2aXNvckxpbmVTdHJva2VDb2xvcjogYW55ID0gZDMuY29sb3IoXCJncmF5XCIpO1xyXG4gIEBJbnB1dCgpIGRpdmlzb3JMaW5lU3Ryb2tlV2lkdGg6IG51bWJlciA9IDM7XHJcbiAgQElucHV0KCkgdmFsdWVGaWxsQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiYmxhY2tcIik7XHJcblxyXG4gIEBJbnB1dCgpIGNvbXBhcmlzb25WYWx1ZUZpbGxDb2xvcjogYW55ID0gZDMuY29sb3IoXCJibGFja1wiKTtcclxuICBASW5wdXQoKSBjb21wYXJpc29uVGV4dEZpbGxDb2xvcjogYW55ID0gZDMuY29sb3IoXCJibGFja1wiKTtcclxuICBASW5wdXQoKSBzaG93QXhlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG5cclxuICBpbm5lcldpZHRoID0gdGhpcy5vdXRlcldpZHRoIC0gdGhpcy5tYXJnaW4ubGVmdCAtIHRoaXMubWFyZ2luLnJpZ2h0O1xyXG4gIGlubmVySGVpZ2h0ID0gdGhpcy5vdXRlckhlaWdodCAtIHRoaXMubWFyZ2luLnRvcCAtIHRoaXMubWFyZ2luLmJvdHRvbTtcclxuICB3aWR0aCA9IHRoaXMuaW5uZXJXaWR0aCAtIHRoaXMucGFkZGluZy5sZWZ0IC0gdGhpcy5wYWRkaW5nLnJpZ2h0O1xyXG4gIGhlaWdodCA9IHRoaXMuaW5uZXJIZWlnaHQgLSB0aGlzLnBhZGRpbmcudG9wIC0gdGhpcy5wYWRkaW5nLmJvdHRvbTtcclxuXHJcbiAgZ3JhcGhXaWR0aCA9IHRoaXMud2lkdGggLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLnJpZ2h0O1xyXG4gIGdyYXBoSGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyA0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b207XHJcbiAgdGl0bGVSZWN0V2lkdGggPSB0aGlzLndpZHRoIC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5yaWdodDtcclxuICB0aXRsZVJlY3RIZWlnaHQgPSB0aGlzLmdyYXBoSGVpZ2h0ICogMiAvIDMgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLnRvcCAqIDI7XHJcbiAgdmFsdWVSZWN0V2lkdGggPSB0aGlzLnRpdGxlUmVjdFdpZHRoO1xyXG4gIHZhbHVlUmVjdEhlaWdodCA9IHRoaXMuaGVpZ2h0IC8gMyAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tO1xyXG4gIGNvbXBhcmlzb25WYWx1ZVJlY3RXaWR0aCA9IHRoaXMudGl0bGVSZWN0V2lkdGg7XHJcbiAgY29tcGFyaXNvblZhbHVlUmVjdEhlaWdodCA9ICh0aGlzLmhlaWdodCAvIDQgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmJvdHRvbSkgLyAyO1xyXG4gIGNvbXBhcmlzb25UZXh0UmVjdFdpZHRoID0gdGhpcy50aXRsZVJlY3RXaWR0aDtcclxuICBjb21wYXJpc29uVGV4dFJlY3RIZWlnaHQgPSAodGhpcy5oZWlnaHQgLyA0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b20pIC8gMjtcclxuXHJcbiAgeCA9IGQzLnNjYWxlTGluZWFyKCkucmFuZ2UoWzAsIHRoaXMuZ3JhcGhXaWR0aF0pO1xyXG4gIHkgPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlKFt0aGlzLmdyYXBoSGVpZ2h0LCAwXSk7XHJcblxyXG4gIHByZXZpb3VzVmFsdWU6IFdyaXRhYmxlU2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4gPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHByZXZpb3VzQ29tcGFyaXNvblZhbHVlOiBXcml0YWJsZVNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+ICA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblxyXG4gIC8vVG8gcmVtb3ZlIG9ubHkgdGhlIG51bWJlcnMgd2hpbGUga2VlcGluZyB0aGUgdGlja3Mgb24gdGhlIGF4ZXMsIFxyXG4gIC8veW91IGNhbiBzZWxlY3QgdGhlIHRleHQgZWxlbWVudHMgb2YgdGhlIHRpY2tzIGFuZCBoaWRlIHRoZW0gdXNpbmcgQ1NTLiBcclxuICAvL0hlcmUncyBob3cgeW91IGNhbiBtb2RpZnkgdGhlIGNvZGUgdG8gYWNoaWV2ZSB0aGF0OlxyXG5cclxuICB4QXhpc0NhbGwgPSBkMy5heGlzQm90dG9tKHRoaXMueClcclxuICAgIC50aWNrU2l6ZUlubmVyKDEwKSAvLyBBZGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgdGlja3MgYXMgbmVlZGVkXHJcbiAgICAudGlja1NpemVPdXRlcigwKTsgLy8gSGlkZSBvdXRlciB0aWNrc1xyXG5cclxuICB5QXhpc0NhbGwgPSBkMy5heGlzTGVmdCh0aGlzLnkpXHJcbiAgICAudGlja1NpemVJbm5lcigxMCkgLy8gQWRqdXN0IHRoZSBsZW5ndGggb2YgdGhlIHRpY2tzIGFzIG5lZWRlZFxyXG4gICAgLnRpY2tTaXplT3V0ZXIoMTApOyAvLyBIaWRlIG91dGVyIHRpY2tzXHJcblxyXG4gIC8qXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY05hbWUoKTtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNWYWx1ZSgpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY0NvbXBhcmlzb25WYWx1ZSgpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY0NvbXBhcmlzb25UZXh0KCk7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YXNldCgpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgKi9cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKCEhY2hhbmdlc1snbWV0cmljJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNOYW1lKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlTWV0cmljVmFsdWUoKTtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNDb21wYXJpc29uVmFsdWUoKTtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNDb21wYXJpc29uVGV4dCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhY2hhbmdlc1snZGF0YXNldCddKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YXNldCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhY2hhbmdlc1sndmFsdWUnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY1ZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoISFjaGFuZ2VzWydjb21wYXJpc29uVmFsdWUnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY0NvbXBhcmlzb25WYWx1ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlTWV0cmljTmFtZSgpOiB2b2lkIHtcclxuICAgIHZhciBuYW1lRWxlbWVudCA9IGQzLnNlbGVjdChcIiNtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYygpLmlkICsgXCJfbmFtZVwiKVxyXG4gICAgbmFtZUVsZW1lbnQudHJhbnNpdGlvbigpLnRleHQodGhpcy5tZXRyaWMoKS5uYW1lKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU1ldHJpY1ZhbHVlKCk6IHZvaWQge1xyXG4gICAgdmFyIHZhbHVlRWxlbWVudCA9IGQzLnNlbGVjdChcIiNtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYygpLmlkICsgXCJfdmFsdWVcIik7XHJcbiAgICBjb25zdCBzdGFydCA9IHRoaXMucHJldmlvdXNWYWx1ZSgpIHx8IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IGVuZCA9IHRoaXMudmFsdWUoKSB8fCB1bmRlZmluZWQ7XHJcbiAgICBjb25zb2xlLmxvZyhcInN0YXJ0LCBlbmQ6IFwiLCBzdGFydCwgZW5kKTtcclxuICAgIHN3aXRjaCAodGhpcy5tZXRyaWMoKS5kYXRhVHlwZSkge1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLklOVEVHRVI6XHJcbiAgICAgICAgdmFsdWVFbGVtZW50XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGlmICghIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVFbGVtZW50LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghIWVuZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoZW5kKSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiB2YWx1ZUVsZW1lbnQudGV4dCgnTi9BJylcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLkRFQ0lNQUw6XHJcbiAgICAgICAgdmFsdWVFbGVtZW50XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGlmICghIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVFbGVtZW50LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDApIC8gMTAwKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghIWVuZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoZW5kICogMTAwKSAvIDEwMClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiB2YWx1ZUVsZW1lbnQudGV4dChcIk4vQVwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLlBFUkNFTlRBR0U6XHJcbiAgICAgICAgdmFsdWVFbGVtZW50XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhc3RhcnQgJiYgISFlbmQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZUVsZW1lbnQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSAqIDEwMDAwKSAvIDEwMCArIFwiJVwiKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghIWVuZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoZW5kICogMTAwMDApIC8gMTAwICsgXCIlXCIpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gdmFsdWVFbGVtZW50LnRleHQoXCJOL0FcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHZhbHVlRWxlbWVudC50cmFuc2l0aW9uKCkudGV4dCgodGhpcy52YWx1ZSgpIHx8ICdOL0EnKS50b1N0cmluZygpKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMucHJldmlvdXNWYWx1ZS5zZXQodGhpcy52YWx1ZSgpKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU1ldHJpY0NvbXBhcmlzb25WYWx1ZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXJ0OiBudW1iZXIgfCB1bmRlZmluZWQgPSB0aGlzLnByZXZpb3VzQ29tcGFyaXNvblZhbHVlKCk7XHJcbiAgICBjb25zdCBlbmQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHRoaXMuY29tcGFyaXNvblZhbHVlKCk7XHJcbiAgICB2YXIgY29tcGFyaXNvblZhbHVlRWxlbWVudCA9IGQzLnNlbGVjdChcIiNtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYygpLmlkICsgXCJfY29tcGFyaXNvblZhbHVlXCIpO1xyXG4gICAgY29tcGFyaXNvblZhbHVlRWxlbWVudC5hdHRyKFwiZmlsbFwiLCAodGhpcy5jb21wYXJpc29uVmFsdWUoKSB8fCAwKSA+PSAwID8gdGhpcy5jb21wYXJpc29uVGV4dEZpbGxDb2xvciA6IGQzLmNvbG9yKFwicmVkXCIpKTtcclxuICAgIHN3aXRjaCAodGhpcy5tZXRyaWMoKS5kYXRhVHlwZSkge1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLklOVEVHRVI6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlRWxlbWVudFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMudmFsdWUoKSAmJiAhIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gY29tcGFyaXNvblZhbHVlRWxlbWVudC50ZXh0KFwiTi9BXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5ERUNJTUFMOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLnZhbHVlKCkgJiYgISFzdGFydCAmJiAhIWVuZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlTnVtYmVyKHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSAqIDEwMCkgLyAxMDApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IGNvbXBhcmlzb25WYWx1ZUVsZW1lbnQudGV4dChcIk4vQVwiKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuUEVSQ0VOVEFHRTpcclxuICAgICAgICBjb21wYXJpc29uVmFsdWVFbGVtZW50XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy52YWx1ZSgpICYmICEhc3RhcnQgJiYgISFlbmQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVFbGVtZW50LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDAwMCkgLyAxMDAgKyBcIiVcIilcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gY29tcGFyaXNvblZhbHVlRWxlbWVudC50ZXh0KFwiTi9BXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnQudHJhbnNpdGlvbigpLnRleHQoKHRoaXMuY29tcGFyaXNvblZhbHVlKCkgfHwgJ04vQScpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlTWV0cmljQ29tcGFyaXNvblRleHQoKTogdm9pZCB7XHJcbiAgICB2YXIgY29tcGFyaXNvblRleHRFbGVtZW50ID0gZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljKCkuaWQgKyBcIl9jb21wYXJpc29uVGV4dFwiKTtcclxuICAgIHN3aXRjaCAodGhpcy5tZXRyaWMoKS5jb21wYXJpc29uQ29kZSkge1xyXG4gICAgICBjYXNlIEVudW1IckNvbXBhcmlzb25Db2RlLldJVEhfUFJFVklPVVNfTU9OVEg6XHJcbiAgICAgICAgY29tcGFyaXNvblRleHRFbGVtZW50LnRleHQoXCJ2cy4gcHJldmlvdXMgbW9udGhcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUhyQ29tcGFyaXNvbkNvZGUuV0lUSF9QUkVWSU9VU19ZRUFSOlxyXG4gICAgICAgIGNvbXBhcmlzb25UZXh0RWxlbWVudC50ZXh0KFwidnMuIHByZXZpb3VzIHllYXJcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29tcGFyaXNvblRleHRFbGVtZW50LnRleHQoXCItXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGF0YXNldCgpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBtaW5Qb2ludCA9IHRoaXMuZGF0YXNldCgpLnJlZHVjZSgobWluLCBjdXJyZW50KSA9PiBjdXJyZW50LnkgPCBtaW4ueSA/IGN1cnJlbnQgOiBtaW4pO1xyXG4gICAgY29uc3QgbWF4UG9pbnQgPSB0aGlzLmRhdGFzZXQoKS5yZWR1Y2UoKG1heCwgY3VycmVudCkgPT4gY3VycmVudC55ID4gbWF4LnkgPyBjdXJyZW50IDogbWF4KTtcclxuXHJcbiAgICAvLyBVcGRhdGUgc2NhbGVzXHJcbiAgICBjb25zdCB4U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpXHJcbiAgICAgIC5kb21haW4oWzAsIGQzLm1heCh0aGlzLmRhdGFzZXQoKSwgKGQ6IGFueSkgPT4gZC54KV0pXHJcbiAgICAgIC5yYW5nZShbMCwgdGhpcy5ncmFwaFdpZHRoXSk7XHJcblxyXG4gICAgY29uc3QgeVNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAuZG9tYWluKFttaW5Qb2ludC55LCBtYXhQb2ludC55XSlcclxuICAgICAgLnJhbmdlKFt0aGlzLmdyYXBoSGVpZ2h0LCAwXSk7XHJcblxyXG4gICAgY29uc3QgeEF4aXNDYWxsID0gZDMuYXhpc0JvdHRvbSh4U2NhbGUpXHJcbiAgICAgIC50aWNrU2l6ZUlubmVyKDEwKSAvLyBBZGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgdGlja3MgYXMgbmVlZGVkXHJcbiAgICAgIC50aWNrU2l6ZU91dGVyKDApOyAvLyBIaWRlIG91dGVyIHRpY2tzXHJcblxyXG4gICAgY29uc3QgeUF4aXNDYWxsID0gZDMuYXhpc0xlZnQoeVNjYWxlKVxyXG4gICAgICAudGlja1NpemVJbm5lcigxMCkgLy8gQWRqdXN0IHRoZSBsZW5ndGggb2YgdGhlIHRpY2tzIGFzIG5lZWRlZFxyXG4gICAgICAudGlja1NpemVPdXRlcigxMCk7IC8vIERvIG5vdCBoaWRlIG91dGVyIHRpY2tzXHJcblxyXG4gICAgLy8gVXBkYXRlIGF4ZXNcclxuICAgIC8veEF4aXMuY2FsbCh4QXhpc0NhbGwpO1xyXG4gICAgLy95QXhpcy5jYWxsKHlBeGlzQ2FsbCk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGNvbm5lY3RpbmcgbGluZVxyXG4gICAgdGhpcy5jb25uZWN0aW5nTGluZSA9IGQzLmxpbmUoKVxyXG4gICAgICAueCgoZDogYW55KSA9PiB4U2NhbGUoZC54KSlcclxuICAgICAgLnkoKGQ6IGFueSkgPT4geVNjYWxlKGQueSkpXHJcbiAgICAgIC5kZWZpbmVkKChkLCBpKSA9PiBpID49IDAgJiYgaSA8IHRoaXMuZGF0YXNldCgpLmxlbmd0aCk7XHJcblxyXG4gICAgZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljKCkuaWQgKyBcIl9zY2F0dGVyLXBsb3RcIikuc2VsZWN0KFwicGF0aFwiKVxyXG4gICAgICAuZGF0dW0odGhpcy5kYXRhc2V0KCkpXHJcbiAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgLmF0dHIoXCJkXCIsIHRoaXMuY29ubmVjdGluZ0xpbmUpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBjaXJjbGVzXHJcbiAgICBjb25zdCBjaXJjbGVzOiBhbnkgPSBkMy5zZWxlY3QoXCIjbWV0cmljX1wiICsgdGhpcy5tZXRyaWMoKS5pZCArIFwiX3NjYXR0ZXItcGxvdFwiKS5zZWxlY3RBbGwoXCJjaXJjbGVcIilcclxuICAgICAgLmRhdGEodGhpcy5kYXRhc2V0KCkpO1xyXG5cclxuICAgIGNpcmNsZXMuZXhpdCgpLnJlbW92ZSgpO1xyXG5cclxuICAgIGNpcmNsZXMuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXHJcbiAgICAgIC5tZXJnZShjaXJjbGVzKVxyXG4gICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgIC5hdHRyKFwiY3hcIiwgZCA9PiB4U2NhbGUoZC54KSlcclxuICAgICAgLmF0dHIoXCJjeVwiLCBkID0+IHlTY2FsZShkLnkpKVxyXG4gICAgICAuYXR0cihcInJcIiwgNSlcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIGQgPT4ge1xyXG4gICAgICAgIGlmIChkID09PSBtaW5Qb2ludCkgcmV0dXJuIFwiI0ZGOEMwMFwiOyAvLyBTZXQgbG93ZXN0IHBvaW50IHRvICNGRjhDMDBcclxuICAgICAgICBpZiAoZCA9PT0gbWF4UG9pbnQpIHJldHVybiBcIiMzMTU4OTdcIjsgLy8gU2V0IGhpZ2hlc3QgcG9pbnQgdG8gIzMxNTg5N1xyXG4gICAgICAgIHJldHVybiBcIm5vbmVcIjsgLy8gTWFrZSB0aGUgb3RoZXIgcG9pbnRzIHRyYW5zcGFyZW50XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKGQgPT09IG1pblBvaW50KSByZXR1cm4gZDMuY29sb3IoXCIjRkY4QzAwXCIpIS5kYXJrZXIoMC4yKTsgLy8gRGFya2VuICNGRjhDMDAgY29sb3JcclxuICAgICAgICBpZiAoZCA9PT0gbWF4UG9pbnQpIHJldHVybiBkMy5jb2xvcihcIiMzMTU4OTdcIikhLmRhcmtlcigwLjIpOyAvLyBEYXJrZW4gIzMxNTg5NyBjb2xvclxyXG4gICAgICAgIHJldHVybiBcIm5vbmVcIjsgLy8gTm8gc3Ryb2tlIGZvciBvdGhlciBwb2ludHNcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMyk7IC8vIFNldCBzdHJva2Ugd2lkdGhcclxuICB9XHJcblxyXG4gIHN2ZzogYW55O1xyXG4gIGlubmVyR3JvdXA6IGFueTtcclxuICBncmVlbkdyb3VwOiBhbnk7XHJcbiAgdGl0bGVHcm91cDogYW55O1xyXG4gIHZhbHVlR3JvdXA6IGFueTtcclxuICB2YWx1ZVRleHQ6IGFueTtcclxuICBncmF5R3JvdXA6IGFueTtcclxuICBjb21wYXJpc29uVmFsdWVHcm91cDogYW55O1xyXG4gIGNvbXBhcmlzb25UZXh0R3JvdXA6IGFueTtcclxuICBjb21wYXJpc29uVmFsdWVUZXh0OiBhbnk7XHJcbiAgY29tcGFyaXNvblRleHRUZXh0OiBhbnk7XHJcbiAgY29ubmVjdGluZ0xpbmU6IGFueTtcclxuXHJcbiAgaW50ZXJ2YWxJZDogYW55O1xyXG5cclxuICBhc3luYyBkcmF3R3JhcGgoKSB7XHJcbiAgICB0aGlzLnN2ZyA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAuYXBwZW5kKFwic3ZnXCIpXHJcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy5vdXRlcldpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLm91dGVySGVpZ2h0KTtcclxuXHJcbiAgICB0aGlzLnN2Zy5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy5vdXRlcldpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLm91dGVySGVpZ2h0KVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKTtcclxuXHJcbiAgICB0aGlzLmlubmVyR3JvdXAgPSB0aGlzLnN2Zy5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5tYXJnaW4ubGVmdCArIFwiLFwiICsgdGhpcy5tYXJnaW4udG9wICsgXCIpXCIpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJibHVlLXJlY3RcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIHRoaXMuaW5uZXJHcm91cEJhY2tncm91bmRDb2xvcigpKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMuaW5uZXJXaWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5pbm5lckhlaWdodCk7XHJcblxyXG4gICAgdGhpcy5ncmVlbkdyb3VwID0gdGhpcy5pbm5lckdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLnBhZGRpbmcubGVmdCArIFwiLFwiICsgdGhpcy5wYWRkaW5nLnRvcCArIFwiKVwiKTtcclxuXHJcbiAgICB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiZ3JlZW4tcmVjdFwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMud2lkdGgpXHJcbiAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMuaGVpZ2h0KTtcclxuXHJcbiAgICB0aGlzLnRpdGxlR3JvdXAgPSB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwidGl0bGUtZ3JvdXBcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIixcIiArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4udG9wICsgXCIpXCIpO1xyXG5cclxuICAgIHRoaXMudGl0bGVHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRpdGxlLXJlY3RcIilcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLnRpdGxlUmVjdFdpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLnRpdGxlUmVjdEhlaWdodCk7XHJcblxyXG4gICAgdGhpcy50aXRsZUdyb3VwLmFwcGVuZChcInRleHRcIilcclxuICAgICAgLmF0dHIoXCJpZFwiLCBcIm1ldHJpY19cIiArIHRoaXMubWV0cmljKCkuaWQgKyBcIl9uYW1lXCIpXHJcbiAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnRpdGxlUmVjdFdpZHRoIC8gMilcclxuICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMudGl0bGVSZWN0SGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXRpdGxlXCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCB0aGlzLnRpdGxlRmlsbENvbG9yKVxyXG4gICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCB0aGlzLnRpdGxlUmVjdEhlaWdodClcclxuICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAudGV4dCh0aGlzLm1ldHJpYygpLm5hbWUpO1xyXG5cclxuICAgIHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJsaW5lXCIpXHJcbiAgICAgIC5hdHRyKFwieDFcIiwgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0KVxyXG4gICAgICAuYXR0cihcInkxXCIsIHRoaXMuZ3JhcGhIZWlnaHQgKiAyIC8gMylcclxuICAgICAgLmF0dHIoXCJ4MlwiLCB0aGlzLndpZHRoIC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5yaWdodClcclxuICAgICAgLmF0dHIoXCJ5MlwiLCB0aGlzLmdyYXBoSGVpZ2h0ICogMiAvIDMpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIHRoaXMuZGl2aXNvckxpbmVTdHJva2VDb2xvcilcclxuICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgdGhpcy5kaXZpc29yTGluZVN0cm9rZVdpZHRoKTtcclxuXHJcbiAgICBjb25zdCB2YWx1ZUdyb3VwVHJhbnNsYXRlWSA9IHRoaXMuaGVpZ2h0IC8gMiAvIDMgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmJvdHRvbTtcclxuICAgIHRoaXMudmFsdWVHcm91cCA9IHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ2YWx1ZS1ncm91cFwiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCArIFwiLFwiICsgdmFsdWVHcm91cFRyYW5zbGF0ZVkgKyBcIilcIik7XHJcblxyXG4gICAgdGhpcy52YWx1ZUdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwidmFsdWUtcmVjdFwiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMudmFsdWVSZWN0V2lkdGgpXHJcbiAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMudmFsdWVSZWN0SGVpZ2h0KTtcclxuXHJcbiAgICB0aGlzLnZhbHVlVGV4dCA9IHRoaXMudmFsdWVHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgIC5hdHRyKFwiaWRcIiwgXCJtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYygpLmlkICsgXCJfdmFsdWVcIilcclxuICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMudmFsdWVSZWN0V2lkdGggLyAyKVxyXG4gICAgICAuYXR0cihcInlcIiwgdGhpcy52YWx1ZVJlY3RIZWlnaHQgLyAyKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiZ3JhcGgtdmFsdWVcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIHRoaXMudmFsdWVGaWxsQ29sb3IpXHJcbiAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsICh0aGlzLnZhbHVlRm9udFNpemUgfHwgdGhpcy52YWx1ZVJlY3RIZWlnaHQpICsgXCJweFwiKVxyXG4gICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpXHJcbiAgICAgIC5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0ID0gMDtcclxuICAgIGNvbnN0IGVuZCA9IHRoaXMudmFsdWUoKTtcclxuICAgIGNvbnNvbGUubG9nKFwic3RhcnQsIGVuZDogXCIsIHN0YXJ0LCBlbmQpO1xyXG4gICAgc3dpdGNoICh0aGlzLm1ldHJpYygpLmRhdGFUeXBlKSB7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuSU5URUdFUjpcclxuICAgICAgICB0aGlzLnZhbHVlVGV4dFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IHRoaXMudmFsdWVUZXh0LnRleHQoXCJOL0FcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLkRFQ0lNQUw6XHJcbiAgICAgICAgdGhpcy52YWx1ZVRleHRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoISFzdGFydCAmJiAhIWVuZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlTnVtYmVyKHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDApIC8gMTAwKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiB0aGlzLnZhbHVlVGV4dC50ZXh0KFwiTi9BXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuUEVSQ0VOVEFHRTpcclxuICAgICAgICB0aGlzLnZhbHVlVGV4dFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSAqIDEwMDAwKSAvIDEwMCArIFwiJVwiKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiB0aGlzLnZhbHVlVGV4dC50ZXh0KFwiTi9BXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dCgodGhpcy52YWx1ZSgpIHx8ICdOL0EnKS50b1N0cmluZygpKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMucHJldmlvdXNWYWx1ZS5zZXQodGhpcy52YWx1ZSgpKTtcclxuXHJcbiAgICB0aGlzLmdyYXlHcm91cCA9IHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiaWRcIiwgXCJtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYygpLmlkICsgXCJfc2NhdHRlci1wbG90XCIpXHJcbiAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0ICsgXCIsIFwiICsgdGhpcy5oZWlnaHQgLyAyICsgXCIpXCIpO1xyXG5cclxuICAgIHRoaXMuZ3JheUdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLWNvbnRhaW5lclwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgZDMuY29sb3IoXCJ0cmFuc3BhcmVudFwiKSEuYnJpZ2h0ZXIoMSkpXHJcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy5ncmFwaFdpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmdyYXBoSGVpZ2h0KTtcclxuXHJcblxyXG4gICAgY29uc3QgeEF4aXMgPSB0aGlzLmdyYXlHcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ4IGF4aXNcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoMCxcIiArIHRoaXMuZ3JhcGhIZWlnaHQgKyBcIilcIik7XHJcblxyXG4gICAgY29uc3QgeUF4aXMgPSB0aGlzLmdyYXlHcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ5IGF4aXNcIik7XHJcblxyXG4gICAgLy94QXhpcy5jYWxsKHhBeGlzQ2FsbCk7XHJcbiAgICAvL3lBeGlzLmNhbGwoeUF4aXNDYWxsKTtcclxuXHJcbiAgICAvLyBTZWxlY3QgdGV4dCBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGggdGlja3MgYW5kIGhpZGUgdGhlbVxyXG4gICAgdGhpcy5ncmF5R3JvdXAuc2VsZWN0QWxsKFwiLnRpY2sgdGV4dFwiKS5hdHRyKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XHJcblxyXG4gICAgY29uc3QgY29tcGFyaXNvblZhbHVlR3JvdXBUcmFuc2xhdGVZID0gdGhpcy5oZWlnaHQgKiAzIC8gNCArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tO1xyXG4gICAgdGhpcy5jb21wYXJpc29uVmFsdWVHcm91cCA9IHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb21wYXJpc29uLXZhbHVlLWdyb3VwXCIpXHJcbiAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0ICsgXCIsXCIgKyBjb21wYXJpc29uVmFsdWVHcm91cFRyYW5zbGF0ZVkgKyBcIilcIik7XHJcblxyXG4gICAgdGhpcy5jb21wYXJpc29uVmFsdWVHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZhbHVlLXJlY3RcIilcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RXaWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5jb21wYXJpc29uVmFsdWVSZWN0SGVpZ2h0KTtcclxuXHJcbiAgICBjb25zdCBjb21wYXJpc29uVmFsdWVUZXh0ID0gdGhpcy5jb21wYXJpc29uVmFsdWVHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgIC5hdHRyKFwiaWRcIiwgXCJtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYygpLmlkICsgXCJfY29tcGFyaXNvblZhbHVlXCIpXHJcbiAgICAgIC5hdHRyKFwieFwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RXaWR0aCAvIDIpXHJcbiAgICAgIC5hdHRyKFwieVwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RIZWlnaHQgLyAyKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiZ3JhcGgtdmFsdWVcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsICh0aGlzLmNvbXBhcmlzb25WYWx1ZSgpIHx8IDApID49IDAgPyB0aGlzLmNvbXBhcmlzb25WYWx1ZUZpbGxDb2xvciA6IGQzLmNvbG9yKFwicmVkXCIpKVxyXG4gICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RIZWlnaHQgKyBcInB4XCIpXHJcbiAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIilcclxuICAgICAgLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIik7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLm1ldHJpYygpLmRhdGFUeXBlKSB7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuSU5URUdFUjpcclxuICAgICAgICBjb21wYXJpc29uVmFsdWVUZXh0XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhc3RhcnQgJiYgISFlbmQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiBjb21wYXJpc29uVmFsdWVUZXh0LnRleHQoXCJOL0FcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5ERUNJTUFMOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZVRleHRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoISFzdGFydCAmJiAhIWVuZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlTnVtYmVyKHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1ZVRleHQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSAqIDEwMCkgLyAxMDApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IGNvbXBhcmlzb25WYWx1ZVRleHQudGV4dChcIk4vQVwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLlBFUkNFTlRBR0U6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlVGV4dFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlVGV4dC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwMDApIC8gMTAwICsgXCIlXCIpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBfID0+IGNvbXBhcmlzb25WYWx1ZVRleHQudGV4dChcIk4vQVwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZVRleHQudGV4dCgodGhpcy5jb21wYXJpc29uVmFsdWUoKSB8fCAnTi9BJykudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLnByZXZpb3VzQ29tcGFyaXNvblZhbHVlLnNldCh0aGlzLmNvbXBhcmlzb25WYWx1ZSgpKTtcclxuXHJcbiAgICBjb25zdCBjb21wYXJpc29uVGV4dEdyb3VwVHJhbnNsYXRlWSA9IHRoaXMuaGVpZ2h0ICogMyAvIDQgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmJvdHRvbSArIHRoaXMuY29tcGFyaXNvblRleHRSZWN0SGVpZ2h0O1xyXG4gICAgdGhpcy5jb21wYXJpc29uVGV4dEdyb3VwID0gdGhpcy5ncmVlbkdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImNvbXBhcmlzb24tdGV4dC1ncm91cFwiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCArIFwiLFwiICsgY29tcGFyaXNvblRleHRHcm91cFRyYW5zbGF0ZVkgKyBcIilcIik7XHJcblxyXG4gICAgdGhpcy5jb21wYXJpc29uVGV4dEdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwidGV4dC1yZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy5jb21wYXJpc29uVGV4dFJlY3RXaWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5jb21wYXJpc29uVGV4dFJlY3RIZWlnaHQpO1xyXG5cclxuICAgIHRoaXMuY29tcGFyaXNvblRleHRUZXh0ID0gdGhpcy5jb21wYXJpc29uVGV4dEdyb3VwLmFwcGVuZChcInRleHRcIilcclxuICAgICAgLmF0dHIoXCJpZFwiLCBcIm1ldHJpY19cIiArIHRoaXMubWV0cmljKCkuaWQgKyBcIl9jb21wYXJpc29uVGV4dFwiKVxyXG4gICAgICAuYXR0cihcInhcIiwgdGhpcy5jb21wYXJpc29uVGV4dFJlY3RXaWR0aCAvIDIpXHJcbiAgICAgIC5hdHRyKFwieVwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdEhlaWdodCAvIDIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmFwaC10ZXh0XCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCB0aGlzLmNvbXBhcmlzb25UZXh0RmlsbENvbG9yKVxyXG4gICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdEhlaWdodCAvIDIgKyBcInB4XCIpXHJcbiAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIilcclxuICAgICAgLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIik7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLm1ldHJpYygpLmNvbXBhcmlzb25Db2RlKSB7XHJcbiAgICAgIGNhc2UgRW51bUhyQ29tcGFyaXNvbkNvZGUuV0lUSF9QUkVWSU9VU19NT05USDpcclxuICAgICAgICB0aGlzLmNvbXBhcmlzb25UZXh0VGV4dC50ZXh0KFwidnMuIHByZXZpb3VzIG1vbnRoXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1IckNvbXBhcmlzb25Db2RlLldJVEhfUFJFVklPVVNfWUVBUjpcclxuICAgICAgICB0aGlzLmNvbXBhcmlzb25UZXh0VGV4dC50ZXh0KFwidnMuIHByZXZpb3VzIHllYXJcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5jb21wYXJpc29uVGV4dFRleHQudGV4dChcIi1cIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cclxuXHJcbiAgICBjb25zdCBpbml0aWFsRGF0YXNldDogYW55W10gPSB0aGlzLmRhdGFzZXQoKTtcclxuICAgIGNvbnN0IG1pblBvaW50OiBhbnkgPSBpbml0aWFsRGF0YXNldC5yZWR1Y2UoKG1pbiwgY3VycmVudCkgPT4gY3VycmVudC55IDwgbWluLnkgPyBjdXJyZW50IDogbWluKTtcclxuICAgIGNvbnN0IG1heFBvaW50OiBhbnkgPSBpbml0aWFsRGF0YXNldC5yZWR1Y2UoKG1heCwgY3VycmVudCkgPT4gY3VycmVudC55ID4gbWF4LnkgPyBjdXJyZW50IDogbWF4KTtcclxuXHJcbiAgICBjb25zdCB4U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpXHJcbiAgICAgIC5kb21haW4oWzAsIGQzLm1heChpbml0aWFsRGF0YXNldCwgZCA9PiBkLngpXSlcclxuICAgICAgLnJhbmdlKFswLCB0aGlzLmdyYXBoV2lkdGhdKTtcclxuXHJcbiAgICBjb25zdCB5U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpXHJcbiAgICAgIC5kb21haW4oW21pblBvaW50LnksIG1heFBvaW50LnldKVxyXG4gICAgICAucmFuZ2UoW3RoaXMuZ3JhcGhIZWlnaHQsIDBdKTtcclxuXHJcbiAgICB0aGlzLmNvbm5lY3RpbmdMaW5lID0gZDMubGluZSgpXHJcbiAgICAgIC54KChkOiBhbnkpID0+IHhTY2FsZShkLngpKVxyXG4gICAgICAueSgoZDogYW55KSA9PiB5U2NhbGUoZC55KSlcclxuICAgICAgLmRlZmluZWQoKGQsIGkpID0+IGkgPj0gMCAmJiBpIDwgaW5pdGlhbERhdGFzZXQubGVuZ3RoKTtcclxuXHJcbiAgICB0aGlzLmdyYXlHcm91cC5hcHBlbmQoXCJwYXRoXCIpXHJcbiAgICAgIC5kYXR1bShpbml0aWFsRGF0YXNldClcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCBcImRhcmtncmF5XCIpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDMpXHJcbiAgICAgIC5hdHRyKFwiZFwiLCB0aGlzLmNvbm5lY3RpbmdMaW5lKTtcclxuXHJcbiAgICB0aGlzLmdyYXlHcm91cC5zZWxlY3RBbGwoXCJjaXJjbGVcIilcclxuICAgICAgLmRhdGEoaW5pdGlhbERhdGFzZXQpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcclxuICAgICAgLmF0dHIoXCJjeFwiLCBkID0+IHhTY2FsZShkLngpKVxyXG4gICAgICAuYXR0cihcImN5XCIsIGQgPT4geVNjYWxlKGQueSkpXHJcbiAgICAgIC5hdHRyKFwiclwiLCA1KVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgZCA9PiB7XHJcbiAgICAgICAgaWYgKGQgPT09IG1pblBvaW50KSByZXR1cm4gXCIjRkY4QzAwXCI7IC8vIFNldCBsb3dlc3QgcG9pbnQgdG8gI0ZGOEMwMFxyXG4gICAgICAgIGlmIChkID09PSBtYXhQb2ludCkgcmV0dXJuIFwiIzMxNTg5N1wiOyAvLyBTZXQgaGlnaGVzdCBwb2ludCB0byAjMzE1ODk3XHJcbiAgICAgICAgcmV0dXJuIFwibm9uZVwiOyAvLyBTZXQgdGhlIG90aGVyIHBvaW50cyB0cmFuc3BhcmVudFxyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChkID09PSBtaW5Qb2ludCkgcmV0dXJuIGQzLmNvbG9yKFwiI0ZGOEMwMFwiKSEuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjRkY4QzAwIGNvbG9yXHJcbiAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gZDMuY29sb3IoXCIjMzE1ODk3XCIpIS5kYXJrZXIoMC4yKTsgLy8gRGFya2VuICMzMTU4OTcgY29sb3JcclxuICAgICAgICByZXR1cm4gXCJub25lXCI7IC8vIE5vIHN0cm9rZSBmb3Igb3RoZXIgcG9pbnRzXHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDMpOyAvLyBTZXQgc3Ryb2tlIHdpZHRoXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5kcmF3R3JhcGgoKTtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNWYWx1ZSgpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY0NvbXBhcmlzb25WYWx1ZSgpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG59IiwiPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiY29yZS1zdGF0aXN0aWMtd2lkZ2V0LWNvbnRhaW5lclwiPlxyXG4gICAgXHJcbjwvZGl2PiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, Component, Pipe, ViewChild, forwardRef, Directive, HostListener, Inject, inject, isDevMode, InjectionToken, EventEmitter, Input, Output, ViewEncapsulation, NgModule, input,
|
|
2
|
+
import { Injectable, Component, Pipe, ViewChild, forwardRef, Directive, HostListener, Inject, inject, isDevMode, InjectionToken, EventEmitter, Input, Output, ViewEncapsulation, NgModule, input, signal, ChangeDetectionStrategy } from '@angular/core';
|
|
3
3
|
import { BehaviorSubject, Subject, filter, of, Observable, zip, catchError, tap as tap$1, throwError, take, switchMap, finalize as finalize$1, map as map$1, interval, concat, debounceTime, fromEvent, distinctUntilChanged, takeUntil } from 'rxjs';
|
|
4
4
|
import { api, EnumTranslateKey } from 'alpha-global-constants';
|
|
5
5
|
import * as i1 from '@angular/common/http';
|
|
@@ -23136,8 +23136,8 @@ class CoreStatisticWidgetComponent {
|
|
|
23136
23136
|
this.comparisonTextRectHeight = (this.height / 4 - this.divisorLineMargin.bottom) / 2;
|
|
23137
23137
|
this.x = d3.scaleLinear().range([0, this.graphWidth]);
|
|
23138
23138
|
this.y = d3.scaleLinear().range([this.graphHeight, 0]);
|
|
23139
|
-
this.previousValue = undefined;
|
|
23140
|
-
this.previousComparisonValue = undefined;
|
|
23139
|
+
this.previousValue = signal(undefined);
|
|
23140
|
+
this.previousComparisonValue = signal(undefined);
|
|
23141
23141
|
//To remove only the numbers while keeping the ticks on the axes,
|
|
23142
23142
|
//you can select the text elements of the ticks and hide them using CSS.
|
|
23143
23143
|
//Here's how you can modify the code to achieve that:
|
|
@@ -23147,14 +23147,18 @@ class CoreStatisticWidgetComponent {
|
|
|
23147
23147
|
this.yAxisCall = d3.axisLeft(this.y)
|
|
23148
23148
|
.tickSizeInner(10) // Adjust the length of the ticks as needed
|
|
23149
23149
|
.tickSizeOuter(10); // Hide outer ticks
|
|
23150
|
-
effect(() => {
|
|
23151
|
-
this.updateMetricName();
|
|
23152
|
-
this.updateMetricValue();
|
|
23153
|
-
this.updateMetricComparisonValue();
|
|
23154
|
-
this.updateMetricComparisonText();
|
|
23155
|
-
this.updateDataset();
|
|
23156
|
-
});
|
|
23157
23150
|
}
|
|
23151
|
+
/*
|
|
23152
|
+
constructor() {
|
|
23153
|
+
effect(() => {
|
|
23154
|
+
this.updateMetricName();
|
|
23155
|
+
this.updateMetricValue();
|
|
23156
|
+
this.updateMetricComparisonValue();
|
|
23157
|
+
this.updateMetricComparisonText();
|
|
23158
|
+
this.updateDataset();
|
|
23159
|
+
})
|
|
23160
|
+
}
|
|
23161
|
+
*/
|
|
23158
23162
|
ngOnChanges(changes) {
|
|
23159
23163
|
if (!!changes['metric']) {
|
|
23160
23164
|
this.updateMetricName();
|
|
@@ -23178,8 +23182,9 @@ class CoreStatisticWidgetComponent {
|
|
|
23178
23182
|
}
|
|
23179
23183
|
updateMetricValue() {
|
|
23180
23184
|
var valueElement = d3.select("#metric_" + this.metric().id + "_value");
|
|
23181
|
-
const start = this.previousValue || undefined;
|
|
23185
|
+
const start = this.previousValue() || undefined;
|
|
23182
23186
|
const end = this.value() || undefined;
|
|
23187
|
+
console.log("start, end: ", start, end);
|
|
23183
23188
|
switch (this.metric().dataType) {
|
|
23184
23189
|
case EnumICoreStatisticWidgetDataType.INTEGER:
|
|
23185
23190
|
valueElement
|
|
@@ -23242,10 +23247,10 @@ class CoreStatisticWidgetComponent {
|
|
|
23242
23247
|
valueElement.transition().text((this.value() || 'N/A').toString());
|
|
23243
23248
|
break;
|
|
23244
23249
|
}
|
|
23245
|
-
this.previousValue
|
|
23250
|
+
this.previousValue.set(this.value());
|
|
23246
23251
|
}
|
|
23247
23252
|
updateMetricComparisonValue() {
|
|
23248
|
-
const start = this.previousComparisonValue;
|
|
23253
|
+
const start = this.previousComparisonValue();
|
|
23249
23254
|
const end = this.comparisonValue();
|
|
23250
23255
|
var comparisonValueElement = d3.select("#metric_" + this.metric().id + "_comparisonValue");
|
|
23251
23256
|
comparisonValueElement.attr("fill", (this.comparisonValue() || 0) >= 0 ? this.comparisonTextFillColor : d3.color("red"));
|
|
@@ -23444,6 +23449,7 @@ class CoreStatisticWidgetComponent {
|
|
|
23444
23449
|
.attr("alignment-baseline", "middle");
|
|
23445
23450
|
const start = 0;
|
|
23446
23451
|
const end = this.value();
|
|
23452
|
+
console.log("start, end: ", start, end);
|
|
23447
23453
|
switch (this.metric().dataType) {
|
|
23448
23454
|
case EnumICoreStatisticWidgetDataType.INTEGER:
|
|
23449
23455
|
this.valueText
|
|
@@ -23497,7 +23503,7 @@ class CoreStatisticWidgetComponent {
|
|
|
23497
23503
|
this.valueText.text((this.value() || 'N/A').toString());
|
|
23498
23504
|
break;
|
|
23499
23505
|
}
|
|
23500
|
-
this.previousValue
|
|
23506
|
+
this.previousValue.set(this.value());
|
|
23501
23507
|
this.grayGroup = this.greenGroup.append("g")
|
|
23502
23508
|
.attr("id", "metric_" + this.metric().id + "_scatter-plot")
|
|
23503
23509
|
.attr("transform", "translate(" + this.divisorLineMargin.left + ", " + this.height / 2 + ")");
|
|
@@ -23587,7 +23593,7 @@ class CoreStatisticWidgetComponent {
|
|
|
23587
23593
|
comparisonValueText.text((this.comparisonValue() || 'N/A').toString());
|
|
23588
23594
|
break;
|
|
23589
23595
|
}
|
|
23590
|
-
this.previousComparisonValue
|
|
23596
|
+
this.previousComparisonValue.set(this.comparisonValue());
|
|
23591
23597
|
const comparisonTextGroupTranslateY = this.height * 3 / 4 + this.divisorLineMargin.bottom + this.comparisonTextRectHeight;
|
|
23592
23598
|
this.comparisonTextGroup = this.greenGroup.append("g")
|
|
23593
23599
|
.attr("class", "comparison-text-group")
|
|
@@ -23674,7 +23680,7 @@ class CoreStatisticWidgetComponent {
|
|
|
23674
23680
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreStatisticWidgetComponent, decorators: [{
|
|
23675
23681
|
type: Component,
|
|
23676
23682
|
args: [{ selector: 'core-statistic-widget', standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #container class=\"core-statistic-widget-container\">\r\n \r\n</div>" }]
|
|
23677
|
-
}],
|
|
23683
|
+
}], propDecorators: { valueFontSize: [{
|
|
23678
23684
|
type: Input
|
|
23679
23685
|
}], margin: [{
|
|
23680
23686
|
type: Input
|