stimulsoft-forms
Version:
Stimulsoft PDF Forms
277 lines • 31.7 kB
JavaScript
import { Component } from "@angular/core";
import { StiHorizontalAlignment, StiVerticalAlignment } from "../../system/enums";
import { StiImageEditorResult } from "../../elements/signature/StiImageEditorResult";
import * as i0 from "@angular/core";
import * as i1 from "../../services/model.service";
import * as i2 from "../../services/sti-localization.service";
import * as i3 from "../../services/sti-helper.service";
import * as i4 from "../../services/sti-signature.service";
import * as i5 from "../sti-universal-checkbox/sti-universal-checkbox.component";
import * as i6 from "../sti-tooltip/sti-tooltip.directive";
import * as i7 from "../sti-select-button/sti-select-button.component";
export class StiEmbedImageEditorComponent {
get hasImage() {
return this.loadedImage ? true : false;
}
get image() {
return "url(" + this.loadedImage + ")";
}
clear() {
this.loadedImage = null;
}
getBackgroundSize(container) {
if (!this.loadedImage) {
return;
}
if (this.useAspectRatio && this.useStretch) {
return "contain";
}
if (this.useStretch) {
return `${container.offsetWidth}px ${container.offsetHeight}px`;
}
else {
return `${this.currentImageNaturalWidth}px ${this.currentImageNaturalHeight}px`;
}
}
getBackgroundPosition() {
if (this.useStretch && !this.useAspectRatio) {
return `center`;
}
else {
return `${this.signatureService.getVerticalPosition(this.currentVerticalAlignment)} ${this.signatureService.getHorizontalPosition(this.currentHorizontalAlignment)}`;
}
}
getHorizontalAlignment() {
if (this.currentHorizontalAlignment == StiHorizontalAlignment.Center) {
return "center";
}
else if (this.currentHorizontalAlignment == StiHorizontalAlignment.Left) {
return "start";
}
else {
return "end";
}
}
onFileSelected(event) {
if (event.files && event.files[0]) {
var reader = new FileReader();
reader.onload = (e) => {
let image = new Image();
image.onload = () => {
this.currentImageNaturalHeight = image.naturalHeight;
this.currentImageNaturalWidth = image.naturalWidth;
};
image.src = e.target.result;
setTimeout(() => {
this.loadedImage = e.target.result;
});
};
reader.readAsDataURL(event.files[0]);
}
}
constructor(model, loc, helper, signatureService) {
this.model = model;
this.loc = loc;
this.helper = helper;
this.signatureService = signatureService;
this.currentVerticalAlignment = StiVerticalAlignment.Center;
this.currentHorizontalAlignment = StiHorizontalAlignment.Center;
this.useAspectRatio = false;
this.useStretch = false;
this.currentImageNaturalWidth = 0;
this.currentImageNaturalHeight = 0;
}
ngOnInit() {
if (this.signatureService.currentEditableImage) {
this.loadedImage = this.signatureService.currentEditableImage.loadedImage;
this.currentVerticalAlignment = this.signatureService.currentEditableImage.verticalAlignment;
this.currentHorizontalAlignment = this.signatureService.currentEditableImage.horizontalAlignment;
this.useAspectRatio = this.signatureService.currentEditableImage.aspectRatio;
this.useStretch = this.signatureService.currentEditableImage.stretch;
this.currentImageNaturalHeight = this.signatureService.currentEditableImage.naturalHeight;
this.currentImageNaturalWidth = this.signatureService.currentEditableImage.naturalWidth;
}
this.updateSignatureSubscription = this.signatureService.getInsertedInformation.subscribe((event) => {
if (event.eventName == "ImageEditor") {
let resultObject = new StiImageEditorResult();
resultObject.loadedImage = this.loadedImage;
resultObject.verticalAlignment = this.currentVerticalAlignment;
resultObject.horizontalAlignment = this.currentHorizontalAlignment;
resultObject.aspectRatio = this.useAspectRatio;
resultObject.stretch = this.useStretch;
resultObject.naturalHeight = this.currentImageNaturalHeight;
resultObject.naturalWidth = this.currentImageNaturalWidth;
this.signatureService.updateSignature.next({ type: "Image", value: resultObject });
}
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiEmbedImageEditorComponent, deps: [{ token: i1.StiModelService }, { token: i2.StiLocalizationService }, { token: i3.StiHelperService }, { token: i4.SignatureService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: StiEmbedImageEditorComponent, selector: "embed-image-editor", ngImport: i0, template: `<div class="editor-container">
<div class="editor-navigation">
<div
class="navigation-button"
[style.min-width.px]="50"
[style.padding]="'0px 10px'"
[style.width]="'auto'"
(click)="inputFile.click()"
>
<img [src]="model.getImage('images.Other.Open.png')" />
<span [style.margin-left.px]="2"> {{ loc.get2("Buttons", "Open") }}</span>
</div>
<div class="navigation-button {{ hasImage ? '' : 'disabled' }}" (click)="clear()">
<img [src]="model.getImage('images.Ribbon.Delete.png')" />
</div>
<sti-selectButton
[options]="helper.justifyOptions"
[(value)]="currentHorizontalAlignment"
[disabled]="!hasImage"
optionValue="value"
[style]="{ height: '26px', minWidth: '94px' }"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<sti-selectButton
[options]="helper.verticalAlignment"
[(value)]="currentVerticalAlignment"
[disabled]="!hasImage"
optionValue="value"
[style]="{ height: '26px', minWidth: '94px' }"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<sti-checkbox
class="min-version"
[(value)]="useAspectRatio"
[disabled]="!hasImage"
[label]="'Aspect Ratio'"
></sti-checkbox>
<sti-checkbox
class="min-version"
[(value)]="useStretch"
[disabled]="!hasImage"
[label]="'Stretch'"
></sti-checkbox>
</div>
<div class="image-container" #imageContainer [style.justify-content]="getHorizontalAlignment()">
<input
type="file"
[style.display]="'none'"
accept=".jpg, .jpeg, .png"
(click)="$event.target.value = null"
(change)="onFileSelected($event.target)"
#inputFile
/>
<div
class="image-preview"
[style.width.px]="useStretch && useAspectRatio ? imageContainer.clientHeight : imageContainer.clientWidth"
[style.height.px]="imageContainer.clientHeight"
[style.background-image]="image"
[style.background-position]="getBackgroundPosition()"
[style.background-size]="getBackgroundSize(imageContainer)"
[style.background-repeat]="image ? 'no-repeat' : ''"
></div>
</div>
</div>`, isInline: true, styles: [".image-preview{width:100%;height:100%}.disabled{pointer-events:none;opacity:.6}sti-checkbox{font-size:12px!important;font-family:Arial!important;margin:0 5px}sti-checkbox .label{font-size:12px!important}.image-container{border-radius:3px;border:1px dashed lightgray;height:100%;width:100%;display:flex}.editor-container{height:calc(100% - 20px);width:calc(100% - 20px);margin:10px;display:flex;flex-direction:column}.editor-navigation{height:26px;margin-bottom:5px;margin-top:10px;display:flex}.navigation-button:hover{background-color:#d3d3d3}.navigation-button{height:26px;width:26px;margin-right:2px;border-radius:3px;display:flex;align-items:center;justify-content:center}.navigation-button img{height:16px;width:16px}\n"], dependencies: [{ kind: "component", type: i5.StiUniversalCheckboxComponent, selector: "sti-checkbox", inputs: ["value", "disabled", "label"], outputs: ["valueChange"] }, { kind: "directive", type: i6.StiTooltipDirective, selector: "[stiTooltip]", inputs: ["tooltipPosition", "stiTooltip", "showDelay"] }, { kind: "component", type: i7.StiSelectButtonComponent, selector: "sti-selectButton", inputs: ["options", "value", "optionLabel", "optionValue", "multiple", "disabled"], outputs: ["onOptionClick", "onChange", "valueChange"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiEmbedImageEditorComponent, decorators: [{
type: Component,
args: [{ selector: "embed-image-editor", template: `<div class="editor-container">
<div class="editor-navigation">
<div
class="navigation-button"
[style.min-width.px]="50"
[style.padding]="'0px 10px'"
[style.width]="'auto'"
(click)="inputFile.click()"
>
<img [src]="model.getImage('images.Other.Open.png')" />
<span [style.margin-left.px]="2"> {{ loc.get2("Buttons", "Open") }}</span>
</div>
<div class="navigation-button {{ hasImage ? '' : 'disabled' }}" (click)="clear()">
<img [src]="model.getImage('images.Ribbon.Delete.png')" />
</div>
<sti-selectButton
[options]="helper.justifyOptions"
[(value)]="currentHorizontalAlignment"
[disabled]="!hasImage"
optionValue="value"
[style]="{ height: '26px', minWidth: '94px' }"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<sti-selectButton
[options]="helper.verticalAlignment"
[(value)]="currentVerticalAlignment"
[disabled]="!hasImage"
optionValue="value"
[style]="{ height: '26px', minWidth: '94px' }"
>
<ng-template let-item>
<img
[src]="model.getImage(item.image)"
[stiTooltip]="loc.getP(item.name)"
tooltipPosition="bottom"
showDelay="500"
[style]="{ height: '16px', width: '16px' }"
/>
</ng-template>
</sti-selectButton>
<sti-checkbox
class="min-version"
[(value)]="useAspectRatio"
[disabled]="!hasImage"
[label]="'Aspect Ratio'"
></sti-checkbox>
<sti-checkbox
class="min-version"
[(value)]="useStretch"
[disabled]="!hasImage"
[label]="'Stretch'"
></sti-checkbox>
</div>
<div class="image-container" #imageContainer [style.justify-content]="getHorizontalAlignment()">
<input
type="file"
[style.display]="'none'"
accept=".jpg, .jpeg, .png"
(click)="$event.target.value = null"
(change)="onFileSelected($event.target)"
#inputFile
/>
<div
class="image-preview"
[style.width.px]="useStretch && useAspectRatio ? imageContainer.clientHeight : imageContainer.clientWidth"
[style.height.px]="imageContainer.clientHeight"
[style.background-image]="image"
[style.background-position]="getBackgroundPosition()"
[style.background-size]="getBackgroundSize(imageContainer)"
[style.background-repeat]="image ? 'no-repeat' : ''"
></div>
</div>
</div>`, styles: [".image-preview{width:100%;height:100%}.disabled{pointer-events:none;opacity:.6}sti-checkbox{font-size:12px!important;font-family:Arial!important;margin:0 5px}sti-checkbox .label{font-size:12px!important}.image-container{border-radius:3px;border:1px dashed lightgray;height:100%;width:100%;display:flex}.editor-container{height:calc(100% - 20px);width:calc(100% - 20px);margin:10px;display:flex;flex-direction:column}.editor-navigation{height:26px;margin-bottom:5px;margin-top:10px;display:flex}.navigation-button:hover{background-color:#d3d3d3}.navigation-button{height:26px;width:26px;margin-right:2px;border-radius:3px;display:flex;align-items:center;justify-content:center}.navigation-button img{height:16px;width:16px}\n"] }]
}], ctorParameters: () => [{ type: i1.StiModelService }, { type: i2.StiLocalizationService }, { type: i3.StiHelperService }, { type: i4.SignatureService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RpLWVtYmVkLWltYWdlLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdGltdWxzb2Z0LWZvcm1zL3NyYy9saWIvY29tcG9uZW50cy9zdGktZW1iZWQtZWRpdG9ycy9zdGktZW1iZWQtaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBSWxELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSWxGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7Ozs7Ozs7QUErSXJGLE1BQU0sT0FBTyw0QkFBNEI7SUFTdkMsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDekMsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUNELGlCQUFpQixDQUFDLFNBQVM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0MsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsV0FBVyxNQUFNLFNBQVMsQ0FBQyxZQUFZLElBQUksQ0FBQztRQUNsRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sR0FBRyxJQUFJLENBQUMsd0JBQXdCLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixJQUFJLENBQUM7UUFDbEYsQ0FBQztJQUNILENBQUM7SUFDRCxxQkFBcUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FDakQsSUFBSSxDQUFDLHdCQUF3QixDQUM5QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDO1FBQ3RGLENBQUM7SUFDSCxDQUFDO0lBQ0Qsc0JBQXNCO1FBQ3BCLElBQUksSUFBSSxDQUFDLDBCQUEwQixJQUFJLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JFLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQywwQkFBMEIsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxRSxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFDRCxjQUFjLENBQUMsS0FBSztRQUNsQixJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xDLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUN6QixJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7b0JBQ3JELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO2dCQUNyRCxDQUFDLENBQUM7Z0JBQ0YsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDNUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUNyQyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBQ0QsWUFDUyxLQUFzQixFQUN0QixHQUEyQixFQUMzQixNQUF3QixFQUN4QixnQkFBa0M7UUFIbEMsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFDdEIsUUFBRyxHQUFILEdBQUcsQ0FBd0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXJFcEMsNkJBQXdCLEdBQXlCLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztRQUM3RSwrQkFBMEIsR0FBMkIsc0JBQXNCLENBQUMsTUFBTSxDQUFDO1FBQ25GLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFNUIsNkJBQXdCLEdBQVcsQ0FBQyxDQUFDO1FBQ3JDLDhCQUF5QixHQUFXLENBQUMsQ0FBQztJQWdFMUMsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQztZQUMxRSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDO1lBQzdGLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLENBQUM7WUFDakcsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDO1lBQzdFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQztZQUNyRSxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQztZQUMxRixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQztRQUMxRixDQUFDO1FBQ0QsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsRyxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksWUFBWSxHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztnQkFDOUMsWUFBWSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUM1QyxZQUFZLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO2dCQUMvRCxZQUFZLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDO2dCQUNuRSxZQUFZLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQy9DLFlBQVksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDdkMsWUFBWSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7Z0JBQzVELFlBQVksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO2dCQUMxRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDckYsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FoR1UsNEJBQTRCO21HQUE1Qiw0QkFBNEIsMERBM0k3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBaUZIOzs0RkEwREksNEJBQTRCO2tCQTdJeEMsU0FBUzsrQkFDRSxvQkFBb0IsWUFDcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQWlGSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3RpTW9kZWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL21vZGVsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3RpTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdGktbG9jYWxpemF0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3RpSGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdGktaGVscGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3RpSG9yaXpvbnRhbEFsaWdubWVudCwgU3RpVmVydGljYWxBbGlnbm1lbnQgfSBmcm9tIFwiLi4vLi4vc3lzdGVtL2VudW1zXCI7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFNpZ25hdHVyZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc3RpLXNpZ25hdHVyZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0aUltYWdlRWRpdG9yUmVzdWx0T2JqZWN0IH0gZnJvbSBcIi4uLy4uL3N5c3RlbS9pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7IFN0aUltYWdlRWRpdG9yUmVzdWx0IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzL3NpZ25hdHVyZS9TdGlJbWFnZUVkaXRvclJlc3VsdFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZW1iZWQtaW1hZ2UtZWRpdG9yXCIsXHJcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImVkaXRvci1uYXZpZ2F0aW9uXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cIm5hdmlnYXRpb24tYnV0dG9uXCJcclxuICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cIjUwXCJcclxuICAgICAgICBbc3R5bGUucGFkZGluZ109XCInMHB4IDEwcHgnXCJcclxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiJ2F1dG8nXCJcclxuICAgICAgICAoY2xpY2spPVwiaW5wdXRGaWxlLmNsaWNrKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cIm1vZGVsLmdldEltYWdlKCdpbWFnZXMuT3RoZXIuT3Blbi5wbmcnKVwiIC8+XHJcbiAgICAgICAgPHNwYW4gW3N0eWxlLm1hcmdpbi1sZWZ0LnB4XT1cIjJcIj4ge3sgbG9jLmdldDIoXCJCdXR0b25zXCIsIFwiT3BlblwiKSB9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJuYXZpZ2F0aW9uLWJ1dHRvbiB7eyBoYXNJbWFnZSA/ICcnIDogJ2Rpc2FibGVkJyB9fVwiIChjbGljayk9XCJjbGVhcigpXCI+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cIm1vZGVsLmdldEltYWdlKCdpbWFnZXMuUmliYm9uLkRlbGV0ZS5wbmcnKVwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8c3RpLXNlbGVjdEJ1dHRvblxyXG4gICAgICAgIFtvcHRpb25zXT1cImhlbHBlci5qdXN0aWZ5T3B0aW9uc1wiXHJcbiAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudEhvcml6b250YWxBbGlnbm1lbnRcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhaGFzSW1hZ2VcIlxyXG4gICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxyXG4gICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzI2cHgnLCBtaW5XaWR0aDogJzk0cHgnIH1cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtPlxyXG4gICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICBbc3JjXT1cIm1vZGVsLmdldEltYWdlKGl0ZW0uaW1hZ2UpXCJcclxuICAgICAgICAgICAgW3N0aVRvb2x0aXBdPVwibG9jLmdldFAoaXRlbS5uYW1lKVwiXHJcbiAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgIHNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzE2cHgnLCB3aWR0aDogJzE2cHgnIH1cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L3N0aS1zZWxlY3RCdXR0b24+XHJcbiAgICAgIDxzdGktc2VsZWN0QnV0dG9uXHJcbiAgICAgICAgW29wdGlvbnNdPVwiaGVscGVyLnZlcnRpY2FsQWxpZ25tZW50XCJcclxuICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50VmVydGljYWxBbGlnbm1lbnRcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhaGFzSW1hZ2VcIlxyXG4gICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxyXG4gICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzI2cHgnLCBtaW5XaWR0aDogJzk0cHgnIH1cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtPlxyXG4gICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICBbc3JjXT1cIm1vZGVsLmdldEltYWdlKGl0ZW0uaW1hZ2UpXCJcclxuICAgICAgICAgICAgW3N0aVRvb2x0aXBdPVwibG9jLmdldFAoaXRlbS5uYW1lKVwiXHJcbiAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgIHNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzE2cHgnLCB3aWR0aDogJzE2cHgnIH1cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L3N0aS1zZWxlY3RCdXR0b24+XHJcbiAgICAgIDxzdGktY2hlY2tib3hcclxuICAgICAgICBjbGFzcz1cIm1pbi12ZXJzaW9uXCJcclxuICAgICAgICBbKHZhbHVlKV09XCJ1c2VBc3BlY3RSYXRpb1wiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNJbWFnZVwiXHJcbiAgICAgICAgW2xhYmVsXT1cIidBc3BlY3QgUmF0aW8nXCJcclxuICAgICAgPjwvc3RpLWNoZWNrYm94PlxyXG4gICAgICA8c3RpLWNoZWNrYm94XHJcbiAgICAgICAgY2xhc3M9XCJtaW4tdmVyc2lvblwiXHJcbiAgICAgICAgWyh2YWx1ZSldPVwidXNlU3RyZXRjaFwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNJbWFnZVwiXHJcbiAgICAgICAgW2xhYmVsXT1cIidTdHJldGNoJ1wiXHJcbiAgICAgID48L3N0aS1jaGVja2JveD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiICNpbWFnZUNvbnRhaW5lciBbc3R5bGUuanVzdGlmeS1jb250ZW50XT1cImdldEhvcml6b250YWxBbGlnbm1lbnQoKVwiPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCJcclxuICAgICAgICBhY2NlcHQ9XCIuanBnLCAuanBlZywgLnBuZ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC50YXJnZXQudmFsdWUgPSBudWxsXCJcclxuICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudC50YXJnZXQpXCJcclxuICAgICAgICAjaW5wdXRGaWxlXHJcbiAgICAgIC8+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImltYWdlLXByZXZpZXdcIlxyXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJ1c2VTdHJldGNoICYmIHVzZUFzcGVjdFJhdGlvID8gaW1hZ2VDb250YWluZXIuY2xpZW50SGVpZ2h0IDogaW1hZ2VDb250YWluZXIuY2xpZW50V2lkdGhcIlxyXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaW1hZ2VDb250YWluZXIuY2xpZW50SGVpZ2h0XCJcclxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV09XCJpbWFnZVwiXHJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtcG9zaXRpb25dPVwiZ2V0QmFja2dyb3VuZFBvc2l0aW9uKClcIlxyXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLXNpemVdPVwiZ2V0QmFja2dyb3VuZFNpemUoaW1hZ2VDb250YWluZXIpXCJcclxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1yZXBlYXRdPVwiaW1hZ2UgPyAnbm8tcmVwZWF0JyA6ICcnXCJcclxuICAgICAgPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+YCxcclxuICBzdHlsZXM6IFtcclxuICAgIGBcclxuICAgICAgLmltYWdlLXByZXZpZXcge1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgfVxyXG4gICAgICAuZGlzYWJsZWQge1xyXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xyXG4gICAgICAgIG9wYWNpdHk6IDAuNjtcclxuICAgICAgfVxyXG4gICAgICBzdGktY2hlY2tib3gge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50O1xyXG4gICAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbCAhaW1wb3J0YW50O1xyXG4gICAgICAgIG1hcmdpbjogMHB4IDVweDtcclxuICAgICAgfVxyXG4gICAgICBzdGktY2hlY2tib3ggLmxhYmVsIHtcclxuICAgICAgICBmb250LXNpemU6IDEycHggIWltcG9ydGFudDtcclxuICAgICAgfVxyXG4gICAgICAuaW1hZ2UtY29udGFpbmVyIHtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIGxpZ2h0Z3JheTtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgfVxyXG4gICAgICAuZWRpdG9yLWNvbnRhaW5lciB7XHJcbiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMHB4KTtcclxuICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gMjBweCk7XHJcbiAgICAgICAgbWFyZ2luOiAxMHB4O1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgfVxyXG4gICAgICAuZWRpdG9yLW5hdmlnYXRpb24ge1xyXG4gICAgICAgIGhlaWdodDogMjZweDtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMTBweDtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICB9XHJcbiAgICAgIC5uYXZpZ2F0aW9uLWJ1dHRvbjpob3ZlciB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmF5O1xyXG4gICAgICB9XHJcbiAgICAgIC5uYXZpZ2F0aW9uLWJ1dHRvbiB7XHJcbiAgICAgICAgaGVpZ2h0OiAyNnB4O1xyXG4gICAgICAgIHdpZHRoOiAyNnB4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIH1cclxuICAgICAgLm5hdmlnYXRpb24tYnV0dG9uIGltZyB7XHJcbiAgICAgICAgaGVpZ2h0OiAxNnB4O1xyXG4gICAgICAgIHdpZHRoOiAxNnB4O1xyXG4gICAgICB9XHJcbiAgICBgLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTdGlFbWJlZEltYWdlRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwdWJsaWMgY3VycmVudFZlcnRpY2FsQWxpZ25tZW50OiBTdGlWZXJ0aWNhbEFsaWdubWVudCA9IFN0aVZlcnRpY2FsQWxpZ25tZW50LkNlbnRlcjtcclxuICBwdWJsaWMgY3VycmVudEhvcml6b250YWxBbGlnbm1lbnQ6IFN0aUhvcml6b250YWxBbGlnbm1lbnQgPSBTdGlIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcjtcclxuICBwdWJsaWMgdXNlQXNwZWN0UmF0aW86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdXNlU3RyZXRjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsb2FkZWRJbWFnZTtcclxuICBwdWJsaWMgY3VycmVudEltYWdlTmF0dXJhbFdpZHRoOiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBjdXJyZW50SW1hZ2VOYXR1cmFsSGVpZ2h0OiBudW1iZXIgPSAwO1xyXG4gIHVwZGF0ZVNpZ25hdHVyZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHB1YmxpYyBnZXQgaGFzSW1hZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkZWRJbWFnZSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcbiAgZ2V0IGltYWdlKCkge1xyXG4gICAgcmV0dXJuIFwidXJsKFwiICsgdGhpcy5sb2FkZWRJbWFnZSArIFwiKVwiO1xyXG4gIH1cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMubG9hZGVkSW1hZ2UgPSBudWxsO1xyXG4gIH1cclxuICBnZXRCYWNrZ3JvdW5kU2l6ZShjb250YWluZXIpIHtcclxuICAgIGlmICghdGhpcy5sb2FkZWRJbWFnZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy51c2VBc3BlY3RSYXRpbyAmJiB0aGlzLnVzZVN0cmV0Y2gpIHtcclxuICAgICAgcmV0dXJuIFwiY29udGFpblwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudXNlU3RyZXRjaCkge1xyXG4gICAgICByZXR1cm4gYCR7Y29udGFpbmVyLm9mZnNldFdpZHRofXB4ICR7Y29udGFpbmVyLm9mZnNldEhlaWdodH1weGA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy5jdXJyZW50SW1hZ2VOYXR1cmFsV2lkdGh9cHggJHt0aGlzLmN1cnJlbnRJbWFnZU5hdHVyYWxIZWlnaHR9cHhgO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRCYWNrZ3JvdW5kUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy51c2VTdHJldGNoICYmICF0aGlzLnVzZUFzcGVjdFJhdGlvKSB7XHJcbiAgICAgIHJldHVybiBgY2VudGVyYDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLnNpZ25hdHVyZVNlcnZpY2UuZ2V0VmVydGljYWxQb3NpdGlvbihcclxuICAgICAgICB0aGlzLmN1cnJlbnRWZXJ0aWNhbEFsaWdubWVudFxyXG4gICAgICApfSAke3RoaXMuc2lnbmF0dXJlU2VydmljZS5nZXRIb3Jpem9udGFsUG9zaXRpb24odGhpcy5jdXJyZW50SG9yaXpvbnRhbEFsaWdubWVudCl9YDtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0SG9yaXpvbnRhbEFsaWdubWVudCgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRIb3Jpem9udGFsQWxpZ25tZW50ID09IFN0aUhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyKSB7XHJcbiAgICAgIHJldHVybiBcImNlbnRlclwiO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRIb3Jpem9udGFsQWxpZ25tZW50ID09IFN0aUhvcml6b250YWxBbGlnbm1lbnQuTGVmdCkge1xyXG4gICAgICByZXR1cm4gXCJzdGFydFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwiZW5kXCI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQuZmlsZXMgJiYgZXZlbnQuZmlsZXNbMF0pIHtcclxuICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2VOYXR1cmFsSGVpZ2h0ID0gaW1hZ2UubmF0dXJhbEhlaWdodDtcclxuICAgICAgICAgIHRoaXMuY3VycmVudEltYWdlTmF0dXJhbFdpZHRoID0gaW1hZ2UubmF0dXJhbFdpZHRoO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaW1hZ2Uuc3JjID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWRJbWFnZSA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZXZlbnQuZmlsZXNbMF0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBtb2RlbDogU3RpTW9kZWxTZXJ2aWNlLFxyXG4gICAgcHVibGljIGxvYzogU3RpTG9jYWxpemF0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyBoZWxwZXI6IFN0aUhlbHBlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgc2lnbmF0dXJlU2VydmljZTogU2lnbmF0dXJlU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5zaWduYXR1cmVTZXJ2aWNlLmN1cnJlbnRFZGl0YWJsZUltYWdlKSB7XHJcbiAgICAgIHRoaXMubG9hZGVkSW1hZ2UgPSB0aGlzLnNpZ25hdHVyZVNlcnZpY2UuY3VycmVudEVkaXRhYmxlSW1hZ2UubG9hZGVkSW1hZ2U7XHJcbiAgICAgIHRoaXMuY3VycmVudFZlcnRpY2FsQWxpZ25tZW50ID0gdGhpcy5zaWduYXR1cmVTZXJ2aWNlLmN1cnJlbnRFZGl0YWJsZUltYWdlLnZlcnRpY2FsQWxpZ25tZW50O1xyXG4gICAgICB0aGlzLmN1cnJlbnRIb3Jpem9udGFsQWxpZ25tZW50ID0gdGhpcy5zaWduYXR1cmVTZXJ2aWNlLmN1cnJlbnRFZGl0YWJsZUltYWdlLmhvcml6b250YWxBbGlnbm1lbnQ7XHJcbiAgICAgIHRoaXMudXNlQXNwZWN0UmF0aW8gPSB0aGlzLnNpZ25hdHVyZVNlcnZpY2UuY3VycmVudEVkaXRhYmxlSW1hZ2UuYXNwZWN0UmF0aW87XHJcbiAgICAgIHRoaXMudXNlU3RyZXRjaCA9IHRoaXMuc2lnbmF0dXJlU2VydmljZS5jdXJyZW50RWRpdGFibGVJbWFnZS5zdHJldGNoO1xyXG4gICAgICB0aGlzLmN1cnJlbnRJbWFnZU5hdHVyYWxIZWlnaHQgPSB0aGlzLnNpZ25hdHVyZVNlcnZpY2UuY3VycmVudEVkaXRhYmxlSW1hZ2UubmF0dXJhbEhlaWdodDtcclxuICAgICAgdGhpcy5jdXJyZW50SW1hZ2VOYXR1cmFsV2lkdGggPSB0aGlzLnNpZ25hdHVyZVNlcnZpY2UuY3VycmVudEVkaXRhYmxlSW1hZ2UubmF0dXJhbFdpZHRoO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVTaWduYXR1cmVTdWJzY3JpcHRpb24gPSB0aGlzLnNpZ25hdHVyZVNlcnZpY2UuZ2V0SW5zZXJ0ZWRJbmZvcm1hdGlvbi5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC5ldmVudE5hbWUgPT0gXCJJbWFnZUVkaXRvclwiKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdE9iamVjdCA9IG5ldyBTdGlJbWFnZUVkaXRvclJlc3VsdCgpO1xyXG4gICAgICAgIHJlc3VsdE9iamVjdC5sb2FkZWRJbWFnZSA9IHRoaXMubG9hZGVkSW1hZ2U7XHJcbiAgICAgICAgcmVzdWx0T2JqZWN0LnZlcnRpY2FsQWxpZ25tZW50ID0gdGhpcy5jdXJyZW50VmVydGljYWxBbGlnbm1lbnQ7XHJcbiAgICAgICAgcmVzdWx0T2JqZWN0Lmhvcml6b250YWxBbGlnbm1lbnQgPSB0aGlzLmN1cnJlbnRIb3Jpem9udGFsQWxpZ25tZW50O1xyXG4gICAgICAgIHJlc3VsdE9iamVjdC5hc3BlY3RSYXRpbyA9IHRoaXMudXNlQXNwZWN0UmF0aW87XHJcbiAgICAgICAgcmVzdWx0T2JqZWN0LnN0cmV0Y2ggPSB0aGlzLnVzZVN0cmV0Y2g7XHJcbiAgICAgICAgcmVzdWx0T2JqZWN0Lm5hdHVyYWxIZWlnaHQgPSB0aGlzLmN1cnJlbnRJbWFnZU5hdHVyYWxIZWlnaHQ7XHJcbiAgICAgICAgcmVzdWx0T2JqZWN0Lm5hdHVyYWxXaWR0aCA9IHRoaXMuY3VycmVudEltYWdlTmF0dXJhbFdpZHRoO1xyXG4gICAgICAgIHRoaXMuc2lnbmF0dXJlU2VydmljZS51cGRhdGVTaWduYXR1cmUubmV4dCh7IHR5cGU6IFwiSW1hZ2VcIiwgdmFsdWU6IHJlc3VsdE9iamVjdCB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==