@hestia-earth/ui-components 0.30.0 → 0.30.2
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/chart/hierarchy-chart/hierarchy-chart.component.d.ts +1 -1
- package/engine/engine-models-version-link/engine-models-version-link.component.d.ts +1 -1
- package/esm2022/chart/hierarchy-chart/hierarchy-chart.component.mjs +15 -10
- package/esm2022/node/node-logs-file/node-logs-file.component.mjs +2 -2
- package/esm2022/select/select-option/select-option.component.mjs +3 -3
- package/esm2022/select/select.component.mjs +3 -3
- package/fesm2022/hestia-earth-ui-components.mjs +19 -14
- package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
- package/node/node-logs-models/node-logs-models.component.d.ts +1 -1
- package/package.json +1 -1
- package/svg-icons/glossary.svg +5 -5
- package/svg-icons/schema.svg +7 -7
|
@@ -27,7 +27,7 @@ export declare class HierarchyChartComponent {
|
|
|
27
27
|
private readonly indicatorArray;
|
|
28
28
|
private readonly linkedIndicators;
|
|
29
29
|
private readonly nonLCAIndicators;
|
|
30
|
-
private otherEndpoint;
|
|
30
|
+
private readonly otherEndpoint;
|
|
31
31
|
private readonly endpoints;
|
|
32
32
|
private readonly chartChildren;
|
|
33
33
|
private root?;
|
|
@@ -3,7 +3,7 @@ export declare class EngineModelsVersionLinkComponent {
|
|
|
3
3
|
protected readonly faExternalLinkAlt: import("@fortawesome/fontawesome-common-types").IconDefinition;
|
|
4
4
|
protected readonly node: import("@angular/core").InputSignal<any>;
|
|
5
5
|
protected readonly showDetails: import("@angular/core").InputSignal<boolean>;
|
|
6
|
-
protected readonly ENGINE_VERSION = "0.65.
|
|
6
|
+
protected readonly ENGINE_VERSION = "0.65.9";
|
|
7
7
|
protected readonly version: import("@angular/core").Signal<string>;
|
|
8
8
|
protected readonly url: import("@angular/core").Signal<string>;
|
|
9
9
|
static ɵfac: i0.ɵɵFactoryDeclaration<EngineModelsVersionLinkComponent, never>;
|
|
@@ -210,6 +210,9 @@ const mergedNodes = (selection, { tooltipOperator, zone }) => {
|
|
|
210
210
|
.call(setGroupButtonXY);
|
|
211
211
|
return selection;
|
|
212
212
|
};
|
|
213
|
+
// more than 70%
|
|
214
|
+
const fractionCutoff = 0.7;
|
|
215
|
+
const fractionWidth = (data) => Math.abs(data.fraction) * nodeContentWidth;
|
|
213
216
|
const enterNodes = (selection) => {
|
|
214
217
|
const nodes = selection.filter(d => d.data.type !== ChartNodeType.root && !d.data.group);
|
|
215
218
|
nodes.append('rect').classed('node-box', true);
|
|
@@ -240,7 +243,7 @@ const enterNodes = (selection) => {
|
|
|
240
243
|
.append('rect')
|
|
241
244
|
.classed('bar-foreground', true)
|
|
242
245
|
.call(formatBar)
|
|
243
|
-
.attr('width', d => d.data
|
|
246
|
+
.attr('width', d => fractionWidth(d.data))
|
|
244
247
|
.attr('fill', d => nodeColours[d.data.type]);
|
|
245
248
|
withBar
|
|
246
249
|
.append('text')
|
|
@@ -248,10 +251,10 @@ const enterNodes = (selection) => {
|
|
|
248
251
|
.text(({ data }) => data.fraction === 0
|
|
249
252
|
? 'no contribution'
|
|
250
253
|
: `${Math.round(100 * data.fraction)}% ${Math.round(100 * data.fraction) === 0 ? ' (rounded)' : ''}`)
|
|
251
|
-
.attr('text-anchor', d => (d.data.fraction === 0 ? 'middle' : d.data.fraction >
|
|
254
|
+
.attr('text-anchor', d => (d.data.fraction === 0 ? 'middle' : d.data.fraction > fractionCutoff ? 'end' : 'start'))
|
|
252
255
|
.attr('x', d => d.data.fraction === 0
|
|
253
256
|
? nodeWidth / 2
|
|
254
|
-
: d.data
|
|
257
|
+
: fractionWidth(d.data) + nodePadding + (d.data.fraction > fractionCutoff ? -4 : 4))
|
|
255
258
|
.attr('y', nodeHeight - nodePadding - barHeight / 2);
|
|
256
259
|
return selection;
|
|
257
260
|
};
|
|
@@ -308,6 +311,11 @@ const groupPercentage = (node, percentage = 0.02) => {
|
|
|
308
311
|
node._children = notGrouped;
|
|
309
312
|
}
|
|
310
313
|
};
|
|
314
|
+
const sumIndicators = (data) => data.reduce((acc, log) => {
|
|
315
|
+
// ignore negative values in the total
|
|
316
|
+
acc[log.indicator] = (acc[log.indicator] || 0) + (log.weightedValue > 0 ? log.weightedValue : 0);
|
|
317
|
+
return acc;
|
|
318
|
+
}, {});
|
|
311
319
|
const groupIndicators = (data, terms = {}, totals = {}) => data.reduce((acc, log) => {
|
|
312
320
|
const contributorType = typeMapping[terms[log.contributor]?.termType] || ChartNodeType.input;
|
|
313
321
|
const indicatorType = typeMapping[terms[log.indicator]?.termType];
|
|
@@ -344,11 +352,11 @@ const groupIndicators = (data, terms = {}, totals = {}) => data.reduce((acc, log
|
|
|
344
352
|
});
|
|
345
353
|
return acc;
|
|
346
354
|
}, {});
|
|
347
|
-
const showBar = node => [
|
|
355
|
+
const showBar = (node) => [
|
|
348
356
|
node.parent?.data.type !== ChartNodeType.root,
|
|
349
357
|
node.parent?.data.id !== nonLCAIndicatorsId,
|
|
350
358
|
!node.data.group,
|
|
351
|
-
node.data.fraction
|
|
359
|
+
!isNaN(node.data.fraction)
|
|
352
360
|
].every(Boolean);
|
|
353
361
|
export class HierarchyChartComponent {
|
|
354
362
|
constructor() {
|
|
@@ -362,10 +370,7 @@ export class HierarchyChartComponent {
|
|
|
362
370
|
this.nodeColours = nodeColours;
|
|
363
371
|
this.includedTypes = signal([]);
|
|
364
372
|
this.legend = computed(() => legend.filter(({ type }) => this.includedTypes().includes(type)));
|
|
365
|
-
this.totalsPerIndicator = computed(() => this.data()
|
|
366
|
-
acc[log.indicator] = (acc[log.indicator] || 0) + log.weightedValue;
|
|
367
|
-
return acc;
|
|
368
|
-
}, {}));
|
|
373
|
+
this.totalsPerIndicator = computed(() => sumIndicators(this.data()));
|
|
369
374
|
this.indicators = computed(() => groupIndicators(this.data(), this.terms(), this.totalsPerIndicator()));
|
|
370
375
|
this.indicatorArray = computed(() => Object.values(this.indicators()));
|
|
371
376
|
this.linkedIndicators = computed(() => this.indicatorArray()
|
|
@@ -588,4 +593,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
|
588
593
|
type: Component,
|
|
589
594
|
args: [{ selector: 'he-hierarchy-chart', standalone: true, imports: [NgbPopover, FaIconComponent], template: "<div class=\"columns is-centered py-2 is-size-7 is-mobile is-multiline\">\n @for (legendItem of legend(); track legendItem.type) {\n <div class=\"column is-narrow py-0 is-flex-mobile is-flex-direction-column is-align-items-center | is-legend-item\">\n <span\n class=\"is-inline-block-tablet is-align-middle | key-colour\"\n [style.backgroundColor]=\"nodeColours[legendItem.type]\"></span>\n <strong class=\"has-text-black is-align-middle is-pl-tablet-2 is-size-8-mobile\">\n <span class=\"is-hidden-desktop\">{{ legendItem.mobileText }}</span>\n <span class=\"is-hidden-touch\">{{ legendItem.text }}</span>\n </strong>\n </div>\n }\n</div>\n\n<div class=\"chart-container is-relative w-100\">\n <svg class=\"w-100 h-100\" #chart></svg>\n\n <span\n class=\"is-hidden\"\n [ngbPopover]=\"tipContent\"\n triggers=\"manual\"\n placement=\"right left auto\"\n container=\"body\"\n #t=\"ngbPopover\"\n positionTarget=\".tip-target\"\n popoverClass=\"is-narrow driver-chart-tooltip\"\n [animation]=\"true\"></span>\n</div>\n\n<ng-template #tipContent let-tipData=\"tipData\">\n @if (tipData.hasWeightedValue) {\n <p>contribution: {{ tipData.weightedValueText }}</p>\n }\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.valueKeyHref\">value</a>\n : {{ tipData.valueValueText }}\n @if (tipData.hasValue) {\n <a class=\"is-dark\" [href]=\"tipData.modelDocsHref\" target=\"_blank\">\n <span>Docs</span>\n <fa-icon class=\"ml-1\" [icon]=\"faExternalLinkAlt\" size=\"sm\" />\n </a>\n }\n </p>\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.modelKeyHref\">methodModel</a>\n :\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.modelValueHref\">{{ tipData.modelValue }}</a>\n </p>\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.termKeyHref\">term</a>\n :\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.termValueHref\">{{ tipData.termValue }}</a>\n </p>\n</ng-template>\n", styles: ["@media screen and (min-width: 1216px){.is-legend-item{min-width:130px}}.key-colour{border-radius:2px;box-shadow:0 2px 3px #0000001a,inset 0 0 0 1px #0000001a;height:1.5em;width:1.5em;opacity:.7}svg{pointer-events:none}:host ::ng-deep .node-box{rx:10px;ry:10px;fill-opacity:0;stroke-opacity:.5;pointer-events:auto}:host ::ng-deep .node-open{stroke-width:3}:host ::ng-deep .node-openable{cursor:pointer;stroke-opacity:1;fill-opacity:.1}:host ::ng-deep .node-openable:hover{stroke-width:3}:host ::ng-deep .group-button{fill:#fff;cursor:pointer;pointer-events:auto;stroke-dasharray:2,5;stroke:#999;stroke-width:2}:host ::ng-deep .group-button:hover{fill:#0a0a0a}:host ::ng-deep .group-button:hover+text{fill:#fff}:host ::ng-deep .group-button-text{text-anchor:middle;alignment-baseline:central}:host ::ng-deep .group-border,:host ::ng-deep .group-line{stroke-dasharray:2,5;stroke:#999;stroke-width:2;fill:none}:host ::ng-deep .group-label{font-weight:700;fill:#696969;text-anchor:start;alignment-baseline:central}:host ::ng-deep .node-label{font-weight:700;fill:#0a0a0a;text-anchor:middle;alignment-baseline:central}:host ::ng-deep .node-label tspan{alignment-baseline:inherit}:host ::ng-deep .bar-label{font-weight:700;fill:#696969;alignment-baseline:central}:host ::ng-deep .sibling-mask{fill:#fafafa;fill-opacity:.8;stroke-opacity:.9;stroke:#fafafa;rx:10px;ry:10px;stroke-width:3;pointer-events:none}:host ::ng-deep .mask-openable{pointer-events:all}:host ::ng-deep .mask-openable:hover{fill:none;stroke:none}:host ::ng-deep .bar-background{fill:#d3d3d3;fill-opacity:.5}:host ::ng-deep .link-path{fill:none;stroke:#999}:host ::ng-deep .bar-foreground{fill-opacity:.5}\n"] }]
|
|
590
595
|
}], ctorParameters: () => [] });
|
|
591
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9oaWVyYXJjaHktY2hhcnQvaGllcmFyY2h5LWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9oaWVyYXJjaHktY2hhcnQvaGllcmFyY2h5LWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFFTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLElBQUksUUFBUSxFQUF1QixTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEYsT0FBTyxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFNBQVMsSUFBSSxXQUFXLEVBQ3hCLElBQUksSUFBSSxNQUFNLEVBSWYsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGFBQWEsSUFBSSxlQUFlLEVBQUUsY0FBYyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxPQUFP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ImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgTmdab25lLFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbGlua0hvcml6b250YWwgYXMgZDNMaW5rSG9yaXpvbnRhbCB9IGZyb20gJ2QzLXNoYXBlJztcbmltcG9ydCB7IHNlbGVjdCBhcyBkM1NlbGVjdCwgU2VsZWN0aW9uLCBCYXNlVHlwZSwgc2VsZWN0QWxsIH0gZnJvbSAnZDMtc2VsZWN0aW9uJztcbmltcG9ydCAnZDMtdHJhbnNpdGlvbic7XG5pbXBvcnQge1xuICBoaWVyYXJjaHkgYXMgZDNIaWVyYXJjaHksXG4gIHRyZWUgYXMgZDNUcmVlLFxuICBIaWVyYXJjaHlOb2RlLFxuICBIaWVyYXJjaHlQb2ludE5vZGUsXG4gIEhpZXJhcmNoeVBvaW50TGlua1xufSBmcm9tICdkMy1oaWVyYXJjaHknO1xuaW1wb3J0IHsgZWFzZUVsYXN0aWNJbiBhcyBkM0Vhc2VFbGFzdGljSW4sIGVhc2VFbGFzdGljT3V0IGFzIGQzRWFzZUVsYXN0aWNPdXQgfSBmcm9tICdkMy1lYXNlJztcbmltcG9ydCB7IE5nYlBvcG92ZXIgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBpc0VtcHR5LCB0b1ByZWNpc2lvbiwgdW5pcXVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQgeyBUZXJtVGVybVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyBGYUljb25Db21wb25lbnQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XG5pbXBvcnQgeyBmYUV4dGVybmFsTGlua0FsdCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5cbmltcG9ydCB7IGJhc2VVcmwsIHNjaGVtYUJhc2VVcmwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgZDN3cmFwIH0gZnJvbSAnLi4vLi4vY29tbW9uL2QzLXV0aWxzJztcbmltcG9ydCB7XG4gIENoYXJ0Tm9kZVR5cGUsXG4gIGdldFVuaXRzQW5kTGFiZWwsXG4gIElDaGFydERhdGEsXG4gIElUZXJtTWFwcGluZyxcbiAgbGVnZW5kLFxuICBub2RlQ29sb3VycyxcbiAgTm9kZURhdHVtXG59IGZyb20gJy4vaGllcmFyY2h5LWNoYXJ0Lm1vZGVsJztcblxuaW50ZXJmYWNlIENoYXJ0Tm9kZSBleHRlbmRzIEhpZXJhcmNoeVBvaW50Tm9kZTxOb2RlRGF0dW0+IHtcbiAgX2NoaWxkcmVuPzogQ2hhcnROb2RlW107IC8vIGNoaWxkcmVuIG9mIGNvbGxhcHNlZCBub2Rlc1xuICBfZ3JvdXBDaGlsZHJlbj86IENoYXJ0Tm9kZVtdOyAvLyBhbGwgY2hpbGRyZW4gd2hlbiBncm91cCBjbG9zZWQ7IHVuZ3JvdXBlZCBjaGlsZHJlbiB3aGVuIGdyb3VwIG9wZW5cbiAgX29wZW4/OiBib29sZWFuO1xuICBfZ3JleWVkPzogYm9vbGVhbjtcbiAgX2dyb3VwT3Blbj86IGJvb2xlYW47XG4gIF90aW1lb3V0PzogTm9kZUpTLlRpbWVvdXQ7XG59XG5cbmludGVyZmFjZSBITm9kZSBleHRlbmRzIEhpZXJhcmNoeU5vZGU8Tm9kZURhdHVtPiB7XG4gIF9jaGlsZHJlbj86IEhOb2RlW107XG4gIF9ncm91cENoaWxkcmVuPzogSE5vZGVbXTtcbiAgX2dyb3VwT3Blbj86IGJvb2xlYW47XG4gIF9vcGVuPzogYm9vbGVhbjtcbiAgX2dyZXllZD86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBMaW5rIGV4dGVuZHMgSGllcmFyY2h5UG9pbnRMaW5rPE5vZGVEYXR1bT4ge1xuICBzb3VyY2U6IENoYXJ0Tm9kZTtcbiAgdGFyZ2V0OiBDaGFydE5vZGU7XG59XG5cbnR5cGUgTm9kZVNlbGVjdGlvbiA9IFNlbGVjdGlvbjxTVkdHRWxlbWVudCB8IEJhc2VUeXBlLCBDaGFydE5vZGUsIFNWR0dFbGVtZW50LCB1bmtub3duPjtcbnR5cGUgTGlua1NlbGVjdGlvbiA9IFNlbGVjdGlvbjxTVkdQYXRoRWxlbWVudCB8IEJhc2VUeXBlLCBMaW5rLCBTVkdHRWxlbWVudCwgdW5rbm93bj47XG5cbmNvbnN0IHR5cGVNYXBwaW5nID0ge1xuICBbVGVybVRlcm1UeXBlLmVuZHBvaW50SW5kaWNhdG9yXTogQ2hhcnROb2RlVHlwZS5lbmRwb2ludCxcbiAgW1Rlcm1UZXJtVHlwZS5jaGFyYWN0ZXJpc2VkSW5kaWNhdG9yXTogQ2hhcnROb2RlVHlwZS5taWRwb2ludCxcbiAgW1Rlcm1UZXJtVHlwZS5lbWlzc2lvbl06IENoYXJ0Tm9kZVR5cGUuZW1pc3Npb24sXG4gIFtUZXJtVGVybVR5cGUucmVzb3VyY2VVc2VdOiBDaGFydE5vZGVUeXBlLmVtaXNzaW9uLFxuICBbVGVybVRlcm1UeXBlLm9wZXJhdGlvbl06IENoYXJ0Tm9kZVR5cGUub3BlcmF0aW9uXG59O1xuXG5jb25zdCB3aWR0aCA9IDgwMDtcbmNvbnN0IG1hcmdpbiA9IHsgdG9wOiAxMCwgcmlnaHQ6IDIwLCBib3R0b206IDEwLCBsZWZ0OiAyMCB9O1xuY29uc3QgZm9udFNpemUgPSBNYXRoLmZsb29yKHdpZHRoIC8gMTAwKTtcbmNvbnN0IG5vZGVQYWRkaW5nID0gZm9udFNpemUgLyAyO1xuY29uc3QgbGluZUhlaWdodCA9IGZvbnRTaXplICogMS4yO1xuY29uc3QgYmFySGVpZ2h0ID0gbGluZUhlaWdodDtcblxuY29uc3Qgbm9kZUhlaWdodCA9IG5vZGVQYWRkaW5nICogMiArIDIgKiBsaW5lSGVpZ2h0ICsgYmFySGVpZ2h0O1xuY29uc3Qgbm9kZVdpZHRoID0gbm9kZUhlaWdodCAqIDIgKiAxLjYxODtcbmNvbnN0IG5vZGVDb250ZW50V2lkdGggPSBub2RlV2lkdGggLSBub2RlUGFkZGluZyAqIDI7XG5jb25zdCBsYXllclNwYWNpbmcgPSAod2lkdGggLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodCAtIG5vZGVXaWR0aCAqIDUpIC8gNDtcbmNvbnN0IG5vZGVNYXJnaW4gPSBub2RlUGFkZGluZyAqIDAuNzU7XG5jb25zdCBub2RlU3BhY2luZ0ZhY3RvciA9IChub2RlSGVpZ2h0ICsgbm9kZU1hcmdpbiAqIDIpIC8gbm9kZUhlaWdodDtcbmNvbnN0IG5vZGVEdXJhdGlvbiA9IDYwMDtcbmNvbnN0IGxpbmtEdXJhdGlvbiA9IDIwMDtcbmNvbnN0IGdyb3VwRGVsYXkgPSBub2RlRHVyYXRpb24gLSAxMDA7XG5jb25zdCBub25MQ0FJbmRpY2F0b3JzSWQgPSAnbm9uTENBSW5kaWNhdG9ycyc7XG5jb25zdCBncmV5ZWRPcGFjaXR5ID0gMC4yO1xuY29uc3QgZ3JvdXBPdmVybGFwID0gbGluZUhlaWdodCAtIG5vZGVQYWRkaW5nIC0gbm9kZU1hcmdpbjtcbmNvbnN0IGdyb3VwTm9kZVNwYWNlID0gbm9kZUhlaWdodCAtIDIgKiBncm91cE92ZXJsYXA7XG5cbmNvbnN0IGNvbGxhcHNlQ2hpbGRyZW4gPSAobm9kZTogQ2hhcnROb2RlIHwgSE5vZGUpID0+IHtcbiAgbm9kZS5fY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuIHx8IG5vZGUuX2NoaWxkcmVuO1xuICBub2RlLmNoaWxkcmVuID0gbnVsbDtcbiAgcmV0dXJuIG5vZGU7XG59O1xuXG5jb25zdCByZXN0b3JlQ2hpbGRyZW4gPSAobm9kZTogQ2hhcnROb2RlIHwgSE5vZGUpID0+IHtcbiAgbm9kZS5jaGlsZHJlbiA9IG5vZGUuX2NoaWxkcmVuO1xuICBub2RlLl9jaGlsZHJlbiA9IG51bGw7XG4gIHJldHVybiBub2RlO1xufTtcblxuY29uc3Qgd3JhcCA9IChzZWxlY3Rpb246IFNlbGVjdGlvbjxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlLCBhbnksIGFueT4sIG1heFdpZHRoID0gbm9kZUNvbnRlbnRXaWR0aCkgPT4ge1xuICBzZWxlY3Rpb24uZWFjaChmdW5jdGlvbiAoZCkge1xuICAgIGNvbnN0IHQgPSBkM1NlbGVjdDxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlPih0aGlzKTtcbiAgICBkM3dyYXA8Q2hhcnROb2RlPih0LCB7XG4gICAgICBtYXhXaWR0aCxcbiAgICAgIG1heExpbmVzOiBkLmRhdGEuc2hvd0JhciA/IDIgOiAzLFxuICAgICAgdmNlbnRyZTogIWQuZGF0YS5zaG93QmFyLFxuICAgICAgd29yZHM6IFsuLi5kLmRhdGEubGFiZWwuc3BsaXQoL1xccysvKSwgZC5kYXRhLnVuaXRzXSxcbiAgICAgIG93bkxpbmVXb3JkOiBkLmRhdGEudW5pdHMsXG4gICAgICBuSGVpZ2h0OiBub2RlSGVpZ2h0LFxuICAgICAgbEhlaWdodDogbGluZUhlaWdodFxuICAgIH0pO1xuICB9KTtcbn07XG5cbmNvbnN0IHNldE5vZGVTaXplID0gc2VsZWN0aW9uID0+IHNlbGVjdGlvbi5hdHRyKCd3aWR0aCcsIG5vZGVXaWR0aCkuYXR0cignaGVpZ2h0Jywgbm9kZUhlaWdodCk7XG5cbmNvbnN0IGZvcm1hdEJhciA9IChzZWxlY3Rpb246IE5vZGVTZWxlY3Rpb24pID0+XG4gIHNlbGVjdGlvblxuICAgIC5hdHRyKCdoZWlnaHQnLCBiYXJIZWlnaHQpXG4gICAgLmF0dHIoJ3J4JywgJzEnKVxuICAgIC5hdHRyKCdyeScsICcxJylcbiAgICAuYXR0cigneScsIG5vZGVIZWlnaHQgLSBub2RlUGFkZGluZyAtIGJhckhlaWdodClcbiAgICAuYXR0cigneCcsIG5vZGVQYWRkaW5nKTtcblxuY29uc3QgaXNUeXBlV2l0aG91dFZhbHVlID0gbm9kZURhdHVtID0+IFtDaGFydE5vZGVUeXBlLmlucHV0LCBDaGFydE5vZGVUeXBlLm9wZXJhdGlvbl0uaW5jbHVkZXMobm9kZURhdHVtLmRhdGEudHlwZSk7XG5cbmNvbnN0IGdldFdlaWdodGVkVmFsdWVUZXh0ID0gbm9kZURhdHVtID0+XG4gIGAke3RvUHJlY2lzaW9uKG5vZGVEYXR1bS5kYXRhLndlaWdodGVkVmFsdWUsIDMpfSR7XG4gICAgbm9kZURhdHVtLnBhcmVudD8uZGF0YS52YWx1ZSA9PT0gbnVsbFxuICAgICAgPyAnJ1xuICAgICAgOiBgIG9mICR7dG9QcmVjaXNpb24obm9kZURhdHVtLnBhcmVudD8uZGF0YS52YWx1ZSB8fCBub2RlRGF0dW0ucGFyZW50Py5kYXRhLndlaWdodGVkVmFsdWUsIDMpfWBcbiAgfSAke25vZGVEYXR1bS5wYXJlbnQ/LmRhdGEudmFsdWUgPyBub2RlRGF0dW0ucGFyZW50Py5kYXRhLnVuaXRzIDogbm9kZURhdHVtLnBhcmVudD8ucGFyZW50Py5kYXRhLnVuaXRzfWA7XG5cbmNvbnN0IGdlbmVyYXRlVGlwRGF0YSA9IG5vZGVEYXR1bSA9PiAoe1xuICBoYXNXZWlnaHRlZFZhbHVlOiBub2RlRGF0dW0uZGF0YS53ZWlnaHRlZFZhbHVlLFxuICB3ZWlnaHRlZFZhbHVlVGV4dDogZ2V0V2VpZ2h0ZWRWYWx1ZVRleHQobm9kZURhdHVtKSxcbiAgdmFsdWVLZXlIcmVmOiBgJHtzY2hlbWFCYXNlVXJsKCl9L0luZGljYXRvciN2YWx1ZWAsXG4gIG1vZGVsRG9jc0hyZWY6IG5vZGVEYXR1bS5kYXRhLm1vZGVsRG9jcyxcbiAgdmFsdWVWYWx1ZVRleHQ6IG5vZGVEYXR1bS5kYXRhLnZhbHVlXG4gICAgPyBgJHt0b1ByZWNpc2lvbihub2RlRGF0dW0uZGF0YS52YWx1ZSwgMyl9ICR7bm9kZURhdHVtLmRhdGEudW5pdHN9IC0gYFxuICAgIDogaXNUeXBlV2l0aG91dFZhbHVlKG5vZGVEYXR1bSlcbiAgICAgID8gJ25vIGRhdGEgKHVuZGVyIGRldmVsb3BtZW50KSdcbiAgICAgIDogJ25vIGNvbnRyaWJ1dGlvbicsXG4gIGhhc1ZhbHVlOiBub2RlRGF0dW0uZGF0YS52YWx1ZSxcbiAgbW9kZWxLZXlIcmVmOiBgJHtzY2hlbWFCYXNlVXJsKCl9L0luZGljYXRvciNtZXRob2RNb2RlbGAsXG4gIG1vZGVsVmFsdWU6IG5vZGVEYXR1bS5kYXRhLm1vZGVsTmFtZSxcbiAgbW9kZWxWYWx1ZUhyZWY6IGAke2Jhc2VVcmwoKX0vbW9kZWwvJHtub2RlRGF0dW0uZGF0YS5tb2RlbElkfWAsXG4gIHRlcm1LZXlIcmVmOiBgJHtzY2hlbWFCYXNlVXJsKCl9L0luZGljYXRvciN0ZXJtYCxcbiAgdGVybVZhbHVlOiBub2RlRGF0dW0uZGF0YS50ZXJtLFxuICB0ZXJtVmFsdWVUZXh0OiBub2RlRGF0dW0uZGF0YS50ZXJtLFxuICB0ZXJtVmFsdWVIcmVmOiBgJHtiYXNlVXJsKCl9L3Rlcm0vJHtub2RlRGF0dW0uZGF0YS5pZH1gXG59KTtcblxuY29uc3QgYWRkVG9vbHRpcCA9IChcbiAgc2VsZWN0aW9uOiBOb2RlU2VsZWN0aW9uLFxuICB7IHRvb2x0aXBPcGVyYXRvciwgem9uZSB9OiB7IHRvb2x0aXBPcGVyYXRvcjogTmdiUG9wb3Zlcjsgem9uZTogTmdab25lIH1cbikgPT4ge1xuICBsZXQgaG92ZXJpbmdUaXAgPSBmYWxzZTtcbiAgbGV0IGhvdmVyaW5nTm9kZSA9IGZhbHNlO1xuICBsZXQgbGFzdE5vZGVJZDogc3RyaW5nO1xuXG4gIGNvbnN0IGNsb3NlVGlwID0gKCkgPT4ge1xuICAgIHpvbmUucnVuKCgpID0+IHRvb2x0aXBPcGVyYXRvci5jbG9zZShmYWxzZSkpO1xuICAgIHNlbGVjdEFsbCgnLnRpcC10YXJnZXQnKS5jbGFzc2VkKCd0aXAtdGFyZ2V0JywgZmFsc2UpO1xuICAgIGxhc3ROb2RlSWQgPSBudWxsO1xuICB9O1xuXG4gIGNvbnN0IHN0YXJ0Q2xvc2VUaXAgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWhvdmVyaW5nVGlwICYmICFob3ZlcmluZ05vZGUpIHtcbiAgICAgICAgY2xvc2VUaXAoKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9O1xuXG4gIHNlbGVjdGlvblxuICAgIC5vbignY2xpY2snLCBjbG9zZVRpcClcbiAgICAub24oJ3BvaW50ZXJlbnRlcicsIChldmVudCwgbm9kZURhdHVtKSA9PiB7XG4gICAgICBob3ZlcmluZ05vZGUgPSB0cnVlO1xuICAgICAgaWYgKGxhc3ROb2RlSWQgPT09IG5vZGVEYXR1bS5kYXRhLmlkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNsb3NlVGlwKCk7XG4gICAgICBsYXN0Tm9kZUlkID0gbm9kZURhdHVtLmRhdGEuaWQ7XG4gICAgICBkM1NlbGVjdChldmVudC50YXJnZXQpLmNsYXNzZWQoJ3RpcC10YXJnZXQnLCB0cnVlKTtcbiAgICAgIHpvbmUucnVuKCgpID0+IHRvb2x0aXBPcGVyYXRvci5vcGVuKHsgdGlwRGF0YTogZ2VuZXJhdGVUaXBEYXRhKG5vZGVEYXR1bSkgfSkpO1xuXG4gICAgICBkM1NlbGVjdCgnLmRyaXZlci1jaGFydC10b29sdGlwJylcbiAgICAgICAgLm9uKCdwb2ludGVyZW50ZXInLCAoKSA9PiB7XG4gICAgICAgICAgaG92ZXJpbmdUaXAgPSB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAub24oJ3BvaW50ZXJsZWF2ZScsICgpID0+IHtcbiAgICAgICAgICBob3ZlcmluZ1RpcCA9IGZhbHNlO1xuICAgICAgICAgIHN0YXJ0Q2xvc2VUaXAoKTtcbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICAub24oJ3BvaW50ZXJsZWF2ZScsICgpID0+IHtcbiAgICAgIGhvdmVyaW5nTm9kZSA9IGZhbHNlO1xuICAgICAgc3RhcnRDbG9zZVRpcCgpO1xuICAgIH0pO1xuXG4gIHJldHVybiBzZWxlY3Rpb247XG59O1xuXG5jb25zdCBtZXJnZWROb2RlcyA9IChzZWxlY3Rpb246IE5vZGVTZWxlY3Rpb24sIHsgdG9vbHRpcE9wZXJhdG9yLCB6b25lIH0pID0+IHtcbiAgc2VsZWN0aW9uXG4gICAgLnNlbGVjdEFsbDxTVkdSZWN0RWxlbWVudCwgQ2hhcnROb2RlPignLm5vZGUtYm94JylcbiAgICAuY2xhc3NlZCgnbm9kZS1vcGVuYWJsZScsIGQgPT4gISFkLmhlaWdodClcbiAgICAuY2xhc3NlZCgnbm9kZS1vcGVuJywgZCA9PiBkLl9vcGVuKVxuICAgIC5jYWxsKHNldE5vZGVTaXplKVxuICAgIC5hdHRyKCdzdHJva2UnLCAoeyBkYXRhIH0pID0+IG5vZGVDb2xvdXJzW2RhdGEudHlwZV0pXG4gICAgLmF0dHIoJ2ZpbGwnLCBkID0+IG5vZGVDb2xvdXJzW2QuZGF0YS50eXBlXSlcbiAgICAuc3R5bGUoJ3VzZXItc2VsZWN0Jywgd2luZG93LmlubmVyV2lkdGggPCA3NjggPyAnbm9uZScgOiBudWxsKTtcblxuICBzZWxlY3Rpb24uZmlsdGVyKGQgPT4gIWQuZGF0YS5ncm91cCAmJiBkLmRhdGEuaWQgIT09IG5vbkxDQUluZGljYXRvcnNJZCkuY2FsbChhZGRUb29sdGlwLCB7IHRvb2x0aXBPcGVyYXRvciwgem9uZSB9KTtcblxuICBzZWxlY3Rpb25cbiAgICAuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcubm9kZS1sYWJlbCcpXG4gICAgLmF0dHIoJ3knLCBkID0+IChkLmRhdGEuc2hvd0JhciA/IGxpbmVIZWlnaHQgLyAyICsgbm9kZVBhZGRpbmcgLyAyIDogMCkpXG4gICAgLmF0dHIoJ3gnLCBub2RlV2lkdGggLyAyKTtcblxuICBjb25zdCBncm91cHMgPSBzZWxlY3Rpb24uZmlsdGVyKGQgPT4gZC5kYXRhLmdyb3VwKTtcblxuICBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtYm9yZGVyJylcbiAgICAuYXR0cignd2lkdGgnLCBub2RlV2lkdGggKyBub2RlUGFkZGluZyAqIDIpXG4gICAgLmF0dHIoJ3gnLCAtbm9kZVBhZGRpbmcpXG4gICAgLmF0dHIoJ3knLCBub2RlSGVpZ2h0IC0gKGxpbmVIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIpKVxuICAgIC5hdHRyKCdvcGFjaXR5JywgZCA9PiAoZC5fZ3JleWVkICYmIGQuX2dyb3VwT3BlbiA/IGdyZXllZE9wYWNpdHkgOiBkLl9ncm91cE9wZW4gPyAxIDogMCkpXG4gICAgLmF0dHIoXG4gICAgICAnaGVpZ2h0JyxcbiAgICAgIGQgPT5cbiAgICAgICAgTWF0aC5hYnMoZC5wYXJlbnQuX2dyb3VwQ2hpbGRyZW4ubGVuZ3RoIC0gZC5wYXJlbnQuY2hpbGRyZW4ubGVuZ3RoKSAqIChub2RlSGVpZ2h0ICogbm9kZVNwYWNpbmdGYWN0b3IpICtcbiAgICAgICAgbm9kZVBhZGRpbmcgK1xuICAgICAgICAobGluZUhlaWdodCArIG5vZGVQYWRkaW5nICogMikgLyAyXG4gICAgKTtcblxuICBjb25zdCBncm91cExhYmVscyA9IGdyb3Vwc1xuICAgIC5zZWxlY3RBbGw8U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZT4oJy5ncm91cC1sYWJlbCcpXG4gICAgLmF0dHIoJ3knLCBub2RlSGVpZ2h0IC8gMilcbiAgICAuYXR0cigneCcsIG5vZGVQYWRkaW5nKVxuICAgIC50ZXh0KGQgPT4gZC5kYXRhLmxhYmVsKVxuICAgIC5hdHRyKCdvcGFjaXR5JywgZCA9PiAoZC5fZ3JvdXBPcGVuID8gMCA6IGQuX2dyZXllZCA/IGdyZXllZE9wYWNpdHkgOiAxKSk7XG5cbiAgLy8gdW5uZWVkZWQgd2l0aCBjdXJyZW50IGRpbWVuc2lvbnNcbiAgLy8gZ3JvdXBMYWJlbHMuZWFjaChmdW5jdGlvbigpIHtcbiAgLy8gICBjb25zdCB0ZXh0ID0gZDNTZWxlY3Q8U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZT4odGhpcyk7XG4gIC8vICAgY29uc3QgdGV4dFdpZHRoID0gKHRleHQubm9kZSgpIGFzIFNWR1RleHRFbGVtZW50KS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtcbiAgLy8gICBjb25zdCBsaW5lID0gZDNTZWxlY3Q8U1ZHTGluZUVsZW1lbnQsIENoYXJ0Tm9kZT4odGhpcy5uZXh0U2libGluZyBhcyBTVkdMaW5lRWxlbWVudCk7XG4gIC8vICAgbGluZVxuICAvLyAgICAgLmNsYXNzZWQoJ2dyb3VwLWxpbmUnLCB0cnVlKVxuICAvLyAgICAgLmF0dHIoJ3gxJywgdGV4dFdpZHRoICsgbm9kZVBhZGRpbmcgKiAyKVxuICAvLyAgICAgLmF0dHIoJ3kxJywgbm9kZUhlaWdodCAvIDIpXG4gIC8vICAgICAuYXR0cigneDInLCAobm9kZVdpZHRoICogNSkgLyA3IC0gbm9kZVBhZGRpbmcpXG4gIC8vICAgICAuYXR0cigneTInLCBub2RlSGVpZ2h0IC8gMilcbiAgLy8gICAgIC5hdHRyKCdvcGFjaXR5JywgKGQpID0+IChkLl9ncm91cE9wZW4gPyAwIDogZC5fZ3JleWVkID8gZ3JleWVkT3BhY2l0eSA6IDEpKTtcbiAgLy8gfSk7XG5cbiAgY29uc3Qgc2V0R3JvdXBCdXR0b25YWSA9IHNlbCA9PlxuICAgIHNlbFxuICAgICAgLmF0dHIoJ3dpZHRoJywgKG5vZGVXaWR0aCAqIDIpIC8gNylcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCBkID0+IChkLl9ncm91cE9wZW4gPyBsaW5lSGVpZ2h0ICsgbm9kZVBhZGRpbmcgKiAyIDogbm9kZVBhZGRpbmcgKiAyICsgbGluZUhlaWdodCkpXG4gICAgICAuYXR0cigneCcsIGQgPT4gKGQuX2dyb3VwT3BlbiA/IChub2RlV2lkdGggKiAyLjUpIC8gNyA6IChub2RlV2lkdGggKiA1KSAvIDcgLSBub2RlUGFkZGluZykpXG4gICAgICAuYXR0cigneScsIGQgPT5cbiAgICAgICAgZC5fZ3JvdXBPcGVuXG4gICAgICAgICAgPyBncm91cE92ZXJsYXAgKyAoZ3JvdXBOb2RlU3BhY2UgLSAobGluZUhlaWdodCArIG5vZGVQYWRkaW5nICogMikpIC8gMlxuICAgICAgICAgIDogbm9kZVBhZGRpbmcgKyBsaW5lSGVpZ2h0IC8gMlxuICAgICAgKTtcblxuICBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1JlY3RFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtYnV0dG9uJylcbiAgICAuY2FsbChzZXRHcm91cEJ1dHRvblhZKVxuICAgIC5zdHlsZSgncG9pbnRlci1ldmVudHMnLCBkID0+IChkLl9ncmV5ZWQgPyAnbm9uZScgOiAnYXV0bycpKVxuICAgIC5zdHlsZSgnc3Ryb2tlLW9wYWNpdHknLCBkID0+IChkLl9ncmV5ZWQgPyBncmV5ZWRPcGFjaXR5IDogMSkpO1xuXG4gIGdyb3Vwc1xuICAgIC5zZWxlY3RBbGw8U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZT4oJy5ncm91cC1idXR0b24tdGV4dCcpXG4gICAgLnRleHQoZCA9PiAoZC5fZ3JvdXBPcGVuID8gJ0hpZGUnIDogJ1Nob3cnKSlcbiAgICAuYXR0cigneCcsIGQgPT4gKGQuX2dyb3VwT3BlbiA/IG5vZGVXaWR0aCAvIDIgOiAobm9kZVdpZHRoICogNikgLyA3IC0gbm9kZVBhZGRpbmcpKVxuICAgIC5hdHRyKCd5JywgZCA9PiAoZC5fZ3JvdXBPcGVuID8gbm9kZU1hcmdpbiArIGxpbmVIZWlnaHQgKyBsaW5lSGVpZ2h0IC8gMiA6IG5vZGVIZWlnaHQgLyAyKSlcbiAgICAuYXR0cignZm9udC1zaXplJywgKCkgPT4gYCR7Zm9udFNpemUgKiAxLjN9cHhgKTtcblxuICBzZWxlY3Rpb24uc2VsZWN0QWxsKCcuc2libGluZy1tYXNrJykucmVtb3ZlKCk7XG5cbiAgc2VsZWN0aW9uXG4gICAgLmZpbHRlcihkID0+IGQuX2dyZXllZCAmJiAhZC5kYXRhLmdyb3VwKVxuICAgIC5hcHBlbmQoJ3JlY3QnKVxuICAgIC5jbGFzc2VkKCdub2RlLW9wZW5hYmxlJywgZCA9PiAhIWQuaGVpZ2h0KVxuICAgIC5jbGFzc2VkKCdzaWJsaW5nLW1hc2sgbWFzay1vcGVuYWJsZScsIHRydWUpXG4gICAgLmNhbGwoc2V0Tm9kZVNpemUpO1xuXG4gIHNlbGVjdGlvblxuICAgIC5maWx0ZXIoZCA9PiBkLl9ncmV5ZWQgJiYgZC5kYXRhLmdyb3VwKVxuICAgIC5hcHBlbmQoJ3JlY3QnKVxuICAgIC5jbGFzc2VkKCdzaWJsaW5nLW1hc2snLCB0cnVlKVxuICAgIC5jYWxsKHNldEdyb3VwQnV0dG9uWFkpO1xuXG4gIHJldHVybiBzZWxlY3Rpb247XG59O1xuXG5jb25zdCBlbnRlck5vZGVzID0gKHNlbGVjdGlvbjogTm9kZVNlbGVjdGlvbikgPT4ge1xuICBjb25zdCBub2RlcyA9IHNlbGVjdGlvbi5maWx0ZXIoZCA9PiBkLmRhdGEudHlwZSAhPT0gQ2hhcnROb2RlVHlwZS5yb290ICYmICFkLmRhdGEuZ3JvdXApO1xuXG4gIG5vZGVzLmFwcGVuZCgncmVjdCcpLmNsYXNzZWQoJ25vZGUtYm94JywgdHJ1ZSk7XG5cbiAgbm9kZXNcbiAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAuY2xhc3NlZCgnbm9kZS1sYWJlbCcsIHRydWUpXG4gICAgLnRleHQoKHsgZGF0YSB9KSA9PiBkYXRhLmxhYmVsICsgJyAnICsgZGF0YS51bml0cylcbiAgICAuYXR0cignb3BhY2l0eScsIDApO1xuXG4gIC8vIFRleHQgZWxlbWVudHMgbXVzdCBiZSByZW5kZXJlZCBiZWZvcmUgd2UgY2FuIGNhbGN1bGF0ZSB3cmFwcGluZ1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zdCBsYWJlbHMgPSBub2Rlcy5zZWxlY3RBbGw8U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZT4oJy5ub2RlLWxhYmVsJykuY2FsbCh3cmFwKTtcbiAgICBsYWJlbHMuYXR0cignb3BhY2l0eScsIDEpO1xuICB9KTtcblxuICBjb25zdCBncm91cHMgPSBzZWxlY3Rpb24uZmlsdGVyKGQgPT4gZC5kYXRhLmdyb3VwKTtcblxuICBncm91cHMuYXBwZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCAnZ3JvdXAtYm9yZGVyJyk7XG4gIGdyb3Vwcy5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsICdncm91cC1sYWJlbCcpO1xuICAvLyBncm91cHMuYXBwZW5kKCdsaW5lJykuYXR0cignY2xhc3MnLCAnZ3JvdXAtbGluZScpO1xuICBncm91cHMuYXBwZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCAnZ3JvdXAtYnV0dG9uJyk7XG4gIGdyb3Vwcy5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsICdncm91cC1idXR0b24tdGV4dCcpO1xuXG4gIGNvbnN0IHdpdGhCYXIgPSBub2Rlcy5maWx0ZXIoZCA9PiBkLmRhdGEuc2hvd0Jhcik7XG5cbiAgd2l0aEJhclxuICAgIC5maWx0ZXIoZCA9PiBkLmRhdGEuZnJhY3Rpb24gPiAwKVxuICAgIC5hcHBlbmQoJ3JlY3QnKVxuICAgIC5jbGFzc2VkKCdiYXItYmFja2dyb3VuZCcsIHRydWUpXG4gICAgLmF0dHIoJ3dpZHRoJywgbm9kZUNvbnRlbnRXaWR0aClcbiAgICAuY2FsbChmb3JtYXRCYXIpO1xuXG4gIHdpdGhCYXJcbiAgICAuYXBwZW5kKCdyZWN0JylcbiAgICAuY2xhc3NlZCgnYmFyLWZvcmVncm91bmQnLCB0cnVlKVxuICAgIC5jYWxsKGZvcm1hdEJhcilcbiAgICAuYXR0cignd2lkdGgnLCBkID0+IGQuZGF0YS5mcmFjdGlvbiAqIG5vZGVDb250ZW50V2lkdGgpXG4gICAgLmF0dHIoJ2ZpbGwnLCBkID0+IG5vZGVDb2xvdXJzW2QuZGF0YS50eXBlXSk7XG5cbiAgd2l0aEJhclxuICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgIC5jbGFzc2VkKCdiYXItbGFiZWwnLCB0cnVlKVxuICAgIC50ZXh0KCh7IGRhdGEgfSkgPT5cbiAgICAgIGRhdGEuZnJhY3Rpb24gPT09IDBcbiAgICAgICAgPyAnbm8gY29udHJpYnV0aW9uJ1xuICAgICAgICA6IGAke01hdGgucm91bmQoMTAwICogZGF0YS5mcmFjdGlvbil9JSAke01hdGgucm91bmQoMTAwICogZGF0YS5mcmFjdGlvbikgPT09IDAgPyAnIChyb3VuZGVkKScgOiAnJ31gXG4gICAgKVxuICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsIGQgPT4gKGQuZGF0YS5mcmFjdGlvbiA9PT0gMCA/ICdtaWRkbGUnIDogZC5kYXRhLmZyYWN0aW9uID4gMC43ID8gJ2VuZCcgOiAnc3RhcnQnKSlcbiAgICAuYXR0cigneCcsIGQgPT5cbiAgICAgIGQuZGF0YS5mcmFjdGlvbiA9PT0gMFxuICAgICAgICA/IG5vZGVXaWR0aCAvIDJcbiAgICAgICAgOiBkLmRhdGEuZnJhY3Rpb24gKiBub2RlQ29udGVudFdpZHRoICsgbm9kZVBhZGRpbmcgKyAoZC5kYXRhLmZyYWN0aW9uID4gMC43ID8gLTQgOiA0KVxuICAgIClcbiAgICAuYXR0cigneScsIG5vZGVIZWlnaHQgLSBub2RlUGFkZGluZyAtIGJhckhlaWdodCAvIDIpO1xuXG4gIHJldHVybiBzZWxlY3Rpb247XG59O1xuXG5jb25zdCBtZXJnZWRMaW5rcyA9IChzZWxlY3Rpb246IExpbmtTZWxlY3Rpb24sIHsgdG9nZ2xpbmdHcm91cCwgc3dpdGNoaW5nU2VsZWN0aW9uIH0pID0+XG4gIHNlbGVjdGlvblxuICAgIC5zdHlsZSgnc3Ryb2tlJywgZCA9PiB7XG4gICAgICBjb25zdCBjb2xvdXJzID0ge1xuICAgICAgICBbQ2hhcnROb2RlVHlwZS5taWRwb2ludF06IG5vZGVDb2xvdXJzW0NoYXJ0Tm9kZVR5cGUubWlkcG9pbnRdLFxuICAgICAgICBbQ2hhcnROb2RlVHlwZS5lbmRwb2ludF06IG5vZGVDb2xvdXJzW0NoYXJ0Tm9kZVR5cGUuZW5kcG9pbnRdLFxuICAgICAgICBbQ2hhcnROb2RlVHlwZS5lbWlzc2lvbl06IG5vZGVDb2xvdXJzW0NoYXJ0Tm9kZVR5cGUuZW1pc3Npb25dXG4gICAgICB9O1xuICAgICAgcmV0dXJuIChkLnRhcmdldC5fb3BlbiAmJiBjb2xvdXJzW2Quc291cmNlLmRhdGEudHlwZV0pIHx8IG51bGw7XG4gICAgfSlcbiAgICAuYXR0cignc3Ryb2tlLWRhc2hhcnJheScsIGQgPT4gKGQudGFyZ2V0LmRhdGEuZ3JvdXAgPyAnMiw1JyA6IG51bGwpKVxuICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCBkID0+IChkLnRhcmdldC5fb3BlbiA/IDMgOiBkLnRhcmdldC5fZ3JvdXBPcGVuID8gMCA6IDIpKVxuICAgIC5hdHRyKCdzdHJva2Utb3BhY2l0eScsIGQgPT4gKGQudGFyZ2V0Ll9ncmV5ZWQgPyAwLjEgOiAwLjYpKVxuICAgIC50cmFuc2l0aW9uKClcbiAgICAuZHVyYXRpb24obGlua0R1cmF0aW9uKVxuICAgIC5kZWxheShkID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwQ2xvc2luZyA9IHRvZ2dsaW5nR3JvdXAgJiYgIWQudGFyZ2V0LnBhcmVudD8uY2hpbGRyZW4/LmZpbmQobiA9PiBuLmRhdGEuZ3JvdXApPy5fZ3JvdXBPcGVuO1xuICAgICAgcmV0dXJuIGdyb3VwQ2xvc2luZ1xuICAgICAgICA/IGdyb3VwRGVsYXlcbiAgICAgICAgOiAoc3dpdGNoaW5nU2VsZWN0aW9uID8gbm9kZUR1cmF0aW9uIDogMCkgKyBkLnNvdXJjZS5jaGlsZHJlbj8uaW5kZXhPZihkLnRhcmdldCkgKiAxMDtcbiAgICB9KVxuICAgIC5hdHRyKCdvcGFjaXR5JywgMSlcbiAgICAuYXR0cignZCcsIGQgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0RHkgPSBkLnRhcmdldC5fZ3JvdXBPcGVuID8gbm9kZVBhZGRpbmcgKyBsaW5lSGVpZ2h0IC8gMiArIG5vZGVNYXJnaW4gKiAyIDogbm9kZUhlaWdodCAvIDI7XG4gICAgICByZXR1cm4gZDNMaW5rSG9yaXpvbnRhbCgpKHtcbiAgICAgICAgc291cmNlOiBbZC5zb3VyY2UueSArIG5vZGVXaWR0aCwgZC5zb3VyY2UueCArIG5vZGVIZWlnaHQgLyAyXSxcbiAgICAgICAgdGFyZ2V0OiBbZC50YXJnZXQueSwgZC50YXJnZXQueCArIHRhcmdldER5XVxuICAgICAgfSk7XG4gICAgfSk7XG5cbmNvbnN0IGdyb3VwQnlQZXJjZW50YWdlID0gbm9kZSA9PlxuICBbQ2hhcnROb2RlVHlwZS5lbmRwb2ludCwgQ2hhcnROb2RlVHlwZS5taWRwb2ludCwgQ2hhcnROb2RlVHlwZS5lbWlzc2lvbl0uaW5jbHVkZXMobm9kZS5kYXRhLnR5cGUpO1xuXG5jb25zdCBncm91cFBlcmNlbnRhZ2UgPSAobm9kZSwgcGVyY2VudGFnZSA9IDAuMDIpID0+IHtcbiAgY29uc3QgZ3JvdXBlZCA9IG5vZGUuX2NoaWxkcmVuPy5maWx0ZXIoY2hpbGQgPT4gY2hpbGQuZGF0YS5mcmFjdGlvbiA8IHBlcmNlbnRhZ2UpO1xuICBpZiAobm9kZS5fY2hpbGRyZW4/Lmxlbmd0aCA+IDYgJiYgZ3JvdXBlZD8ubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IHR5cGUgPSBub2RlLl9jaGlsZHJlblswXS5kYXRhLnR5cGU7XG4gICAgY29uc3QgZ3JvdXBOb2RlID0ge1xuICAgICAgLi4uZDNIaWVyYXJjaHkoe1xuICAgICAgICBpZDogYCR7dHlwZX0tZ3JvdXBgLFxuICAgICAgICBsYWJlbDogYCR7Z3JvdXBlZC5sZW5ndGh9IG1vcmUgdW5kZXIgJHtNYXRoLnJvdW5kKHBlcmNlbnRhZ2UgKiAxMDApfSUuYCxcbiAgICAgICAgd2VpZ2h0ZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGdyb3VwOiB0cnVlXG4gICAgICB9KSxcbiAgICAgIGRlcHRoOiBub2RlLmRlcHRoICsgMSxcbiAgICAgIGhlaWdodDogMSxcbiAgICAgIHBhcmVudDogbm9kZVxuICAgIH07XG4gICAgY29uc3Qgbm90R3JvdXBlZCA9IG5vZGUuX2NoaWxkcmVuPy5maWx0ZXIoY2hpbGQgPT4gY2hpbGQuZGF0YS5mcmFjdGlvbiA+PSBwZXJjZW50YWdlKTtcbiAgICBub2RlLl9jaGlsZHJlbi5zcGxpY2Uobm90R3JvdXBlZC5sZW5ndGgsIDAsIGdyb3VwTm9kZSk7XG4gICAgbm90R3JvdXBlZC5wdXNoKGdyb3VwTm9kZSk7XG4gICAgbm9kZS5fZ3JvdXBDaGlsZHJlbiA9IG5vZGUuX2NoaWxkcmVuO1xuICAgIG5vZGUuX2NoaWxkcmVuID0gbm90R3JvdXBlZDtcbiAgfVxufTtcblxuY29uc3QgZ3JvdXBJbmRpY2F0b3JzID0gKGRhdGE6IElDaGFydERhdGFbXSwgdGVybXM6IElUZXJtTWFwcGluZyA9IHt9LCB0b3RhbHM6IHsgW2luZGljYXRvcjogc3RyaW5nXTogbnVtYmVyIH0gPSB7fSkgPT5cbiAgZGF0YS5yZWR1Y2UoXG4gICAgKGFjYywgbG9nKSA9PiB7XG4gICAgICBjb25zdCBjb250cmlidXRvclR5cGUgPSB0eXBlTWFwcGluZ1t0ZXJtc1tsb2cuY29udHJpYnV0b3JdPy50ZXJtVHlwZV0gfHwgQ2hhcnROb2RlVHlwZS5pbnB1dDtcbiAgICAgIGNvbnN0IGluZGljYXRvclR5cGUgPSB0eXBlTWFwcGluZ1t0ZXJtc1tsb2cuaW5kaWNhdG9yXT8udGVybVR5cGVdO1xuICAgICAgY29uc3QgY29udHJpYnV0b3JOb2RlID0ge1xuICAgICAgICBpZDogbG9nLmNvbnRyaWJ1dG9yLFxuICAgICAgICAuLi5nZXRVbml0c0FuZExhYmVsKHRlcm1zW2xvZy5jb250cmlidXRvcl0sIGxvZy5jb250cmlidXRvciksXG4gICAgICAgIHR5cGU6IGNvbnRyaWJ1dG9yVHlwZSxcbiAgICAgICAgdmFsdWU6IGxvZy52YWx1ZSxcbiAgICAgICAgd2VpZ2h0ZWRWYWx1ZTogbG9nLndlaWdodGVkVmFsdWUsXG4gICAgICAgIG1vZGVsSWQ6IGxvZy5tb2RlbElkLFxuICAgICAgICBmcmFjdGlvbjogbG9nLndlaWdodGVkVmFsdWUgLyB0b3RhbHNbbG9nLmluZGljYXRvcl0sXG4gICAgICAgIGNoaWxkcmVuOlxuICAgICAgICAgIGNvbnRyaWJ1dG9yVHlwZSA9PT0gQ2hhcnROb2RlVHlwZS5lbWlzc2lvblxuICAgICAgICAgICAgPyBsb2cuaW5wdXRzLm1hcChpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uaSxcbiAgICAgICAgICAgICAgICB0eXBlOiBDaGFydE5vZGVUeXBlLmlucHV0LFxuICAgICAgICAgICAgICAgIGZyYWN0aW9uOiBpLndlaWdodGVkVmFsdWUgLyBsb2cudmFsdWUsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGkub3BlcmF0aW9ucy5tYXAobyA9PiAoe1xuICAgICAgICAgICAgICAgICAgLi4ubyxcbiAgICAgICAgICAgICAgICAgIHR5cGU6IENoYXJ0Tm9kZVR5cGUub3BlcmF0aW9uLFxuICAgICAgICAgICAgICAgICAgZnJhY3Rpb246IG8ud2VpZ2h0ZWRWYWx1ZSAvIGkud2VpZ2h0ZWRWYWx1ZVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIDogW11cbiAgICAgIH0gYXMgTm9kZURhdHVtO1xuXG4gICAgICBhY2NbbG9nLmluZGljYXRvcl1cbiAgICAgICAgPyBhY2NbbG9nLmluZGljYXRvcl0uY2hpbGRyZW4ucHVzaChjb250cmlidXRvck5vZGUpXG4gICAgICAgIDogKGFjY1tsb2cuaW5kaWNhdG9yXSA9IHtcbiAgICAgICAgICAgIGlkOiBsb2cuaW5kaWNhdG9yLFxuICAgICAgICAgICAgLi4uZ2V0VW5pdHNBbmRMYWJlbCh0ZXJtc1tsb2cuaW5kaWNhdG9yXSwgbG9nLmluZGljYXRvciksXG4gICAgICAgICAgICBtb2RlbElkOiBsb2cubW9kZWxJZCxcbiAgICAgICAgICAgIHR5cGU6IGluZGljYXRvclR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogdG90YWxzW2xvZy5pbmRpY2F0b3JdLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtjb250cmlidXRvck5vZGVdXG4gICAgICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sXG4gICAge30gYXMgeyBbaWQ6IHN0cmluZ106IE5vZGVEYXR1bSB9XG4gICk7XG5cbmNvbnN0IHNob3dCYXIgPSBub2RlID0+XG4gIFtcbiAgICBub2RlLnBhcmVudD8uZGF0YS50eXBlICE9PSBDaGFydE5vZGVUeXBlLnJvb3QsXG4gICAgbm9kZS5wYXJlbnQ/LmRhdGEuaWQgIT09IG5vbkxDQUluZGljYXRvcnNJZCxcbiAgICAhbm9kZS5kYXRhLmdyb3VwLFxuICAgIG5vZGUuZGF0YS5mcmFjdGlvbiA+PSAwXG4gIF0uZXZlcnkoQm9vbGVhbik7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWhpZXJhcmNoeS1jaGFydCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ2JQb3BvdmVyLCBGYUljb25Db21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vaGllcmFyY2h5LWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2hpZXJhcmNoeS1jaGFydC5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgSGllcmFyY2h5Q2hhcnRDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBmYUV4dGVybmFsTGlua0FsdCA9IGZhRXh0ZXJuYWxMaW5rQWx0O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2NoYXJ0Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbHRpcE9wZXJhdG9yID0gdmlld0NoaWxkLnJlcXVpcmVkPE5nYlBvcG92ZXI+KCd0Jyk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGEgPSBpbnB1dDxJQ2hhcnREYXRhW10+KFtdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRlcm1zID0gaW5wdXQoe30gYXMgSVRlcm1NYXBwaW5nKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2hhcnRFcnJvciA9IG91dHB1dDxFcnJvcj4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbm9kZUNvbG91cnMgPSBub2RlQ29sb3VycztcblxuICBwcml2YXRlIHJlYWRvbmx5IGluY2x1ZGVkVHlwZXMgPSBzaWduYWw8Q2hhcnROb2RlVHlwZVtdPihbXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBsZWdlbmQgPSBjb21wdXRlZCgoKSA9PiBsZWdlbmQuZmlsdGVyKCh7IHR5cGUgfSkgPT4gdGhpcy5pbmNsdWRlZFR5cGVzKCkuaW5jbHVkZXModHlwZSkpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRvdGFsc1BlckluZGljYXRvciA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5kYXRhKCkucmVkdWNlKFxuICAgICAgKGFjYywgbG9nKSA9PiB7XG4gICAgICAgIGFjY1tsb2cuaW5kaWNhdG9yXSA9IChhY2NbbG9nLmluZGljYXRvcl0gfHwgMCkgKyBsb2cud2VpZ2h0ZWRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSBhcyB7IFtpbmRpY2F0b3I6IHN0cmluZ106IG51bWJlciB9XG4gICAgKVxuICApO1xuICBwcml2YXRlIHJlYWRvbmx5IGluZGljYXRvcnMgPSBjb21wdXRlZCgoKSA9PiBncm91cEluZGljYXRvcnModGhpcy5kYXRhKCksIHRoaXMudGVybXMoKSwgdGhpcy50b3RhbHNQZXJJbmRpY2F0b3IoKSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGluZGljYXRvckFycmF5ID0gY29tcHV0ZWQoKCkgPT4gT2JqZWN0LnZhbHVlcyh0aGlzLmluZGljYXRvcnMoKSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpbmtlZEluZGljYXRvcnMgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuaW5kaWNhdG9yQXJyYXkoKVxuICAgICAgLy8gbGluayBlbmRwb2ludHMgdG8gbWlkcG9pbnRzIGFuZCBtaWRwb2ludHMgdG8gYW55IGNoaWxkIG1pZHBvaW50c1xuICAgICAgLm1hcChpbmRpY2F0b3IgPT4gKHtcbiAgICAgICAgLi4uaW5kaWNhdG9yLFxuICAgICAgICBjaGlsZHJlbjogaW5kaWNhdG9yLmNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgICAgICAgY29uc3QgcHJlZml4UmVtb3ZlZCA9IGluZGljYXRvci50eXBlID09PSBDaGFydE5vZGVUeXBlLmVuZHBvaW50ICYmIGNoaWxkLmxhYmVsLnNwbGl0KCcsICcpWzFdO1xuICAgICAgICAgIHJldHVybiBjaGlsZC50eXBlID09PSBDaGFydE5vZGVUeXBlLm1pZHBvaW50XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogcHJlZml4UmVtb3ZlZFxuICAgICAgICAgICAgICAgICAgPyAnWy4uLl0nICsgcHJlZml4UmVtb3ZlZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByZWZpeFJlbW92ZWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgICAgIDogY2hpbGQubGFiZWwsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuaW5kaWNhdG9ycygpW2NoaWxkLmlkXT8uY2hpbGRyZW5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBjaGlsZDtcbiAgICAgICAgfSlcbiAgICAgIH0pKVxuICAgICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZWQgaW5kaWNhdG9yc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgaW5kaWNhdG9yID0+ICF0aGlzLmluZGljYXRvckFycmF5KCkuc29tZShwYXJlbnQgPT4gcGFyZW50LmNoaWxkcmVuLnNvbWUoY2hpbGQgPT4gY2hpbGQuaWQgPT09IGluZGljYXRvci5pZCkpXG4gICAgICApXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm9uTENBSW5kaWNhdG9ycyA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5saW5rZWRJbmRpY2F0b3JzKCkuZmlsdGVyKGluZGljYXRvciA9PiBpbmRpY2F0b3IudHlwZSA9PT0gQ2hhcnROb2RlVHlwZS5taWRwb2ludClcbiAgKTtcbiAgcHJpdmF0ZSBvdGhlckVuZHBvaW50ID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLm5vbkxDQUluZGljYXRvcnMoKS5sZW5ndGhcbiAgICAgID8ge1xuICAgICAgICAgIGlkOiBub25MQ0FJbmRpY2F0b3JzSWQsXG4gICAgICAgICAgbGFiZWw6ICdPdGhlciBpbmRpY2F0b3JzJyxcbiAgICAgICAgICB0ZXJtOiAnbi9hJyxcbiAgICAgICAgICBtb2RlbElkOiAnbi9hJyxcbiAgICAgICAgICB1bml0czogJycsXG4gICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgd2VpZ2h0ZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgICB0eXBlOiBDaGFydE5vZGVUeXBlLmVuZHBvaW50LFxuICAgICAgICAgIGZyYWN0aW9uOiBudWxsLFxuICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLm5vbkxDQUluZGljYXRvcnMoKVxuICAgICAgICB9XG4gICAgICA6IG51bGxcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHMgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMubGlua2VkSW5kaWNhdG9ycygpLmZpbHRlcihpbmRpY2F0b3IgPT4gaW5kaWNhdG9yLnR5cGUgPT09IENoYXJ0Tm9kZVR5cGUuZW5kcG9pbnQpXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRDaGlsZHJlbiA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5lbmRwb2ludHMoKS5sZW5ndGggPyBbLi4udGhpcy5lbmRwb2ludHMoKSwgdGhpcy5vdGhlckVuZHBvaW50KCldLmZpbHRlcihCb29sZWFuKSA6IHRoaXMubGlua2VkSW5kaWNhdG9ycygpXG4gICk7XG5cbiAgcHJpdmF0ZSByb290PzogSE5vZGU7XG4gIHByaXZhdGUgbm9kZTogTm9kZVNlbGVjdGlvbjtcbiAgcHJpdmF0ZSBsaW5rOiBMaW5rU2VsZWN0aW9uO1xuICBwcml2YXRlIHN2ZzogU2VsZWN0aW9uPFNWR1NWR0VsZW1lbnQsIGFueSwgSFRNTEVsZW1lbnQsIHVua25vd24+O1xuICBwcml2YXRlIHlNaW46IG51bWJlcjtcbiAgcHJpdmF0ZSB5VG90YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmIChbIWlzRW1wdHkodGhpcy5kYXRhKCkpLCAhaXNFbXB0eSh0aGlzLnRlcm1zKCkpLCB0aGlzLmNoYXJ0UmVmKCk/Lm5hdGl2ZUVsZW1lbnRdLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnJvb3QgPSBudWxsO1xuICAgICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICAgIHRoaXMubGluayA9IG51bGw7XG4gICAgICB0aGlzLmluaXRDaGFydCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmNoYXJ0RXJyb3IuZW1pdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRDaGFydCgpIHtcbiAgICBjb25zdCByb290ID0gZDNIaWVyYXJjaHk8Tm9kZURhdHVtPih7XG4gICAgICBpZDogJ2R1bW15LXJvb3QnLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgdGVybTogJycsXG4gICAgICBtb2RlbElkOiAnJyxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgd2VpZ2h0ZWRWYWx1ZTogbnVsbCxcbiAgICAgIHVuaXRzOiAnJyxcbiAgICAgIHR5cGU6IENoYXJ0Tm9kZVR5cGUucm9vdCxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoYXJ0Q2hpbGRyZW4oKVxuICAgIH0pO1xuXG4gICAgdGhpcy5pbmNsdWRlZFR5cGVzLnNldCh1bmlxdWUocm9vdC5kZXNjZW5kYW50cygpLm1hcChuID0+IG4uZGF0YS50eXBlKSkpO1xuXG4gICAgdGhpcy5yb290ID0gcm9vdFxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIuZGF0YS5mcmFjdGlvbiAtIGEuZGF0YS5mcmFjdGlvbilcbiAgICAgIC5lYWNoQWZ0ZXIobm9kZSA9PiB7XG4gICAgICAgIGlmIChub2RlLmRhdGEuZnJhY3Rpb24gPT09IDApIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuID0gbnVsbDtcbiAgICAgICAgICAobm9kZS5oZWlnaHQgYXMgbnVtYmVyKSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5kYXRhLnR5cGUgIT09IENoYXJ0Tm9kZVR5cGUucm9vdCAmJiBjb2xsYXBzZUNoaWxkcmVuKG5vZGUpO1xuICAgICAgICBncm91cEJ5UGVyY2VudGFnZShub2RlKSAmJiBncm91cFBlcmNlbnRhZ2Uobm9kZSk7XG4gICAgICAgIG5vZGUuZGF0YS5zaG93QmFyID0gc2hvd0Jhcihub2RlKTtcbiAgICAgICAgbm9kZS5kYXRhLm1vZGVsTmFtZSA9IHRoaXMudGVybXMoKT8uW25vZGUuZGF0YS5tb2RlbElkXT8ubmFtZTtcbiAgICAgICAgbm9kZS5kYXRhLm1vZGVsRG9jcyA9IHRoaXMudGVybXMoKT8uW25vZGUuZGF0YS5tb2RlbElkXT8uZG9jcztcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5yZW5kZXJDaGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDaGFydCgpIHtcbiAgICB0aGlzLnN2ZyA9IGQzU2VsZWN0KHRoaXMuY2hhcnRSZWYoKT8ubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5zdmcuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7XG4gICAgLy8gcm9vdCBub2RlIGlzIGFsd2F5cyBwb3NpdGlvbmVkIGF0IOKfqDAsIDDin6lcbiAgICBjb25zdCBpbm5lckhlaWdodCA9ICh0aGlzLnJvb3QuY2hpbGRyZW4ubGVuZ3RoIC0gMSkgKiBub2RlSGVpZ2h0ICogbm9kZVNwYWNpbmdGYWN0b3IgKyBub2RlSGVpZ2h0O1xuICAgIHRoaXMueU1pbiA9IChub2RlSGVpZ2h0IC0gaW5uZXJIZWlnaHQpIC8gMiAtIG1hcmdpbi50b3A7XG4gICAgdGhpcy55VG90YWwgPSBpbm5lckhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tO1xuICAgIHRoaXMuc3ZnXG4gICAgICAuYXR0cigndmlld0JveCcsIFstbWFyZ2luLmxlZnQsIHRoaXMueU1pbiwgd2lkdGgsIHRoaXMueVRvdGFsXS5qb2luKCcgJykpXG4gICAgICAuYXR0cignZm9udC1zaXplJywgYCR7Zm9udFNpemV9cHhgKTtcblxuICAgIHRoaXMubm9kZSA9IHRoaXMuc3ZnLmFwcGVuZCgnZycpLnNlbGVjdEFsbCgnZycpO1xuICAgIHRoaXMubGluayA9IHRoaXMuc3ZnLmFwcGVuZCgnZycpLnNlbGVjdEFsbCgncGF0aCcpO1xuXG4gICAgdGhpcy5oYW5kbGVOb2RlQ2xpY2soXG4gICAgICBudWxsLFxuICAgICAgdGhpcy5yb290LmZpbmQobm9kZSA9PiBub2RlLmRlcHRoID09PSAxKVxuICAgICk7XG4gIH1cblxuICAvLyBmbGlwIHgveSB0byBnbyBsZWZ0LXJpZ2h0IGluc3RlYWQgb2YgdG9wLWJvdHRvbVxuICBwcml2YXRlIHVwZGF0ZUNoYXJ0KHsgdG9nZ2xpbmdHcm91cCA9IGZhbHNlLCBzd2l0Y2hpbmdTZWxlY3Rpb24gPSBmYWxzZSB9ID0ge30pIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xuICAgIGNvbnN0IHRyZWVMYXlvdXQgPSBkM1RyZWU8Tm9kZURhdHVtPigpXG4gICAgICAubm9kZVNpemUoW25vZGVIZWlnaHQsIG5vZGVXaWR0aF0pXG4gICAgICAuc2VwYXJhdGlvbigoLi4ubmVpZ2hib3VyczogQ2hhcnROb2RlW10pID0+XG4gICAgICAgIG5laWdoYm91cnMuc29tZShuID0+IG4uZGF0YS5ncm91cCAmJiBuLl9ncm91cE9wZW4pID8gMSAtIGdyb3VwT3ZlcmxhcCAvIG5vZGVIZWlnaHQgOiBub2RlU3BhY2luZ0ZhY3RvclxuICAgICAgKTtcbiAgICBjb25zdCB0cmVlOiBDaGFydE5vZGUgPSB0cmVlTGF5b3V0KHJvb3QpO1xuICAgIGNvbnN0IGxpbmtzOiBMaW5rW10gPSB0cmVlLmxpbmtzKCkuZmlsdGVyKGQgPT4gZC5zb3VyY2UuZGF0YS50eXBlICE9PSBDaGFydE5vZGVUeXBlLnJvb3QpIHx8IFtdO1xuICAgIGNvbnN0IG5vZGVzID0gdHJlZS5kZXNjZW5kYW50cygpLnJldmVyc2UoKTtcblxuICAgIG5vZGVzLmZvckVhY2goZCA9PiB7XG4gICAgICBkLnkgPVxuICAgICAgICAoZC5kZXB0aCAtIDEgKyAoT2JqZWN0LmtleXMoQ2hhcnROb2RlVHlwZSkubGVuZ3RoIC0gMSAtIHRoaXMubGVnZW5kKCkubGVuZ3RoKSAvIDIpICogKG5vZGVXaWR0aCArIGxheWVyU3BhY2luZyk7XG4gICAgfSk7XG5cbiAgICAvLyBCeSBkZWZhdWx0IHRoZSB0cmVlIGV4cGFuZHMgc3ltbWV0cmljYWxseSB1cHdhcmRzIGFuZCBkb3dud2FyZHMgZnJvbSB0aGUgc2VsZWN0ZWQgbm9kZS5cbiAgICAvLyBXZSBtb3ZlIGNoaWxkcmVuIGRvd24gdG8gcHJldmVudCBleHBhbnNpb24gdXB3YXJkcyBvciB1cCB0byBtaW5pbWlzZSBleHBhbnNpb24gZG93bndhcmRzXG4gICAgY29uc3QgbWluaW1pc2VIZWlnaHQgPSAoeyBwcmV2aW91c1RhbnNsYXRlWSwgcHJldmlvdXNZVG90YWwgfSwgZGVwdGg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgbWF4WVRvdGFsID0gTWF0aC5tYXgocHJldmlvdXNZVG90YWwsIHRoaXMueVRvdGFsKTtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRyZWUuZmluZChub2RlID0+IG5vZGUuZGVwdGggPT09IGRlcHRoIC0gMSAmJiBub2RlLl9vcGVuKTtcbiAgICAgIHBhcmVudD8uY2hpbGRyZW4/LmZvckVhY2gobm9kZSA9PiAobm9kZS54ICs9IHByZXZpb3VzVGFuc2xhdGVZKSk7XG5cbiAgICAgIGNvbnN0IHsgbWluOiBtaW5YLCBtYXg6IG1heFggfSA9IChwYXJlbnQ/LmNoaWxkcmVuIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgICh7IG1pbiwgbWF4IH0sIG4pID0+ICh7XG4gICAgICAgICAgbWluOiBuLnggPCBtaW4gPyBuLnggOiBtaW4sXG4gICAgICAgICAgbWF4OiBuLnggPiBtYXggPyBuLnggOiBtYXhcbiAgICAgICAgfSksXG4gICAgICAgIHsgbWluOiBwYXJlbnQ/LngsIG1heDogcGFyZW50Py54IH1cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHsgeU1pbiwgeVRvdGFsIH0gPSBwYXJlbnQ/LmNoaWxkcmVuPy5sZW5ndGhcbiAgICAgICAgPyB7IHlNaW46IG1pblggLSBtYXJnaW4udG9wLCB5VG90YWw6IG1heFggLSBtaW5YICsgbWFyZ2luLmJvdHRvbSArIG1hcmdpbi50b3AgKyBub2RlSGVpZ2h0IH1cbiAgICAgICAgOiB7IHlNaW46IG51bGwsIHlUb3RhbDogbnVsbCB9O1xuXG4gICAgICBjb25zdCBvdmVyZmxvd0Fib3ZlID0gdGhpcy55TWluIC0geU1pbjsgLy8gcG9zaXRpdmUgd2hlbiBvdmVyZmxvd3MgYWJvdmVcbiAgICAgIGNvbnN0IG92ZXJmbG93QmVsb3cgPSB5VG90YWwgKyB5TWluIC0gKG1heFlUb3RhbCArIHRoaXMueU1pbik7IC8vIHBvc2l0aXZlIHdoZW4gb3ZlcmZsb3dzIGJlbG93XG4gICAgICAvLyAtIHRyYW5zbGF0ZVkgd2hlbiBvdmVyZmxvd3MgYWJvdmU6IHBvc2l0aXZlXG4gICAgICAvLyAtIHRyYW5zbGF0ZVkgd2hlbiBvdmVyZmxvd3MgYmVsb3c6IG5lZ2F0aXZlIGJ5IHNtYWxsZXN0IG9mIHVuZGVyZmxvdyBhYm92ZSBvciBvdmVyZmxvdyBiZWxvd1xuICAgICAgLy8gLSB0cmFuc2xhdGVZIHdoZW4gbm8gb3ZlcmZsb3c6IDBcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZVkgPVxuICAgICAgICBvdmVyZmxvd0Fib3ZlID4gMCA/IG92ZXJmbG93QWJvdmUgOiBvdmVyZmxvd0JlbG93ID4gMCA/IE1hdGgubWF4KC1vdmVyZmxvd0JlbG93LCBvdmVyZmxvd0Fib3ZlKSA6IDA7XG5cbiAgICAgIHBhcmVudD8uY2hpbGRyZW4/LmZvckVhY2gobm9kZSA9PiAobm9kZS54ICs9IHRyYW5zbGF0ZVkpKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJldmlvdXNZVG90YWw6IE1hdGgubWF4KHlUb3RhbCwgcHJldmlvdXNZVG90YWwpLFxuICAgICAgICBwcmV2aW91c1RhbnNsYXRlWTogdHJhbnNsYXRlWSArIHByZXZpb3VzVGFuc2xhdGVZXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCB7IHByZXZpb3VzWVRvdGFsOiBuZXdIZWlnaHQgfSA9IFsyLCAzLCA0LCA1XS5yZWR1Y2UobWluaW1pc2VIZWlnaHQsIHtcbiAgICAgIHByZXZpb3VzVGFuc2xhdGVZOiAwLFxuICAgICAgcHJldmlvdXNZVG90YWw6IHRoaXMueVRvdGFsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN2Zy50cmFuc2l0aW9uKCkuZHVyYXRpb24oMzAwKS5hdHRyKCd2aWV3Qm94JywgWy1tYXJnaW4ubGVmdCwgdGhpcy55TWluLCB3aWR0aCwgbmV3SGVpZ2h0XS5qb2luKCcgJykpO1xuXG4gICAgdGhpcy5ub2RlID0gdGhpcy5ub2RlXG4gICAgICAuZGF0YShcbiAgICAgICAgbm9kZXMsXG4gICAgICAgIGQgPT4gYCR7ZC5wYXJlbnQ/LnBhcmVudD8ucGFyZW50Py5kYXRhLmlkfS0ke2QucGFyZW50Py5wYXJlbnQ/LmRhdGEuaWR9LSR7ZC5wYXJlbnQ/LmRhdGEuaWR9LSR7ZC5kYXRhLmlkfWBcbiAgICAgIClcbiAgICAgIC5qb2luKFxuICAgICAgICBlbnRlciA9PlxuICAgICAgICAgIGVudGVyXG4gICAgICAgICAgICAuYXBwZW5kKCdnJylcbiAgICAgICAgICAgIC5jYWxsKGVudGVyTm9kZXMpXG4gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgZCA9PiAndHJhbnNsYXRlKCcgKyAodG9nZ2xpbmdHcm91cCA/IGQueSA6IGQueSAtIG5vZGVXaWR0aCAvIDIpICsgJywnICsgZC54ICsgJyknKSxcbiAgICAgICAgdXBkYXRlID0+IHVwZGF0ZSxcbiAgICAgICAgZXhpdCA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMudG9vbHRpcE9wZXJhdG9yKCkuY2xvc2UoZmFsc2UpKTtcbiAgICAgICAgICByZXR1cm4gZXhpdFxuICAgICAgICAgICAgLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdub25lJylcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgIC5kdXJhdGlvbihub2RlRHVyYXRpb24gLyAyKVxuICAgICAgICAgICAgLmRlbGF5KGQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGQucGFyZW50Py5jaGlsZHJlbiB8fCBkLnBhcmVudD8uX2NoaWxkcmVuO1xuICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkcmVuPy5sZW5ndGggLSBjaGlsZHJlbj8uaW5kZXhPZihkKSAtIDEpICogMTA7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmVhc2UoZDNFYXNlRWxhc3RpY0luLmFtcGxpdHVkZSgwLjUpLnBlcmlvZCgxKSlcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBkID0+ICd0cmFuc2xhdGUoJyArICh0b2dnbGluZ0dyb3VwID8gZC55IDogZC55IC0gbm9kZVdpZHRoIC8gMikgKyAnLCcgKyBkLnggKyAnKScpXG4gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAucmVtb3ZlKClcbiAgICAgICAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAvLyBpbiBjYXNlIGEgdG9vbHRpcCB3YXMgb3BlbmVkIG9uIGEgdHJhbnNpdGlvbmluZyBlbGVtZW50XG4gICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLnRvb2x0aXBPcGVyYXRvcigpLmNsb3NlKGZhbHNlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgIHRoaXMubm9kZVxuICAgICAgLmNhbGwobWVyZ2VkTm9kZXMsIHsgdG9vbHRpcE9wZXJhdG9yOiB0aGlzLnRvb2x0aXBPcGVyYXRvcigpLCB6b25lOiB0aGlzLm5nWm9uZSB9KVxuICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgLmRlbGF5KGQgPT4ge1xuICAgICAgICBjb25zdCBncm91cENsb3NpbmcgPSB0b2dnbGluZ0dyb3VwICYmICFkLnBhcmVudD8uY2hpbGRyZW4/LmZpbmQobiA9PiBuLmRhdGEuZ3JvdXApPy5fZ3JvdXBPcGVuO1xuICAgICAgICByZXR1cm4gZ3JvdXBDbG9zaW5nID8gZ3JvdXBEZWxheSA6IChzd2l0Y2hpbmdTZWxlY3Rpb24gPyBub2RlRHVyYXRpb24gOiAwKSArIGQucGFyZW50Py5jaGlsZHJlbi5pbmRleE9mKGQpICogMTA7XG4gICAgICB9KVxuICAgICAgLmR1cmF0aW9uKG5vZGVEdXJhdGlvbilcbiAgICAgIC5lYXNlKGQzRWFzZUVsYXN0aWNPdXQuYW1wbGl0dWRlKDAuNSkucGVyaW9kKDEpKVxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGQgPT4gYHRyYW5zbGF0ZSgke2QueX0sJHtkLnh9KWApXG4gICAgICAuYXR0cignb3BhY2l0eScsIDEpO1xuXG4gICAgdGhpcy5ub2RlLnNlbGVjdEFsbCgnLm5vZGUtb3BlbmFibGUnKS5vbignY2xpY2snLCB0aGlzLmhhbmRsZU5vZGVDbGljay5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLm5vZGUuc2VsZWN0QWxsKCcuZ3JvdXAtYnV0dG9uJykub24oJ2NsaWNrJywgdGhpcy5oYW5kbGVHcm91cEJ1dHRvbkNsaWNrLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5saW5rID0gdGhpcy5saW5rXG4gICAgICAuZGF0YShcbiAgICAgICAgbGlua3MsXG4gICAgICAgIGQgPT4gYCR7ZC5zb3VyY2UucGFyZW50Py5wYXJlbnQ/LmRhdGEuaWR9LSR7ZC5zb3VyY2UucGFyZW50Py5kYXRhLmlkfS0ke2Quc291cmNlLmRhdGEuaWR9LSR7ZC50YXJnZXQuZGF0YS5pZH1gXG4gICAgICApXG4gICAgICAuam9pbihcbiAgICAgICAgZW50ZXIgPT4gZW50ZXIuYXBwZW5kKCdwYXRoJykuY2xhc3NlZCgnbGluay1wYXRoJywgdHJ1ZSkuYXR0cignb3BhY2l0eScsIDApLFxuICAgICAgICB1cGRhdGUgPT4gdXBkYXRlLFxuICAgICAgICBleGl0ID0+XG4gICAgICAgICAgZXhpdFxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKGxpbmtEdXJhdGlvbiAvIDIpXG4gICAgICAgICAgICAuZGVsYXkoZCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZC5zb3VyY2UucGFyZW50Py5jaGlsZHJlbiB8fCBkLnNvdXJjZS5wYXJlbnQ/Ll9jaGlsZHJlbjtcbiAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZHJlbj8ubGVuZ3RoIC0gY2hpbGRyZW4/LmluZGV4T2YoZC50YXJnZXQpIC0gMSkgKiAxMDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAucmVtb3ZlKClcbiAgICAgIClcbiAgICAgIC5jYWxsKG1lcmdlZExpbmtzLCB7IHRvZ2dsaW5nR3JvdXAsIHN3aXRjaGluZ1NlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR3JvdXBCdXR0b25DbGljayhfZXZlbnQ6IGFueSwgZDogQ2hhcnROb2RlKSB7XG4gICAgaWYgKGQuX2dyZXllZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkLl9ncm91cE9wZW4gPSAhZC5fZ3JvdXBPcGVuO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZC5wYXJlbnQuX2dyb3VwQ2hpbGRyZW47XG4gICAgZC5wYXJlbnQuX2dyb3VwQ2hpbGRyZW4gPSBkLnBhcmVudC5jaGlsZHJlbjtcbiAgICBkLnBhcmVudC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMudXBkYXRlQ2hhcnQoeyB0b2dnbGluZ0dyb3VwOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOb2RlQ2xpY2soX2V2ZW50OiBhbnksIGQ6IENoYXJ0Tm9kZSB8IEhOb2RlKTogdm9pZCB7XG4gICAgZC5fb3BlbiA9ICFkLl9vcGVuO1xuICAgIGNvbnN0IHN3aXRjaGluZ1NlbGVjdGlvbiA9ICdfZ3JleWVkJyBpbiBkICYmIGQuX2dyZXllZDtcbiAgICBkLnBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGNoaWxkLl9ncmV5ZWQgPSBmYWxzZTtcbiAgICAgIGlmIChjaGlsZCAhPT0gZCkge1xuICAgICAgICBjaGlsZC5fb3BlbiA9IGZhbHNlO1xuICAgICAgICBjb2xsYXBzZUNoaWxkcmVuKGNoaWxkKTtcbiAgICAgICAgY2hpbGQuX2dyZXllZCA9IGQuX29wZW47XG4gICAgICB9XG4gICAgfSk7XG4gICAgZC5jaGlsZHJlbiA/IGNvbGxhcHNlQ2hpbGRyZW4oZCkgOiByZXN0b3JlQ2hpbGRyZW4oZCk7XG4gICAgdGhpcy51cGRhdGVDaGFydCh7IHN3aXRjaGluZ1NlbGVjdGlvbiB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtY2VudGVyZWQgcHktMiBpcy1zaXplLTcgaXMtbW9iaWxlIGlzLW11bHRpbGluZVwiPlxuICBAZm9yIChsZWdlbmRJdGVtIG9mIGxlZ2VuZCgpOyB0cmFjayBsZWdlbmRJdGVtLnR5cGUpIHtcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBweS0wIGlzLWZsZXgtbW9iaWxlIGlzLWZsZXgtZGlyZWN0aW9uLWNvbHVtbiBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgfCBpcy1sZWdlbmQtaXRlbVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2stdGFibGV0IGlzLWFsaWduLW1pZGRsZSB8IGtleS1jb2xvdXJcIlxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIm5vZGVDb2xvdXJzW2xlZ2VuZEl0ZW0udHlwZV1cIj48L3NwYW4+XG4gICAgICA8c3Ryb25nIGNsYXNzPVwiaGFzLXRleHQtYmxhY2sgaXMtYWxpZ24tbWlkZGxlIGlzLXBsLXRhYmxldC0yIGlzLXNpemUtOC1tb2JpbGVcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1oaWRkZW4tZGVza3RvcFwiPnt7IGxlZ2VuZEl0ZW0ubW9iaWxlVGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1oaWRkZW4tdG91Y2hcIj57eyBsZWdlbmRJdGVtLnRleHQgfX08L3NwYW4+XG4gICAgICA8L3N0cm9uZz5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJjaGFydC1jb250YWluZXIgaXMtcmVsYXRpdmUgdy0xMDBcIj5cbiAgPHN2ZyBjbGFzcz1cInctMTAwIGgtMTAwXCIgI2NoYXJ0Pjwvc3ZnPlxuXG4gIDxzcGFuXG4gICAgY2xhc3M9XCJpcy1oaWRkZW5cIlxuICAgIFtuZ2JQb3BvdmVyXT1cInRpcENvbnRlbnRcIlxuICAgIHRyaWdnZXJzPVwibWFudWFsXCJcbiAgICBwbGFjZW1lbnQ9XCJyaWdodCBsZWZ0IGF1dG9cIlxuICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICN0PVwibmdiUG9wb3ZlclwiXG4gICAgcG9zaXRpb25UYXJnZXQ9XCIudGlwLXRhcmdldFwiXG4gICAgcG9wb3ZlckNsYXNzPVwiaXMtbmFycm93IGRyaXZlci1jaGFydC10b29sdGlwXCJcbiAgICBbYW5pbWF0aW9uXT1cInRydWVcIj48L3NwYW4+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0aXBDb250ZW50IGxldC10aXBEYXRhPVwidGlwRGF0YVwiPlxuICBAaWYgKHRpcERhdGEuaGFzV2VpZ2h0ZWRWYWx1ZSkge1xuICAgIDxwPmNvbnRyaWJ1dGlvbjoge3sgdGlwRGF0YS53ZWlnaHRlZFZhbHVlVGV4dCB9fTwvcD5cbiAgfVxuICA8cD5cbiAgICA8YSBjbGFzcz1cImlzLWRhcmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbaHJlZl09XCJ0aXBEYXRhLnZhbHVlS2V5SHJlZlwiPnZhbHVlPC9hPlxuICAgIDoge3sgdGlwRGF0YS52YWx1ZVZhbHVlVGV4dCB9fVxuICAgIEBpZiAodGlwRGF0YS5oYXNWYWx1ZSkge1xuICAgICAgPGEgY2xhc3M9XCJpcy1kYXJrXCIgW2hyZWZdPVwidGlwRGF0YS5tb2RlbERvY3NIcmVmXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgIDxzcGFuPkRvY3M8L3NwYW4+XG4gICAgICAgIDxmYS1pY29uIGNsYXNzPVwibWwtMVwiIFtpY29uXT1cImZhRXh0ZXJuYWxMaW5rQWx0XCIgc2l6ZT1cInNtXCIgLz5cbiAgICAgIDwvYT5cbiAgICB9XG4gIDwvcD5cbiAgPHA+XG4gICAgPGEgY2xhc3M9XCJpcy1kYXJrXCIgdGFyZ2V0PVwiX2JsYW5rXCIgW2hyZWZdPVwidGlwRGF0YS5tb2RlbEtleUhyZWZcIj5tZXRob2RNb2RlbDwvYT5cbiAgICA6XG4gICAgPGEgY2xhc3M9XCJpcy1kYXJrXCIgdGFyZ2V0PVwiX2JsYW5rXCIgW2hyZWZdPVwidGlwRGF0YS5tb2RlbFZhbHVlSHJlZlwiPnt7IHRpcERhdGEubW9kZWxWYWx1ZSB9fTwvYT5cbiAgPC9wPlxuICA8cD5cbiAgICA8YSBjbGFzcz1cImlzLWRhcmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbaHJlZl09XCJ0aXBEYXRhLnRlcm1LZXlIcmVmXCI+dGVybTwvYT5cbiAgICA6XG4gICAgPGEgY2xhc3M9XCJpcy1kYXJrXCIgdGFyZ2V0PVwiX2JsYW5rXCIgW2hyZWZdPVwidGlwRGF0YS50ZXJtVmFsdWVIcmVmXCI+e3sgdGlwRGF0YS50ZXJtVmFsdWUgfX08L2E+XG4gIDwvcD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
596
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9oaWVyYXJjaHktY2hhcnQvaGllcmFyY2h5LWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9oaWVyYXJjaHktY2hhcnQvaGllcmFyY2h5LWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFFTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLElBQUksUUFBUSxFQUF1QixTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEYsT0FBTyxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFNBQVMsSUFBSSxXQUFXLEVBQ3hCLElBQUksSUFBSSxNQUFNLEVBSWYsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGFBQWEsSUFBSSxlQUFlLEVBQUUsY0FBYyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxPQUFP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QUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7K0dBalRVLHVCQUF1QjttR0FBdkIsdUJBQXVCLHdrQkNwZnBDLG9oRUFzREEsOHJERDBiWSxVQUFVLDJVQUFFLGVBQWU7OzRGQUkxQix1QkFBdUI7a0JBUG5DLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIEVsZW1lbnRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE5nWm9uZSxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGxpbmtIb3Jpem9udGFsIGFzIGQzTGlua0hvcml6b250YWwgfSBmcm9tICdkMy1zaGFwZSc7XG5pbXBvcnQgeyBzZWxlY3QgYXMgZDNTZWxlY3QsIFNlbGVjdGlvbiwgQmFzZVR5cGUsIHNlbGVjdEFsbCB9IGZyb20gJ2QzLXNlbGVjdGlvbic7XG5pbXBvcnQgJ2QzLXRyYW5zaXRpb24nO1xuaW1wb3J0IHtcbiAgaGllcmFyY2h5IGFzIGQzSGllcmFyY2h5LFxuICB0cmVlIGFzIGQzVHJlZSxcbiAgSGllcmFyY2h5Tm9kZSxcbiAgSGllcmFyY2h5UG9pbnROb2RlLFxuICBIaWVyYXJjaHlQb2ludExpbmtcbn0gZnJvbSAnZDMtaGllcmFyY2h5JztcbmltcG9ydCB7IGVhc2VFbGFzdGljSW4gYXMgZDNFYXNlRWxhc3RpY0luLCBlYXNlRWxhc3RpY091dCBhcyBkM0Vhc2VFbGFzdGljT3V0IH0gZnJvbSAnZDMtZWFzZSc7XG5pbXBvcnQgeyBOZ2JQb3BvdmVyIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgaXNFbXB0eSwgdG9QcmVjaXNpb24sIHVuaXF1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0IHsgVGVybVRlcm1UeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgRmFJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xuaW1wb3J0IHsgZmFFeHRlcm5hbExpbmtBbHQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuXG5pbXBvcnQgeyBiYXNlVXJsLCBzY2hlbWFCYXNlVXJsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IGQzd3JhcCB9IGZyb20gJy4uLy4uL2NvbW1vbi9kMy11dGlscyc7XG5pbXBvcnQge1xuICBDaGFydE5vZGVUeXBlLFxuICBnZXRVbml0c0FuZExhYmVsLFxuICBJQ2hhcnREYXRhLFxuICBJVGVybU1hcHBpbmcsXG4gIGxlZ2VuZCxcbiAgbm9kZUNvbG91cnMsXG4gIE5vZGVEYXR1bVxufSBmcm9tICcuL2hpZXJhcmNoeS1jaGFydC5tb2RlbCc7XG5cbmludGVyZmFjZSBDaGFydE5vZGUgZXh0ZW5kcyBIaWVyYXJjaHlQb2ludE5vZGU8Tm9kZURhdHVtPiB7XG4gIF9jaGlsZHJlbj86IENoYXJ0Tm9kZVtdOyAvLyBjaGlsZHJlbiBvZiBjb2xsYXBzZWQgbm9kZXNcbiAgX2dyb3VwQ2hpbGRyZW4/OiBDaGFydE5vZGVbXTsgLy8gYWxsIGNoaWxkcmVuIHdoZW4gZ3JvdXAgY2xvc2VkOyB1bmdyb3VwZWQgY2hpbGRyZW4gd2hlbiBncm91cCBvcGVuXG4gIF9vcGVuPzogYm9vbGVhbjtcbiAgX2dyZXllZD86IGJvb2xlYW47XG4gIF9ncm91cE9wZW4/OiBib29sZWFuO1xuICBfdGltZW91dD86IE5vZGVKUy5UaW1lb3V0O1xufVxuXG5pbnRlcmZhY2UgSE5vZGUgZXh0ZW5kcyBIaWVyYXJjaHlOb2RlPE5vZGVEYXR1bT4ge1xuICBfY2hpbGRyZW4/OiBITm9kZVtdO1xuICBfZ3JvdXBDaGlsZHJlbj86IEhOb2RlW107XG4gIF9ncm91cE9wZW4/OiBib29sZWFuO1xuICBfb3Blbj86IGJvb2xlYW47XG4gIF9ncmV5ZWQ/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTGluayBleHRlbmRzIEhpZXJhcmNoeVBvaW50TGluazxOb2RlRGF0dW0+IHtcbiAgc291cmNlOiBDaGFydE5vZGU7XG4gIHRhcmdldDogQ2hhcnROb2RlO1xufVxuXG50eXBlIE5vZGVTZWxlY3Rpb24gPSBTZWxlY3Rpb248U1ZHR0VsZW1lbnQgfCBCYXNlVHlwZSwgQ2hhcnROb2RlLCBTVkdHRWxlbWVudCwgdW5rbm93bj47XG50eXBlIExpbmtTZWxlY3Rpb24gPSBTZWxlY3Rpb248U1ZHUGF0aEVsZW1lbnQgfCBCYXNlVHlwZSwgTGluaywgU1ZHR0VsZW1lbnQsIHVua25vd24+O1xuXG5jb25zdCB0eXBlTWFwcGluZyA9IHtcbiAgW1Rlcm1UZXJtVHlwZS5lbmRwb2ludEluZGljYXRvcl06IENoYXJ0Tm9kZVR5cGUuZW5kcG9pbnQsXG4gIFtUZXJtVGVybVR5cGUuY2hhcmFjdGVyaXNlZEluZGljYXRvcl06IENoYXJ0Tm9kZVR5cGUubWlkcG9pbnQsXG4gIFtUZXJtVGVybVR5cGUuZW1pc3Npb25dOiBDaGFydE5vZGVUeXBlLmVtaXNzaW9uLFxuICBbVGVybVRlcm1UeXBlLnJlc291cmNlVXNlXTogQ2hhcnROb2RlVHlwZS5lbWlzc2lvbixcbiAgW1Rlcm1UZXJtVHlwZS5vcGVyYXRpb25dOiBDaGFydE5vZGVUeXBlLm9wZXJhdGlvblxufTtcblxuY29uc3Qgd2lkdGggPSA4MDA7XG5jb25zdCBtYXJnaW4gPSB7IHRvcDogMTAsIHJpZ2h0OiAyMCwgYm90dG9tOiAxMCwgbGVmdDogMjAgfTtcbmNvbnN0IGZvbnRTaXplID0gTWF0aC5mbG9vcih3aWR0aCAvIDEwMCk7XG5jb25zdCBub2RlUGFkZGluZyA9IGZvbnRTaXplIC8gMjtcbmNvbnN0IGxpbmVIZWlnaHQgPSBmb250U2l6ZSAqIDEuMjtcbmNvbnN0IGJhckhlaWdodCA9IGxpbmVIZWlnaHQ7XG5cbmNvbnN0IG5vZGVIZWlnaHQgPSBub2RlUGFkZGluZyAqIDIgKyAyICogbGluZUhlaWdodCArIGJhckhlaWdodDtcbmNvbnN0IG5vZGVXaWR0aCA9IG5vZGVIZWlnaHQgKiAyICogMS42MTg7XG5jb25zdCBub2RlQ29udGVudFdpZHRoID0gbm9kZVdpZHRoIC0gbm9kZVBhZGRpbmcgKiAyO1xuY29uc3QgbGF5ZXJTcGFjaW5nID0gKHdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQgLSBub2RlV2lkdGggKiA1KSAvIDQ7XG5jb25zdCBub2RlTWFyZ2luID0gbm9kZVBhZGRpbmcgKiAwLjc1O1xuY29uc3Qgbm9kZVNwYWNpbmdGYWN0b3IgPSAobm9kZUhlaWdodCArIG5vZGVNYXJnaW4gKiAyKSAvIG5vZGVIZWlnaHQ7XG5jb25zdCBub2RlRHVyYXRpb24gPSA2MDA7XG5jb25zdCBsaW5rRHVyYXRpb24gPSAyMDA7XG5jb25zdCBncm91cERlbGF5ID0gbm9kZUR1cmF0aW9uIC0gMTAwO1xuY29uc3Qgbm9uTENBSW5kaWNhdG9yc0lkID0gJ25vbkxDQUluZGljYXRvcnMnO1xuY29uc3QgZ3JleWVkT3BhY2l0eSA9IDAuMjtcbmNvbnN0IGdyb3VwT3ZlcmxhcCA9IGxpbmVIZWlnaHQgLSBub2RlUGFkZGluZyAtIG5vZGVNYXJnaW47XG5jb25zdCBncm91cE5vZGVTcGFjZSA9IG5vZGVIZWlnaHQgLSAyICogZ3JvdXBPdmVybGFwO1xuXG5jb25zdCBjb2xsYXBzZUNoaWxkcmVuID0gKG5vZGU6IENoYXJ0Tm9kZSB8IEhOb2RlKSA9PiB7XG4gIG5vZGUuX2NoaWxkcmVuID0gbm9kZS5jaGlsZHJlbiB8fCBub2RlLl9jaGlsZHJlbjtcbiAgbm9kZS5jaGlsZHJlbiA9IG51bGw7XG4gIHJldHVybiBub2RlO1xufTtcblxuY29uc3QgcmVzdG9yZUNoaWxkcmVuID0gKG5vZGU6IENoYXJ0Tm9kZSB8IEhOb2RlKSA9PiB7XG4gIG5vZGUuY2hpbGRyZW4gPSBub2RlLl9jaGlsZHJlbjtcbiAgbm9kZS5fY2hpbGRyZW4gPSBudWxsO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbmNvbnN0IHdyYXAgPSAoc2VsZWN0aW9uOiBTZWxlY3Rpb248U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZSwgYW55LCBhbnk+LCBtYXhXaWR0aCA9IG5vZGVDb250ZW50V2lkdGgpID0+IHtcbiAgc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICBjb25zdCB0ID0gZDNTZWxlY3Q8U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZT4odGhpcyk7XG4gICAgZDN3cmFwPENoYXJ0Tm9kZT4odCwge1xuICAgICAgbWF4V2lkdGgsXG4gICAgICBtYXhMaW5lczogZC5kYXRhLnNob3dCYXIgPyAyIDogMyxcbiAgICAgIHZjZW50cmU6ICFkLmRhdGEuc2hvd0JhcixcbiAgICAgIHdvcmRzOiBbLi4uZC5kYXRhLmxhYmVsLnNwbGl0KC9cXHMrLyksIGQuZGF0YS51bml0c10sXG4gICAgICBvd25MaW5lV29yZDogZC5kYXRhLnVuaXRzLFxuICAgICAgbkhlaWdodDogbm9kZUhlaWdodCxcbiAgICAgIGxIZWlnaHQ6IGxpbmVIZWlnaHRcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5jb25zdCBzZXROb2RlU2l6ZSA9IHNlbGVjdGlvbiA9PiBzZWxlY3Rpb24uYXR0cignd2lkdGgnLCBub2RlV2lkdGgpLmF0dHIoJ2hlaWdodCcsIG5vZGVIZWlnaHQpO1xuXG5jb25zdCBmb3JtYXRCYXIgPSAoc2VsZWN0aW9uOiBOb2RlU2VsZWN0aW9uKSA9PlxuICBzZWxlY3Rpb25cbiAgICAuYXR0cignaGVpZ2h0JywgYmFySGVpZ2h0KVxuICAgIC5hdHRyKCdyeCcsICcxJylcbiAgICAuYXR0cigncnknLCAnMScpXG4gICAgLmF0dHIoJ3knLCBub2RlSGVpZ2h0IC0gbm9kZVBhZGRpbmcgLSBiYXJIZWlnaHQpXG4gICAgLmF0dHIoJ3gnLCBub2RlUGFkZGluZyk7XG5cbmNvbnN0IGlzVHlwZVdpdGhvdXRWYWx1ZSA9IG5vZGVEYXR1bSA9PiBbQ2hhcnROb2RlVHlwZS5pbnB1dCwgQ2hhcnROb2RlVHlwZS5vcGVyYXRpb25dLmluY2x1ZGVzKG5vZGVEYXR1bS5kYXRhLnR5cGUpO1xuXG5jb25zdCBnZXRXZWlnaHRlZFZhbHVlVGV4dCA9IG5vZGVEYXR1bSA9PlxuICBgJHt0b1ByZWNpc2lvbihub2RlRGF0dW0uZGF0YS53ZWlnaHRlZFZhbHVlLCAzKX0ke1xuICAgIG5vZGVEYXR1bS5wYXJlbnQ/LmRhdGEudmFsdWUgPT09IG51bGxcbiAgICAgID8gJydcbiAgICAgIDogYCBvZiAke3RvUHJlY2lzaW9uKG5vZGVEYXR1bS5wYXJlbnQ/LmRhdGEudmFsdWUgfHwgbm9kZURhdHVtLnBhcmVudD8uZGF0YS53ZWlnaHRlZFZhbHVlLCAzKX1gXG4gIH0gJHtub2RlRGF0dW0ucGFyZW50Py5kYXRhLnZhbHVlID8gbm9kZURhdHVtLnBhcmVudD8uZGF0YS51bml0cyA6IG5vZGVEYXR1bS5wYXJlbnQ/LnBhcmVudD8uZGF0YS51bml0c31gO1xuXG5jb25zdCBnZW5lcmF0ZVRpcERhdGEgPSBub2RlRGF0dW0gPT4gKHtcbiAgaGFzV2VpZ2h0ZWRWYWx1ZTogbm9kZURhdHVtLmRhdGEud2VpZ2h0ZWRWYWx1ZSxcbiAgd2VpZ2h0ZWRWYWx1ZVRleHQ6IGdldFdlaWdodGVkVmFsdWVUZXh0KG5vZGVEYXR1bSksXG4gIHZhbHVlS2V5SHJlZjogYCR7c2NoZW1hQmFzZVVybCgpfS9JbmRpY2F0b3IjdmFsdWVgLFxuICBtb2RlbERvY3NIcmVmOiBub2RlRGF0dW0uZGF0YS5tb2RlbERvY3MsXG4gIHZhbHVlVmFsdWVUZXh0OiBub2RlRGF0dW0uZGF0YS52YWx1ZVxuICAgID8gYCR7dG9QcmVjaXNpb24obm9kZURhdHVtLmRhdGEudmFsdWUsIDMpfSAke25vZGVEYXR1bS5kYXRhLnVuaXRzfSAtIGBcbiAgICA6IGlzVHlwZVdpdGhvdXRWYWx1ZShub2RlRGF0dW0pXG4gICAgICA/ICdubyBkYXRhICh1bmRlciBkZXZlbG9wbWVudCknXG4gICAgICA6ICdubyBjb250cmlidXRpb24nLFxuICBoYXNWYWx1ZTogbm9kZURhdHVtLmRhdGEudmFsdWUsXG4gIG1vZGVsS2V5SHJlZjogYCR7c2NoZW1hQmFzZVVybCgpfS9JbmRpY2F0b3IjbWV0aG9kTW9kZWxgLFxuICBtb2RlbFZhbHVlOiBub2RlRGF0dW0uZGF0YS5tb2RlbE5hbWUsXG4gIG1vZGVsVmFsdWVIcmVmOiBgJHtiYXNlVXJsKCl9L21vZGVsLyR7bm9kZURhdHVtLmRhdGEubW9kZWxJZH1gLFxuICB0ZXJtS2V5SHJlZjogYCR7c2NoZW1hQmFzZVVybCgpfS9JbmRpY2F0b3IjdGVybWAsXG4gIHRlcm1WYWx1ZTogbm9kZURhdHVtLmRhdGEudGVybSxcbiAgdGVybVZhbHVlVGV4dDogbm9kZURhdHVtLmRhdGEudGVybSxcbiAgdGVybVZhbHVlSHJlZjogYCR7YmFzZVVybCgpfS90ZXJtLyR7bm9kZURhdHVtLmRhdGEuaWR9YFxufSk7XG5cbmNvbnN0IGFkZFRvb2x0aXAgPSAoXG4gIHNlbGVjdGlvbjogTm9kZVNlbGVjdGlvbixcbiAgeyB0b29sdGlwT3BlcmF0b3IsIHpvbmUgfTogeyB0b29sdGlwT3BlcmF0b3I6IE5nYlBvcG92ZXI7IHpvbmU6IE5nWm9uZSB9XG4pID0+IHtcbiAgbGV0IGhvdmVyaW5nVGlwID0gZmFsc2U7XG4gIGxldCBob3ZlcmluZ05vZGUgPSBmYWxzZTtcbiAgbGV0IGxhc3ROb2RlSWQ6IHN0cmluZztcblxuICBjb25zdCBjbG9zZVRpcCA9ICgpID0+IHtcbiAgICB6b25lLnJ1bigoKSA9PiB0b29sdGlwT3BlcmF0b3IuY2xvc2UoZmFsc2UpKTtcbiAgICBzZWxlY3RBbGwoJy50aXAtdGFyZ2V0JykuY2xhc3NlZCgndGlwLXRhcmdldCcsIGZhbHNlKTtcbiAgICBsYXN0Tm9kZUlkID0gbnVsbDtcbiAgfTtcblxuICBjb25zdCBzdGFydENsb3NlVGlwID0gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFob3ZlcmluZ1RpcCAmJiAhaG92ZXJpbmdOb2RlKSB7XG4gICAgICAgIGNsb3NlVGlwKCk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfTtcblxuICBzZWxlY3Rpb25cbiAgICAub24oJ2NsaWNrJywgY2xvc2VUaXApXG4gICAgLm9uKCdwb2ludGVyZW50ZXInLCAoZXZlbnQsIG5vZGVEYXR1bSkgPT4ge1xuICAgICAgaG92ZXJpbmdOb2RlID0gdHJ1ZTtcbiAgICAgIGlmIChsYXN0Tm9kZUlkID09PSBub2RlRGF0dW0uZGF0YS5pZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjbG9zZVRpcCgpO1xuICAgICAgbGFzdE5vZGVJZCA9IG5vZGVEYXR1bS5kYXRhLmlkO1xuICAgICAgZDNTZWxlY3QoZXZlbnQudGFyZ2V0KS5jbGFzc2VkKCd0aXAtdGFyZ2V0JywgdHJ1ZSk7XG4gICAgICB6b25lLnJ1bigoKSA9PiB0b29sdGlwT3BlcmF0b3Iub3Blbih7IHRpcERhdGE6IGdlbmVyYXRlVGlwRGF0YShub2RlRGF0dW0pIH0pKTtcblxuICAgICAgZDNTZWxlY3QoJy5kcml2ZXItY2hhcnQtdG9vbHRpcCcpXG4gICAgICAgIC5vbigncG9pbnRlcmVudGVyJywgKCkgPT4ge1xuICAgICAgICAgIGhvdmVyaW5nVGlwID0gdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKCdwb2ludGVybGVhdmUnLCAoKSA9PiB7XG4gICAgICAgICAgaG92ZXJpbmdUaXAgPSBmYWxzZTtcbiAgICAgICAgICBzdGFydENsb3NlVGlwKCk7XG4gICAgICAgIH0pO1xuICAgIH0pXG4gICAgLm9uKCdwb2ludGVybGVhdmUnLCAoKSA9PiB7XG4gICAgICBob3ZlcmluZ05vZGUgPSBmYWxzZTtcbiAgICAgIHN0YXJ0Q2xvc2VUaXAoKTtcbiAgICB9KTtcblxuICByZXR1cm4gc2VsZWN0aW9uO1xufTtcblxuY29uc3QgbWVyZ2VkTm9kZXMgPSAoc2VsZWN0aW9uOiBOb2RlU2VsZWN0aW9uLCB7IHRvb2x0aXBPcGVyYXRvciwgem9uZSB9KSA9PiB7XG4gIHNlbGVjdGlvblxuICAgIC5zZWxlY3RBbGw8U1ZHUmVjdEVsZW1lbnQsIENoYXJ0Tm9kZT4oJy5ub2RlLWJveCcpXG4gICAgLmNsYXNzZWQoJ25vZGUtb3BlbmFibGUnLCBkID0+ICEhZC5oZWlnaHQpXG4gICAgLmNsYXNzZWQoJ25vZGUtb3BlbicsIGQgPT4gZC5fb3BlbilcbiAgICAuY2FsbChzZXROb2RlU2l6ZSlcbiAgICAuYXR0cignc3Ryb2tlJywgKHsgZGF0YSB9KSA9PiBub2RlQ29sb3Vyc1tkYXRhLnR5cGVdKVxuICAgIC5hdHRyKCdmaWxsJywgZCA9PiBub2RlQ29sb3Vyc1tkLmRhdGEudHlwZV0pXG4gICAgLnN0eWxlKCd1c2VyLXNlbGVjdCcsIHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4ID8gJ25vbmUnIDogbnVsbCk7XG5cbiAgc2VsZWN0aW9uLmZpbHRlcihkID0+ICFkLmRhdGEuZ3JvdXAgJiYgZC5kYXRhLmlkICE9PSBub25MQ0FJbmRpY2F0b3JzSWQpLmNhbGwoYWRkVG9vbHRpcCwgeyB0b29sdGlwT3BlcmF0b3IsIHpvbmUgfSk7XG5cbiAgc2VsZWN0aW9uXG4gICAgLnNlbGVjdEFsbDxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlPignLm5vZGUtbGFiZWwnKVxuICAgIC5hdHRyKCd5JywgZCA9PiAoZC5kYXRhLnNob3dCYXIgPyBsaW5lSGVpZ2h0IC8gMiArIG5vZGVQYWRkaW5nIC8gMiA6IDApKVxuICAgIC5hdHRyKCd4Jywgbm9kZVdpZHRoIC8gMik7XG5cbiAgY29uc3QgZ3JvdXBzID0gc2VsZWN0aW9uLmZpbHRlcihkID0+IGQuZGF0YS5ncm91cCk7XG5cbiAgZ3JvdXBzXG4gICAgLnNlbGVjdEFsbDxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlPignLmdyb3VwLWJvcmRlcicpXG4gICAgLmF0dHIoJ3dpZHRoJywgbm9kZVdpZHRoICsgbm9kZVBhZGRpbmcgKiAyKVxuICAgIC5hdHRyKCd4JywgLW5vZGVQYWRkaW5nKVxuICAgIC5hdHRyKCd5Jywgbm9kZUhlaWdodCAtIChsaW5lSGVpZ2h0ICsgbm9kZVBhZGRpbmcgKiAyKSlcbiAgICAuYXR0cignb3BhY2l0eScsIGQgPT4gKGQuX2dyZXllZCAmJiBkLl9ncm91cE9wZW4gPyBncmV5ZWRPcGFjaXR5IDogZC5fZ3JvdXBPcGVuID8gMSA6IDApKVxuICAgIC5hdHRyKFxuICAgICAgJ2hlaWdodCcsXG4gICAgICBkID0+XG4gICAgICAgIE1hdGguYWJzKGQucGFyZW50Ll9ncm91cENoaWxkcmVuLmxlbmd0aCAtIGQucGFyZW50LmNoaWxkcmVuLmxlbmd0aCkgKiAobm9kZUhlaWdodCAqIG5vZGVTcGFjaW5nRmFjdG9yKSArXG4gICAgICAgIG5vZGVQYWRkaW5nICtcbiAgICAgICAgKGxpbmVIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIpIC8gMlxuICAgICk7XG5cbiAgY29uc3QgZ3JvdXBMYWJlbHMgPSBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtbGFiZWwnKVxuICAgIC5hdHRyKCd5Jywgbm9kZUhlaWdodCAvIDIpXG4gICAgLmF0dHIoJ3gnLCBub2RlUGFkZGluZylcbiAgICAudGV4dChkID0+IGQuZGF0YS5sYWJlbClcbiAgICAuYXR0cignb3BhY2l0eScsIGQgPT4gKGQuX2dyb3VwT3BlbiA/IDAgOiBkLl9ncmV5ZWQgPyBncmV5ZWRPcGFjaXR5IDogMSkpO1xuXG4gIC8vIHVubmVlZGVkIHdpdGggY3VycmVudCBkaW1lbnNpb25zXG4gIC8vIGdyb3VwTGFiZWxzLmVhY2goZnVuY3Rpb24oKSB7XG4gIC8vICAgY29uc3QgdGV4dCA9IGQzU2VsZWN0PFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KHRoaXMpO1xuICAvLyAgIGNvbnN0IHRleHRXaWR0aCA9ICh0ZXh0Lm5vZGUoKSBhcyBTVkdUZXh0RWxlbWVudCkuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk7XG4gIC8vICAgY29uc3QgbGluZSA9IGQzU2VsZWN0PFNWR0xpbmVFbGVtZW50LCBDaGFydE5vZGU+KHRoaXMubmV4dFNpYmxpbmcgYXMgU1ZHTGluZUVsZW1lbnQpO1xuICAvLyAgIGxpbmVcbiAgLy8gICAgIC5jbGFzc2VkKCdncm91cC1saW5lJywgdHJ1ZSlcbiAgLy8gICAgIC5hdHRyKCd4MScsIHRleHRXaWR0aCArIG5vZGVQYWRkaW5nICogMilcbiAgLy8gICAgIC5hdHRyKCd5MScsIG5vZGVIZWlnaHQgLyAyKVxuICAvLyAgICAgLmF0dHIoJ3gyJywgKG5vZGVXaWR0aCAqIDUpIC8gNyAtIG5vZGVQYWRkaW5nKVxuICAvLyAgICAgLmF0dHIoJ3kyJywgbm9kZUhlaWdodCAvIDIpXG4gIC8vICAgICAuYXR0cignb3BhY2l0eScsIChkKSA9PiAoZC5fZ3JvdXBPcGVuID8gMCA6IGQuX2dyZXllZCA/IGdyZXllZE9wYWNpdHkgOiAxKSk7XG4gIC8vIH0pO1xuXG4gIGNvbnN0IHNldEdyb3VwQnV0dG9uWFkgPSBzZWwgPT5cbiAgICBzZWxcbiAgICAgIC5hdHRyKCd3aWR0aCcsIChub2RlV2lkdGggKiAyKSAvIDcpXG4gICAgICAuYXR0cignaGVpZ2h0JywgZCA9PiAoZC5fZ3JvdXBPcGVuID8gbGluZUhlaWdodCArIG5vZGVQYWRkaW5nICogMiA6IG5vZGVQYWRkaW5nICogMiArIGxpbmVIZWlnaHQpKVxuICAgICAgLmF0dHIoJ3gnLCBkID0+IChkLl9ncm91cE9wZW4gPyAobm9kZVdpZHRoICogMi41KSAvIDcgOiAobm9kZVdpZHRoICogNSkgLyA3IC0gbm9kZVBhZGRpbmcpKVxuICAgICAgLmF0dHIoJ3knLCBkID0+XG4gICAgICAgIGQuX2dyb3VwT3BlblxuICAgICAgICAgID8gZ3JvdXBPdmVybGFwICsgKGdyb3VwTm9kZVNwYWNlIC0gKGxpbmVIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIpKSAvIDJcbiAgICAgICAgICA6IG5vZGVQYWRkaW5nICsgbGluZUhlaWdodCAvIDJcbiAgICAgICk7XG5cbiAgZ3JvdXBzXG4gICAgLnNlbGVjdEFsbDxTVkdSZWN0RWxlbWVudCwgQ2hhcnROb2RlPignLmdyb3VwLWJ1dHRvbicpXG4gICAgLmNhbGwoc2V0R3JvdXBCdXR0b25YWSlcbiAgICAuc3R5bGUoJ3BvaW50ZXItZXZlbnRzJywgZCA9PiAoZC5fZ3JleWVkID8gJ25vbmUnIDogJ2F1dG8nKSlcbiAgICAuc3R5bGUoJ3N0cm9rZS1vcGFjaXR5JywgZCA9PiAoZC5fZ3JleWVkID8gZ3JleWVkT3BhY2l0eSA6IDEpKTtcblxuICBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtYnV0dG9uLXRleHQnKVxuICAgIC50ZXh0KGQgPT4gKGQuX2dyb3VwT3BlbiA/ICdIaWRlJyA6ICdTaG93JykpXG4gICAgLmF0dHIoJ3gnLCBkID0+IChkLl9ncm91cE9wZW4gPyBub2RlV2lkdGggLyAyIDogKG5vZGVXaWR0aCAqIDYpIC8gNyAtIG5vZGVQYWRkaW5nKSlcbiAgICAuYXR0cigneScsIGQgPT4gKGQuX2dyb3VwT3BlbiA/IG5vZGVNYXJnaW4gKyBsaW5lSGVpZ2h0ICsgbGluZUhlaWdodCAvIDIgOiBub2RlSGVpZ2h0IC8gMikpXG4gICAgLmF0dHIoJ2ZvbnQtc2l6ZScsICgpID0+IGAke2ZvbnRTaXplICogMS4zfXB4YCk7XG5cbiAgc2VsZWN0aW9uLnNlbGVjdEFsbCgnLnNpYmxpbmctbWFzaycpLnJlbW92ZSgpO1xuXG4gIHNlbGVjdGlvblxuICAgIC5maWx0ZXIoZCA9PiBkLl9ncmV5ZWQgJiYgIWQuZGF0YS5ncm91cClcbiAgICAuYXBwZW5kKCdyZWN0JylcbiAgICAuY2xhc3NlZCgnbm9kZS1vcGVuYWJsZScsIGQgPT4gISFkLmhlaWdodClcbiAgICAuY2xhc3NlZCgnc2libGluZy1tYXNrIG1hc2stb3BlbmFibGUnLCB0cnVlKVxuICAgIC5jYWxsKHNldE5vZGVTaXplKTtcblxuICBzZWxlY3Rpb25cbiAgICAuZmlsdGVyKGQgPT4gZC5fZ3JleWVkICYmIGQuZGF0YS5ncm91cClcbiAgICAuYXBwZW5kKCdyZWN0JylcbiAgICAuY2xhc3NlZCgnc2libGluZy1tYXNrJywgdHJ1ZSlcbiAgICAuY2FsbChzZXRHcm91cEJ1dHRvblhZKTtcblxuICByZXR1cm4gc2VsZWN0aW9uO1xufTtcblxuLy8gbW9yZSB0aGFuIDcwJVxuY29uc3QgZnJhY3Rpb25DdXRvZmYgPSAwLjc7XG5cbmNvbnN0IGZyYWN0aW9uV2lkdGggPSAoZGF0YTogTm9kZURhdHVtKSA9PiBNYXRoLmFicyhkYXRhLmZyYWN0aW9uKSAqIG5vZGVDb250ZW50V2lkdGg7XG5cbmNvbnN0IGVudGVyTm9kZXMgPSAoc2VsZWN0aW9uOiBOb2RlU2VsZWN0aW9uKSA9PiB7XG4gIGNvbnN0IG5vZGVzID0gc2VsZWN0aW9uLmZpbHRlcihkID0+IGQuZGF0YS50eXBlICE9PSBDaGFydE5vZGVUeXBlLnJvb3QgJiYgIWQuZGF0YS5ncm91cCk7XG5cbiAgbm9kZXMuYXBwZW5kKCdyZWN0JykuY2xhc3NlZCgnbm9kZS1ib3gnLCB0cnVlKTtcblxuICBub2Rlc1xuICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgIC5jbGFzc2VkKCdub2RlLWxhYmVsJywgdHJ1ZSlcbiAgICAudGV4dCgoeyBkYXRhIH0pID0+IGRhdGEubGFiZWwgKyAnICcgKyBkYXRhLnVuaXRzKVxuICAgIC5hdHRyKCdvcGFjaXR5JywgMCk7XG5cbiAgLy8gVGV4dCBlbGVtZW50cyBtdXN0IGJlIHJlbmRlcmVkIGJlZm9yZSB3ZSBjYW4gY2FsY3VsYXRlIHdyYXBwaW5nXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnN0IGxhYmVscyA9IG5vZGVzLnNlbGVjdEFsbDxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlPignLm5vZGUtbGFiZWwnKS5jYWxsKHdyYXApO1xuICAgIGxhYmVscy5hdHRyKCdvcGFjaXR5JywgMSk7XG4gIH0pO1xuXG4gIGNvbnN0IGdyb3VwcyA9IHNlbGVjdGlvbi5maWx0ZXIoZCA9PiBkLmRhdGEuZ3JvdXApO1xuXG4gIGdyb3Vwcy5hcHBlbmQoJ3JlY3QnKS5hdHRyKCdjbGFzcycsICdncm91cC1ib3JkZXInKTtcbiAgZ3JvdXBzLmFwcGVuZCgndGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2dyb3VwLWxhYmVsJyk7XG4gIC8vIGdyb3Vwcy5hcHBlbmQoJ2xpbmUnKS5hdHRyKCdjbGFzcycsICdncm91cC1saW5lJyk7XG4gIGdyb3Vwcy5hcHBlbmQoJ3JlY3QnKS5hdHRyKCdjbGFzcycsICdncm91cC1idXR0b24nKTtcbiAgZ3JvdXBzLmFwcGVuZCgndGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2dyb3VwLWJ1dHRvbi10ZXh0Jyk7XG5cbiAgY29uc3Qgd2l0aEJhciA9IG5vZGVzLmZpbHRlcihkID0+IGQuZGF0YS5zaG93QmFyKTtcblxuICB3aXRoQmFyXG4gICAgLmZpbHRlcihkID0+IGQuZGF0YS5mcmFjdGlvbiA+IDApXG4gICAgLmFwcGVuZCgncmVjdCcpXG4gICAgLmNsYXNzZWQoJ2Jhci1iYWNrZ3JvdW5kJywgdHJ1ZSlcbiAgICAuYXR0cignd2lkdGgnLCBub2RlQ29udGVudFdpZHRoKVxuICAgIC5jYWxsKGZvcm1hdEJhcik7XG5cbiAgd2l0aEJhclxuICAgIC5hcHBlbmQoJ3JlY3QnKVxuICAgIC5jbGFzc2VkKCdiYXItZm9yZWdyb3VuZCcsIHRydWUpXG4gICAgLmNhbGwoZm9ybWF0QmFyKVxuICAgIC5hdHRyKCd3aWR0aCcsIGQgPT4gZnJhY3Rpb25XaWR0aChkLmRhdGEpKVxuICAgIC5hdHRyKCdmaWxsJywgZCA9PiBub2RlQ29sb3Vyc1tkLmRhdGEudHlwZV0pO1xuXG4gIHdpdGhCYXJcbiAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAuY2xhc3NlZCgnYmFyLWxhYmVsJywgdHJ1ZSlcbiAgICAudGV4dCgoeyBkYXRhIH0pID0+XG4gICAgICBkYXRhLmZyYWN0aW9uID09PSAwXG4gICAgICAgID8gJ25vIGNvbnRyaWJ1dGlvbidcbiAgICAgICAgOiBgJHtNYXRoLnJvdW5kKDEwMCAqIGRhdGEuZnJhY3Rpb24pfSUgJHtNYXRoLnJvdW5kKDEwMCAqIGRhdGEuZnJhY3Rpb24pID09PSAwID8gJyAocm91bmRlZCknIDogJyd9YFxuICAgIClcbiAgICAuYXR0cigndGV4dC1hbmNob3InLCBkID0+IChkLmRhdGEuZnJhY3Rpb24gPT09IDAgPyAnbWlkZGxlJyA6IGQuZGF0YS5mcmFjdGlvbiA+IGZyYWN0aW9uQ3V0b2ZmID8gJ2VuZCcgOiAnc3RhcnQnKSlcbiAgICAuYXR0cigneCcsIGQgPT5cbiAgICAgIGQuZGF0YS5mcmFjdGlvbiA9PT0gMFxuICAgICAgICA/IG5vZGVXaWR0aCAvIDJcbiAgICAgICAgOiBmcmFjdGlvbldpZHRoKGQuZGF0YSkgKyBub2RlUGFkZGluZyArIChkLmRhdGEuZnJhY3Rpb24gPiBmcmFjdGlvbkN1dG9mZiA/IC00IDogNClcbiAgICApXG4gICAgLmF0dHIoJ3knLCBub2RlSGVpZ2h0IC0gbm9kZVBhZGRpbmcgLSBiYXJIZWlnaHQgLyAyKTtcblxuICByZXR1cm4gc2VsZWN0aW9uO1xufTtcblxuY29uc3QgbWVyZ2VkTGlua3MgPSAoc2VsZWN0aW9uOiBMaW5rU2VsZWN0aW9uLCB7IHRvZ2dsaW5nR3JvdXAsIHN3aXRjaGluZ1NlbGVjdGlvbiB9KSA9PlxuICBzZWxlY3Rpb25cbiAgICAuc3R5bGUoJ3N0cm9rZScsIGQgPT4ge1xuICAgICAgY29uc3QgY29sb3VycyA9IHtcbiAgICAgICAgW0NoYXJ0Tm9kZVR5cGUubWlkcG9pbnRdOiBub2RlQ29sb3Vyc1tDaGFydE5vZGVUeXBlLm1pZHBvaW50XSxcbiAgICAgICAgW0NoYXJ0Tm9kZVR5cGUuZW5kcG9pbnRdOiBub2RlQ29sb3Vyc1tDaGFydE5vZGVUeXBlLmVuZHBvaW50XSxcbiAgICAgICAgW0NoYXJ0Tm9kZVR5cGUuZW1pc3Npb25dOiBub2RlQ29sb3Vyc1tDaGFydE5vZGVUeXBlLmVtaXNzaW9uXVxuICAgICAgfTtcbiAgICAgIHJldHVybiAoZC50YXJnZXQuX29wZW4gJiYgY29sb3Vyc1tkLnNvdXJjZS5kYXRhLnR5cGVdKSB8fCBudWxsO1xuICAgIH0pXG4gICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCBkID0+IChkLnRhcmdldC5kYXRhLmdyb3VwID8gJzIsNScgOiBudWxsKSlcbiAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgZCA9PiAoZC50YXJnZXQuX29wZW4gPyAzIDogZC50YXJnZXQuX2dyb3VwT3BlbiA/IDAgOiAyKSlcbiAgICAuYXR0cignc3Ryb2tlLW9wYWNpdHknLCBkID0+IChkLnRhcmdldC5fZ3JleWVkID8gMC4xIDogMC42KSlcbiAgICAudHJhbnNpdGlvbigpXG4gICAgLmR1cmF0aW9uKGxpbmtEdXJhdGlvbilcbiAgICAuZGVsYXkoZCA9PiB7XG4gICAgICBjb25zdCBncm91cENsb3NpbmcgPSB0b2dnbGluZ0dyb3VwICYmICFkLnRhcmdldC5wYXJlbnQ/LmNoaWxkcmVuPy5maW5kKG4gPT4gbi5kYXRhLmdyb3VwKT8uX2dyb3VwT3BlbjtcbiAgICAgIHJldHVybiBncm91cENsb3NpbmdcbiAgICAgICAgPyBncm91cERlbGF5XG4gICAgICAgIDogKHN3aXRjaGluZ1NlbGVjdGlvbiA/IG5vZGVEdXJhdGlvbiA6IDApICsgZC5zb3VyY2UuY2hpbGRyZW4/LmluZGV4T2YoZC50YXJnZXQpICogMTA7XG4gICAgfSlcbiAgICAuYXR0cignb3BhY2l0eScsIDEpXG4gICAgLmF0dHIoJ2QnLCBkID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldER5ID0gZC50YXJnZXQuX2dyb3VwT3BlbiA/IG5vZGVQYWRkaW5nICsgbGluZUhlaWdodCAvIDIgKyBub2RlTWFyZ2luICogMiA6IG5vZGVIZWlnaHQgLyAyO1xuICAgICAgcmV0dXJuIGQzTGlua0hvcml6b250YWwoKSh7XG4gICAgICAgIHNvdXJjZTogW2Quc291cmNlLnkgKyBub2RlV2lkdGgsIGQuc291cmNlLnggKyBub2RlSGVpZ2h0IC8gMl0sXG4gICAgICAgIHRhcmdldDogW2QudGFyZ2V0LnksIGQudGFyZ2V0LnggKyB0YXJnZXREeV1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG5jb25zdCBncm91cEJ5UGVyY2VudGFnZSA9IG5vZGUgPT5cbiAgW0NoYXJ0Tm9kZVR5cGUuZW5kcG9pbnQsIENoYXJ0Tm9kZVR5cGUubWlkcG9pbnQsIENoYXJ0Tm9kZVR5cGUuZW1pc3Npb25dLmluY2x1ZGVzKG5vZGUuZGF0YS50eXBlKTtcblxuY29uc3QgZ3JvdXBQZXJjZW50YWdlID0gKG5vZGUsIHBlcmNlbnRhZ2UgPSAwLjAyKSA9PiB7XG4gIGNvbnN0IGdyb3VwZWQgPSBub2RlLl9jaGlsZHJlbj8uZmlsdGVyKGNoaWxkID0+IGNoaWxkLmRhdGEuZnJhY3Rpb24gPCBwZXJjZW50YWdlKTtcbiAgaWYgKG5vZGUuX2NoaWxkcmVuPy5sZW5ndGggPiA2ICYmIGdyb3VwZWQ/Lmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCB0eXBlID0gbm9kZS5fY2hpbGRyZW5bMF0uZGF0YS50eXBlO1xuICAgIGNvbnN0IGdyb3VwTm9kZSA9IHtcbiAgICAgIC4uLmQzSGllcmFyY2h5KHtcbiAgICAgICAgaWQ6IGAke3R5cGV9LWdyb3VwYCxcbiAgICAgICAgbGFiZWw6IGAke2dyb3VwZWQubGVuZ3RofSBtb3JlIHVuZGVyICR7TWF0aC5yb3VuZChwZXJjZW50YWdlICogMTAwKX0lLmAsXG4gICAgICAgIHdlaWdodGVkVmFsdWU6IG51bGwsXG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICB0eXBlLFxuICAgICAgICBncm91cDogdHJ1ZVxuICAgICAgfSksXG4gICAgICBkZXB0aDogbm9kZS5kZXB0aCArIDEsXG4gICAgICBoZWlnaHQ6IDEsXG4gICAgICBwYXJlbnQ6IG5vZGVcbiAgICB9O1xuICAgIGNvbnN0IG5vdEdyb3VwZWQgPSBub2RlLl9jaGlsZHJlbj8uZmlsdGVyKGNoaWxkID0+IGNoaWxkLmRhdGEuZnJhY3Rpb24gPj0gcGVyY2VudGFnZSk7XG4gICAgbm9kZS5fY2hpbGRyZW4uc3BsaWNlKG5vdEdyb3VwZWQubGVuZ3RoLCAwLCBncm91cE5vZGUpO1xuICAgIG5vdEdyb3VwZWQucHVzaChncm91cE5vZGUpO1xuICAgIG5vZGUuX2dyb3VwQ2hpbGRyZW4gPSBub2RlLl9jaGlsZHJlbjtcbiAgICBub2RlLl9jaGlsZHJlbiA9IG5vdEdyb3VwZWQ7XG4gIH1cbn07XG5cbmludGVyZmFjZSBJSW5kaWNhdG9yc1N1bSB7XG4gIFtpbmRpY2F0b3I6IHN0cmluZ106IG51bWJlcjtcbn1cblxuY29uc3Qgc3VtSW5kaWNhdG9ycyA9IChkYXRhOiBJQ2hhcnREYXRhW10pID0+XG4gIGRhdGEucmVkdWNlKChhY2MsIGxvZykgPT4ge1xuICAgIC8vIGlnbm9yZSBuZWdhdGl2ZSB2YWx1ZXMgaW4gdGhlIHRvdGFsXG4gICAgYWNjW2xvZy5pbmRpY2F0b3JdID0gKGFjY1tsb2cuaW5kaWNhdG9yXSB8fCAwKSArIChsb2cud2VpZ2h0ZWRWYWx1ZSA+IDAgPyBsb2cud2VpZ2h0ZWRWYWx1ZSA6IDApO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9IGFzIElJbmRpY2F0b3JzU3VtKTtcblxuY29uc3QgZ3JvdXBJbmRpY2F0b3JzID0gKGRhdGE6IElDaGFydERhdGFbXSwgdGVybXM6IElUZXJtTWFwcGluZyA9IHt9LCB0b3RhbHM6IElJbmRpY2F0b3JzU3VtID0ge30pID0+XG4gIGRhdGEucmVkdWNlKFxuICAgIChhY2MsIGxvZykgPT4ge1xuICAgICAgY29uc3QgY29udHJpYnV0b3JUeXBlID0gdHlwZU1hcHBpbmdbdGVybXNbbG9nLmNvbnRyaWJ1dG9yXT8udGVybVR5cGVdIHx8IENoYXJ0Tm9kZVR5cGUuaW5wdXQ7XG4gICAgICBjb25zdCBpbmRpY2F0b3JUeXBlID0gdHlwZU1hcHBpbmdbdGVybXNbbG9nLmluZGljYXRvcl0/LnRlcm1UeXBlXTtcbiAgICAgIGNvbnN0IGNvbnRyaWJ1dG9yTm9kZSA9IHtcbiAgICAgICAgaWQ6IGxvZy5jb250cmlidXRvcixcbiAgICAgICAgLi4uZ2V0VW5pdHNBbmRMYWJlbCh0ZXJtc1tsb2cuY29udHJpYnV0b3JdLCBsb2cuY29udHJpYnV0b3IpLFxuICAgICAgICB0eXBlOiBjb250cmlidXRvclR5cGUsXG4gICAgICAgIHZhbHVlOiBsb2cudmFsdWUsXG4gICAgICAgIHdlaWdodGVkVmFsdWU6IGxvZy53ZWlnaHRlZFZhbHVlLFxuICAgICAgICBtb2RlbElkOiBsb2cubW9kZWxJZCxcbiAgICAgICAgZnJhY3Rpb246IGxvZy53ZWlnaHRlZFZhbHVlIC8gdG90YWxzW2xvZy5pbmRpY2F0b3JdLFxuICAgICAgICBjaGlsZHJlbjpcbiAgICAgICAgICBjb250cmlidXRvclR5cGUgPT09IENoYXJ0Tm9kZVR5cGUuZW1pc3Npb25cbiAgICAgICAgICAgID8gbG9nLmlucHV0cy5tYXAoaSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLmksXG4gICAgICAgICAgICAgICAgdHlwZTogQ2hhcnROb2RlVHlwZS5pbnB1dCxcbiAgICAgICAgICAgICAgICBmcmFjdGlvbjogaS53ZWlnaHRlZFZhbHVlIC8gbG9nLnZhbHVlLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBpLm9wZXJhdGlvbnMubWFwKG8gPT4gKHtcbiAgICAgICAgICAgICAgICAgIC4uLm8sXG4gICAgICAgICAgICAgICAgICB0eXBlOiBDaGFydE5vZGVUeXBlLm9wZXJhdGlvbixcbiAgICAgICAgICAgICAgICAgIGZyYWN0aW9uOiBvLndlaWdodGVkVmFsdWUgLyBpLndlaWdodGVkVmFsdWVcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICA6IFtdXG4gICAgICB9IGFzIE5vZGVEYXR1bTtcblxuICAgICAgYWNjW2xvZy5pbmRpY2F0b3JdXG4gICAgICAgID8gYWNjW2xvZy5pbmRpY2F0b3JdLmNoaWxkcmVuLnB1c2goY29udHJpYnV0b3JOb2RlKVxuICAgICAgICA6IChhY2NbbG9nLmluZGljYXRvcl0gPSB7XG4gICAgICAgICAgICBpZDogbG9nLmluZGljYXRvcixcbiAgICAgICAgICAgIC4uLmdldFVuaXRzQW5kTGFiZWwodGVybXNbbG9nLmluZGljYXRvcl0sIGxvZy5pbmRpY2F0b3IpLFxuICAgICAgICAgICAgbW9kZWxJZDogbG9nLm1vZGVsSWQsXG4gICAgICAgICAgICB0eXBlOiBpbmRpY2F0b3JUeXBlLFxuICAgICAgICAgICAgdmFsdWU6IHRvdGFsc1tsb2cuaW5kaWNhdG9yXSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbY29udHJpYnV0b3JOb2RlXVxuICAgICAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHt9IGFzIHsgW2lkOiBzdHJpbmddOiBOb2RlRGF0dW0gfVxuICApO1xuXG5jb25zdCBzaG93QmFyID0gKG5vZGU6IEhpZXJhcmNoeU5vZGU8Tm9kZURhdHVtPikgPT5cbiAgW1xuICAgIG5vZGUucGFyZW50Py5kYXRhLnR5cGUgIT09IENoYXJ0Tm9kZVR5cGUucm9vdCxcbiAgICBub2RlLnBhcmVudD8uZGF0YS5pZCAhPT0gbm9uTENBSW5kaWNhdG9yc0lkLFxuICAgICFub2RlLmRhdGEuZ3JvdXAsXG4gICAgIWlzTmFOKG5vZGUuZGF0YS5mcmFjdGlvbilcbiAgXS5ldmVyeShCb29sZWFuKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtaGllcmFyY2h5LWNoYXJ0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nYlBvcG92ZXIsIEZhSWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9oaWVyYXJjaHktY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vaGllcmFyY2h5LWNoYXJ0LmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBIaWVyYXJjaHlDaGFydENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhRXh0ZXJuYWxMaW5rQWx0ID0gZmFFeHRlcm5hbExpbmtBbHQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjaGFydFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY2hhcnQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0b29sdGlwT3BlcmF0b3IgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8TmdiUG9wb3Zlcj4oJ3QnKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YSA9IGlucHV0PElDaGFydERhdGFbXT4oW10pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGVybXMgPSBpbnB1dCh7fSBhcyBJVGVybU1hcHBpbmcpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjaGFydEVycm9yID0gb3V0cHV0PEVycm9yPigpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBub2RlQ29sb3VycyA9IG5vZGVDb2xvdXJzO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5jbHVkZWRUeXBlcyA9IHNpZ25hbDxDaGFydE5vZGVUeXBlW10+KFtdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxlZ2VuZCA9IGNvbXB1dGVkKCgpID0+IGxlZ2VuZC5maWx0ZXIoKHsgdHlwZSB9KSA9PiB0aGlzLmluY2x1ZGVkVHlwZXMoKS5pbmNsdWRlcyh0eXBlKSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdG90YWxzUGVySW5kaWNhdG9yID0gY29tcHV0ZWQoKCkgPT4gc3VtSW5kaWNhdG9ycyh0aGlzLmRhdGEoKSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGluZGljYXRvcnMgPSBjb21wdXRlZCgoKSA9PiBncm91cEluZGljYXRvcnModGhpcy5kYXRhKCksIHRoaXMudGVybXMoKSwgdGhpcy50b3RhbHNQZXJJbmRpY2F0b3IoKSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGluZGljYXRvckFycmF5ID0gY29tcHV0ZWQoKCkgPT4gT2JqZWN0LnZhbHVlcyh0aGlzLmluZGljYXRvcnMoKSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpbmtlZEluZGljYXRvcnMgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuaW5kaWNhdG9yQXJyYXkoKVxuICAgICAgLy8gbGluayBlbmRwb2ludHMgdG8gbWlkcG9pbnRzIGFuZCBtaWRwb2ludHMgdG8gYW55IGNoaWxkIG1pZHBvaW50c1xuICAgICAgLm1hcChpbmRpY2F0b3IgPT4gKHtcbiAgICAgICAgLi4uaW5kaWNhdG9yLFxuICAgICAgICBjaGlsZHJlbjogaW5kaWNhdG9yLmNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgICAgICAgY29uc3QgcHJlZml4UmVtb3ZlZCA9IGluZGljYXRvci50eXBlID09PSBDaGFydE5vZGVUeXBlLmVuZHBvaW50ICYmIGNoaWxkLmxhYmVsLnNwbGl0KCcsICcpWzFdO1xuICAgICAgICAgIHJldHVybiBjaGlsZC50eXBlID09PSBDaGFydE5vZGVUeXBlLm1pZHBvaW50XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogcHJlZml4UmVtb3ZlZFxuICAgICAgICAgICAgICAgICAgPyAnWy4uLl0nICsgcHJlZml4UmVtb3ZlZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByZWZpeFJlbW92ZWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgICAgIDogY2hpbGQubGFiZWwsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuaW5kaWNhdG9ycygpW2NoaWxkLmlkXT8uY2hpbGRyZW5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBjaGlsZDtcbiAgICAgICAgfSlcbiAgICAgIH0pKVxuICAgICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZWQgaW5kaWNhdG9yc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgaW5kaWNhdG9yID0+ICF0aGlzLmluZGljYXRvckFycmF5KCkuc29tZShwYXJlbnQgPT4gcGFyZW50LmNoaWxkcmVuLnNvbWUoY2hpbGQgPT4gY2hpbGQuaWQgPT09IGluZGljYXRvci5pZCkpXG4gICAgICApXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm9uTENBSW5kaWNhdG9ycyA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5saW5rZWRJbmRpY2F0b3JzKCkuZmlsdGVyKGluZGljYXRvciA9PiBpbmRpY2F0b3IudHlwZSA9PT0gQ2hhcnROb2RlVHlwZS5taWRwb2ludClcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvdGhlckVuZHBvaW50ID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLm5vbkxDQUluZGljYXRvcnMoKS5sZW5ndGhcbiAgICAgID8ge1xuICAgICAgICAgIGlkOiBub25MQ0FJbmRpY2F0b3JzSWQsXG4gICAgICAgICAgbGFiZWw6ICdPdGhlciBpbmRpY2F0b3JzJyxcbiAgICAgICAgICB0ZXJtOiAnbi9hJyxcbiAgICAgICAgICBtb2RlbElkOiAnbi9hJyxcbiAgICAgICAgICB1bml0czogJycsXG4gICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgd2VpZ2h0ZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgICB0eXBlOiBDaGFydE5vZGVUeXBlLmVuZHBvaW50LFxuICAgICAgICAgIGZyYWN0aW9uOiBudWxsLFxuICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLm5vbkxDQUluZGljYXRvcnMoKVxuICAgICAgICB9XG4gICAgICA6IG51bGxcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHMgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMubGlua2VkSW5kaWNhdG9ycygpLmZpbHRlcihpbmRpY2F0b3IgPT4gaW5kaWNhdG9yLnR5cGUgPT09IENoYXJ0Tm9kZVR5cGUuZW5kcG9pbnQpXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRDaGlsZHJlbiA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5lbmRwb2ludHMoKS5sZW5ndGggPyBbLi4udGhpcy5lbmRwb2ludHMoKSwgdGhpcy5vdGhlckVuZHBvaW50KCldLmZpbHRlcihCb29sZWFuKSA6IHRoaXMubGlua2VkSW5kaWNhdG9ycygpXG4gICk7XG5cbiAgcHJpdmF0ZSByb290PzogSE5vZGU7XG4gIHByaXZhdGUgbm9kZTogTm9kZVNlbGVjdGlvbjtcbiAgcHJpdmF0ZSBsaW5rOiBMaW5rU2VsZWN0aW9uO1xuICBwcml2YXRlIHN2ZzogU2VsZWN0aW9uPFNWR1NWR0VsZW1lbnQsIGFueSwgSFRNTEVsZW1lbnQsIHVua25vd24+O1xuICBwcml2YXRlIHlNaW46IG51bWJlcjtcbiAgcHJpdmF0ZSB5VG90YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmIChbIWlzRW1wdHkodGhpcy5kYXRhKCkpLCAhaXNFbXB0eSh0aGlzLnRlcm1zKCkpLCB0aGlzLmNoYXJ0UmVmKCk/Lm5hdGl2ZUVsZW1lbnRdLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnJvb3QgPSBudWxsO1xuICAgICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICAgIHRoaXMubGluayA9IG51bGw7XG4gICAgICB0aGlzLmluaXRDaGFydCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmNoYXJ0RXJyb3IuZW1pdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRDaGFydCgpIHtcbiAgICBjb25zdCByb290ID0gZDNIaWVyYXJjaHk8Tm9kZURhdHVtPih7XG4gICAgICBpZDogJ2R1bW15LXJvb3QnLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgdGVybTogJycsXG4gICAgICBtb2RlbElkOiAnJyxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgd2VpZ2h0ZWRWYWx1ZTogbnVsbCxcbiAgICAgIHVuaXRzOiAnJyxcbiAgICAgIHR5cGU6IENoYXJ0Tm9kZVR5cGUucm9vdCxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoYXJ0Q2hpbGRyZW4oKVxuICAgIH0pO1xuXG4gICAgdGhpcy5pbmNsdWRlZFR5cGVzLnNldCh1bmlxdWUocm9vdC5kZXNjZW5kYW50cygpLm1hcChuID0+IG4uZGF0YS50eXBlKSkpO1xuXG4gICAgdGhpcy5yb290ID0gcm9vdFxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIuZGF0YS5mcmFjdGlvbiAtIGEuZGF0YS5mcmFjdGlvbilcbiAgICAgIC5lYWNoQWZ0ZXIobm9kZSA9PiB7XG4gICAgICAgIGlmIChub2RlLmRhdGEuZnJhY3Rpb24gPT09IDApIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuID0gbnVsbDtcbiAgICAgICAgICAobm9kZS5oZWlnaHQgYXMgbnVtYmVyKSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5kYXRhLnR5cGUgIT09IENoYXJ0Tm9kZVR5cGUucm9vdCAmJiBjb2xsYXBzZUNoaWxkcmVuKG5vZGUpO1xuICAgICAgICBncm91cEJ5UGVyY2VudGFnZShub2RlKSAmJiBncm91cFBlcmNlbnRhZ2Uobm9kZSk7XG4gICAgICAgIG5vZGUuZGF0YS5zaG93QmFyID0gc2hvd0Jhcihub2RlKTtcbiAgICAgICAgbm9kZS5kYXRhLm1vZGVsTmFtZSA9IHRoaXMudGVybXMoKT8uW25vZGUuZGF0YS5tb2RlbElkXT8ubmFtZTtcbiAgICAgICAgbm9kZS5kYXRhLm1vZGVsRG9jcyA9IHRoaXMudGVybXMoKT8uW25vZGUuZGF0YS5tb2RlbElkXT8uZG9jcztcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5yZW5kZXJDaGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDaGFydCgpIHtcbiAgICB0aGlzLnN2ZyA9IGQzU2VsZWN0KHRoaXMuY2hhcnRSZWYoKT8ubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5zdmcuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7XG4gICAgLy8gcm9vdCBub2RlIGlzIGFsd2F5cyBwb3NpdGlvbmVkIGF0IOKfqDAsIDDin6lcbiAgICBjb25zdCBpbm5lckhlaWdodCA9ICh0aGlzLnJvb3QuY2hpbGRyZW4ubGVuZ3RoIC0gMSkgKiBub2RlSGVpZ2h0ICogbm9kZVNwYWNpbmdGYWN0b3IgKyBub2RlSGVpZ2h0O1xuICAgIHRoaXMueU1pbiA9IChub2RlSGVpZ2h0IC0gaW5uZXJIZWlnaHQpIC8gMiAtIG1hcmdpbi50b3A7XG4gICAgdGhpcy55VG90YWwgPSBpbm5lckhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tO1xuICAgIHRoaXMuc3ZnXG4gICAgICAuYXR0cigndmlld0JveCcsIFstbWFyZ2luLmxlZnQsIHRoaXMueU1pbiwgd2lkdGgsIHRoaXMueVRvdGFsXS5qb2luKCcgJykpXG4gICAgICAuYXR0cignZm9udC1zaXplJywgYCR7Zm9udFNpemV9cHhgKTtcblxuICAgIHRoaXMubm9kZSA9IHRoaXMuc3ZnLmFwcGVuZCgnZycpLnNlbGVjdEFsbCgnZycpO1xuICAgIHRoaXMubGluayA9IHRoaXMuc3ZnLmFwcGVuZCgnZycpLnNlbGVjdEFsbCgncGF0aCcpO1xuXG4gICAgdGhpcy5oYW5kbGVOb2RlQ2xpY2soXG4gICAgICBudWxsLFxuICAgICAgdGhpcy5yb290LmZpbmQobm9kZSA9PiBub2RlLmRlcHRoID09PSAxKVxuICAgICk7XG4gIH1cblxuICAvLyBmbGlwIHgveSB0byBnbyBsZWZ0LXJpZ2h0IGluc3RlYWQgb2YgdG9wLWJvdHRvbVxuICBwcml2YXRlIHVwZGF0ZUNoYXJ0KHsgdG9nZ2xpbmdHcm91cCA9IGZhbHNlLCBzd2l0Y2hpbmdTZWxlY3Rpb24gPSBmYWxzZSB9ID0ge30pIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xuICAgIGNvbnN0IHRyZWVMYXlvdXQgPSBkM1RyZWU8Tm9kZURhdHVtPigpXG4gICAgICAubm9kZVNpemUoW25vZGVIZWlnaHQsIG5vZGVXaWR0aF0pXG4gICAgICAuc2VwYXJhdGlvbigoLi4ubmVpZ2hib3VyczogQ2hhcnROb2RlW10pID0+XG4gICAgICAgIG5laWdoYm91cnMuc29tZShuID0+IG4uZGF0YS5ncm91cCAmJiBuLl9ncm91cE9wZW4pID8gMSAtIGdyb3VwT3ZlcmxhcCAvIG5vZGVIZWlnaHQgOiBub2RlU3BhY2luZ0ZhY3RvclxuICAgICAgKTtcbiAgICBjb25zdCB0cmVlOiBDaGFydE5vZGUgPSB0cmVlTGF5b3V0KHJvb3QpO1xuICAgIGNvbnN0IGxpbmtzOiBMaW5rW10gPSB0cmVlLmxpbmtzKCkuZmlsdGVyKGQgPT4gZC5zb3VyY2UuZGF0YS50eXBlICE9PSBDaGFydE5vZGVUeXBlLnJvb3QpIHx8IFtdO1xuICAgIGNvbnN0IG5vZGVzID0gdHJlZS5kZXNjZW5kYW50cygpLnJldmVyc2UoKTtcblxuICAgIG5vZGVzLmZvckVhY2goZCA9PiB7XG4gICAgICBkLnkgPVxuICAgICAgICAoZC5kZXB0aCAtIDEgKyAoT2JqZWN0LmtleXMoQ2hhcnROb2RlVHlwZSkubGVuZ3RoIC0gMSAtIHRoaXMubGVnZW5kKCkubGVuZ3RoKSAvIDIpICogKG5vZGVXaWR0aCArIGxheWVyU3BhY2luZyk7XG4gICAgfSk7XG5cbiAgICAvLyBCeSBkZWZhdWx0IHRoZSB0cmVlIGV4cGFuZHMgc3ltbWV0cmljYWxseSB1cHdhcmRzIGFuZCBkb3dud2FyZHMgZnJvbSB0aGUgc2VsZWN0ZWQgbm9kZS5cbiAgICAvLyBXZSBtb3ZlIGNoaWxkcmVuIGRvd24gdG8gcHJldmVudCBleHBhbnNpb24gdXB3YXJkcyBvciB1cCB0byBtaW5pbWlzZSBleHBhbnNpb24gZG93bndhcmRzXG4gICAgY29uc3QgbWluaW1pc2VIZWlnaHQgPSAoeyBwcmV2aW91c1RhbnNsYXRlWSwgcHJldmlvdXNZVG90YWwgfSwgZGVwdGg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgbWF4WVRvdGFsID0gTWF0aC5tYXgocHJldmlvdXNZVG90YWwsIHRoaXMueVRvdGFsKTtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRyZWUuZmluZChub2RlID0+IG5vZGUuZGVwdGggPT09IGRlcHRoIC0gMSAmJiBub2RlLl9vcGVuKTtcbiAgICAgIHBhcmVudD8uY2hpbGRyZW4/LmZvckVhY2gobm9kZSA9PiAobm9kZS54ICs9IHByZXZpb3VzVGFuc2xhdGVZKSk7XG5cbiAgICAgIGNvbnN0IHsgbWluOiBtaW5YLCBtYXg6IG1heFggfSA9IChwYXJlbnQ/LmNoaWxkcmVuIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgICh7IG1pbiwgbWF4IH0sIG4pID0+ICh7XG4gICAgICAgICAgbWluOiBuLnggPCBtaW4gPyBuLnggOiBtaW4sXG4gICAgICAgICAgbWF4OiBuLnggPiBtYXggPyBuLnggOiBtYXhcbiAgICAgICAgfSksXG4gICAgICAgIHsgbWluOiBwYXJlbnQ/LngsIG1heDogcGFyZW50Py54IH1cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHsgeU1pbiwgeVRvdGFsIH0gPSBwYXJlbnQ/LmNoaWxkcmVuPy5sZW5ndGhcbiAgICAgICAgPyB7IHlNaW46IG1pblggLSBtYXJnaW4udG9wLCB5VG90YWw6IG1heFggLSBtaW5YICsgbWFyZ2luLmJvdHRvbSArIG1hcmdpbi50b3AgKyBub2RlSGVpZ2h0IH1cbiAgICAgICAgOiB7IHlNaW46IG51bGwsIHlUb3RhbDogbnVsbCB9O1xuXG4gICAgICBjb25zdCBvdmVyZmxvd0Fib3ZlID0gdGhpcy55TWluIC0geU1pbjsgLy8gcG9zaXRpdmUgd2hlbiBvdmVyZmxvd3MgYWJvdmVcbiAgICAgIGNvbnN0IG92ZXJmbG93QmVsb3cgPSB5VG90YWwgKyB5TWluIC0gKG1heFlUb3RhbCArIHRoaXMueU1pbik7IC8vIHBvc2l0aXZlIHdoZW4gb3ZlcmZsb3dzIGJlbG93XG4gICAgICAvLyAtIHRyYW5zbGF0ZVkgd2hlbiBvdmVyZmxvd3MgYWJvdmU6IHBvc2l0aXZlXG4gICAgICAvLyAtIHRyYW5zbGF0ZVkgd2hlbiBvdmVyZmxvd3MgYmVsb3c6IG5lZ2F0aXZlIGJ5IHNtYWxsZXN0IG9mIHVuZGVyZmxvdyBhYm92ZSBvciBvdmVyZmxvdyBiZWxvd1xuICAgICAgLy8gLSB0cmFuc2xhdGVZIHdoZW4gbm8gb3ZlcmZsb3c6IDBcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZVkgPVxuICAgICAgICBvdmVyZmxvd0Fib3ZlID4gMCA/IG92ZXJmbG93QWJvdmUgOiBvdmVyZmxvd0JlbG93ID4gMCA/IE1hdGgubWF4KC1vdmVyZmxvd0JlbG93LCBvdmVyZmxvd0Fib3ZlKSA6IDA7XG5cbiAgICAgIHBhcmVudD8uY2hpbGRyZW4/LmZvckVhY2gobm9kZSA9PiAobm9kZS54ICs9IHRyYW5zbGF0ZVkpKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJldmlvdXNZVG90YWw6IE1hdGgubWF4KHlUb3RhbCwgcHJldmlvdXNZVG90YWwpLFxuICAgICAgICBwcmV2aW91c1RhbnNsYXRlWTogdHJhbnNsYXRlWSArIHByZXZpb3VzVGFuc2xhdGVZXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCB7IHByZXZpb3VzWVRvdGFsOiBuZXdIZWlnaHQgfSA9IFsyLCAzLCA0LCA1XS5yZWR1Y2UobWluaW1pc2VIZWlnaHQsIHtcbiAgICAgIHByZXZpb3VzVGFuc2xhdGVZOiAwLFxuICAgICAgcHJldmlvdXNZVG90YWw6IHRoaXMueVRvdGFsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN2Zy50cmFuc2l0aW9uKCkuZHVyYXRpb24oMzAwKS5hdHRyKCd2aWV3Qm94JywgWy1tYXJnaW4ubGVmdCwgdGhpcy55TWluLCB3aWR0aCwgbmV3SGVpZ2h0XS5qb2luKCcgJykpO1xuXG4gICAgdGhpcy5ub2RlID0gdGhpcy5ub2RlXG4gICAgICAuZGF0YShcbiAgICAgICAgbm9kZXMsXG4gICAgICAgIGQgPT4gYCR7ZC5wYXJlbnQ/LnBhcmVudD8ucGFyZW50Py5kYXRhLmlkfS0ke2QucGFyZW50Py5wYXJlbnQ/LmRhdGEuaWR9LSR7ZC5wYXJlbnQ/LmRhdGEuaWR9LSR7ZC5kYXRhLmlkfWBcbiAgICAgIClcbiAgICAgIC5qb2luKFxuICAgICAgICBlbnRlciA9PlxuICAgICAgICAgIGVudGVyXG4gICAgICAgICAgICAuYXBwZW5kKCdnJylcbiAgICAgICAgICAgIC5jYWxsKGVudGVyTm9kZXMpXG4gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgZCA9PiAndHJhbnNsYXRlKCcgKyAodG9nZ2xpbmdHcm91cCA/IGQueSA6IGQueSAtIG5vZGVXaWR0aCAvIDIpICsgJywnICsgZC54ICsgJyknKSxcbiAgICAgICAgdXBkYXRlID0+IHVwZGF0ZSxcbiAgICAgICAgZXhpdCA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMudG9vbHRpcE9wZXJhdG9yKCkuY2xvc2UoZmFsc2UpKTtcbiAgICAgICAgICByZXR1cm4gZXhpdFxuICAgICAgICAgICAgLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdub25lJylcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgIC5kdXJhdGlvbihub2RlRHVyYXRpb24gLyAyKVxuICAgICAgICAgICAgLmRlbGF5KGQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGQucGFyZW50Py5jaGlsZHJlbiB8fCBkLnBhcmVudD8uX2NoaWxkcmVuO1xuICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkcmVuPy5sZW5ndGggLSBjaGlsZHJlbj8uaW5kZXhPZihkKSAtIDEpICogMTA7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmVhc2UoZDNFYXNlRWxhc3RpY0luLmFtcGxpdHVkZSgwLjUpLnBlcmlvZCgxKSlcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBkID0+ICd0cmFuc2xhdGUoJyArICh0b2dnbGluZ0dyb3VwID8gZC55IDogZC55IC0gbm9kZVdpZHRoIC8gMikgKyAnLCcgKyBkLnggKyAnKScpXG4gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAucmVtb3ZlKClcbiAgICAgICAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAvLyBpbiBjYXNlIGEgdG9vbHRpcCB3YXMgb3BlbmVkIG9uIGEgdHJhbnNpdGlvbmluZyBlbGVtZW50XG4gICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLnRvb2x0aXBPcGVyYXRvcigpLmNsb3NlKGZhbHNlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgIHRoaXMubm9kZVxuICAgICAgLmNhbGwobWVyZ2VkTm9kZXMsIHsgdG9vbHRpcE9wZXJhdG9yOiB0aGlzLnRvb2x0aXBPcGVyYXRvcigpLCB6b25lOiB0aGlzLm5nWm9uZSB9KVxuICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgLmRlbGF5KGQgPT4ge1xuICAgICAgICBjb25zdCBncm91cENsb3NpbmcgPSB0b2dnbGluZ0dyb3VwICYmICFkLnBhcmVudD8uY2hpbGRyZW4/LmZpbmQobiA9PiBuLmRhdGEuZ3JvdXApPy5fZ3JvdXBPcGVuO1xuICAgICAgICByZXR1cm4gZ3JvdXBDbG9zaW5nID8gZ3JvdXBEZWxheSA6IChzd2l0Y2hpbmdTZWxlY3Rpb24gPyBub2RlRHVyYXRpb24gOiAwKSArIGQucGFyZW50Py5jaGlsZHJlbi5pbmRleE9mKGQpICogMTA7XG4gICAgICB9KVxuICAgICAgLmR1cmF0aW9uKG5vZGVEdXJhdGlvbilcbiAgICAgIC5lYXNlKGQzRWFzZUVsYXN0aWNPdXQuYW1wbGl0dWRlKDAuNSkucGVyaW9kKDEpKVxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGQgPT4gYHRyYW5zbGF0ZSgke2QueX0sJHtkLnh9KWApXG4gICAgICAuYXR0cignb3BhY2l0eScsIDEpO1xuXG4gICAgdGhpcy5ub2RlLnNlbGVjdEFsbCgnLm5vZGUtb3BlbmFibGUnKS5vbignY2xpY2snLCB0aGlzLmhhbmRsZU5vZGVDbGljay5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLm5vZGUuc2VsZWN0QWxsKCcuZ3JvdXAtYnV0dG9uJykub24oJ2NsaWNrJywgdGhpcy5oYW5kbGVHcm91cEJ1dHRvbkNsaWNrLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5saW5rID0gdGhpcy5saW5rXG4gICAgICAuZGF0YShcbiAgICAgICAgbGlua3MsXG4gICAgICAgIGQgPT4gYCR7ZC5zb3VyY2UucGFyZW50Py5wYXJlbnQ/LmRhdGEuaWR9LSR7ZC5zb3VyY2UucGFyZW50Py5kYXRhLmlkfS0ke2Quc291cmNlLmRhdGEuaWR9LSR7ZC50YXJnZXQuZGF0YS5pZH1gXG4gICAgICApXG4gICAgICAuam9pbihcbiAgICAgICAgZW50ZXIgPT4gZW50ZXIuYXBwZW5kKCdwYXRoJykuY2xhc3NlZCgnbGluay1wYXRoJywgdHJ1ZSkuYXR0cignb3BhY2l0eScsIDApLFxuICAgICAgICB1cGRhdGUgPT4gdXBkYXRlLFxuICAgICAgICBleGl0ID0+XG4gICAgICAgICAgZXhpdFxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKGxpbmtEdXJhdGlvbiAvIDIpXG4gICAgICAgICAgICAuZGVsYXkoZCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZC5zb3VyY2UucGFyZW50Py5jaGlsZHJlbiB8fCBkLnNvdXJjZS5wYXJlbnQ/Ll9jaGlsZHJlbjtcbiAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZHJlbj8ubGVuZ3RoIC0gY2hpbGRyZW4/LmluZGV4T2YoZC50YXJnZXQpIC0gMSkgKiAxMDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAucmVtb3ZlKClcbiAgICAgIClcbiAgICAgIC5jYWxsKG1lcmdlZExpbmtzLCB7IHRvZ2dsaW5nR3JvdXAsIHN3aXRjaGluZ1NlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR3JvdXBCdXR0b25DbGljayhfZXZlbnQ6IGFueSwgZDogQ2hhcnROb2RlKSB7XG4gICAgaWYgKGQuX2dyZXllZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkLl9ncm91cE9wZW4gPSAhZC5fZ3JvdXBPcGVuO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZC5wYXJlbnQuX2dyb3VwQ2hpbGRyZW47XG4gICAgZC5wYXJlbnQuX2dyb3VwQ2hpbGRyZW4gPSBkLnBhcmVudC5jaGlsZHJlbjtcbiAgICBkLnBhcmVudC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMudXBkYXRlQ2hhcnQoeyB0b2dnbGluZ0dyb3VwOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOb2RlQ2xpY2soX2V2ZW50OiBhbnksIGQ6IENoYXJ0Tm9kZSB8IEhOb2RlKTogdm9pZCB7XG4gICAgZC5fb3BlbiA9ICFkLl9vcGVuO1xuICAgIGNvbnN0IHN3aXRjaGluZ1NlbGVjdGlvbiA9ICdfZ3JleWVkJyBpbiBkICYmIGQuX2dyZXllZDtcbiAgICBkLnBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGNoaWxkLl9ncmV5ZWQgPSBmYWxzZTtcbiAgICAgIGlmIChjaGlsZCAhPT0gZCkge1xuICAgICAgICBjaGlsZC5fb3BlbiA9IGZhbHNlO1xuICAgICAgICBjb2xsYXBzZUNoaWxkcmVuKGNoaWxkKTtcbiAgICAgICAgY2hpbGQuX2dyZXllZCA9IGQuX29wZW47XG4gICAgICB9XG4gICAgfSk7XG4gICAgZC5jaGlsZHJlbiA/IGNvbGxhcHNlQ2hpbGRyZW4oZCkgOiByZXN0b3JlQ2hpbGRyZW4oZCk7XG4gICAgdGhpcy51cGRhdGVDaGFydCh7IHN3aXRjaGluZ1NlbGVjdGlvbiB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtY2VudGVyZWQgcHktMiBpcy1zaXplLTcgaXMtbW9iaWxlIGlzLW11bHRpbGluZVwiPlxuICBAZm9yIChsZWdlbmRJdGVtIG9mIGxlZ2VuZCgpOyB0cmFjayBsZWdlbmRJdGVtLnR5cGUpIHtcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBweS0wIGlzLWZsZXgtbW9iaWxlIGlzLWZsZXgtZGlyZWN0aW9uLWNvbHVtbiBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgfCBpcy1sZWdlbmQtaXRlbVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2stdGFibGV0IGlzLWFsaWduLW1pZGRsZSB8IGtleS1jb2xvdXJcIlxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIm5vZGVDb2xvdXJzW2xlZ2VuZEl0ZW0udHlwZV1cIj48L3NwYW4+XG4gICAgICA8c3Ryb25nIGNsYXNzPVwiaGFzLXRleHQtYmxhY2sgaXMtYWxpZ24tbWlkZGxlIGlzLXBsLXRhYmxldC0yIGlzLXNpemUtOC1tb2JpbGVcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1oaWRkZW4tZGVza3RvcFwiPnt7IGxlZ2VuZEl0ZW0ubW9iaWxlVGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1oaWRkZW4tdG91Y2hcIj57eyBsZWdlbmRJdGVtLnRleHQgfX08L3NwYW4+XG4gICAgICA8L3N0cm9uZz5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJjaGFydC1jb250YWluZXIgaXMtcmVsYXRpdmUgdy0xMDBcIj5cbiAgPHN2ZyBjbGFzcz1cInctMTAwIGgtMTAwXCIgI2NoYXJ0Pjwvc3ZnPlxuXG4gIDxzcGFuXG4gICAgY2xhc3M9XCJpcy1oaWRkZW5cIlxuICAgIFtuZ2JQb3BvdmVyXT1cInRpcENvbnRlbnRcIlxuICAgIHRyaWdnZXJzPVwibWFudWFsXCJcbiAgICBwbGFjZW1lbnQ9XCJyaWdodCBsZWZ0IGF1dG9cIlxuICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICN0PVwibmdiUG9wb3ZlclwiXG4gICAgcG9zaXRpb25UYXJnZXQ9XCIudGlwLXRhcmdldFwiXG4gICAgcG9wb3ZlckNsYXNzPVwiaXMtbmFycm93IGRyaXZlci1jaGFydC10b29sdGlwXCJcbiAgICBbYW5pbWF0aW9uXT1cInRydWVcIj48L3NwYW4+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0aXBDb250ZW50IGxldC10aXBEYXRhPVwidGlwRGF0YVwiPlxuICBAaWYgKHRpcERhdGEuaGFzV2VpZ2h0ZWRWYWx1ZSkge1xuICAgIDxwPmNvbnRyaWJ1dGlvbjoge3sgdGlwRGF0YS53ZWlnaHRlZFZhbHVlVGV4dCB9fTwvcD5cbiAgfVxuICA8cD5cbiAgICA8YSBjbGFzcz1cImlzLWRhcmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbaHJlZl09XCJ0aXBEYXRhLnZhbHVlS2V5SHJlZlwiPnZhbHVlPC9hPlxuICAgIDoge3sgdGlwRGF0YS52YWx1ZVZhbHVlVGV4dCB9fVxuICAgIEBpZiAodGlwRGF0YS5oYXNWYWx1ZSkge1xuICAgICAgPGEgY2xhc3M9XCJpcy1kYXJrXCIgW2hyZWZdPVwidGlwRGF0YS5tb2RlbERvY3NIcmVmXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgIDxzcGFuPkRvY3M8L3NwYW4+XG4gICAgICAgIDxmYS1pY29uIGNsYXNzPVwibWwtMVwiIFtpY29uXT1cImZhRXh0ZXJuYWxMaW5rQWx0XCIgc2l6ZT1cInNtXCIgLz5cbiAgICAgIDwvYT5cbiAgICB9XG4gIDwvcD5cbiAgPHA+XG4gICAgPGEgY2xhc3M9XCJpcy1kYXJrXCIgdGFyZ2V0PVwiX2JsYW5rXCIgW2hyZWZdPVwidGlwRGF0YS5tb2RlbEtleUhyZWZcIj5tZXRob2RNb2RlbDwvYT5cbiAgICA6XG4gICAgPGEgY2xhc3M9XCJpcy1kYXJrXCIgdGFyZ2V0PVwiX2JsYW5rXCIgW2hyZWZdPVwidGlwRGF0YS5tb2RlbFZhbHVlSHJlZlwiPnt7IHRpcERhdGEubW9kZWxWYWx1ZSB9fTwvYT5cbiAgPC9wPlxuICA8cD5cbiAgICA8YSBjbGFzcz1cImlzLWRhcmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbaHJlZl09XCJ0aXBEYXRhLnRlcm1LZXlIcmVmXCI+dGVybTwvYT5cbiAgICA6XG4gICAgPGEgY2xhc3M9XCJpcy1kYXJrXCIgdGFyZ2V0PVwiX2JsYW5rXCIgW2hyZWZdPVwidGlwRGF0YS50ZXJtVmFsdWVIcmVmXCI+e3sgdGlwRGF0YS50ZXJtVmFsdWUgfX08L2E+XG4gIDwvcD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -45,7 +45,7 @@ export class NodeLogsFileComponent {
|
|
|
45
45
|
?.filter(({ code }) => (!this.modelFilter() || code.toLocaleLowerCase().includes(`model=${this.modelFilter().toLowerCase()}`)) &&
|
|
46
46
|
(!this.termFilter() || code.toLocaleLowerCase().includes(`term=${this.termFilter().toLowerCase()}`))));
|
|
47
47
|
this.csvContent = computed(() => this.domSanitizer.bypassSecurityTrustResourceUrl(`data:text/html;charset=utf-8,${encodeURIComponent(logToCsv(this.allLogs()))}`));
|
|
48
|
-
this.csvFilename = computed(() => fileToExt(this.node()?.['@id'], 'csv'));
|
|
48
|
+
this.csvFilename = computed(() => fileToExt(this.node()?.['@id'] ?? '', 'csv'));
|
|
49
49
|
}
|
|
50
50
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NodeLogsFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
51
51
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: NodeLogsFileComponent, isStandalone: true, selector: "he-node-logs-file", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"is-relative\">\n <div class=\"copy-clipboard\">\n <div class=\"field has-addons\">\n @if (showFilters()) {\n <div class=\"control\">\n <input\n class=\"input is-secondary is-small\"\n [ngModel]=\"modelFilter()\"\n id=\"modelFilter\"\n (input)=\"modelFilter.set($event.target.value)\"\n placeholder=\"Filter by Method / Model\" />\n </div>\n <div class=\"control\">\n <input\n class=\"input is-secondary is-small\"\n [ngModel]=\"termFilter()\"\n id=\"termFilter\"\n (input)=\"termFilter.set($event.target.value)\"\n placeholder=\"Filter by Term\" />\n </div>\n <div class=\"control\">\n <div class=\"select is-secondary is-small\">\n <select [ngModel]=\"selectedLevel()\" (change)=\"selectedLevel.set($event.target.value)\" id=\"selectedLevel\">\n @for (level of Level | keyvalue; track level) {\n <option [value]=\"level.value\">{{ level.value }}</option>\n }\n </select>\n </div>\n </div>\n }\n <div class=\"control\">\n <button\n class=\"button is-small\"\n (click)=\"showFilters.set(!showFilters())\"\n [ngbTooltip]=\"showFilters() ? 'Hide filters' : 'Show filters'\"\n placement=\"bottom\"\n container=\"body\">\n <fa-icon [icon]=\"faFilter\" />\n </button>\n </div>\n <div class=\"control\">\n <he-clipboard\n clipboardClass=\"button is-secondary is-small\"\n [value]=\"nodeLog()\"\n [hideText]=\"true\"\n [icon]=\"farClone\"\n size=\"lg\"\n rotate=\"180\"></he-clipboard>\n </div>\n <div class=\"control\">\n <a class=\"button is-info is-small\" target=\"_blank\" [href]=\"csvContent()\" [download]=\"csvFilename()\">\n <fa-icon [icon]=\"faDownload\" />\n </a>\n </div>\n </div>\n </div>\n\n <pre class=\"pl-3 pt-3 ml-3\">\n @for (line of nodeLogLines(); track line) {\n <code class=\"is-block {{line.class}}\">{{line.data.timestamp}} {{('[' + line.data.level + ']:').padEnd(9, ' ')}} {{line.data.message}}</code>\n }\n </pre>\n</div>\n", styles: [":host{display:block}pre{background-color:inherit;color:inherit;min-height:38px;max-height:500px;font-size:0}pre>code{font-size:.875rem;line-height:20px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "component", type: ClipboardComponent, selector: "he-clipboard", inputs: ["icon", "value", "disabled", "hideText", "size", "rotate", "clipboardClass"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
@@ -54,4 +54,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
|
54
54
|
type: Component,
|
|
55
55
|
args: [{ selector: 'he-node-logs-file', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FormsModule, NgbTooltip, FaIconComponent, ClipboardComponent, KeyValuePipe], template: "<div class=\"is-relative\">\n <div class=\"copy-clipboard\">\n <div class=\"field has-addons\">\n @if (showFilters()) {\n <div class=\"control\">\n <input\n class=\"input is-secondary is-small\"\n [ngModel]=\"modelFilter()\"\n id=\"modelFilter\"\n (input)=\"modelFilter.set($event.target.value)\"\n placeholder=\"Filter by Method / Model\" />\n </div>\n <div class=\"control\">\n <input\n class=\"input is-secondary is-small\"\n [ngModel]=\"termFilter()\"\n id=\"termFilter\"\n (input)=\"termFilter.set($event.target.value)\"\n placeholder=\"Filter by Term\" />\n </div>\n <div class=\"control\">\n <div class=\"select is-secondary is-small\">\n <select [ngModel]=\"selectedLevel()\" (change)=\"selectedLevel.set($event.target.value)\" id=\"selectedLevel\">\n @for (level of Level | keyvalue; track level) {\n <option [value]=\"level.value\">{{ level.value }}</option>\n }\n </select>\n </div>\n </div>\n }\n <div class=\"control\">\n <button\n class=\"button is-small\"\n (click)=\"showFilters.set(!showFilters())\"\n [ngbTooltip]=\"showFilters() ? 'Hide filters' : 'Show filters'\"\n placement=\"bottom\"\n container=\"body\">\n <fa-icon [icon]=\"faFilter\" />\n </button>\n </div>\n <div class=\"control\">\n <he-clipboard\n clipboardClass=\"button is-secondary is-small\"\n [value]=\"nodeLog()\"\n [hideText]=\"true\"\n [icon]=\"farClone\"\n size=\"lg\"\n rotate=\"180\"></he-clipboard>\n </div>\n <div class=\"control\">\n <a class=\"button is-info is-small\" target=\"_blank\" [href]=\"csvContent()\" [download]=\"csvFilename()\">\n <fa-icon [icon]=\"faDownload\" />\n </a>\n </div>\n </div>\n </div>\n\n <pre class=\"pl-3 pt-3 ml-3\">\n @for (line of nodeLogLines(); track line) {\n <code class=\"is-block {{line.class}}\">{{line.data.timestamp}} {{('[' + line.data.level + ']:').padEnd(9, ' ')}} {{line.data.message}}</code>\n }\n </pre>\n</div>\n", styles: [":host{display:block}pre{background-color:inherit;color:inherit;min-height:38px;max-height:500px;font-size:0}pre>code{font-size:.875rem;line-height:20px}\n"] }]
|
|
56
56
|
}] });
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLWZpbGUvbm9kZS1sb2dzLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLWZpbGUvbm9kZS1sb2dzLWZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBYSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsT0FBTyxJQUFJLFFBQVEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFD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bnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEtleVZhbHVlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IERhdGFTdGF0ZSwgZmlsZVRvRXh0IH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSlNPTkxELCBOb2RlVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IEZhSWNvbkNvbXBvbmVudCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IGZhRG93bmxvYWQsIGZhRmlsdGVyIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcbmltcG9ydCB7IGZhQ2xvbmUgYXMgZmFyQ2xvbmUgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1yZWd1bGFyLXN2Zy1pY29ucyc7XG5pbXBvcnQgeyBOZ2JUb29sdGlwIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIG1lcmdlTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEhlTm9kZVNlcnZpY2UgfSBmcm9tICcuLi9ub2RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGV2ZWwsIGxldmVscywgcGFyc2VMaW5lcywgbG9nVG9Dc3YgfSBmcm9tICcuLi8uLi9jb21tb24vbG9ncy11dGlscyc7XG5pbXBvcnQgeyBDbGlwYm9hcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vY2xpcGJvYXJkL2NsaXBib2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWREZWVwIH0gZnJvbSAnLi4vLi4vY29tbW9uL3J4anMtdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1ub2RlLWxvZ3MtZmlsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLWxvZ3MtZmlsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25vZGUtbG9ncy1maWxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIE5nYlRvb2x0aXAsIEZhSWNvbkNvbXBvbmVudCwgQ2xpcGJvYXJkQ29tcG9uZW50LCBLZXlWYWx1ZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVMb2dzRmlsZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9tU2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm9kZVNlcnZpY2UgPSBpbmplY3QoSGVOb2RlU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhRmlsdGVyID0gZmFGaWx0ZXI7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYURvd25sb2FkID0gZmFEb3dubG9hZDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhckNsb25lID0gZmFyQ2xvbmU7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5vZGUgPSBpbnB1dC5yZXF1aXJlZDxKU09OTEQ8Tm9kZVR5cGU+PigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YVN0YXRlID0gaW5wdXQ8RGF0YVN0YXRlPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbm9kZUxvZyQgPSBjb21iaW5lTGF0ZXN0KFt0b09ic2VydmFibGUodGhpcy5ub2RlKSwgdG9PYnNlcnZhYmxlKHRoaXMuZGF0YVN0YXRlKV0pLnBpcGUoXG4gICAgZmlsdGVyKHZhbHVlcyA9PiB2YWx1ZXMuZXZlcnkodiA9PiAhaXNVbmRlZmluZWQodikpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZERlZXAoKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nLnNldCh0cnVlKSksXG4gICAgbWVyZ2VNYXAoKFtub2RlLCBkYXRhU3RhdGVdKSA9PlxuICAgICAgdGhpcy5ub2RlU2VydmljZS5nZXRMb2ckKHtcbiAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgZGF0YVN0YXRlXG4gICAgICB9KVxuICAgICksXG4gICAgbWFwKHZhbHVlID0+IHZhbHVlIHx8ICdObyBsb2dzLicpLFxuICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKSlcbiAgKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5vZGVMb2cgPSB0b1NpZ25hbCh0aGlzLm5vZGVMb2ckKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxMb2dzJCA9IHRoaXMubm9kZUxvZyQucGlwZShcbiAgICBtYXAodmFsdWUgPT4gcGFyc2VMaW5lcyh2YWx1ZSkuZmlsdGVyKCh7IGRhdGEgfSkgPT4gZGF0YS5sb2dnZXIgPT09ICdoZXN0aWFfZWFydGgubW9kZWxzJykpXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsTG9ncyA9IHRvU2lnbmFsKHRoaXMuYWxsTG9ncyQpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBMZXZlbCA9IExldmVsO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzaG93RmlsdGVycyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBtb2RlbEZpbHRlciA9IHNpZ25hbCgnJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0ZXJtRmlsdGVyID0gc2lnbmFsKCcnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkTGV2ZWwgPSBzaWduYWwoTGV2ZWwuaW5mbyk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbGVUb0V4dCA9IGZpbGVUb0V4dDtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbm9kZUxvZ0xpbmVzID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmFsbExvZ3MoKVxuICAgICAgPy5maWx0ZXIoKHsgbGV2ZWwgfSkgPT4gbGV2ZWxzLmluZGV4T2YobGV2ZWwpID49IGxldmVscy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRMZXZlbCgpKSlcbiAgICAgID8uZmlsdGVyKFxuICAgICAgICAoeyBjb2RlIH0pID0+XG4gICAgICAgICAgKCF0aGlzLm1vZGVsRmlsdGVyKCkgfHwgY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKGBtb2RlbD0ke3RoaXMubW9kZWxGaWx0ZXIoKS50b0xvd2VyQ2FzZSgpfWApKSAmJlxuICAgICAgICAgICghdGhpcy50ZXJtRmlsdGVyKCkgfHwgY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKGB0ZXJtPSR7dGhpcy50ZXJtRmlsdGVyKCkudG9Mb3dlckNhc2UoKX1gKSlcbiAgICAgIClcbiAgKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNzdkNvbnRlbnQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChcbiAgICAgIGBkYXRhOnRleHQvaHRtbDtjaGFyc2V0PXV0Zi04LCR7ZW5jb2RlVVJJQ29tcG9uZW50KGxvZ1RvQ3N2KHRoaXMuYWxsTG9ncygpKSl9YFxuICAgIClcbiAgKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNzdkZpbGVuYW1lID0gY29tcHV0ZWQoKCkgPT4gZmlsZVRvRXh0KHRoaXMubm9kZSgpPy5bJ0BpZCddLCAnY3N2JykpO1xufVxuIiwiPGRpdiBjbGFzcz1cImlzLXJlbGF0aXZlXCI+XG4gIDxkaXYgY2xhc3M9XCJjb3B5LWNsaXBib2FyZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zXCI+XG4gICAgICBAaWYgKHNob3dGaWx0ZXJzKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQgaXMtc2Vjb25kYXJ5IGlzLXNtYWxsXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm1vZGVsRmlsdGVyKClcIlxuICAgICAgICAgICAgaWQ9XCJtb2RlbEZpbHRlclwiXG4gICAgICAgICAgICAoaW5wdXQpPVwibW9kZWxGaWx0ZXIuc2V0KCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGJ5IE1ldGhvZCAvIE1vZGVsXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImlucHV0IGlzLXNlY29uZGFyeSBpcy1zbWFsbFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJ0ZXJtRmlsdGVyKClcIlxuICAgICAgICAgICAgaWQ9XCJ0ZXJtRmlsdGVyXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJ0ZXJtRmlsdGVyLnNldCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBieSBUZXJtXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdCBpcy1zZWNvbmRhcnkgaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxzZWxlY3QgW25nTW9kZWxdPVwic2VsZWN0ZWRMZXZlbCgpXCIgKGNoYW5nZSk9XCJzZWxlY3RlZExldmVsLnNldCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIGlkPVwic2VsZWN0ZWRMZXZlbFwiPlxuICAgICAgICAgICAgICBAZm9yIChsZXZlbCBvZiBMZXZlbCB8IGtleXZhbHVlOyB0cmFjayBsZXZlbCkge1xuICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImxldmVsLnZhbHVlXCI+e3sgbGV2ZWwudmFsdWUgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICAoY2xpY2spPVwic2hvd0ZpbHRlcnMuc2V0KCFzaG93RmlsdGVycygpKVwiXG4gICAgICAgICAgW25nYlRvb2x0aXBdPVwic2hvd0ZpbHRlcnMoKSA/ICdIaWRlIGZpbHRlcnMnIDogJ1Nob3cgZmlsdGVycydcIlxuICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiPlxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhRmlsdGVyXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxoZS1jbGlwYm9hcmRcbiAgICAgICAgICBjbGlwYm9hcmRDbGFzcz1cImJ1dHRvbiBpcy1zZWNvbmRhcnkgaXMtc21hbGxcIlxuICAgICAgICAgIFt2YWx1ZV09XCJub2RlTG9nKClcIlxuICAgICAgICAgIFtoaWRlVGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICBbaWNvbl09XCJmYXJDbG9uZVwiXG4gICAgICAgICAgc2l6ZT1cImxnXCJcbiAgICAgICAgICByb3RhdGU9XCIxODBcIj48L2hlLWNsaXBib2FyZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJidXR0b24gaXMtaW5mbyBpcy1zbWFsbFwiIHRhcmdldD1cIl9ibGFua1wiIFtocmVmXT1cImNzdkNvbnRlbnQoKVwiIFtkb3dubG9hZF09XCJjc3ZGaWxlbmFtZSgpXCI+XG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFEb3dubG9hZFwiIC8+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8cHJlIGNsYXNzPVwicGwtMyBwdC0zIG1sLTNcIj5cbiAgICBAZm9yIChsaW5lIG9mIG5vZGVMb2dMaW5lcygpOyB0cmFjayBsaW5lKSB7XG4gICAgICA8Y29kZSBjbGFzcz1cImlzLWJsb2NrIHt7bGluZS5jbGFzc319XCI+e3tsaW5lLmRhdGEudGltZXN0YW1wfX0ge3soJ1snICsgbGluZS5kYXRhLmxldmVsICsgJ106JykucGFkRW5kKDksICcgJyl9fSB7e2xpbmUuZGF0YS5tZXNzYWdlfX08L2NvZGU+XG4gICAgfVxuICA8L3ByZT5cbjwvZGl2PlxuIl19
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLWZpbGUvbm9kZS1sb2dzLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLWZpbGUvbm9kZS1sb2dzLWZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBYSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsT0FBTyxJQUFJLFFBQVEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFD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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBLZXlWYWx1ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBEYXRhU3RhdGUsIGZpbGVUb0V4dCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7IEpTT05MRCwgTm9kZVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyBGYUljb25Db21wb25lbnQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XG5pbXBvcnQgeyBmYURvd25sb2FkLCBmYUZpbHRlciB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5pbXBvcnQgeyBmYUNsb25lIGFzIGZhckNsb25lIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtcmVndWxhci1zdmctaWNvbnMnO1xuaW1wb3J0IHsgTmdiVG9vbHRpcCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBIZU5vZGVTZXJ2aWNlIH0gZnJvbSAnLi4vbm9kZS5zZXJ2aWNlJztcbmltcG9ydCB7IExldmVsLCBsZXZlbHMsIHBhcnNlTGluZXMsIGxvZ1RvQ3N2IH0gZnJvbSAnLi4vLi4vY29tbW9uL2xvZ3MtdXRpbHMnO1xuaW1wb3J0IHsgQ2xpcGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2NsaXBib2FyZC9jbGlwYm9hcmQuY29tcG9uZW50JztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkRGVlcCB9IGZyb20gJy4uLy4uL2NvbW1vbi9yeGpzLXV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtbm9kZS1sb2dzLWZpbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbm9kZS1sb2dzLWZpbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLWxvZ3MtZmlsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0Zvcm1zTW9kdWxlLCBOZ2JUb29sdGlwLCBGYUljb25Db21wb25lbnQsIENsaXBib2FyZENvbXBvbmVudCwgS2V5VmFsdWVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlTG9nc0ZpbGVDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5vZGVTZXJ2aWNlID0gaW5qZWN0KEhlTm9kZVNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBmYUZpbHRlciA9IGZhRmlsdGVyO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFEb3dubG9hZCA9IGZhRG93bmxvYWQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYXJDbG9uZSA9IGZhckNsb25lO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBub2RlID0gaW5wdXQucmVxdWlyZWQ8SlNPTkxEPE5vZGVUeXBlPj4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGFTdGF0ZSA9IGlucHV0PERhdGFTdGF0ZT4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG5vZGVMb2ckID0gY29tYmluZUxhdGVzdChbdG9PYnNlcnZhYmxlKHRoaXMubm9kZSksIHRvT2JzZXJ2YWJsZSh0aGlzLmRhdGFTdGF0ZSldKS5waXBlKFxuICAgIGZpbHRlcih2YWx1ZXMgPT4gdmFsdWVzLmV2ZXJ5KHYgPT4gIWlzVW5kZWZpbmVkKHYpKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWREZWVwKCksXG4gICAgdGFwKCgpID0+IHRoaXMubG9hZGluZy5zZXQodHJ1ZSkpLFxuICAgIG1lcmdlTWFwKChbbm9kZSwgZGF0YVN0YXRlXSkgPT5cbiAgICAgIHRoaXMubm9kZVNlcnZpY2UuZ2V0TG9nJCh7XG4gICAgICAgIC4uLm5vZGUsXG4gICAgICAgIGRhdGFTdGF0ZVxuICAgICAgfSlcbiAgICApLFxuICAgIG1hcCh2YWx1ZSA9PiB2YWx1ZSB8fCAnTm8gbG9ncy4nKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nLnNldChmYWxzZSkpXG4gICk7XG4gIHByb3RlY3RlZCByZWFkb25seSBub2RlTG9nID0gdG9TaWduYWwodGhpcy5ub2RlTG9nJCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsTG9ncyQgPSB0aGlzLm5vZGVMb2ckLnBpcGUoXG4gICAgbWFwKHZhbHVlID0+IHBhcnNlTGluZXModmFsdWUpLmZpbHRlcigoeyBkYXRhIH0pID0+IGRhdGEubG9nZ2VyID09PSAnaGVzdGlhX2VhcnRoLm1vZGVscycpKVxuICApO1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbExvZ3MgPSB0b1NpZ25hbCh0aGlzLmFsbExvZ3MkKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgTGV2ZWwgPSBMZXZlbDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvd0ZpbHRlcnMgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9kZWxGaWx0ZXIgPSBzaWduYWwoJycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGVybUZpbHRlciA9IHNpZ25hbCgnJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZExldmVsID0gc2lnbmFsKExldmVsLmluZm8pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBmaWxlVG9FeHQgPSBmaWxlVG9FeHQ7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5vZGVMb2dMaW5lcyA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5hbGxMb2dzKClcbiAgICAgID8uZmlsdGVyKCh7IGxldmVsIH0pID0+IGxldmVscy5pbmRleE9mKGxldmVsKSA+PSBsZXZlbHMuaW5kZXhPZih0aGlzLnNlbGVjdGVkTGV2ZWwoKSkpXG4gICAgICA/LmZpbHRlcihcbiAgICAgICAgKHsgY29kZSB9KSA9PlxuICAgICAgICAgICghdGhpcy5tb2RlbEZpbHRlcigpIHx8IGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhgbW9kZWw9JHt0aGlzLm1vZGVsRmlsdGVyKCkudG9Mb3dlckNhc2UoKX1gKSkgJiZcbiAgICAgICAgICAoIXRoaXMudGVybUZpbHRlcigpIHx8IGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhgdGVybT0ke3RoaXMudGVybUZpbHRlcigpLnRvTG93ZXJDYXNlKCl9YCkpXG4gICAgICApXG4gICk7XG4gIHByb3RlY3RlZCByZWFkb25seSBjc3ZDb250ZW50ID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXG4gICAgICBgZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCwke2VuY29kZVVSSUNvbXBvbmVudChsb2dUb0Nzdih0aGlzLmFsbExvZ3MoKSkpfWBcbiAgICApXG4gICk7XG4gIHByb3RlY3RlZCByZWFkb25seSBjc3ZGaWxlbmFtZSA9IGNvbXB1dGVkKCgpID0+IGZpbGVUb0V4dCh0aGlzLm5vZGUoKT8uWydAaWQnXSA/PyAnJywgJ2NzdicpKTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJpcy1yZWxhdGl2ZVwiPlxuICA8ZGl2IGNsYXNzPVwiY29weS1jbGlwYm9hcmRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9uc1wiPlxuICAgICAgQGlmIChzaG93RmlsdGVycygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImlucHV0IGlzLXNlY29uZGFyeSBpcy1zbWFsbFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJtb2RlbEZpbHRlcigpXCJcbiAgICAgICAgICAgIGlkPVwibW9kZWxGaWx0ZXJcIlxuICAgICAgICAgICAgKGlucHV0KT1cIm1vZGVsRmlsdGVyLnNldCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBieSBNZXRob2QgLyBNb2RlbFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dCBpcy1zZWNvbmRhcnkgaXMtc21hbGxcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwidGVybUZpbHRlcigpXCJcbiAgICAgICAgICAgIGlkPVwidGVybUZpbHRlclwiXG4gICAgICAgICAgICAoaW5wdXQpPVwidGVybUZpbHRlci5zZXQoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgYnkgVGVybVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgaXMtc2Vjb25kYXJ5IGlzLXNtYWxsXCI+XG4gICAgICAgICAgICA8c2VsZWN0IFtuZ01vZGVsXT1cInNlbGVjdGVkTGV2ZWwoKVwiIChjaGFuZ2UpPVwic2VsZWN0ZWRMZXZlbC5zZXQoJGV2ZW50LnRhcmdldC52YWx1ZSlcIiBpZD1cInNlbGVjdGVkTGV2ZWxcIj5cbiAgICAgICAgICAgICAgQGZvciAobGV2ZWwgb2YgTGV2ZWwgfCBrZXl2YWx1ZTsgdHJhY2sgbGV2ZWwpIHtcbiAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJsZXZlbC52YWx1ZVwiPnt7IGxldmVsLnZhbHVlIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dGaWx0ZXJzLnNldCghc2hvd0ZpbHRlcnMoKSlcIlxuICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInNob3dGaWx0ZXJzKCkgPyAnSGlkZSBmaWx0ZXJzJyA6ICdTaG93IGZpbHRlcnMnXCJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIj5cbiAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUZpbHRlclwiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8aGUtY2xpcGJvYXJkXG4gICAgICAgICAgY2xpcGJvYXJkQ2xhc3M9XCJidXR0b24gaXMtc2Vjb25kYXJ5IGlzLXNtYWxsXCJcbiAgICAgICAgICBbdmFsdWVdPVwibm9kZUxvZygpXCJcbiAgICAgICAgICBbaGlkZVRleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2ljb25dPVwiZmFyQ2xvbmVcIlxuICAgICAgICAgIHNpemU9XCJsZ1wiXG4gICAgICAgICAgcm90YXRlPVwiMTgwXCI+PC9oZS1jbGlwYm9hcmQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxhIGNsYXNzPVwiYnV0dG9uIGlzLWluZm8gaXMtc21hbGxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbaHJlZl09XCJjc3ZDb250ZW50KClcIiBbZG93bmxvYWRdPVwiY3N2RmlsZW5hbWUoKVwiPlxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhRG93bmxvYWRcIiAvPlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPHByZSBjbGFzcz1cInBsLTMgcHQtMyBtbC0zXCI+XG4gICAgQGZvciAobGluZSBvZiBub2RlTG9nTGluZXMoKTsgdHJhY2sgbGluZSkge1xuICAgICAgPGNvZGUgY2xhc3M9XCJpcy1ibG9jayB7e2xpbmUuY2xhc3N9fVwiPnt7bGluZS5kYXRhLnRpbWVzdGFtcH19IHt7KCdbJyArIGxpbmUuZGF0YS5sZXZlbCArICddOicpLnBhZEVuZCg5LCAnICcpfX0ge3tsaW5lLmRhdGEubWVzc2FnZX19PC9jb2RlPlxuICAgIH1cbiAgPC9wcmU+XG48L2Rpdj5cbiJdfQ==
|