@guajiritos/image-picker 17.0.3 → 17.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/guachos-image-picker.component.mjs +6 -36
- package/esm2022/utils/pipes/calculate-size/calculate-size.pipe.mjs +3 -3
- package/esm2022/utils/pipes/i18n/i18n.pipe.mjs +3 -3
- package/esm2022/utils/pipes/pipes.module.mjs +4 -4
- package/fesm2022/guajiritos-image-picker.mjs +15 -46
- package/fesm2022/guajiritos-image-picker.mjs.map +1 -1
- package/package.json +7 -1
|
@@ -67,10 +67,10 @@ class I18nPipe {
|
|
|
67
67
|
transform(key, language) {
|
|
68
68
|
return language === 'en' ? this.en?.[key] : this.es?.[key];
|
|
69
69
|
}
|
|
70
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2
|
|
71
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2
|
|
70
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: I18nPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
71
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.2", ngImport: i0, type: I18nPipe, name: "i18n" });
|
|
72
72
|
}
|
|
73
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: I18nPipe, decorators: [{
|
|
74
74
|
type: Pipe,
|
|
75
75
|
args: [{
|
|
76
76
|
name: 'i18n'
|
|
@@ -89,10 +89,10 @@ class CalculateSizePipe {
|
|
|
89
89
|
return 0;
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2
|
|
93
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2
|
|
92
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: CalculateSizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
93
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.2", ngImport: i0, type: CalculateSizePipe, name: "calculateSize" });
|
|
94
94
|
}
|
|
95
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: CalculateSizePipe, decorators: [{
|
|
96
96
|
type: Pipe,
|
|
97
97
|
args: [{
|
|
98
98
|
name: 'calculateSize'
|
|
@@ -100,11 +100,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
100
100
|
}] });
|
|
101
101
|
|
|
102
102
|
class PipesModule {
|
|
103
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2
|
|
104
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2
|
|
105
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2
|
|
103
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: PipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
104
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.2", ngImport: i0, type: PipesModule, declarations: [I18nPipe, CalculateSizePipe], exports: [I18nPipe, CalculateSizePipe] });
|
|
105
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: PipesModule });
|
|
106
106
|
}
|
|
107
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2
|
|
107
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: PipesModule, decorators: [{
|
|
108
108
|
type: NgModule,
|
|
109
109
|
args: [{
|
|
110
110
|
declarations: [I18nPipe, CalculateSizePipe],
|
|
@@ -532,7 +532,7 @@ class GuajiritosImagePicker {
|
|
|
532
532
|
this.$imageChanged.next(this.imageSrc());
|
|
533
533
|
})
|
|
534
534
|
.catch((e) => {
|
|
535
|
-
|
|
535
|
+
console.log(e);
|
|
536
536
|
});
|
|
537
537
|
}
|
|
538
538
|
onRestore() {
|
|
@@ -573,10 +573,10 @@ class GuajiritosImagePicker {
|
|
|
573
573
|
this.unsubscribeAll$.next();
|
|
574
574
|
this.unsubscribeAll$.complete();
|
|
575
575
|
}
|
|
576
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2
|
|
577
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: GuajiritosImagePicker, isStandalone: true, selector: "guajiritos-image-picker", inputs: { appearance: "appearance", color: "color", imagesAllowed: "imagesAllowed", base64Image: "base64Image", _imageSrc: "_imageSrc", _config: "_config" }, outputs: { $imageChanged: "$imageChanged", $imageOriginal: "$imageOriginal", imageRemoved: "imageRemoved" }, viewQueries: [{ propertyName: "imagePicker", first: true, predicate: ["imagePicker"], descendants: true }], ngImport: i0, template: "@if (!loadImage()) {\r\n <div class='place-image'>\r\n <div class='image-holder'\r\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\r\n (click)='onUpload($event)'>\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (loadImage()) {\r\n <div class='place-image'>\r\n <div class='image-holder-loaded'\r\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n @if (imageSrc()?.length) {\r\n <p class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb {{ format.value }}\r\n </p>\r\n }\r\n <div class='editing-bar-btn'>\r\n @if (!config()?.hideAddBtn) {\r\n <button id='upload-img' mat-icon-button (click)='onUpload($event)'\r\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n }\r\n @if (!config()?.hideEditBtn && !noEdit()) {\r\n <button id='edit-img' mat-icon-button (click)='showEditPanel.set(true)'\r\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>edit</mat-icon>\r\n </button>\r\n }\r\n @if (!config()?.hideDownloadBtn) {\r\n <a id='download-img' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\r\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\r\n <mat-icon class='mat-18'>cloud_download</mat-icon>\r\n </a>\r\n }\r\n @if (!config()?.hideDeleteBtn) {\r\n <button id='delete-img' mat-icon-button (click)='onRemove()'\r\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>delete</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (showEditPanel()) {\r\n <div id='popup' class='popup'>\r\n <div class='popup-clear'>\r\n <button mat-icon-button (click)='onCloseEditPanel()'>\r\n <mat-icon class='mat-18'>clear</mat-icon>\r\n </button>\r\n </div>\r\n <div class='image-container'>\r\n <div class='image-holder-full'>\r\n <img id='image-full' [src]='imageSrc()' alt=''>\r\n <div id='image-cropper' class='image-cropper'>\r\n <div id='image-cropper-header'>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n <div class='control-panel'>\r\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\r\n <div class='quality-container'>\r\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\r\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\r\n <input matSliderThumb [formControl]='quality'>\r\n </mat-slider>\r\n </div>\r\n <div class='item-panel'>\r\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\r\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\r\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\r\n </mat-checkbox>\r\n </div>\r\n <div class='max-dimension-container'>\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(true, false)' matInput\r\n [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(false, true)' matInput\r\n [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\r\n <div class='formats-selection'>\r\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\r\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\r\n @for (format of allFormats; track format) {\r\n <mat-option [value]='format'>\r\n {{ format }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class='refresh-container'>\r\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\r\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\r\n </mat-checkbox>\r\n <div class='d-flex '>\r\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\r\n <mat-icon>refresh</mat-icon>\r\n </button>\r\n @if (showCrop.value) {\r\n <p>\r\n <button mat-icon-button [color]='color' (click)='onCrop()'>\r\n <mat-icon>crop</mat-icon>\r\n </button>\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n @if (showCrop.value) {\r\n <div class='dimension-container'>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\r\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\r\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n }\r\n <div class='save-container'>\r\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\r\n {{ 'SAVE' | i18n: config()?.language }}\r\n </button>\r\n @if (imageSrc()?.length) {\r\n <p class='mat-caption image-caption'\r\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb\r\n {{ format.value }}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [".d-none{display:none}.d-flex{display:flex}.fw-600{font-weight:600}.w-100{width:100%}.mw-100{max-width:100%}.w-48{width:48%}.mw-48{max-width:48%}.float-right{float:right}p{margin:0!important;padding:0!important}.place-image{flex-direction:column;box-sizing:border-box;display:flex;place-content:flex-start;align-items:center}.place-image .image-holder{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;width:320px;height:240px;border-radius:16px;max-width:100%!important;background-color:#fff}@media (max-width: 599px){.place-image .image-holder{max-width:100%!important;max-height:250px!important}}.place-image .image-holder .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .image-holder-loaded{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;max-width:100%!important;width:320px;height:240px;border-radius:4px;padding:2px}.place-image .image-holder-loaded .image-caption{position:absolute;right:0;bottom:-22px}.place-image .image-holder-loaded img{height:100%;max-height:100%;width:100%;max-width:100%;object-fit:contain;object-position:center}@media (max-width: 599px){.place-image .image-holder-loaded{max-height:195px!important}}.place-image .image-holder-loaded .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder-loaded .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder-loaded:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .editing-bar-btn{margin-top:2px;display:flex;flex-direction:row;box-sizing:border-box;place-content:flex-start;align-items:flex-start}.place-image .editing-bar-btn .mat-icon-button{height:20px;line-height:20px;width:24px}.place-image .editing-bar-btn mat-icon{line-height:20px!important;font-size:20px!important;width:20px!important;height:20px!important}.place-image .editing-bar-btn button{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn button:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.place-image .editing-bar-btn a{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn a:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.popup{width:100vw;max-height:100%;height:100%;overflow:auto;position:fixed;top:0;left:0;z-index:1000;padding:24px;color:#fff;box-sizing:border-box;animation-name:show;animation-duration:.4s}.popup .popup-clear{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-end;align-items:center}.popup .image-container{margin-top:50px;margin-bottom:50px;height:calc(100vh - 188px);min-height:calc(100vh - 188px);min-width:100%;width:100%;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start center;align-items:flex-start}.popup .image-container .image-holder-full{height:auto;width:auto;position:relative;display:contents}.popup img{max-height:600px;max-width:100%;object-fit:contain;object-position:center;margin:8px;transition:all .5s ease}@media (max-width: 1024px){.popup{background-color:#000000d9;padding:8px}.popup img{max-height:100%;max-width:100%}}@media (max-width: 599px){.popup img{margin:0}}.popup .control-panel{color:#000;background-color:#fff;margin:8px;padding:16px;max-width:100%;width:18rem;border-radius:8px;flex-direction:column;box-sizing:border-box;display:flex;place-content:stretch flex-start;align-items:stretch}@media (max-width: 599px){.popup .control-panel{margin:8px 0;width:100%}}.popup .control-panel .title-panel{padding:0 4px;font-size:16px;margin-bottom:16px!important}.popup .control-panel .item-panel{padding:0 4px!important;font-size:12px;display:flex;justify-content:space-between;align-items:center;gap:4px}.popup .control-panel .formats-selection{margin-top:8px!important;flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .max-dimension-container{margin-top:16px!important;flex-flow:row;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .dimension-container{margin-top:8px!important;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .save-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:center space-between;align-items:center}.popup .control-panel .save-container .save-button{padding:0 8px;height:34px;box-sizing:border-box;font-weight:600}.popup .control-panel .quality-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .refresh-container{display:flex;justify-content:space-between;align-items:center}.popup .control-panel .refresh-container div{display:flex;align-items:center}@keyframes show{0%{top:-100vh;opacity:0}to{top:0;opacity:1}}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.mat-select-panel{background:#fff!important}input.mat-input-element{color:#000000d9}.mat-checkbox-background{background-color:#fff}.image-cropper{position:absolute;width:150px;height:150px;border:2.5px solid white;box-sizing:border-box;resize:both;overflow:auto;opacity:0}.image-cropper #image-cropper-header{padding:10px;cursor:move;z-index:10;background-color:transparent;height:85%}.image-cropper #image-cropper-header mat-icon{color:#fff}.btn{padding:4px 8px;border-radius:4px;cursor:pointer}.btn mat-icon{color:#000000d1}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: PipesModule }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: CalculateSizePipe, name: "calculateSize" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i6.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i6.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i12.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: i12.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i12.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i12.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
576
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: GuajiritosImagePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
577
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.2", type: GuajiritosImagePicker, isStandalone: true, selector: "guajiritos-image-picker", inputs: { appearance: "appearance", color: "color", imagesAllowed: "imagesAllowed", base64Image: "base64Image", _imageSrc: "_imageSrc", _config: "_config" }, outputs: { $imageChanged: "$imageChanged", $imageOriginal: "$imageOriginal", imageRemoved: "imageRemoved" }, viewQueries: [{ propertyName: "imagePicker", first: true, predicate: ["imagePicker"], descendants: true }], ngImport: i0, template: "@if (!loadImage()) {\n <div class='place-image'>\n <div class='image-holder'\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\n (click)='onUpload($event)'>\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n </div>\n}\n\n@if (loadImage()) {\n <div class='place-image'>\n <div class='image-holder-loaded'\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n @if (imageSrc()?.length) {\n <p class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb {{ format.value }}\n </p>\n }\n <div class='editing-bar-btn'>\n @if (!config()?.hideAddBtn) {\n <button id='upload-img' mat-icon-button (click)='onUpload($event)'\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n }\n @if (!config()?.hideEditBtn && !noEdit()) {\n <button id='edit-img' mat-icon-button (click)='showEditPanel.set(true)'\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\n <mat-icon class='mat-18'>edit</mat-icon>\n </button>\n }\n @if (!config()?.hideDownloadBtn) {\n <a id='download-img' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\n <mat-icon class='mat-18'>cloud_download</mat-icon>\n </a>\n }\n @if (!config()?.hideDeleteBtn) {\n <button id='delete-img' mat-icon-button (click)='onRemove()'\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>delete</mat-icon>\n </button>\n }\n </div>\n </div>\n}\n\n@if (showEditPanel()) {\n <div id='popup' class='popup'>\n <div class='popup-clear'>\n <button mat-icon-button (click)='onCloseEditPanel()'>\n <mat-icon class='mat-18'>clear</mat-icon>\n </button>\n </div>\n <div class='image-container'>\n <div class='image-holder-full'>\n <img id='image-full' [src]='imageSrc()' alt=''>\n <div id='image-cropper' class='image-cropper'>\n <div id='image-cropper-header'>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n </div>\n </div>\n <div class='control-panel'>\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\n <div class='quality-container'>\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\n <input matSliderThumb [formControl]='quality'>\n </mat-slider>\n </div>\n <div class='item-panel'>\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\n </mat-checkbox>\n </div>\n <div class='max-dimension-container'>\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(true, false)' matInput\n [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(false, true)' matInput\n [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\n <div class='formats-selection'>\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\n @for (format of allFormats; track format) {\n <mat-option [value]='format'>\n {{ format }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n <div class='refresh-container'>\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\n </mat-checkbox>\n <div class='d-flex '>\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\n <mat-icon>refresh</mat-icon>\n </button>\n @if (showCrop.value) {\n <p>\n <button mat-icon-button [color]='color' (click)='onCrop()'>\n <mat-icon>crop</mat-icon>\n </button>\n </p>\n }\n </div>\n </div>\n @if (showCrop.value) {\n <div class='dimension-container'>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n }\n <div class='save-container'>\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\n {{ 'SAVE' | i18n: config()?.language }}\n </button>\n @if (imageSrc()?.length) {\n <p class='mat-caption image-caption'\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb\n {{ format.value }}\n </p>\n }\n </div>\n </div>\n </div>\n </div>\n}\n", styles: [".d-none{display:none}.d-flex{display:flex}.fw-600{font-weight:600}.w-100{width:100%}.mw-100{max-width:100%}.w-48{width:48%}.mw-48{max-width:48%}.float-right{float:right}p{margin:0!important;padding:0!important}.place-image{flex-direction:column;box-sizing:border-box;display:flex;place-content:flex-start;align-items:center}.place-image .image-holder{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;width:320px;height:240px;border-radius:16px;max-width:100%!important;background-color:#fff}@media (max-width: 599px){.place-image .image-holder{max-width:100%!important;max-height:250px!important}}.place-image .image-holder .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .image-holder-loaded{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;max-width:100%!important;width:320px;height:240px;border-radius:4px;padding:2px}.place-image .image-holder-loaded .image-caption{position:absolute;right:0;bottom:-22px}.place-image .image-holder-loaded img{height:100%;max-height:100%;width:100%;max-width:100%;object-fit:contain;object-position:center}@media (max-width: 599px){.place-image .image-holder-loaded{max-height:195px!important}}.place-image .image-holder-loaded .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder-loaded .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder-loaded:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .editing-bar-btn{margin-top:2px;display:flex;flex-direction:row;box-sizing:border-box;place-content:flex-start;align-items:flex-start}.place-image .editing-bar-btn .mat-icon-button{height:20px;line-height:20px;width:24px}.place-image .editing-bar-btn mat-icon{line-height:20px!important;font-size:20px!important;width:20px!important;height:20px!important}.place-image .editing-bar-btn button{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn button:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.place-image .editing-bar-btn a{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn a:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.popup{width:100vw;max-height:100%;height:100%;overflow:auto;position:fixed;top:0;left:0;z-index:1000;padding:24px;color:#fff;box-sizing:border-box;animation-name:show;animation-duration:.4s}.popup .popup-clear{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-end;align-items:center}.popup .image-container{margin-top:50px;margin-bottom:50px;height:calc(100vh - 188px);min-height:calc(100vh - 188px);min-width:100%;width:100%;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start center;align-items:flex-start}.popup .image-container .image-holder-full{height:auto;width:auto;position:relative;display:contents}.popup img{max-height:600px;max-width:100%;object-fit:contain;object-position:center;margin:8px;transition:all .5s ease}@media (max-width: 1024px){.popup{background-color:#000000d9;padding:8px}.popup img{max-height:100%;max-width:100%}}@media (max-width: 599px){.popup img{margin:0}}.popup .control-panel{color:#000;background-color:#fff;margin:8px;padding:16px;max-width:100%;width:18rem;border-radius:8px;flex-direction:column;box-sizing:border-box;display:flex;place-content:stretch flex-start;align-items:stretch}@media (max-width: 599px){.popup .control-panel{margin:8px 0;width:100%}}.popup .control-panel .title-panel{padding:0 4px;font-size:16px;margin-bottom:16px!important}.popup .control-panel .item-panel{padding:0 4px!important;font-size:12px;display:flex;justify-content:space-between;align-items:center;gap:4px}.popup .control-panel .formats-selection{margin-top:8px!important;flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .max-dimension-container{margin-top:16px!important;flex-flow:row;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .dimension-container{margin-top:8px!important;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .save-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:center space-between;align-items:center}.popup .control-panel .save-container .save-button{padding:0 8px;height:34px;box-sizing:border-box;font-weight:600}.popup .control-panel .quality-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .refresh-container{display:flex;justify-content:space-between;align-items:center}.popup .control-panel .refresh-container div{display:flex;align-items:center}@keyframes show{0%{top:-100vh;opacity:0}to{top:0;opacity:1}}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.mat-select-panel{background:#fff!important}input.mat-input-element{color:#000000d9}.mat-checkbox-background{background-color:#fff}.image-cropper{position:absolute;width:150px;height:150px;border:2.5px solid white;box-sizing:border-box;resize:both;overflow:auto;opacity:0}.image-cropper #image-cropper-header{padding:10px;cursor:move;z-index:10;background-color:transparent;height:85%}.image-cropper #image-cropper-header mat-icon{color:#fff}.btn{padding:4px 8px;border-radius:4px;cursor:pointer}.btn mat-icon{color:#000000d1}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: PipesModule }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: CalculateSizePipe, name: "calculateSize" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i6.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i6.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i12.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: i12.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i12.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i12.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
578
578
|
}
|
|
579
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2
|
|
579
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: GuajiritosImagePicker, decorators: [{
|
|
580
580
|
type: Component,
|
|
581
581
|
args: [{ selector: 'guajiritos-image-picker', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
582
582
|
NgStyle,
|
|
@@ -591,7 +591,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
591
591
|
MatSelectModule,
|
|
592
592
|
FormsModule,
|
|
593
593
|
ReactiveFormsModule
|
|
594
|
-
], template: "@if (!loadImage()) {\r\n <div class='place-image'>\r\n <div class='image-holder'\r\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\r\n (click)='onUpload($event)'>\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (loadImage()) {\r\n <div class='place-image'>\r\n <div class='image-holder-loaded'\r\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n @if (imageSrc()?.length) {\r\n <p class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb {{ format.value }}\r\n </p>\r\n }\r\n <div class='editing-bar-btn'>\r\n @if (!config()?.hideAddBtn) {\r\n <button id='upload-img' mat-icon-button (click)='onUpload($event)'\r\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n }\r\n @if (!config()?.hideEditBtn && !noEdit()) {\r\n <button id='edit-img' mat-icon-button (click)='showEditPanel.set(true)'\r\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>edit</mat-icon>\r\n </button>\r\n }\r\n @if (!config()?.hideDownloadBtn) {\r\n <a id='download-img' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\r\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\r\n <mat-icon class='mat-18'>cloud_download</mat-icon>\r\n </a>\r\n }\r\n @if (!config()?.hideDeleteBtn) {\r\n <button id='delete-img' mat-icon-button (click)='onRemove()'\r\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>delete</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (showEditPanel()) {\r\n <div id='popup' class='popup'>\r\n <div class='popup-clear'>\r\n <button mat-icon-button (click)='onCloseEditPanel()'>\r\n <mat-icon class='mat-18'>clear</mat-icon>\r\n </button>\r\n </div>\r\n <div class='image-container'>\r\n <div class='image-holder-full'>\r\n <img id='image-full' [src]='imageSrc()' alt=''>\r\n <div id='image-cropper' class='image-cropper'>\r\n <div id='image-cropper-header'>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n <div class='control-panel'>\r\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\r\n <div class='quality-container'>\r\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\r\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\r\n <input matSliderThumb [formControl]='quality'>\r\n </mat-slider>\r\n </div>\r\n <div class='item-panel'>\r\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\r\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\r\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\r\n </mat-checkbox>\r\n </div>\r\n <div class='max-dimension-container'>\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(true, false)' matInput\r\n [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(false, true)' matInput\r\n [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\r\n <div class='formats-selection'>\r\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\r\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\r\n @for (format of allFormats; track format) {\r\n <mat-option [value]='format'>\r\n {{ format }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class='refresh-container'>\r\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\r\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\r\n </mat-checkbox>\r\n <div class='d-flex '>\r\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\r\n <mat-icon>refresh</mat-icon>\r\n </button>\r\n @if (showCrop.value) {\r\n <p>\r\n <button mat-icon-button [color]='color' (click)='onCrop()'>\r\n <mat-icon>crop</mat-icon>\r\n </button>\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n @if (showCrop.value) {\r\n <div class='dimension-container'>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\r\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\r\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n }\r\n <div class='save-container'>\r\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\r\n {{ 'SAVE' | i18n: config()?.language }}\r\n </button>\r\n @if (imageSrc()?.length) {\r\n <p class='mat-caption image-caption'\r\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb\r\n {{ format.value }}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [".d-none{display:none}.d-flex{display:flex}.fw-600{font-weight:600}.w-100{width:100%}.mw-100{max-width:100%}.w-48{width:48%}.mw-48{max-width:48%}.float-right{float:right}p{margin:0!important;padding:0!important}.place-image{flex-direction:column;box-sizing:border-box;display:flex;place-content:flex-start;align-items:center}.place-image .image-holder{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;width:320px;height:240px;border-radius:16px;max-width:100%!important;background-color:#fff}@media (max-width: 599px){.place-image .image-holder{max-width:100%!important;max-height:250px!important}}.place-image .image-holder .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .image-holder-loaded{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;max-width:100%!important;width:320px;height:240px;border-radius:4px;padding:2px}.place-image .image-holder-loaded .image-caption{position:absolute;right:0;bottom:-22px}.place-image .image-holder-loaded img{height:100%;max-height:100%;width:100%;max-width:100%;object-fit:contain;object-position:center}@media (max-width: 599px){.place-image .image-holder-loaded{max-height:195px!important}}.place-image .image-holder-loaded .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder-loaded .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder-loaded:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .editing-bar-btn{margin-top:2px;display:flex;flex-direction:row;box-sizing:border-box;place-content:flex-start;align-items:flex-start}.place-image .editing-bar-btn .mat-icon-button{height:20px;line-height:20px;width:24px}.place-image .editing-bar-btn mat-icon{line-height:20px!important;font-size:20px!important;width:20px!important;height:20px!important}.place-image .editing-bar-btn button{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn button:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.place-image .editing-bar-btn a{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn a:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.popup{width:100vw;max-height:100%;height:100%;overflow:auto;position:fixed;top:0;left:0;z-index:1000;padding:24px;color:#fff;box-sizing:border-box;animation-name:show;animation-duration:.4s}.popup .popup-clear{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-end;align-items:center}.popup .image-container{margin-top:50px;margin-bottom:50px;height:calc(100vh - 188px);min-height:calc(100vh - 188px);min-width:100%;width:100%;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start center;align-items:flex-start}.popup .image-container .image-holder-full{height:auto;width:auto;position:relative;display:contents}.popup img{max-height:600px;max-width:100%;object-fit:contain;object-position:center;margin:8px;transition:all .5s ease}@media (max-width: 1024px){.popup{background-color:#000000d9;padding:8px}.popup img{max-height:100%;max-width:100%}}@media (max-width: 599px){.popup img{margin:0}}.popup .control-panel{color:#000;background-color:#fff;margin:8px;padding:16px;max-width:100%;width:18rem;border-radius:8px;flex-direction:column;box-sizing:border-box;display:flex;place-content:stretch flex-start;align-items:stretch}@media (max-width: 599px){.popup .control-panel{margin:8px 0;width:100%}}.popup .control-panel .title-panel{padding:0 4px;font-size:16px;margin-bottom:16px!important}.popup .control-panel .item-panel{padding:0 4px!important;font-size:12px;display:flex;justify-content:space-between;align-items:center;gap:4px}.popup .control-panel .formats-selection{margin-top:8px!important;flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .max-dimension-container{margin-top:16px!important;flex-flow:row;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .dimension-container{margin-top:8px!important;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .save-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:center space-between;align-items:center}.popup .control-panel .save-container .save-button{padding:0 8px;height:34px;box-sizing:border-box;font-weight:600}.popup .control-panel .quality-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .refresh-container{display:flex;justify-content:space-between;align-items:center}.popup .control-panel .refresh-container div{display:flex;align-items:center}@keyframes show{0%{top:-100vh;opacity:0}to{top:0;opacity:1}}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.mat-select-panel{background:#fff!important}input.mat-input-element{color:#000000d9}.mat-checkbox-background{background-color:#fff}.image-cropper{position:absolute;width:150px;height:150px;border:2.5px solid white;box-sizing:border-box;resize:both;overflow:auto;opacity:0}.image-cropper #image-cropper-header{padding:10px;cursor:move;z-index:10;background-color:transparent;height:85%}.image-cropper #image-cropper-header mat-icon{color:#fff}.btn{padding:4px 8px;border-radius:4px;cursor:pointer}.btn mat-icon{color:#000000d1}\n"] }]
|
|
594
|
+
], template: "@if (!loadImage()) {\n <div class='place-image'>\n <div class='image-holder'\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\n (click)='onUpload($event)'>\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n </div>\n}\n\n@if (loadImage()) {\n <div class='place-image'>\n <div class='image-holder-loaded'\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n @if (imageSrc()?.length) {\n <p class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb {{ format.value }}\n </p>\n }\n <div class='editing-bar-btn'>\n @if (!config()?.hideAddBtn) {\n <button id='upload-img' mat-icon-button (click)='onUpload($event)'\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n }\n @if (!config()?.hideEditBtn && !noEdit()) {\n <button id='edit-img' mat-icon-button (click)='showEditPanel.set(true)'\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\n <mat-icon class='mat-18'>edit</mat-icon>\n </button>\n }\n @if (!config()?.hideDownloadBtn) {\n <a id='download-img' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\n <mat-icon class='mat-18'>cloud_download</mat-icon>\n </a>\n }\n @if (!config()?.hideDeleteBtn) {\n <button id='delete-img' mat-icon-button (click)='onRemove()'\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>delete</mat-icon>\n </button>\n }\n </div>\n </div>\n}\n\n@if (showEditPanel()) {\n <div id='popup' class='popup'>\n <div class='popup-clear'>\n <button mat-icon-button (click)='onCloseEditPanel()'>\n <mat-icon class='mat-18'>clear</mat-icon>\n </button>\n </div>\n <div class='image-container'>\n <div class='image-holder-full'>\n <img id='image-full' [src]='imageSrc()' alt=''>\n <div id='image-cropper' class='image-cropper'>\n <div id='image-cropper-header'>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n </div>\n </div>\n <div class='control-panel'>\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\n <div class='quality-container'>\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\n <input matSliderThumb [formControl]='quality'>\n </mat-slider>\n </div>\n <div class='item-panel'>\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\n </mat-checkbox>\n </div>\n <div class='max-dimension-container'>\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(true, false)' matInput\n [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(false, true)' matInput\n [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\n <div class='formats-selection'>\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\n @for (format of allFormats; track format) {\n <mat-option [value]='format'>\n {{ format }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n <div class='refresh-container'>\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\n </mat-checkbox>\n <div class='d-flex '>\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\n <mat-icon>refresh</mat-icon>\n </button>\n @if (showCrop.value) {\n <p>\n <button mat-icon-button [color]='color' (click)='onCrop()'>\n <mat-icon>crop</mat-icon>\n </button>\n </p>\n }\n </div>\n </div>\n @if (showCrop.value) {\n <div class='dimension-container'>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n }\n <div class='save-container'>\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\n {{ 'SAVE' | i18n: config()?.language }}\n </button>\n @if (imageSrc()?.length) {\n <p class='mat-caption image-caption'\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb\n {{ format.value }}\n </p>\n }\n </div>\n </div>\n </div>\n </div>\n}\n", styles: [".d-none{display:none}.d-flex{display:flex}.fw-600{font-weight:600}.w-100{width:100%}.mw-100{max-width:100%}.w-48{width:48%}.mw-48{max-width:48%}.float-right{float:right}p{margin:0!important;padding:0!important}.place-image{flex-direction:column;box-sizing:border-box;display:flex;place-content:flex-start;align-items:center}.place-image .image-holder{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;width:320px;height:240px;border-radius:16px;max-width:100%!important;background-color:#fff}@media (max-width: 599px){.place-image .image-holder{max-width:100%!important;max-height:250px!important}}.place-image .image-holder .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .image-holder-loaded{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;max-width:100%!important;width:320px;height:240px;border-radius:4px;padding:2px}.place-image .image-holder-loaded .image-caption{position:absolute;right:0;bottom:-22px}.place-image .image-holder-loaded img{height:100%;max-height:100%;width:100%;max-width:100%;object-fit:contain;object-position:center}@media (max-width: 599px){.place-image .image-holder-loaded{max-height:195px!important}}.place-image .image-holder-loaded .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder-loaded .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder-loaded:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .editing-bar-btn{margin-top:2px;display:flex;flex-direction:row;box-sizing:border-box;place-content:flex-start;align-items:flex-start}.place-image .editing-bar-btn .mat-icon-button{height:20px;line-height:20px;width:24px}.place-image .editing-bar-btn mat-icon{line-height:20px!important;font-size:20px!important;width:20px!important;height:20px!important}.place-image .editing-bar-btn button{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn button:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.place-image .editing-bar-btn a{margin:4px;transition:all .5s ease}.place-image .editing-bar-btn a:hover{transform:scale(1.25);margin:4px 8px;transition:all .25s ease-in}.popup{width:100vw;max-height:100%;height:100%;overflow:auto;position:fixed;top:0;left:0;z-index:1000;padding:24px;color:#fff;box-sizing:border-box;animation-name:show;animation-duration:.4s}.popup .popup-clear{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-end;align-items:center}.popup .image-container{margin-top:50px;margin-bottom:50px;height:calc(100vh - 188px);min-height:calc(100vh - 188px);min-width:100%;width:100%;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start center;align-items:flex-start}.popup .image-container .image-holder-full{height:auto;width:auto;position:relative;display:contents}.popup img{max-height:600px;max-width:100%;object-fit:contain;object-position:center;margin:8px;transition:all .5s ease}@media (max-width: 1024px){.popup{background-color:#000000d9;padding:8px}.popup img{max-height:100%;max-width:100%}}@media (max-width: 599px){.popup img{margin:0}}.popup .control-panel{color:#000;background-color:#fff;margin:8px;padding:16px;max-width:100%;width:18rem;border-radius:8px;flex-direction:column;box-sizing:border-box;display:flex;place-content:stretch flex-start;align-items:stretch}@media (max-width: 599px){.popup .control-panel{margin:8px 0;width:100%}}.popup .control-panel .title-panel{padding:0 4px;font-size:16px;margin-bottom:16px!important}.popup .control-panel .item-panel{padding:0 4px!important;font-size:12px;display:flex;justify-content:space-between;align-items:center;gap:4px}.popup .control-panel .formats-selection{margin-top:8px!important;flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .max-dimension-container{margin-top:16px!important;flex-flow:row;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .dimension-container{margin-top:8px!important;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .save-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:center space-between;align-items:center}.popup .control-panel .save-container .save-button{padding:0 8px;height:34px;box-sizing:border-box;font-weight:600}.popup .control-panel .quality-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .refresh-container{display:flex;justify-content:space-between;align-items:center}.popup .control-panel .refresh-container div{display:flex;align-items:center}@keyframes show{0%{top:-100vh;opacity:0}to{top:0;opacity:1}}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.mat-select-panel{background:#fff!important}input.mat-input-element{color:#000000d9}.mat-checkbox-background{background-color:#fff}.image-cropper{position:absolute;width:150px;height:150px;border:2.5px solid white;box-sizing:border-box;resize:both;overflow:auto;opacity:0}.image-cropper #image-cropper-header{padding:10px;cursor:move;z-index:10;background-color:transparent;height:85%}.image-cropper #image-cropper-header mat-icon{color:#fff}.btn{padding:4px 8px;border-radius:4px;cursor:pointer}.btn mat-icon{color:#000000d1}\n"] }]
|
|
595
595
|
}], propDecorators: { appearance: [{
|
|
596
596
|
type: Input
|
|
597
597
|
}], color: [{
|
|
@@ -614,37 +614,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
614
614
|
}], _config: [{
|
|
615
615
|
type: Input
|
|
616
616
|
}] } });
|
|
617
|
-
/* istanbul ignore next */ /* c8 ignore start */ /* eslint-disable */ ;
|
|
618
|
-
function oo_cm() { try {
|
|
619
|
-
return (0, eval)("globalThis._console_ninja") || (0, eval)("/* https://github.com/wallabyjs/console-ninja#how-does-it-work */'use strict';var _0x1f7fe1=_0x37e4;(function(_0x47ffb5,_0x305716){var _0x372d84=_0x37e4,_0x325e8f=_0x47ffb5();while(!![]){try{var _0x493611=-parseInt(_0x372d84(0x225))/0x1*(-parseInt(_0x372d84(0x1d6))/0x2)+-parseInt(_0x372d84(0x1a9))/0x3*(-parseInt(_0x372d84(0x272))/0x4)+-parseInt(_0x372d84(0x25b))/0x5+-parseInt(_0x372d84(0x18b))/0x6*(-parseInt(_0x372d84(0x235))/0x7)+-parseInt(_0x372d84(0x1f1))/0x8*(parseInt(_0x372d84(0x1b9))/0x9)+parseInt(_0x372d84(0x1f2))/0xa*(-parseInt(_0x372d84(0x1ed))/0xb)+parseInt(_0x372d84(0x1e8))/0xc;if(_0x493611===_0x305716)break;else _0x325e8f['push'](_0x325e8f['shift']());}catch(_0x2b499e){_0x325e8f['push'](_0x325e8f['shift']());}}}(_0x28ed,0x45f58));function _0x28ed(){var _0x8ba4d7=[':logPointId:','_HTMLAllCollection','2376365mjTMQa','concat','_getOwnPropertyDescriptor','setter','Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20refreshing\\x20the\\x20page\\x20may\\x20help;\\x20also\\x20see\\x20','replace','parse','getOwnPropertyNames','port','_reconnectTimeout','nodeModules','String','_property','autoExpandMaxDepth','_additionalMetadata','_allowedToSend','url','ws/index.js','Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20restarting\\x20the\\x20process\\x20may\\x20help;\\x20also\\x20see\\x20','_console_ninja_session','resolveGetters','constructor','_propertyName','88864PeNoQn','props','autoExpand','_getOwnPropertyNames','method','level','create','onclose','versions','expId','453786hZRTMQ','_isPrimitiveWrapperType','_inNextEdge','1709583276763','_connectToHostNow','hasOwnProperty','index','_setNodeExpressionPath','stack','_ws','autoExpandPropertyCount','edge','Buffer','object','set','ws://','_cleanNode','astro','_type','_webSocketErrorDocsLink','catch','prototype','_p_','timeEnd','WebSocket','global','slice','Error','_isPrimitiveType','_isUndefined','54iRnQJN','_objectToString','trace','isArray','_quotedRegExp','time','','_setNodeLabel','','unknown','funcName','Set','\\x20browser','reduceLimits','failed\\x20to\\x20connect\\x20to\\x20host:\\x20','getOwnPropertyDescriptor','9VpHEMS','includes','_Symbol','negativeInfinity','function','message','nan','onmessage','_dateToString','root_exp','rootExpression','dockerizedApp','_WebSocketClass','getter','hostname','warn','array','_isMap','elapsed','_allowedToConnectOnSend','log','NEGATIVE_INFINITY','cappedElements','_processTreeNodeResult','reload','_connected','value','readyState','autoExpandLimit','14twUgXH',\"c:\\\\Users\\\\fcarr\\\\.vscode\\\\extensions\\\\wallabyjs.console-ninja-1.0.290\\\\node_modules\",'_treeNodePropertiesAfterFullValue','...','string','_maxConnectAttemptCount','_capIfString','allStrLength','coverage','map','pop','_addLoadNode','elements','number','Map','path','[object\\x20Array]','NEXT_RUNTIME','8772096aBeiNa','_regExpToString','_setNodeId','totalStrLength','data','275zCfauG','negativeZero','symbol','getWebSocketClass','3827464fsivUc','99430rMpwcs','push','_connectAttemptCount','env','split','null','_setNodePermissions','type','_keyStrRegExp','__es'+'Module','node','_hasMapOnItsPath','toString','_consoleNinjaAllowedToStart','close','send','_isNegativeZero','then','_inBrowser','unref','name','unshift','hits','angular','_socket','_disposeWebsocket','10418','length','_blacklistedProperty','perf_hooks','expressionsToEvaluate','_isSet','_sendErrorMessage','127.0.0.1','process','host','join','HTMLAllCollection','_addFunctionsNode','_treeNodePropertiesBeforeFullValue','getOwnPropertySymbols','strLength','failed\\x20to\\x20find\\x20and\\x20load\\x20WebSocket','call','_getOwnPropertySymbols','_hasSymbolPropertyOnItsPath','depth','_WebSocket','bind','_setNodeQueryPath','isExpressionToEvaluate','29525YGRNBJ','count','noFunctions','_attemptToReconnectShortly','stackTraceLimit','Number','performance','test','valueOf','positiveInfinity','_p_length','error','onerror','_console_ninja','[object\\x20Map]','cappedProps','14hxDKYV','indexOf','forEach','parent','get','serialize','getPrototypeOf','_addProperty','timeStamp','location','capped','undefined','_connecting','[object\\x20BigInt]','_setNodeExpandableState','enumerable','autoExpandPreviousObjects','https://tinyurl.com/37x8b79t','\\x20server','hrtime','sortProps','match','bigint','logger\\x20failed\\x20to\\x20connect\\x20to\\x20host,\\x20see\\x20','sort','toLowerCase','_undefined','onopen','now','POSITIVE_INFINITY','current','logger\\x20failed\\x20to\\x20connect\\x20to\\x20host','_isArray','console','_addObjectProperty','gateway.docker.internal'];_0x28ed=function(){return _0x8ba4d7;};return _0x28ed();}function _0x37e4(_0x69e146,_0x3db28d){var _0x28ed6e=_0x28ed();return _0x37e4=function(_0x37e460,_0x19a257){_0x37e460=_0x37e460-0x189;var _0x1890cd=_0x28ed6e[_0x37e460];return _0x1890cd;},_0x37e4(_0x69e146,_0x3db28d);}var j=Object[_0x1f7fe1(0x278)],H=Object['defineProperty'],G=Object[_0x1f7fe1(0x1b8)],ee=Object[_0x1f7fe1(0x262)],te=Object[_0x1f7fe1(0x23b)],ne=Object[_0x1f7fe1(0x1a0)][_0x1f7fe1(0x190)],re=(_0x5ac642,_0x1cf560,_0x561553,_0x20c447)=>{var _0x45c202=_0x1f7fe1;if(_0x1cf560&&typeof _0x1cf560==_0x45c202(0x198)||typeof _0x1cf560==_0x45c202(0x1bd)){for(let _0x508a2c of ee(_0x1cf560))!ne[_0x45c202(0x21d)](_0x5ac642,_0x508a2c)&&_0x508a2c!==_0x561553&&H(_0x5ac642,_0x508a2c,{'get':()=>_0x1cf560[_0x508a2c],'enumerable':!(_0x20c447=G(_0x1cf560,_0x508a2c))||_0x20c447[_0x45c202(0x244)]});}return _0x5ac642;},x=(_0x1a9261,_0xb842e1,_0x3a123d)=>(_0x3a123d=_0x1a9261!=null?j(te(_0x1a9261)):{},re(_0xb842e1||!_0x1a9261||!_0x1a9261[_0x1f7fe1(0x1fb)]?H(_0x3a123d,'default',{'value':_0x1a9261,'enumerable':!0x0}):_0x3a123d,_0x1a9261)),X=class{constructor(_0x258946,_0x4abc24,_0x53a90a,_0x68db45,_0x5457e8){var _0x2597cb=_0x1f7fe1;this[_0x2597cb(0x1a4)]=_0x258946,this[_0x2597cb(0x215)]=_0x4abc24,this[_0x2597cb(0x263)]=_0x53a90a,this[_0x2597cb(0x265)]=_0x68db45,this['dockerizedApp']=_0x5457e8,this['_allowedToSend']=!0x0,this[_0x2597cb(0x1cc)]=!0x0,this[_0x2597cb(0x1d2)]=!0x1,this[_0x2597cb(0x241)]=!0x1,this[_0x2597cb(0x18d)]=_0x258946[_0x2597cb(0x214)]?.['env']?.[_0x2597cb(0x1e7)]==='edge',this[_0x2597cb(0x204)]=!this[_0x2597cb(0x1a4)][_0x2597cb(0x214)]?.[_0x2597cb(0x189)]?.[_0x2597cb(0x1fc)]&&!this[_0x2597cb(0x18d)],this['_WebSocketClass']=null,this[_0x2597cb(0x1f4)]=0x0,this[_0x2597cb(0x1db)]=0x14,this[_0x2597cb(0x19e)]=_0x2597cb(0x246),this[_0x2597cb(0x212)]=(this[_0x2597cb(0x204)]?_0x2597cb(0x25f):_0x2597cb(0x26d))+this['_webSocketErrorDocsLink'];}async[_0x1f7fe1(0x1f0)](){var _0x3361a6=_0x1f7fe1;if(this[_0x3361a6(0x1c5)])return this['_WebSocketClass'];let _0x240d8f;if(this[_0x3361a6(0x204)]||this['_inNextEdge'])_0x240d8f=this['global'][_0x3361a6(0x1a3)];else{if(this['global']['process']?.[_0x3361a6(0x221)])_0x240d8f=this['global'][_0x3361a6(0x214)]?.[_0x3361a6(0x221)];else try{let _0x425912=await import(_0x3361a6(0x1e5));_0x240d8f=(await import((await import(_0x3361a6(0x26b)))['pathToFileURL'](_0x425912[_0x3361a6(0x216)](this[_0x3361a6(0x265)],_0x3361a6(0x26c)))[_0x3361a6(0x1fe)]()))['default'];}catch{try{_0x240d8f=require(require(_0x3361a6(0x1e5))[_0x3361a6(0x216)](this[_0x3361a6(0x265)],'ws'));}catch{throw new Error(_0x3361a6(0x21c));}}}return this[_0x3361a6(0x1c5)]=_0x240d8f,_0x240d8f;}[_0x1f7fe1(0x18f)](){var _0x1041c7=_0x1f7fe1;this[_0x1041c7(0x241)]||this[_0x1041c7(0x1d2)]||this[_0x1041c7(0x1f4)]>=this['_maxConnectAttemptCount']||(this[_0x1041c7(0x1cc)]=!0x1,this[_0x1041c7(0x241)]=!0x0,this[_0x1041c7(0x1f4)]++,this[_0x1041c7(0x194)]=new Promise((_0x1d47a8,_0x3026d6)=>{var _0xdd1106=_0x1041c7;this[_0xdd1106(0x1f0)]()[_0xdd1106(0x203)](_0x4cc8ff=>{var _0x47dac7=_0xdd1106;let _0x1d10d0=new _0x4cc8ff(_0x47dac7(0x19a)+(!this[_0x47dac7(0x204)]&&this[_0x47dac7(0x1c4)]?_0x47dac7(0x258):this['host'])+':'+this['port']);_0x1d10d0[_0x47dac7(0x231)]=()=>{var _0x836ce0=_0x47dac7;this[_0x836ce0(0x26a)]=!0x1,this['_disposeWebsocket'](_0x1d10d0),this[_0x836ce0(0x228)](),_0x3026d6(new Error('logger\\x20websocket\\x20error'));},_0x1d10d0[_0x47dac7(0x250)]=()=>{var _0x316d98=_0x47dac7;this['_inBrowser']||_0x1d10d0[_0x316d98(0x20a)]&&_0x1d10d0[_0x316d98(0x20a)]['unref']&&_0x1d10d0[_0x316d98(0x20a)][_0x316d98(0x205)](),_0x1d47a8(_0x1d10d0);},_0x1d10d0['onclose']=()=>{var _0x31901b=_0x47dac7;this[_0x31901b(0x1cc)]=!0x0,this[_0x31901b(0x20b)](_0x1d10d0),this[_0x31901b(0x228)]();},_0x1d10d0[_0x47dac7(0x1c0)]=_0x934319=>{var _0x2f2917=_0x47dac7;try{_0x934319&&_0x934319[_0x2f2917(0x1ec)]&&this[_0x2f2917(0x204)]&&JSON[_0x2f2917(0x261)](_0x934319['data'])[_0x2f2917(0x276)]===_0x2f2917(0x1d1)&&this[_0x2f2917(0x1a4)][_0x2f2917(0x23e)]['reload']();}catch{}};})[_0xdd1106(0x203)](_0x479578=>(this[_0xdd1106(0x1d2)]=!0x0,this[_0xdd1106(0x241)]=!0x1,this[_0xdd1106(0x1cc)]=!0x1,this[_0xdd1106(0x26a)]=!0x0,this[_0xdd1106(0x1f4)]=0x0,_0x479578))[_0xdd1106(0x19f)](_0x4edd30=>(this[_0xdd1106(0x1d2)]=!0x1,this['_connecting']=!0x1,console[_0xdd1106(0x1c8)](_0xdd1106(0x24c)+this[_0xdd1106(0x19e)]),_0x3026d6(new Error(_0xdd1106(0x1b7)+(_0x4edd30&&_0x4edd30[_0xdd1106(0x1be)])))));}));}['_disposeWebsocket'](_0x49318d){var _0x4323c0=_0x1f7fe1;this[_0x4323c0(0x1d2)]=!0x1,this[_0x4323c0(0x241)]=!0x1;try{_0x49318d[_0x4323c0(0x279)]=null,_0x49318d[_0x4323c0(0x231)]=null,_0x49318d[_0x4323c0(0x250)]=null;}catch{}try{_0x49318d[_0x4323c0(0x1d4)]<0x2&&_0x49318d[_0x4323c0(0x200)]();}catch{}}['_attemptToReconnectShortly'](){var _0xafae58=_0x1f7fe1;clearTimeout(this[_0xafae58(0x264)]),!(this[_0xafae58(0x1f4)]>=this[_0xafae58(0x1db)])&&(this[_0xafae58(0x264)]=setTimeout(()=>{var _0x17ce1b=_0xafae58;this[_0x17ce1b(0x1d2)]||this[_0x17ce1b(0x241)]||(this[_0x17ce1b(0x18f)](),this['_ws']?.[_0x17ce1b(0x19f)](()=>this[_0x17ce1b(0x228)]()));},0x1f4),this[_0xafae58(0x264)][_0xafae58(0x205)]&&this['_reconnectTimeout'][_0xafae58(0x205)]());}async[_0x1f7fe1(0x201)](_0x16766e){var _0x150c4e=_0x1f7fe1;try{if(!this[_0x150c4e(0x26a)])return;this[_0x150c4e(0x1cc)]&&this[_0x150c4e(0x18f)](),(await this[_0x150c4e(0x194)])[_0x150c4e(0x201)](JSON['stringify'](_0x16766e));}catch(_0x58d9aa){console[_0x150c4e(0x1c8)](this[_0x150c4e(0x212)]+':\\x20'+(_0x58d9aa&&_0x58d9aa[_0x150c4e(0x1be)])),this[_0x150c4e(0x26a)]=!0x1,this['_attemptToReconnectShortly']();}}};function b(_0x1266e6,_0x5e5ebe,_0x3659b0,_0x42e04e,_0x503754,_0xf95501){var _0x1cbf77=_0x1f7fe1;let _0x1c2814=_0x3659b0['split'](',')[_0x1cbf77(0x1df)](_0x290148=>{var _0x4336e5=_0x1cbf77;try{_0x1266e6[_0x4336e5(0x26e)]||((_0x503754==='next.js'||_0x503754==='remix'||_0x503754===_0x4336e5(0x19c)||_0x503754==='angular')&&(_0x503754+=!_0x1266e6[_0x4336e5(0x214)]?.['versions']?.[_0x4336e5(0x1fc)]&&_0x1266e6[_0x4336e5(0x214)]?.[_0x4336e5(0x1f5)]?.['NEXT_RUNTIME']!==_0x4336e5(0x196)?_0x4336e5(0x1b5):_0x4336e5(0x247)),_0x1266e6['_console_ninja_session']={'id':+new Date(),'tool':_0x503754});let _0xd2e366=new X(_0x1266e6,_0x5e5ebe,_0x290148,_0x42e04e,_0xf95501);return _0xd2e366[_0x4336e5(0x201)][_0x4336e5(0x222)](_0xd2e366);}catch(_0x46304f){return console['warn'](_0x4336e5(0x254),_0x46304f&&_0x46304f[_0x4336e5(0x1be)]),()=>{};}});return _0x130af4=>_0x1c2814[_0x1cbf77(0x237)](_0x353891=>_0x353891(_0x130af4));}function W(_0x23fa9f){var _0x409e0d=_0x1f7fe1;let _0x4e8289=function(_0x1deaf8,_0x175b0b){return _0x175b0b-_0x1deaf8;},_0x52630f;if(_0x23fa9f[_0x409e0d(0x22b)])_0x52630f=function(){var _0x343bf=_0x409e0d;return _0x23fa9f[_0x343bf(0x22b)][_0x343bf(0x251)]();};else{if(_0x23fa9f[_0x409e0d(0x214)]&&_0x23fa9f[_0x409e0d(0x214)][_0x409e0d(0x248)]&&_0x23fa9f[_0x409e0d(0x214)]?.[_0x409e0d(0x1f5)]?.[_0x409e0d(0x1e7)]!==_0x409e0d(0x196))_0x52630f=function(){var _0x3f21b4=_0x409e0d;return _0x23fa9f[_0x3f21b4(0x214)][_0x3f21b4(0x248)]();},_0x4e8289=function(_0x5ba0ff,_0x3f75fb){return 0x3e8*(_0x3f75fb[0x0]-_0x5ba0ff[0x0])+(_0x3f75fb[0x1]-_0x5ba0ff[0x1])/0xf4240;};else try{let {performance:_0x830f41}=require(_0x409e0d(0x20f));_0x52630f=function(){return _0x830f41['now']();};}catch{_0x52630f=function(){return+new Date();};}}return{'elapsed':_0x4e8289,'timeStamp':_0x52630f,'now':()=>Date[_0x409e0d(0x251)]()};}function J(_0x4220c1,_0x2aef74,_0x3cf029){var _0x551246=_0x1f7fe1;if(_0x4220c1[_0x551246(0x1ff)]!==void 0x0)return _0x4220c1['_consoleNinjaAllowedToStart'];let _0x1283f4=_0x4220c1[_0x551246(0x214)]?.[_0x551246(0x189)]?.[_0x551246(0x1fc)]||_0x4220c1[_0x551246(0x214)]?.[_0x551246(0x1f5)]?.['NEXT_RUNTIME']===_0x551246(0x196);return _0x1283f4&&_0x3cf029==='nuxt'?_0x4220c1[_0x551246(0x1ff)]=!0x1:_0x4220c1[_0x551246(0x1ff)]=_0x1283f4||!_0x2aef74||_0x4220c1['location']?.['hostname']&&_0x2aef74[_0x551246(0x1ba)](_0x4220c1['location'][_0x551246(0x1c7)]),_0x4220c1['_consoleNinjaAllowedToStart'];}function Y(_0x4a231c,_0x39e58b,_0x2e0b83,_0x12de0b){var _0x11d2fd=_0x1f7fe1;_0x4a231c=_0x4a231c,_0x39e58b=_0x39e58b,_0x2e0b83=_0x2e0b83,_0x12de0b=_0x12de0b;let _0x35cb99=W(_0x4a231c),_0x27fc15=_0x35cb99[_0x11d2fd(0x1cb)],_0x9e4c4d=_0x35cb99['timeStamp'];class _0x33872f{constructor(){var _0x25774f=_0x11d2fd;this[_0x25774f(0x1fa)]=/^(?!(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$)[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/,this['_numberRegExp']=/^(0|[1-9][0-9]*)$/,this[_0x25774f(0x1ad)]=/'([^\\\\']|\\\\')*'/,this['_undefined']=_0x4a231c[_0x25774f(0x240)],this[_0x25774f(0x25a)]=_0x4a231c['HTMLAllCollection'],this['_getOwnPropertyDescriptor']=Object['getOwnPropertyDescriptor'],this[_0x25774f(0x275)]=Object[_0x25774f(0x262)],this['_Symbol']=_0x4a231c['Symbol'],this['_regExpToString']=RegExp[_0x25774f(0x1a0)]['toString'],this[_0x25774f(0x1c1)]=Date[_0x25774f(0x1a0)][_0x25774f(0x1fe)];}[_0x11d2fd(0x23a)](_0x3811cf,_0x356064,_0x4f2c04,_0x1eef20){var _0x44970c=_0x11d2fd,_0x2c428f=this,_0x4e9b94=_0x4f2c04[_0x44970c(0x274)];function _0x56a9a7(_0x56ecc6,_0x45009d,_0x30aaee){var _0x4e0075=_0x44970c;_0x45009d['type']=_0x4e0075(0x1b2),_0x45009d[_0x4e0075(0x230)]=_0x56ecc6[_0x4e0075(0x1be)],_0x3032b6=_0x30aaee[_0x4e0075(0x1fc)][_0x4e0075(0x253)],_0x30aaee[_0x4e0075(0x1fc)][_0x4e0075(0x253)]=_0x45009d,_0x2c428f[_0x4e0075(0x219)](_0x45009d,_0x30aaee);}try{_0x4f2c04[_0x44970c(0x277)]++,_0x4f2c04[_0x44970c(0x274)]&&_0x4f2c04[_0x44970c(0x245)][_0x44970c(0x1f3)](_0x356064);var _0x4839bd,_0x4b4f61,_0x1ebfe1,_0x244d80,_0xbe4d9a=[],_0xdfac7a=[],_0x1705af,_0x3e3e7f=this[_0x44970c(0x19d)](_0x356064),_0x1c36fe=_0x3e3e7f===_0x44970c(0x1c9),_0x13b536=!0x1,_0x5b148b=_0x3e3e7f==='function',_0x575384=this[_0x44970c(0x1a7)](_0x3e3e7f),_0x34250c=this['_isPrimitiveWrapperType'](_0x3e3e7f),_0x3e85e0=_0x575384||_0x34250c,_0x25c339={},_0x16e036=0x0,_0x3cc5fd=!0x1,_0x3032b6,_0x8dc30c=/^(([1-9]{1}[0-9]*)|0)$/;if(_0x4f2c04[_0x44970c(0x220)]){if(_0x1c36fe){if(_0x4b4f61=_0x356064[_0x44970c(0x20d)],_0x4b4f61>_0x4f2c04['elements']){for(_0x1ebfe1=0x0,_0x244d80=_0x4f2c04[_0x44970c(0x1e2)],_0x4839bd=_0x1ebfe1;_0x4839bd<_0x244d80;_0x4839bd++)_0xdfac7a['push'](_0x2c428f['_addProperty'](_0xbe4d9a,_0x356064,_0x3e3e7f,_0x4839bd,_0x4f2c04));_0x3811cf[_0x44970c(0x1cf)]=!0x0;}else{for(_0x1ebfe1=0x0,_0x244d80=_0x4b4f61,_0x4839bd=_0x1ebfe1;_0x4839bd<_0x244d80;_0x4839bd++)_0xdfac7a[_0x44970c(0x1f3)](_0x2c428f[_0x44970c(0x23c)](_0xbe4d9a,_0x356064,_0x3e3e7f,_0x4839bd,_0x4f2c04));}_0x4f2c04[_0x44970c(0x195)]+=_0xdfac7a[_0x44970c(0x20d)];}if(!(_0x3e3e7f===_0x44970c(0x1f7)||_0x3e3e7f==='undefined')&&!_0x575384&&_0x3e3e7f!==_0x44970c(0x266)&&_0x3e3e7f!==_0x44970c(0x197)&&_0x3e3e7f!==_0x44970c(0x24b)){var _0xb99f3c=_0x1eef20[_0x44970c(0x273)]||_0x4f2c04[_0x44970c(0x273)];if(this[_0x44970c(0x211)](_0x356064)?(_0x4839bd=0x0,_0x356064[_0x44970c(0x237)](function(_0x19c16a){var _0xbae55e=_0x44970c;if(_0x16e036++,_0x4f2c04['autoExpandPropertyCount']++,_0x16e036>_0xb99f3c){_0x3cc5fd=!0x0;return;}if(!_0x4f2c04[_0xbae55e(0x224)]&&_0x4f2c04['autoExpand']&&_0x4f2c04[_0xbae55e(0x195)]>_0x4f2c04[_0xbae55e(0x1d5)]){_0x3cc5fd=!0x0;return;}_0xdfac7a[_0xbae55e(0x1f3)](_0x2c428f[_0xbae55e(0x23c)](_0xbe4d9a,_0x356064,_0xbae55e(0x1b4),_0x4839bd++,_0x4f2c04,function(_0x232a17){return function(){return _0x232a17;};}(_0x19c16a)));})):this[_0x44970c(0x1ca)](_0x356064)&&_0x356064[_0x44970c(0x237)](function(_0x49e5a8,_0x14bf92){var _0x21c289=_0x44970c;if(_0x16e036++,_0x4f2c04[_0x21c289(0x195)]++,_0x16e036>_0xb99f3c){_0x3cc5fd=!0x0;return;}if(!_0x4f2c04['isExpressionToEvaluate']&&_0x4f2c04['autoExpand']&&_0x4f2c04[_0x21c289(0x195)]>_0x4f2c04['autoExpandLimit']){_0x3cc5fd=!0x0;return;}var _0x57858b=_0x14bf92[_0x21c289(0x1fe)]();_0x57858b[_0x21c289(0x20d)]>0x64&&(_0x57858b=_0x57858b[_0x21c289(0x1a5)](0x0,0x64)+_0x21c289(0x1d9)),_0xdfac7a[_0x21c289(0x1f3)](_0x2c428f[_0x21c289(0x23c)](_0xbe4d9a,_0x356064,_0x21c289(0x1e4),_0x57858b,_0x4f2c04,function(_0x311c38){return function(){return _0x311c38;};}(_0x49e5a8)));}),!_0x13b536){try{for(_0x1705af in _0x356064)if(!(_0x1c36fe&&_0x8dc30c['test'](_0x1705af))&&!this[_0x44970c(0x20e)](_0x356064,_0x1705af,_0x4f2c04)){if(_0x16e036++,_0x4f2c04[_0x44970c(0x195)]++,_0x16e036>_0xb99f3c){_0x3cc5fd=!0x0;break;}if(!_0x4f2c04[_0x44970c(0x224)]&&_0x4f2c04['autoExpand']&&_0x4f2c04['autoExpandPropertyCount']>_0x4f2c04[_0x44970c(0x1d5)]){_0x3cc5fd=!0x0;break;}_0xdfac7a[_0x44970c(0x1f3)](_0x2c428f['_addObjectProperty'](_0xbe4d9a,_0x25c339,_0x356064,_0x3e3e7f,_0x1705af,_0x4f2c04));}}catch{}if(_0x25c339[_0x44970c(0x22f)]=!0x0,_0x5b148b&&(_0x25c339['_p_name']=!0x0),!_0x3cc5fd){var _0x9e31=[][_0x44970c(0x25c)](this[_0x44970c(0x275)](_0x356064))[_0x44970c(0x25c)](this[_0x44970c(0x21e)](_0x356064));for(_0x4839bd=0x0,_0x4b4f61=_0x9e31[_0x44970c(0x20d)];_0x4839bd<_0x4b4f61;_0x4839bd++)if(_0x1705af=_0x9e31[_0x4839bd],!(_0x1c36fe&&_0x8dc30c[_0x44970c(0x22c)](_0x1705af[_0x44970c(0x1fe)]()))&&!this[_0x44970c(0x20e)](_0x356064,_0x1705af,_0x4f2c04)&&!_0x25c339[_0x44970c(0x1a1)+_0x1705af[_0x44970c(0x1fe)]()]){if(_0x16e036++,_0x4f2c04['autoExpandPropertyCount']++,_0x16e036>_0xb99f3c){_0x3cc5fd=!0x0;break;}if(!_0x4f2c04[_0x44970c(0x224)]&&_0x4f2c04['autoExpand']&&_0x4f2c04['autoExpandPropertyCount']>_0x4f2c04[_0x44970c(0x1d5)]){_0x3cc5fd=!0x0;break;}_0xdfac7a[_0x44970c(0x1f3)](_0x2c428f[_0x44970c(0x257)](_0xbe4d9a,_0x25c339,_0x356064,_0x3e3e7f,_0x1705af,_0x4f2c04));}}}}}if(_0x3811cf['type']=_0x3e3e7f,_0x3e85e0?(_0x3811cf[_0x44970c(0x1d3)]=_0x356064[_0x44970c(0x22d)](),this[_0x44970c(0x1dc)](_0x3e3e7f,_0x3811cf,_0x4f2c04,_0x1eef20)):_0x3e3e7f==='date'?_0x3811cf['value']=this[_0x44970c(0x1c1)]['call'](_0x356064):_0x3e3e7f===_0x44970c(0x24b)?_0x3811cf[_0x44970c(0x1d3)]=_0x356064[_0x44970c(0x1fe)]():_0x3e3e7f==='RegExp'?_0x3811cf['value']=this[_0x44970c(0x1e9)][_0x44970c(0x21d)](_0x356064):_0x3e3e7f===_0x44970c(0x1ef)&&this[_0x44970c(0x1bb)]?_0x3811cf[_0x44970c(0x1d3)]=this['_Symbol'][_0x44970c(0x1a0)][_0x44970c(0x1fe)][_0x44970c(0x21d)](_0x356064):!_0x4f2c04['depth']&&!(_0x3e3e7f===_0x44970c(0x1f7)||_0x3e3e7f===_0x44970c(0x240))&&(delete _0x3811cf['value'],_0x3811cf['capped']=!0x0),_0x3cc5fd&&(_0x3811cf[_0x44970c(0x234)]=!0x0),_0x3032b6=_0x4f2c04[_0x44970c(0x1fc)][_0x44970c(0x253)],_0x4f2c04[_0x44970c(0x1fc)][_0x44970c(0x253)]=_0x3811cf,this['_treeNodePropertiesBeforeFullValue'](_0x3811cf,_0x4f2c04),_0xdfac7a[_0x44970c(0x20d)]){for(_0x4839bd=0x0,_0x4b4f61=_0xdfac7a[_0x44970c(0x20d)];_0x4839bd<_0x4b4f61;_0x4839bd++)_0xdfac7a[_0x4839bd](_0x4839bd);}_0xbe4d9a['length']&&(_0x3811cf[_0x44970c(0x273)]=_0xbe4d9a);}catch(_0x370d44){_0x56a9a7(_0x370d44,_0x3811cf,_0x4f2c04);}return this[_0x44970c(0x269)](_0x356064,_0x3811cf),this['_treeNodePropertiesAfterFullValue'](_0x3811cf,_0x4f2c04),_0x4f2c04[_0x44970c(0x1fc)][_0x44970c(0x253)]=_0x3032b6,_0x4f2c04['level']--,_0x4f2c04['autoExpand']=_0x4e9b94,_0x4f2c04[_0x44970c(0x274)]&&_0x4f2c04[_0x44970c(0x245)][_0x44970c(0x1e0)](),_0x3811cf;}[_0x11d2fd(0x21e)](_0x48b7d6){var _0x3de307=_0x11d2fd;return Object['getOwnPropertySymbols']?Object[_0x3de307(0x21a)](_0x48b7d6):[];}[_0x11d2fd(0x211)](_0x3763e4){var _0x55b8a1=_0x11d2fd;return!!(_0x3763e4&&_0x4a231c[_0x55b8a1(0x1b4)]&&this['_objectToString'](_0x3763e4)==='[object\\x20Set]'&&_0x3763e4[_0x55b8a1(0x237)]);}[_0x11d2fd(0x20e)](_0x4769e4,_0x48cf79,_0x5a42e8){var _0x28c014=_0x11d2fd;return _0x5a42e8[_0x28c014(0x227)]?typeof _0x4769e4[_0x48cf79]==_0x28c014(0x1bd):!0x1;}['_type'](_0x49dfdd){var _0x55173a=_0x11d2fd,_0x912292='';return _0x912292=typeof _0x49dfdd,_0x912292===_0x55173a(0x198)?this[_0x55173a(0x1aa)](_0x49dfdd)===_0x55173a(0x1e6)?_0x912292=_0x55173a(0x1c9):this['_objectToString'](_0x49dfdd)==='[object\\x20Date]'?_0x912292='date':this[_0x55173a(0x1aa)](_0x49dfdd)===_0x55173a(0x242)?_0x912292=_0x55173a(0x24b):_0x49dfdd===null?_0x912292=_0x55173a(0x1f7):_0x49dfdd[_0x55173a(0x270)]&&(_0x912292=_0x49dfdd['constructor'][_0x55173a(0x206)]||_0x912292):_0x912292==='undefined'&&this[_0x55173a(0x25a)]&&_0x49dfdd instanceof this['_HTMLAllCollection']&&(_0x912292=_0x55173a(0x217)),_0x912292;}[_0x11d2fd(0x1aa)](_0x43d414){var _0x57de40=_0x11d2fd;return Object[_0x57de40(0x1a0)][_0x57de40(0x1fe)][_0x57de40(0x21d)](_0x43d414);}[_0x11d2fd(0x1a7)](_0xcdaeb7){var _0x192334=_0x11d2fd;return _0xcdaeb7==='boolean'||_0xcdaeb7===_0x192334(0x1da)||_0xcdaeb7==='number';}[_0x11d2fd(0x18c)](_0x5ca27f){var _0x346078=_0x11d2fd;return _0x5ca27f==='Boolean'||_0x5ca27f===_0x346078(0x266)||_0x5ca27f===_0x346078(0x22a);}[_0x11d2fd(0x23c)](_0x1b8706,_0x4819e1,_0x4ee3fb,_0x5a7a70,_0x107b05,_0x4ea6e1){var _0x5d7e22=this;return function(_0x2b580b){var _0x47290f=_0x37e4,_0xfcc17a=_0x107b05[_0x47290f(0x1fc)][_0x47290f(0x253)],_0x194d30=_0x107b05[_0x47290f(0x1fc)][_0x47290f(0x191)],_0x1fedfd=_0x107b05[_0x47290f(0x1fc)]['parent'];_0x107b05[_0x47290f(0x1fc)][_0x47290f(0x238)]=_0xfcc17a,_0x107b05['node'][_0x47290f(0x191)]=typeof _0x5a7a70=='number'?_0x5a7a70:_0x2b580b,_0x1b8706[_0x47290f(0x1f3)](_0x5d7e22[_0x47290f(0x267)](_0x4819e1,_0x4ee3fb,_0x5a7a70,_0x107b05,_0x4ea6e1)),_0x107b05[_0x47290f(0x1fc)]['parent']=_0x1fedfd,_0x107b05[_0x47290f(0x1fc)][_0x47290f(0x191)]=_0x194d30;};}['_addObjectProperty'](_0x16588b,_0x11cea7,_0x13b6ef,_0x380310,_0x1c01d4,_0x4d4b6b,_0x7feca6){var _0x243e50=_0x11d2fd,_0x44abba=this;return _0x11cea7[_0x243e50(0x1a1)+_0x1c01d4[_0x243e50(0x1fe)]()]=!0x0,function(_0x1f4d51){var _0x4bdc1f=_0x243e50,_0x44d283=_0x4d4b6b[_0x4bdc1f(0x1fc)][_0x4bdc1f(0x253)],_0x4fb828=_0x4d4b6b[_0x4bdc1f(0x1fc)][_0x4bdc1f(0x191)],_0x3169d7=_0x4d4b6b['node'][_0x4bdc1f(0x238)];_0x4d4b6b[_0x4bdc1f(0x1fc)]['parent']=_0x44d283,_0x4d4b6b[_0x4bdc1f(0x1fc)][_0x4bdc1f(0x191)]=_0x1f4d51,_0x16588b['push'](_0x44abba[_0x4bdc1f(0x267)](_0x13b6ef,_0x380310,_0x1c01d4,_0x4d4b6b,_0x7feca6)),_0x4d4b6b['node'][_0x4bdc1f(0x238)]=_0x3169d7,_0x4d4b6b[_0x4bdc1f(0x1fc)][_0x4bdc1f(0x191)]=_0x4fb828;};}[_0x11d2fd(0x267)](_0x2ee2f9,_0x504c63,_0x2be839,_0x5d4bfe,_0x466772){var _0x280f6e=_0x11d2fd,_0xc6afe0=this;_0x466772||(_0x466772=function(_0xe7fdf,_0x44194f){return _0xe7fdf[_0x44194f];});var _0x298103=_0x2be839[_0x280f6e(0x1fe)](),_0x28f594=_0x5d4bfe[_0x280f6e(0x210)]||{},_0x5c79a8=_0x5d4bfe[_0x280f6e(0x220)],_0x20bebc=_0x5d4bfe[_0x280f6e(0x224)];try{var _0x27f153=this[_0x280f6e(0x1ca)](_0x2ee2f9),_0x14178a=_0x298103;_0x27f153&&_0x14178a[0x0]==='\\x27'&&(_0x14178a=_0x14178a['substr'](0x1,_0x14178a[_0x280f6e(0x20d)]-0x2));var _0x126371=_0x5d4bfe[_0x280f6e(0x210)]=_0x28f594['_p_'+_0x14178a];_0x126371&&(_0x5d4bfe[_0x280f6e(0x220)]=_0x5d4bfe[_0x280f6e(0x220)]+0x1),_0x5d4bfe['isExpressionToEvaluate']=!!_0x126371;var _0x239579=typeof _0x2be839==_0x280f6e(0x1ef),_0x2075b5={'name':_0x239579||_0x27f153?_0x298103:this[_0x280f6e(0x271)](_0x298103)};if(_0x239579&&(_0x2075b5[_0x280f6e(0x1ef)]=!0x0),!(_0x504c63==='array'||_0x504c63===_0x280f6e(0x1a6))){var _0x3d2d8e=this[_0x280f6e(0x25d)](_0x2ee2f9,_0x2be839);if(_0x3d2d8e&&(_0x3d2d8e[_0x280f6e(0x199)]&&(_0x2075b5[_0x280f6e(0x25e)]=!0x0),_0x3d2d8e[_0x280f6e(0x239)]&&!_0x126371&&!_0x5d4bfe['resolveGetters']))return _0x2075b5[_0x280f6e(0x1c6)]=!0x0,this[_0x280f6e(0x1d0)](_0x2075b5,_0x5d4bfe),_0x2075b5;}var _0x216f35;try{_0x216f35=_0x466772(_0x2ee2f9,_0x2be839);}catch(_0x50f558){return _0x2075b5={'name':_0x298103,'type':_0x280f6e(0x1b2),'error':_0x50f558[_0x280f6e(0x1be)]},this[_0x280f6e(0x1d0)](_0x2075b5,_0x5d4bfe),_0x2075b5;}var _0x4dc249=this[_0x280f6e(0x19d)](_0x216f35),_0x5e863a=this[_0x280f6e(0x1a7)](_0x4dc249);if(_0x2075b5[_0x280f6e(0x1f9)]=_0x4dc249,_0x5e863a)this[_0x280f6e(0x1d0)](_0x2075b5,_0x5d4bfe,_0x216f35,function(){var _0x5ca40f=_0x280f6e;_0x2075b5[_0x5ca40f(0x1d3)]=_0x216f35[_0x5ca40f(0x22d)](),!_0x126371&&_0xc6afe0[_0x5ca40f(0x1dc)](_0x4dc249,_0x2075b5,_0x5d4bfe,{});});else{var _0x1e54db=_0x5d4bfe['autoExpand']&&_0x5d4bfe[_0x280f6e(0x277)]<_0x5d4bfe[_0x280f6e(0x268)]&&_0x5d4bfe[_0x280f6e(0x245)][_0x280f6e(0x236)](_0x216f35)<0x0&&_0x4dc249!==_0x280f6e(0x1bd)&&_0x5d4bfe[_0x280f6e(0x195)]<_0x5d4bfe[_0x280f6e(0x1d5)];_0x1e54db||_0x5d4bfe['level']<_0x5c79a8||_0x126371?(this[_0x280f6e(0x23a)](_0x2075b5,_0x216f35,_0x5d4bfe,_0x126371||{}),this[_0x280f6e(0x269)](_0x216f35,_0x2075b5)):this[_0x280f6e(0x1d0)](_0x2075b5,_0x5d4bfe,_0x216f35,function(){var _0x519504=_0x280f6e;_0x4dc249===_0x519504(0x1f7)||_0x4dc249===_0x519504(0x240)||(delete _0x2075b5[_0x519504(0x1d3)],_0x2075b5[_0x519504(0x23f)]=!0x0);});}return _0x2075b5;}finally{_0x5d4bfe[_0x280f6e(0x210)]=_0x28f594,_0x5d4bfe[_0x280f6e(0x220)]=_0x5c79a8,_0x5d4bfe[_0x280f6e(0x224)]=_0x20bebc;}}['_capIfString'](_0x3fc6ce,_0x478b61,_0x11351e,_0x3eb109){var _0x45bb7c=_0x11d2fd,_0x196223=_0x3eb109['strLength']||_0x11351e['strLength'];if((_0x3fc6ce==='string'||_0x3fc6ce===_0x45bb7c(0x266))&&_0x478b61[_0x45bb7c(0x1d3)]){let _0x5832dd=_0x478b61[_0x45bb7c(0x1d3)][_0x45bb7c(0x20d)];_0x11351e[_0x45bb7c(0x1dd)]+=_0x5832dd,_0x11351e['allStrLength']>_0x11351e[_0x45bb7c(0x1eb)]?(_0x478b61[_0x45bb7c(0x23f)]='',delete _0x478b61['value']):_0x5832dd>_0x196223&&(_0x478b61[_0x45bb7c(0x23f)]=_0x478b61[_0x45bb7c(0x1d3)]['substr'](0x0,_0x196223),delete _0x478b61['value']);}}[_0x11d2fd(0x1ca)](_0x36ea58){var _0x4e1853=_0x11d2fd;return!!(_0x36ea58&&_0x4a231c[_0x4e1853(0x1e4)]&&this[_0x4e1853(0x1aa)](_0x36ea58)===_0x4e1853(0x233)&&_0x36ea58[_0x4e1853(0x237)]);}['_propertyName'](_0x889d08){var _0x2a9e0f=_0x11d2fd;if(_0x889d08[_0x2a9e0f(0x24a)](/^\\d+$/))return _0x889d08;var _0x5be9f3;try{_0x5be9f3=JSON['stringify'](''+_0x889d08);}catch{_0x5be9f3='\\x22'+this[_0x2a9e0f(0x1aa)](_0x889d08)+'\\x22';}return _0x5be9f3['match'](/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?_0x5be9f3=_0x5be9f3['substr'](0x1,_0x5be9f3[_0x2a9e0f(0x20d)]-0x2):_0x5be9f3=_0x5be9f3[_0x2a9e0f(0x260)](/'/g,'\\x5c\\x27')['replace'](/\\\\\"/g,'\\x22')['replace'](/(^\"|\"$)/g,'\\x27'),_0x5be9f3;}[_0x11d2fd(0x1d0)](_0x223c38,_0xee378e,_0xced986,_0x4803c2){var _0x8480ae=_0x11d2fd;this[_0x8480ae(0x219)](_0x223c38,_0xee378e),_0x4803c2&&_0x4803c2(),this[_0x8480ae(0x269)](_0xced986,_0x223c38),this['_treeNodePropertiesAfterFullValue'](_0x223c38,_0xee378e);}['_treeNodePropertiesBeforeFullValue'](_0x13c011,_0x31fc7c){var _0x394e81=_0x11d2fd;this[_0x394e81(0x1ea)](_0x13c011,_0x31fc7c),this[_0x394e81(0x223)](_0x13c011,_0x31fc7c),this[_0x394e81(0x192)](_0x13c011,_0x31fc7c),this['_setNodePermissions'](_0x13c011,_0x31fc7c);}[_0x11d2fd(0x1ea)](_0x115c5c,_0x1c8355){}[_0x11d2fd(0x223)](_0x54bbce,_0x179cf4){}[_0x11d2fd(0x1b0)](_0x479590,_0x258dde){}[_0x11d2fd(0x1a8)](_0x30d571){var _0x3c36bf=_0x11d2fd;return _0x30d571===this[_0x3c36bf(0x24f)];}[_0x11d2fd(0x1d8)](_0x1e498e,_0x425178){var _0x55389b=_0x11d2fd;this[_0x55389b(0x1b0)](_0x1e498e,_0x425178),this['_setNodeExpandableState'](_0x1e498e),_0x425178[_0x55389b(0x249)]&&this['_sortProps'](_0x1e498e),this[_0x55389b(0x218)](_0x1e498e,_0x425178),this['_addLoadNode'](_0x1e498e,_0x425178),this[_0x55389b(0x19b)](_0x1e498e);}['_additionalMetadata'](_0x446c33,_0x5100e1){var _0xa612d4=_0x11d2fd;let _0x4c171c;try{_0x4a231c[_0xa612d4(0x256)]&&(_0x4c171c=_0x4a231c[_0xa612d4(0x256)][_0xa612d4(0x230)],_0x4a231c[_0xa612d4(0x256)][_0xa612d4(0x230)]=function(){}),_0x446c33&&typeof _0x446c33[_0xa612d4(0x20d)]==_0xa612d4(0x1e3)&&(_0x5100e1['length']=_0x446c33[_0xa612d4(0x20d)]);}catch{}finally{_0x4c171c&&(_0x4a231c[_0xa612d4(0x256)][_0xa612d4(0x230)]=_0x4c171c);}if(_0x5100e1[_0xa612d4(0x1f9)]===_0xa612d4(0x1e3)||_0x5100e1[_0xa612d4(0x1f9)]==='Number'){if(isNaN(_0x5100e1[_0xa612d4(0x1d3)]))_0x5100e1[_0xa612d4(0x1bf)]=!0x0,delete _0x5100e1[_0xa612d4(0x1d3)];else switch(_0x5100e1['value']){case Number[_0xa612d4(0x252)]:_0x5100e1[_0xa612d4(0x22e)]=!0x0,delete _0x5100e1['value'];break;case Number[_0xa612d4(0x1ce)]:_0x5100e1[_0xa612d4(0x1bc)]=!0x0,delete _0x5100e1[_0xa612d4(0x1d3)];break;case 0x0:this[_0xa612d4(0x202)](_0x5100e1[_0xa612d4(0x1d3)])&&(_0x5100e1[_0xa612d4(0x1ee)]=!0x0);break;}}else _0x5100e1[_0xa612d4(0x1f9)]===_0xa612d4(0x1bd)&&typeof _0x446c33[_0xa612d4(0x206)]=='string'&&_0x446c33[_0xa612d4(0x206)]&&_0x5100e1['name']&&_0x446c33['name']!==_0x5100e1[_0xa612d4(0x206)]&&(_0x5100e1[_0xa612d4(0x1b3)]=_0x446c33[_0xa612d4(0x206)]);}['_isNegativeZero'](_0x59c9ba){return 0x1/_0x59c9ba===Number['NEGATIVE_INFINITY'];}['_sortProps'](_0x194b22){var _0x489762=_0x11d2fd;!_0x194b22['props']||!_0x194b22[_0x489762(0x273)][_0x489762(0x20d)]||_0x194b22[_0x489762(0x1f9)]===_0x489762(0x1c9)||_0x194b22[_0x489762(0x1f9)]===_0x489762(0x1e4)||_0x194b22[_0x489762(0x1f9)]===_0x489762(0x1b4)||_0x194b22['props'][_0x489762(0x24d)](function(_0x5750f1,_0x2eb738){var _0x76f8ac=_0x489762,_0x5b2bb8=_0x5750f1[_0x76f8ac(0x206)][_0x76f8ac(0x24e)](),_0x4a4f8f=_0x2eb738[_0x76f8ac(0x206)]['toLowerCase']();return _0x5b2bb8<_0x4a4f8f?-0x1:_0x5b2bb8>_0x4a4f8f?0x1:0x0;});}[_0x11d2fd(0x218)](_0x1c5692,_0x5941d2){var _0x6ddc63=_0x11d2fd;if(!(_0x5941d2[_0x6ddc63(0x227)]||!_0x1c5692[_0x6ddc63(0x273)]||!_0x1c5692['props']['length'])){for(var _0x397818=[],_0x1bb0d6=[],_0xcf63f9=0x0,_0x522aed=_0x1c5692[_0x6ddc63(0x273)][_0x6ddc63(0x20d)];_0xcf63f9<_0x522aed;_0xcf63f9++){var _0x5b66ea=_0x1c5692['props'][_0xcf63f9];_0x5b66ea[_0x6ddc63(0x1f9)]===_0x6ddc63(0x1bd)?_0x397818[_0x6ddc63(0x1f3)](_0x5b66ea):_0x1bb0d6[_0x6ddc63(0x1f3)](_0x5b66ea);}if(!(!_0x1bb0d6['length']||_0x397818[_0x6ddc63(0x20d)]<=0x1)){_0x1c5692[_0x6ddc63(0x273)]=_0x1bb0d6;var _0x4d8efd={'functionsNode':!0x0,'props':_0x397818};this[_0x6ddc63(0x1ea)](_0x4d8efd,_0x5941d2),this[_0x6ddc63(0x1b0)](_0x4d8efd,_0x5941d2),this[_0x6ddc63(0x243)](_0x4d8efd),this[_0x6ddc63(0x1f8)](_0x4d8efd,_0x5941d2),_0x4d8efd['id']+='\\x20f',_0x1c5692['props'][_0x6ddc63(0x207)](_0x4d8efd);}}}[_0x11d2fd(0x1e1)](_0x1c7ad0,_0x297b6d){}[_0x11d2fd(0x243)](_0x2f5087){}[_0x11d2fd(0x255)](_0x401698){var _0x3fdb91=_0x11d2fd;return Array[_0x3fdb91(0x1ac)](_0x401698)||typeof _0x401698==_0x3fdb91(0x198)&&this[_0x3fdb91(0x1aa)](_0x401698)==='[object\\x20Array]';}[_0x11d2fd(0x1f8)](_0x152162,_0x1ed574){}[_0x11d2fd(0x19b)](_0x161253){var _0x679a0c=_0x11d2fd;delete _0x161253[_0x679a0c(0x21f)],delete _0x161253['_hasSetOnItsPath'],delete _0x161253[_0x679a0c(0x1fd)];}[_0x11d2fd(0x192)](_0x43a91c,_0x4b1cef){}}let _0x1698da=new _0x33872f(),_0x4336d8={'props':0x64,'elements':0x64,'strLength':0x400*0x32,'totalStrLength':0x400*0x32,'autoExpandLimit':0x1388,'autoExpandMaxDepth':0xa},_0x507368={'props':0x5,'elements':0x5,'strLength':0x100,'totalStrLength':0x100*0x3,'autoExpandLimit':0x1e,'autoExpandMaxDepth':0x2};function _0x23c2be(_0x19fcd2,_0x453451,_0x181b6d,_0x2a08b3,_0x4b434e,_0x54185d){var _0x9210d5=_0x11d2fd;let _0x5b44f0,_0x36715b;try{_0x36715b=_0x9e4c4d(),_0x5b44f0=_0x2e0b83[_0x453451],!_0x5b44f0||_0x36715b-_0x5b44f0['ts']>0x1f4&&_0x5b44f0[_0x9210d5(0x226)]&&_0x5b44f0['time']/_0x5b44f0[_0x9210d5(0x226)]<0x64?(_0x2e0b83[_0x453451]=_0x5b44f0={'count':0x0,'time':0x0,'ts':_0x36715b},_0x2e0b83[_0x9210d5(0x208)]={}):_0x36715b-_0x2e0b83[_0x9210d5(0x208)]['ts']>0x32&&_0x2e0b83[_0x9210d5(0x208)][_0x9210d5(0x226)]&&_0x2e0b83[_0x9210d5(0x208)][_0x9210d5(0x1ae)]/_0x2e0b83[_0x9210d5(0x208)]['count']<0x64&&(_0x2e0b83[_0x9210d5(0x208)]={});let _0x7293a0=[],_0x36296b=_0x5b44f0['reduceLimits']||_0x2e0b83[_0x9210d5(0x208)][_0x9210d5(0x1b6)]?_0x507368:_0x4336d8,_0x247beb=_0x217a47=>{var _0x4a89a2=_0x9210d5;let _0x541454={};return _0x541454[_0x4a89a2(0x273)]=_0x217a47[_0x4a89a2(0x273)],_0x541454[_0x4a89a2(0x1e2)]=_0x217a47[_0x4a89a2(0x1e2)],_0x541454[_0x4a89a2(0x21b)]=_0x217a47[_0x4a89a2(0x21b)],_0x541454[_0x4a89a2(0x1eb)]=_0x217a47[_0x4a89a2(0x1eb)],_0x541454['autoExpandLimit']=_0x217a47['autoExpandLimit'],_0x541454[_0x4a89a2(0x268)]=_0x217a47['autoExpandMaxDepth'],_0x541454[_0x4a89a2(0x249)]=!0x1,_0x541454[_0x4a89a2(0x227)]=!_0x39e58b,_0x541454['depth']=0x1,_0x541454[_0x4a89a2(0x277)]=0x0,_0x541454[_0x4a89a2(0x18a)]='root_exp_id',_0x541454[_0x4a89a2(0x1c3)]=_0x4a89a2(0x1c2),_0x541454['autoExpand']=!0x0,_0x541454[_0x4a89a2(0x245)]=[],_0x541454[_0x4a89a2(0x195)]=0x0,_0x541454[_0x4a89a2(0x26f)]=!0x0,_0x541454[_0x4a89a2(0x1dd)]=0x0,_0x541454[_0x4a89a2(0x1fc)]={'current':void 0x0,'parent':void 0x0,'index':0x0},_0x541454;};for(var _0x40c849=0x0;_0x40c849<_0x4b434e[_0x9210d5(0x20d)];_0x40c849++)_0x7293a0['push'](_0x1698da[_0x9210d5(0x23a)]({'timeNode':_0x19fcd2==='time'||void 0x0},_0x4b434e[_0x40c849],_0x247beb(_0x36296b),{}));if(_0x19fcd2===_0x9210d5(0x1ab)){let _0x4b4e9e=Error[_0x9210d5(0x229)];try{Error['stackTraceLimit']=0x1/0x0,_0x7293a0[_0x9210d5(0x1f3)](_0x1698da[_0x9210d5(0x23a)]({'stackNode':!0x0},new Error()[_0x9210d5(0x193)],_0x247beb(_0x36296b),{'strLength':0x1/0x0}));}finally{Error[_0x9210d5(0x229)]=_0x4b4e9e;}}return{'method':_0x9210d5(0x1cd),'version':_0x12de0b,'args':[{'ts':_0x181b6d,'session':_0x2a08b3,'args':_0x7293a0,'id':_0x453451,'context':_0x54185d}]};}catch(_0x3c4fcd){return{'method':'log','version':_0x12de0b,'args':[{'ts':_0x181b6d,'session':_0x2a08b3,'args':[{'type':_0x9210d5(0x1b2),'error':_0x3c4fcd&&_0x3c4fcd[_0x9210d5(0x1be)]}],'id':_0x453451,'context':_0x54185d}]};}finally{try{if(_0x5b44f0&&_0x36715b){let _0x39c04e=_0x9e4c4d();_0x5b44f0[_0x9210d5(0x226)]++,_0x5b44f0['time']+=_0x27fc15(_0x36715b,_0x39c04e),_0x5b44f0['ts']=_0x39c04e,_0x2e0b83[_0x9210d5(0x208)][_0x9210d5(0x226)]++,_0x2e0b83['hits'][_0x9210d5(0x1ae)]+=_0x27fc15(_0x36715b,_0x39c04e),_0x2e0b83['hits']['ts']=_0x39c04e,(_0x5b44f0[_0x9210d5(0x226)]>0x32||_0x5b44f0['time']>0x64)&&(_0x5b44f0[_0x9210d5(0x1b6)]=!0x0),(_0x2e0b83['hits']['count']>0x3e8||_0x2e0b83[_0x9210d5(0x208)][_0x9210d5(0x1ae)]>0x12c)&&(_0x2e0b83[_0x9210d5(0x208)][_0x9210d5(0x1b6)]=!0x0);}}catch{}}}return _0x23c2be;}((_0x4b00d8,_0x5578f1,_0x3ed2a7,_0x30eaab,_0x213295,_0x57888b,_0x4d288a,_0x2fe894,_0x3cfa6a,_0x26d1d4)=>{var _0x1998d3=_0x1f7fe1;if(_0x4b00d8[_0x1998d3(0x232)])return _0x4b00d8['_console_ninja'];if(!J(_0x4b00d8,_0x2fe894,_0x213295))return _0x4b00d8['_console_ninja']={'consoleLog':()=>{},'consoleTrace':()=>{},'consoleTime':()=>{},'consoleTimeEnd':()=>{},'autoLog':()=>{},'autoLogMany':()=>{},'autoTraceMany':()=>{},'coverage':()=>{},'autoTrace':()=>{},'autoTime':()=>{},'autoTimeEnd':()=>{}},_0x4b00d8[_0x1998d3(0x232)];let _0x1ec8c8=W(_0x4b00d8),_0x1a3c7f=_0x1ec8c8['elapsed'],_0x41cf6a=_0x1ec8c8[_0x1998d3(0x23d)],_0x247060=_0x1ec8c8[_0x1998d3(0x251)],_0x1d3c45={'hits':{},'ts':{}},_0x5683be=Y(_0x4b00d8,_0x3cfa6a,_0x1d3c45,_0x57888b),_0x3e248f=_0x10392f=>{_0x1d3c45['ts'][_0x10392f]=_0x41cf6a();},_0x2ebbe7=(_0x1a02c8,_0x4327c1)=>{var _0x1595a3=_0x1998d3;let _0x48011b=_0x1d3c45['ts'][_0x4327c1];if(delete _0x1d3c45['ts'][_0x4327c1],_0x48011b){let _0x441fec=_0x1a3c7f(_0x48011b,_0x41cf6a());_0x341adf(_0x5683be(_0x1595a3(0x1ae),_0x1a02c8,_0x247060(),_0x3e00fc,[_0x441fec],_0x4327c1));}},_0x665301=_0x409553=>_0x2a8d96=>{var _0x35b2aa=_0x1998d3;try{_0x3e248f(_0x2a8d96),_0x409553(_0x2a8d96);}finally{_0x4b00d8['console'][_0x35b2aa(0x1ae)]=_0x409553;}},_0x146215=_0x5aa591=>_0x44b8c0=>{var _0xc5b6e3=_0x1998d3;try{let [_0x4eb1b6,_0x154adc]=_0x44b8c0[_0xc5b6e3(0x1f6)](_0xc5b6e3(0x259));_0x2ebbe7(_0x154adc,_0x4eb1b6),_0x5aa591(_0x4eb1b6);}finally{_0x4b00d8[_0xc5b6e3(0x256)]['timeEnd']=_0x5aa591;}};_0x4b00d8[_0x1998d3(0x232)]={'consoleLog':(_0x2393f8,_0x51be62)=>{var _0x51151b=_0x1998d3;_0x4b00d8[_0x51151b(0x256)][_0x51151b(0x1cd)][_0x51151b(0x206)]!=='disabledLog'&&_0x341adf(_0x5683be(_0x51151b(0x1cd),_0x2393f8,_0x247060(),_0x3e00fc,_0x51be62));},'consoleTrace':(_0x119369,_0x442031)=>{var _0x594c80=_0x1998d3;_0x4b00d8[_0x594c80(0x256)][_0x594c80(0x1cd)]['name']!=='disabledTrace'&&_0x341adf(_0x5683be(_0x594c80(0x1ab),_0x119369,_0x247060(),_0x3e00fc,_0x442031));},'consoleTime':()=>{var _0x32edf0=_0x1998d3;_0x4b00d8[_0x32edf0(0x256)][_0x32edf0(0x1ae)]=_0x665301(_0x4b00d8[_0x32edf0(0x256)][_0x32edf0(0x1ae)]);},'consoleTimeEnd':()=>{var _0xceb7a9=_0x1998d3;_0x4b00d8[_0xceb7a9(0x256)][_0xceb7a9(0x1a2)]=_0x146215(_0x4b00d8['console']['timeEnd']);},'autoLog':(_0x561021,_0x3343a6)=>{var _0x99253f=_0x1998d3;_0x341adf(_0x5683be(_0x99253f(0x1cd),_0x3343a6,_0x247060(),_0x3e00fc,[_0x561021]));},'autoLogMany':(_0x14df62,_0x1aca85)=>{var _0x4e9934=_0x1998d3;_0x341adf(_0x5683be(_0x4e9934(0x1cd),_0x14df62,_0x247060(),_0x3e00fc,_0x1aca85));},'autoTrace':(_0x19f33b,_0x49cf5c)=>{var _0x38aba5=_0x1998d3;_0x341adf(_0x5683be(_0x38aba5(0x1ab),_0x49cf5c,_0x247060(),_0x3e00fc,[_0x19f33b]));},'autoTraceMany':(_0xcd9962,_0x3adbc0)=>{var _0x40a7aa=_0x1998d3;_0x341adf(_0x5683be(_0x40a7aa(0x1ab),_0xcd9962,_0x247060(),_0x3e00fc,_0x3adbc0));},'autoTime':(_0x1e1fd7,_0x2e5429,_0x2ccb02)=>{_0x3e248f(_0x2ccb02);},'autoTimeEnd':(_0x2e38e6,_0x141bf8,_0xdc33b2)=>{_0x2ebbe7(_0x141bf8,_0xdc33b2);},'coverage':_0x298f37=>{var _0x2380b2=_0x1998d3;_0x341adf({'method':_0x2380b2(0x1de),'version':_0x57888b,'args':[{'id':_0x298f37}]});}};let _0x341adf=b(_0x4b00d8,_0x5578f1,_0x3ed2a7,_0x30eaab,_0x213295,_0x26d1d4),_0x3e00fc=_0x4b00d8[_0x1998d3(0x26e)];return _0x4b00d8[_0x1998d3(0x232)];})(globalThis,_0x1f7fe1(0x213),_0x1f7fe1(0x20c),_0x1f7fe1(0x1d7),_0x1f7fe1(0x209),'1.0.0',_0x1f7fe1(0x18e),[\"localhost\",\"127.0.0.1\",\"example.cypress.io\",\"Nando\",\"10.7.0.29\",\"172.17.80.1\",\"192.168.1.61\"],_0x1f7fe1(0x1af),_0x1f7fe1(0x1b1));");
|
|
620
|
-
}
|
|
621
|
-
catch (e) { } }
|
|
622
|
-
; /* istanbul ignore next */
|
|
623
|
-
function oo_oo(i, ...v) { try {
|
|
624
|
-
oo_cm().consoleLog(i, v);
|
|
625
|
-
}
|
|
626
|
-
catch (e) { } return v; }
|
|
627
|
-
;
|
|
628
|
-
oo_oo; /* istanbul ignore next */
|
|
629
|
-
function oo_tr(i, ...v) { try {
|
|
630
|
-
oo_cm().consoleTrace(i, v);
|
|
631
|
-
}
|
|
632
|
-
catch (e) { } return v; }
|
|
633
|
-
;
|
|
634
|
-
oo_tr; /* istanbul ignore next */
|
|
635
|
-
function oo_ts() { try {
|
|
636
|
-
oo_cm().consoleTime();
|
|
637
|
-
}
|
|
638
|
-
catch (e) { } }
|
|
639
|
-
;
|
|
640
|
-
oo_ts; /* istanbul ignore next */
|
|
641
|
-
function oo_te() { try {
|
|
642
|
-
oo_cm().consoleTimeEnd();
|
|
643
|
-
}
|
|
644
|
-
catch (e) { } }
|
|
645
|
-
;
|
|
646
|
-
oo_te; /*eslint unicorn/no-abusive-eslint-disable:,eslint-comments/disable-enable-pair:,eslint-comments/no-unlimited-disable:,eslint-comments/no-aggregating-enable:,eslint-comments/no-duplicate-disable:,eslint-comments/no-unused-disable:,eslint-comments/no-unused-enable:,*/
|
|
647
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhY2hvcy1pbWFnZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VhY2hvcy1pbWFnZS1waWNrZXIvc3JjL2xpYi9ndWFjaG9zLWltYWdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWFjaG9zLWltYWdlLXBpY2tlci9zcmMvbGliL2d1YWNob3MtaW1hZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRzdCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQXlCLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDeEYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6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QUFDO0FBQUEsT0FBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQSxDQUFBLENBQUM7QUFBQSxDQUFDO0FBQUEsS0FBSyxDQUFDLENBQUEsMEJBQTBCO0FBQUEsU0FBUyxLQUFLLENBQUMsQ0FBUSxFQUFDLEdBQUcsQ0FBTyxJQUFFLElBQUcsQ0FBQztJQUFBLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFBQSxDQUFDO0FBQUEsT0FBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQSxDQUFBLENBQUM7QUFBQSxDQUFDO0FBQUEsS0FBSyxDQUFDLENBQUEsMEJBQTBCO0FBQUEsU0FBUyxLQUFLLEtBQUcsSUFBRyxDQUFDO0lBQUEsS0FBSyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7QUFBQSxDQUFDO0FBQUEsT0FBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDO0FBQUEsQ0FBQztBQUFBLEtBQUssQ0FBQyxDQUFBLDBCQUEwQjtBQUFBLFNBQVMsS0FBSyxLQUFHLElBQUcsQ0FBQztJQUFBLEtBQUssRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQUEsQ0FBQztBQUFBLE9BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQztBQUFBLENBQUM7QUFBQSxLQUFLLENBQUMsQ0FBQSwyUUFBMlEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT3V0cHV0LFxyXG4gIHNpZ25hbCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7UmVzaXplT2JzZXJ2ZXJ9IGZyb20gJ3Jlc2l6ZS1vYnNlcnZlcic7XHJcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7UmVzaXplT2JzZXJ2ZXJFbnRyeX0gZnJvbSAncmVzaXplLW9ic2VydmVyL2xpYi9SZXNpemVPYnNlcnZlckVudHJ5JztcclxuaW1wb3J0IHtUaGVtZVBhbGV0dGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQge01hdEljb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtNYXRUb29sdGlwTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHtNYXRDaGVja2JveE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQge01hdFNsaWRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcclxuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7TWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSwgTWF0Rm9ybUZpZWxkTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHtNYXRJbnB1dE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQge01hdFNlbGVjdE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHtOZ1N0eWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuaW1wb3J0IHtQaXBlc01vZHVsZX0gZnJvbSAnLi4vdXRpbHMvcGlwZXMvcGlwZXMubW9kdWxlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VQaWNrZXJDb25mIHtcclxuICB3aWR0aD86IHN0cmluZztcclxuICBoZWlnaHQ/OiBzdHJpbmc7XHJcbiAgYm9yZGVyUmFkaXVzPzogc3RyaW5nO1xyXG4gIGNvbXByZXNzSW5pdGlhbD86IGJvb2xlYW47XHJcbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7XHJcbiAgaGlkZURlbGV0ZUJ0bj86IGJvb2xlYW47XHJcbiAgaGlkZURvd25sb2FkQnRuPzogYm9vbGVhbjtcclxuICBoaWRlRWRpdEJ0bj86IGJvb2xlYW47XHJcbiAgaGlkZUFkZEJ0bj86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VDb252ZXJ0ZXJJbnB1dCB7XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgaGVpZ2h0PzogbnVtYmVyO1xyXG4gIHF1YWxpdHk/OiBudW1iZXI7XHJcbiAgZGF0YVR5cGU/OiBzdHJpbmc7XHJcbiAgbWFpbnRhaW5SYXRpbz86IGJvb2xlYW47XHJcbiAgY2hhbmdlSGVpZ2h0PzogYm9vbGVhbjtcclxuICBjaGFuZ2VXaWR0aD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEltYWdlQWxsb3dlZFR5cGVzID1cclxuICAnaW1hZ2UvKidcclxuICB8ICcud2VicCdcclxuICB8ICcucG5nJ1xyXG4gIHwgJy53ZWJwLCAuanBnLCAuanBlZydcclxuICB8ICcud2VicCwgLnBuZydcclxuICB8ICcuanBnLCAuanBlZydcclxuICB8ICcucG5nLCAuanBnLCAuanBlZydcclxuICB8ICcud2VicCwgLnBuZywgLmpwZywgLmpwZWcnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndWFqaXJpdG9zLWltYWdlLXBpY2tlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2d1YWNob3MtaW1hZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ndWFjaG9zLWltYWdlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTmdTdHlsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgUGlwZXNNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRTbGlkZXJNb2R1bGUsXHJcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEd1YWppcml0b3NJbWFnZVBpY2tlciBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUFsbCQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHByaXZhdGUgb2JzZXJ2ZXI6IGFueSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBvcmlnaW5JbWFnZVNyYzogYW55O1xyXG4gIHByaXZhdGUgdXJsSW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIGxhc3RPcmlnaW5TcmM6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBhcnJheUNvcGllZEltYWdlczogYW55W10gPSBbXTtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5IHV1aWRGaWxlUGlja2VyOiBzdHJpbmcgPSBEYXRlLm5vdygpLnRvU3RyaW5nKDIwKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgYWxsRm9ybWF0czogc3RyaW5nW10gPSBbJ3dlYnAnLCAnanBlZycsICdwbmcnXTtcclxuICBwdWJsaWMgY29uZmlnOiBXcml0YWJsZVNpZ25hbDxJbWFnZVBpY2tlckNvbmY+ID0gc2lnbmFsKHtcclxuICAgIGhlaWdodDogJzI0MHB4JyxcclxuICAgIHdpZHRoOiAnMzIwcHgnLFxyXG4gICAgYm9yZGVyUmFkaXVzOiAnMTZweCcsXHJcbiAgICBjb21wcmVzc0luaXRpYWw6IHRydWUsXHJcbiAgICBsYW5ndWFnZTogJ2VzJyxcclxuICAgIGhpZGVEZWxldGVCdG46IGZhbHNlLFxyXG4gICAgaGlkZURvd25sb2FkQnRuOiBmYWxzZSxcclxuICAgIGhpZGVFZGl0QnRuOiBmYWxzZSxcclxuICAgIGhpZGVBZGRCdG46IGZhbHNlLFxyXG4gIH0pO1xyXG4gIHB1YmxpYyBpbWFnZVNyYzogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9IHNpZ25hbChudWxsKTtcclxuICBwdWJsaWMgc2hvd0Nyb3A6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woe3ZhbHVlOiBmYWxzZSwgZGlzYWJsZWQ6IGZhbHNlfSk7XHJcbiAgcHVibGljIGxvYWRJbWFnZTogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xyXG4gIHB1YmxpYyBub0VkaXQ6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKGZhbHNlKTtcclxuICBwdWJsaWMgc2hvd0VkaXRQYW5lbDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xyXG4gIHB1YmxpYyBtYWludGFpbkFzcGVjdFJhdGlvOiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHt2YWx1ZTogdHJ1ZSwgZGlzYWJsZWQ6IGZhbHNlfSk7XHJcbiAgcHVibGljIHF1YWxpdHk6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woe3ZhbHVlOiA3MCwgZGlzYWJsZWQ6IGZhbHNlfSk7XHJcbiAgcHVibGljIGZvcm1hdDogVW50eXBlZEZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7dmFsdWU6ICd3ZWJwJywgZGlzYWJsZWQ6IGZhbHNlfSk7XHJcbiAgcHVibGljIG1heEhlaWdodDogbnVtYmVyID0gMjAwMDtcclxuICBwdWJsaWMgbWF4V2lkdGg6IG51bWJlciA9IDIwMDA7XHJcbiAgcHVibGljIGNyb3BIZWlnaHQ6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woe3ZhbHVlOiAxNTAsIGRpc2FibGVkOiBmYWxzZX0pO1xyXG4gIHB1YmxpYyBjcm9wV2lkdGg6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woe3ZhbHVlOiAxNTAsIGRpc2FibGVkOiBmYWxzZX0pO1xyXG4gIHB1YmxpYyBpbWFnZU5hbWU6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz4gPSBzaWduYWwoJ2Rvd25sb2FkJyk7XHJcbiAgcHVibGljIGN1cnJlbnRMYW5ndWFnZTogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9IHNpZ25hbCgnZXMnKTtcclxuXHJcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSA9ICdvdXRsaW5lJztcclxuICBASW5wdXQoKSBjb2xvcjogVGhlbWVQYWxldHRlID0gJ3ByaW1hcnknO1xyXG4gIEBJbnB1dCgpIGltYWdlc0FsbG93ZWQ6IEltYWdlQWxsb3dlZFR5cGVzID0gJ2ltYWdlLyonO1xyXG5cclxuICBAVmlld0NoaWxkKCdpbWFnZVBpY2tlcicsIHtzdGF0aWM6IGZhbHNlfSkgaW1hZ2VQaWNrZXI6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKSAkaW1hZ2VDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSAkaW1hZ2VPcmlnaW5hbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaW1hZ2VSZW1vdmVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBJbnB1dCgpIHNldCBiYXNlNjRJbWFnZShpbWFnZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoaW1hZ2UpIHtcclxuICAgICAgdGhpcy5pbWFnZVNyYy5zZXQoaW1hZ2UpO1xyXG4gICAgICB0aGlzLmFycmF5Q29waWVkSW1hZ2VzID0gW107XHJcbiAgICAgIHRoaXMuYXJyYXlDb3BpZWRJbWFnZXMucHVzaCh0aGlzLmltYWdlU3JjKCkpO1xyXG4gICAgICB0aGlzLm9yaWdpbkltYWdlU3JjID0gaW1hZ2U7XHJcbiAgICAgIHRoaXMubGFzdE9yaWdpblNyYyA9IGltYWdlO1xyXG4gICAgICB0aGlzLiRpbWFnZU9yaWdpbmFsLm5leHQodGhpcy5vcmlnaW5JbWFnZVNyYyk7XHJcbiAgICAgIHRoaXMubG9hZEltYWdlLnNldCh0cnVlKTtcclxuICAgICAgdGhpcy5ub0VkaXQuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBfaW1hZ2VTcmMoaW1hZ2U6IHN0cmluZykge1xyXG4gICAgaWYgKGltYWdlKSB7XHJcbiAgICAgIGxldCB0eXBlczogc3RyaW5nW10gPSBpbWFnZS5zcGxpdCgnLicpO1xyXG4gICAgICB0aGlzLmZvcm1hdC5zZXRWYWx1ZSh0eXBlc1t0eXBlcy5sZW5ndGggLSAxXSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZm9ybWF0LnZhbHVlIHx8ICh0aGlzLmZvcm1hdC52YWx1ZSAhPT0gJ3BuZycgJiYgdGhpcy5mb3JtYXQudmFsdWUgIT09ICdqcGVnJyAmJiB0aGlzLmZvcm1hdC52YWx1ZSAhPT0gJ3dlYnAnKSkge1xyXG4gICAgICAgIHRoaXMuZm9ybWF0LnNldFZhbHVlKCdqcGVnJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaW1hZ2VTcmMuc2V0KGltYWdlKTtcclxuICAgICAgdGhpcy5hcnJheUNvcGllZEltYWdlcyA9IFtdO1xyXG4gICAgICB0aGlzLmFycmF5Q29waWVkSW1hZ2VzLnB1c2godGhpcy5pbWFnZVNyYygpKTtcclxuICAgICAgdGhpcy5vcmlnaW5JbWFnZVNyYyA9IGltYWdlO1xyXG4gICAgICB0aGlzLmxhc3RPcmlnaW5TcmMgPSBpbWFnZTtcclxuICAgICAgdGhpcy4kaW1hZ2VPcmlnaW5hbC5uZXh0KHRoaXMub3JpZ2luSW1hZ2VTcmMpO1xyXG4gICAgICB0aGlzLmxvYWRJbWFnZS5zZXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMubm9FZGl0LnNldCh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW1hZ2VTcmMuc2V0KG51bGwpO1xyXG4gICAgICB0aGlzLm9yaWdpbkltYWdlU3JjID0gbnVsbDtcclxuICAgICAgdGhpcy5sb2FkSW1hZ2Uuc2V0KGZhbHNlKTtcclxuICAgICAgdGhpcy5ub0VkaXQuc2V0KGZhbHNlKTtcclxuICAgICAgdGhpcy5hcnJheUNvcGllZEltYWdlcyA9IFtdO1xyXG4gICAgICB0aGlzLmxhc3RPcmlnaW5TcmMgPSBudWxsO1xyXG4gICAgICB0aGlzLiRpbWFnZU9yaWdpbmFsLm5leHQobnVsbCk7XHJcbiAgICAgIHRoaXMuZm9ybWF0LnNldFZhbHVlKCdqcGVnJyk7XHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gMjAwMDtcclxuICAgICAgdGhpcy5tYXhXaWR0aCA9IDIwMDA7XHJcbiAgICAgIHRoaXMuY3JvcEhlaWdodC5zZXRWYWx1ZSgxNTApO1xyXG4gICAgICB0aGlzLmNyb3BXaWR0aC5zZXRWYWx1ZSgxNTApO1xyXG4gICAgICB0aGlzLm1haW50YWluQXNwZWN0UmF0aW8uc2V0VmFsdWUodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2hvd0VkaXRQYW5lbC5zZXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IF9jb25maWcodmFsdWU6IEltYWdlUGlja2VyQ29uZikge1xyXG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yID09IE9iamVjdCkge1xyXG4gICAgICB0aGlzLmNvbmZpZy5zZXQoe1xyXG4gICAgICAgIC4uLnRoaXMuY29uZmlnKCksXHJcbiAgICAgICAgLi4udmFsdWUsXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVJlYWRlckxvYWRlZChyZWFkZXJFdnQ6IHt0YXJnZXQ6IHtyZXN1bHQ6IGFueTt9O30pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGJpbmFyeVN0cmluZzogc3RyaW5nID0gcmVhZGVyRXZ0LnRhcmdldC5yZXN1bHQ7XHJcbiAgICBjb25zdCBiYXNlNjR0ZXh0U3RyaW5nOiBzdHJpbmcgPSBidG9hKGJpbmFyeVN0cmluZyk7XHJcbiAgICB0aGlzLm9yaWdpbkltYWdlU3JjID0gdGhpcy51cmxJbWFnZSArIGJhc2U2NHRleHRTdHJpbmc7XHJcbiAgICB0aGlzLmxhc3RPcmlnaW5TcmMgPSB0aGlzLnVybEltYWdlICsgYmFzZTY0dGV4dFN0cmluZztcclxuICAgIGlmICh0aGlzLmNvbmZpZygpPy5jb21wcmVzc0luaXRpYWwpIHtcclxuICAgICAgdGhpcy5xdWFsaXR5LnNldFZhbHVlKDcwKTtcclxuICAgICAgY29uc3QgaW5wdXQ6IEltYWdlQ29udmVydGVySW5wdXQgPSB7XHJcbiAgICAgICAgZGF0YVR5cGU6IHRoaXMuZm9ybWF0LnZhbHVlLFxyXG4gICAgICAgIHF1YWxpdHk6IDAuNzAsXHJcbiAgICAgICAgbWFpbnRhaW5SYXRpbzogdHJ1ZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5pbWFnZVNyYy5zZXQoYXdhaXQgdGhpcy5yZXNpemVEYXRhVVJMKHRoaXMudXJsSW1hZ2UgKyBiYXNlNjR0ZXh0U3RyaW5nLCBpbnB1dCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbWFnZVNyYy5zZXQodGhpcy51cmxJbWFnZSArIGJhc2U2NHRleHRTdHJpbmcpO1xyXG4gICAgICB0aGlzLmFycmF5Q29waWVkSW1hZ2VzID0gW107XHJcbiAgICAgIHRoaXMuYXJyYXlDb3BpZWRJbWFnZXMucHVzaCh7XHJcbiAgICAgICAgbGFzdEltYWdlOiB0aGlzLmltYWdlU3JjKCksXHJcbiAgICAgICAgd2lkdGg6IHRoaXMubWF4V2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLm1heEhlaWdodCxcclxuICAgICAgICBxdWFsaXR5OiB0aGlzLnF1YWxpdHkudmFsdWUsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLiRpbWFnZU9yaWdpbmFsLm5leHQodGhpcy5pbWFnZVNyYygpKTtcclxuICAgIH1cclxuICAgIHRoaXMuJGltYWdlQ2hhbmdlZC5uZXh0KHRoaXMuaW1hZ2VTcmMoKSk7XHJcbiAgICB0aGlzLmxvYWRJbWFnZS5zZXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJlc2l6ZURhdGFVUkwoZGF0YXM6IHN0cmluZywgaW5wdXQ6IEltYWdlQ29udmVydGVySW5wdXQpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgIGxldCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuICAgICAgaW1nLnNyYyA9IGRhdGFzICsgJyc7XHJcbiAgICAgIGltZy5jcm9zc09yaWdpbiA9ICdBbm9ueW1vdXMnO1xyXG4gICAgICBsZXQgcXVhbGl0eTogbnVtYmVyID0gaW5wdXQ/LnF1YWxpdHkgPz8gMS4wO1xyXG4gICAgICBsZXQgbWFpbnRhaW5SYXRpbzogYm9vbGVhbiA9IGlucHV0Lm1haW50YWluUmF0aW8gIT09IHVuZGVmaW5lZCA/IGlucHV0Lm1haW50YWluUmF0aW8gOiB0cnVlO1xyXG5cclxuICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgY29uc3QgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBsZXQgcmF0aW86IG51bWJlciA9IGltZy53aWR0aCAvIGltZy5oZWlnaHQ7XHJcbiAgICAgICAgbGV0IHdpZHRoOiBudW1iZXIgPSBpbnB1dD8ud2lkdGggPz8gaW1nLndpZHRoO1xyXG4gICAgICAgIGxldCBoZWlnaHQ6IG51bWJlciA9IGlucHV0Py5oZWlnaHQgPz8gaW1nLmhlaWdodDtcclxuXHJcbiAgICAgICAgaWYgKG1haW50YWluUmF0aW8pIHtcclxuICAgICAgICAgIGlmIChpbnB1dC5jaGFuZ2VIZWlnaHQpIHtcclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gaGVpZ2h0ICogcmF0aW87XHJcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHdpZHRoIC8gcmF0aW87XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN0eD8uZHJhd0ltYWdlKGltZywgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcclxuICAgICAgICBsZXQgdHlwZTogc3RyaW5nID0gaW5wdXQ/LmRhdGFUeXBlID8/ICd3ZWJwJztcclxuICAgICAgICBjb25zdCBkYXRhVVJJOiBzdHJpbmcgPSBjYW52YXMudG9EYXRhVVJMKGBpbWFnZS8ke3R5cGV9YCwgcXVhbGl0eSk7XHJcbiAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICBkYXRhVXJpOiBkYXRhVVJJLFxyXG4gICAgICAgICAgd2lkdGg6IGNhbnZhcy53aWR0aCxcclxuICAgICAgICAgIGhlaWdodDogY2FudmFzLmhlaWdodCxcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgIH0pLnRoZW4oKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLm1heEhlaWdodCA9IGRhdGE/LmhlaWdodDtcclxuICAgICAgdGhpcy5tYXhXaWR0aCA9IGRhdGE/LndpZHRoO1xyXG4gICAgICBpZiAodGhpcy5hcnJheUNvcGllZEltYWdlcz8ubGVuZ3RoIDw9IDIwKSB7XHJcbiAgICAgICAgdGhpcy5hcnJheUNvcGllZEltYWdlcy5wdXNoKHtcclxuICAgICAgICAgIGxhc3RJbWFnZTogZGF0YT8uZGF0YVVyaSxcclxuICAgICAgICAgIHdpZHRoOiB0aGlzLm1heFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLm1heEhlaWdodCxcclxuICAgICAgICAgIHF1YWxpdHk6IHRoaXMucXVhbGl0eS52YWx1ZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGRhdGEuZGF0YVVyaTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YWl0KG1zPzogbnVtYmVyIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIG1zID0gbXMgPz8gMTAwMDtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgfSwgbXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRyYWdFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICBsZXQgcG9zMTogbnVtYmVyID0gMCwgcG9zMjogbnVtYmVyID0gMCwgcG9zMzogbnVtYmVyID0gMCwgcG9zNDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBsZXQgZWw6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudC5pZCArICctaGVhZGVyJyk7XHJcbiAgICBpZiAoZWwpIHtcclxuICAgICAgZWwub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xyXG4gICAgICBlbC5vbnRvdWNoc3RhcnQgPSBkcmFnTW91c2VEb3duO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWxlbWVudC5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XHJcbiAgICAgIGVsZW1lbnQub250b3VjaHN0YXJ0ID0gZHJhZ01vdXNlRG93bjtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBkcmFnTW91c2VEb3duKGU6IGFueSk6IHZvaWQge1xyXG4gICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcbiAgICAgIGU/LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHBvczMgPSBlPy5jbGllbnRYO1xyXG4gICAgICBwb3M0ID0gZT8uY2xpZW50WTtcclxuICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gY2xvc2VEcmFnRWxlbWVudDtcclxuICAgICAgZG9jdW1lbnQub250b3VjaGVuZCA9IGNsb3NlRHJhZ0VsZW1lbnQ7XHJcbiAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZWxlbWVudERyYWc7XHJcbiAgICAgIGRvY3VtZW50Lm9udG91Y2htb3ZlID0gZWxlbWVudERyYWc7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZWxlbWVudERyYWcoZTogYW55KTogdm9pZCB7XHJcbiAgICAgIGxldCBob2xkZXJJbWFnZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWZ1bGwnKTtcclxuICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG4gICAgICBlPy5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBwb3MxID0gcG9zMyAtIGU/LmNsaWVudFg7XHJcbiAgICAgIHBvczIgPSBwb3M0IC0gZT8uY2xpZW50WTtcclxuICAgICAgcG9zMyA9IGU/LmNsaWVudFg7XHJcbiAgICAgIHBvczQgPSBlPy5jbGllbnRZO1xyXG5cclxuICAgICAgY29uc3QgbmV3VG9wOiBudW1iZXIgPSBlbGVtZW50Lm9mZnNldFRvcCAtIHBvczI7XHJcbiAgICAgIGNvbnN0IG5ld0xlZnQ6IG51bWJlciA9IGVsZW1lbnQub2Zmc2V0TGVmdCAtIHBvczE7XHJcbiAgICAgIGNvbnN0IHJlY3RIb2xkZXIgPSBob2xkZXJJbWFnZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgY29uc3QgcmVjdEVsZW1lbnQ6IERPTVJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBpZiAobmV3VG9wID49IHJlY3RIb2xkZXIueSArIDgpIHtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IE1hdGgubWluKG5ld1RvcCwgcmVjdEhvbGRlci55ICsgcmVjdEhvbGRlci5oZWlnaHQgLSByZWN0RWxlbWVudC5oZWlnaHQgLSA0KSArICdweCc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5ld0xlZnQgPiByZWN0SG9sZGVyLnggKyA0ICYmIHJlY3RIb2xkZXIueCArIHJlY3RIb2xkZXIud2lkdGggPiByZWN0RWxlbWVudC54ICsgcmVjdEVsZW1lbnQud2lkdGggKyAyKSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gTWF0aC5taW4obmV3TGVmdCwgcmVjdEhvbGRlci54ICsgcmVjdEhvbGRlci53aWR0aCAtIHJlY3RFbGVtZW50LndpZHRoIC0gNCkgKyAncHgnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2xvc2VEcmFnRWxlbWVudCgpOiB2b2lkIHtcclxuICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xyXG4gICAgICBkb2N1bWVudC5vbnRvdWNoZW5kID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQub250b3VjaG1vdmUgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVXBsb2FkKGV2ZW50OiB7cHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7fSk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuaW1hZ2VQaWNrZXI/Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVGaWxlU2VsZWN0KGV2dDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlcyA9IGV2dD8udGFyZ2V0Py5maWxlcztcclxuICAgIGlmIChmaWxlcykge1xyXG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNbMF07XHJcbiAgICAgIHRoaXMuaW1hZ2VOYW1lLnNldChmaWxlPy5uYW1lPy5zcGxpdCgnLicpWzBdKTtcclxuICAgICAgdGhpcy51cmxJbWFnZSA9IGBkYXRhOiR7ZmlsZT8udHlwZX07YmFzZTY0LGA7XHJcbiAgICAgIHRoaXMubm9FZGl0LnNldChmYWxzZSk7XHJcblxyXG4gICAgICBpZiAoZmlsZXMgJiYgZmlsZSkge1xyXG4gICAgICAgIGNvbnN0IHJlYWRlcjogYW55ID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICByZWFkZXIub25sb2FkID0gdGhpcy5oYW5kbGVSZWFkZXJMb2FkZWQuYmluZCh0aGlzKTtcclxuICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGZpbGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DbG9zZUVkaXRQYW5lbCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm9ic2VydmVyIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcclxuICAgICAgbGV0IGltYWdlQ3JvcHBlcjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWNyb3BwZXInKTtcclxuICAgICAgbGV0IGltYWdlRnVsbDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWZ1bGwnKTtcclxuICAgICAgdGhpcy5vYnNlcnZlci51bm9ic2VydmUoaW1hZ2VDcm9wcGVyKTtcclxuICAgICAgdGhpcy5vYnNlcnZlci51bm9ic2VydmUoaW1hZ2VGdWxsKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0Nyb3Auc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgdGhpcy5zaG93RWRpdFBhbmVsLnNldChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgb25DaGFuZ2VRdWFsaXR5KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcXVhbGl0eUl0ZW06IG51bWJlciA9IHRoaXMucXVhbGl0eS52YWx1ZSAvIDEwMDtcclxuICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQgPz8gMjAwMDtcclxuICAgIHRoaXMubWF4V2lkdGggPSB0aGlzLm1heFdpZHRoID8/IDIwMDA7XHJcblxyXG4gICAgYXdhaXQgdGhpcy53YWl0KDI1MCk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBpbnB1dDogSW1hZ2VDb252ZXJ0ZXJJbnB1dCA9IHtcclxuICAgICAgICBoZWlnaHQ6IHRoaXMubWF4SGVpZ2h0LFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLm1heFdpZHRoLFxyXG4gICAgICAgIGRhdGFUeXBlOiB0aGlzLmZvcm1hdC52YWx1ZSxcclxuICAgICAgICBxdWFsaXR5OiBxdWFsaXR5SXRlbSxcclxuICAgICAgICBtYWludGFpblJhdGlvOiB0aGlzLm1haW50YWluQXNwZWN0UmF0aW8udmFsdWUsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmltYWdlU3JjLnNldChhd2FpdCB0aGlzLnJlc2l6ZURhdGFVUkwodGhpcy5vcmlnaW5JbWFnZVNyYywgaW5wdXQpKTtcclxuICAgICAgdGhpcy4kaW1hZ2VDaGFuZ2VkLm5leHQodGhpcy5pbWFnZVNyYygpKTtcclxuICAgICAgdGhpcy5sb2FkSW1hZ2Uuc2V0KHRydWUpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5sb2FkSW1hZ2Uuc2V0KHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG9uQ2hhbmdlRm9ybWF0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHF1YWxpdHlJdGVtOiBudW1iZXIgPSB0aGlzLnF1YWxpdHkudmFsdWUgLyAxMDA7XHJcbiAgICB0aGlzLm1heEhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ID8/IDIwMDA7XHJcbiAgICB0aGlzLm1heFdpZHRoID0gdGhpcy5tYXhXaWR0aCA/PyAyMDAwO1xyXG5cclxuICAgIGF3YWl0IHRoaXMud2FpdCgyNTApO1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGlucHV0OiBJbWFnZUNvbnZlcnRlcklucHV0ID0ge1xyXG4gICAgICAgIGhlaWdodDogdGhpcy5tYXhIZWlnaHQsXHJcbiAgICAgICAgd2lkdGg6IHRoaXMubWF4V2lkdGgsXHJcbiAgICAgICAgZGF0YVR5cGU6IHRoaXMuZm9ybWF0LnZhbHVlLFxyXG4gICAgICAgIHF1YWxpdHk6IHF1YWxpdHlJdGVtLFxyXG4gICAgICAgIG1haW50YWluUmF0aW86IHRoaXMubWFpbnRhaW5Bc3BlY3RSYXRpby52YWx1ZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5pbWFnZVNyYy5zZXQoYXdhaXQgdGhpcy5yZXNpemVEYXRhVVJMKHRoaXMub3JpZ2luSW1hZ2VTcmMsIGlucHV0KSk7XHJcbiAgICAgIHRoaXMuJGltYWdlQ2hhbmdlZC5uZXh0KHRoaXMuaW1hZ2VTcmMoKSk7XHJcbiAgICAgIHRoaXMubG9hZEltYWdlLnNldCh0cnVlKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMubG9hZEltYWdlLnNldCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvbkNoYW5nZVNpemUoY2hhbmdlV2lkdGg/OiBhbnksIGNoYW5nZUhlaWdodD86IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHF1YWxpdHlJdGVtOiBudW1iZXIgPSB0aGlzLnF1YWxpdHkudmFsdWUgLyAxMDA7XHJcbiAgICB0aGlzLm1heEhlaWdodCA9IHRoaXMubWF4SGVpZ2h0ID8/IDIwMDA7XHJcbiAgICB0aGlzLm1heFdpZHRoID0gdGhpcy5tYXhXaWR0aCA/PyAyMDAwO1xyXG5cclxuICAgIGF3YWl0IHRoaXMud2FpdCg1MDApO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBpbnB1dDogSW1hZ2VDb252ZXJ0ZXJJbnB1dCA9IHtcclxuICAgICAgICBoZWlnaHQ6IHRoaXMubWF4SGVpZ2h0LFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLm1heFdpZHRoLFxyXG4gICAgICAgIGRhdGFUeXBlOiB0aGlzLmZvcm1hdC52YWx1ZSxcclxuICAgICAgICBxdWFsaXR5OiBxdWFsaXR5SXRlbSxcclxuICAgICAgICBtYWludGFpblJhdGlvOiB0aGlzLm1haW50YWluQXNwZWN0UmF0aW8udmFsdWUsXHJcbiAgICAgICAgY2hhbmdlSGVpZ2h0OiBjaGFuZ2VIZWlnaHQsXHJcbiAgICAgICAgY2hhbmdlV2lkdGg6IGNoYW5nZVdpZHRoLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmltYWdlU3JjLnNldChhd2FpdCB0aGlzLnJlc2l6ZURhdGFVUkwodGhpcy5vcmlnaW5JbWFnZVNyYywgaW5wdXQpKTtcclxuICAgICAgdGhpcy4kaW1hZ2VDaGFuZ2VkLm5leHQodGhpcy5pbWFnZVNyYygpKTtcclxuICAgICAgdGhpcy5sb2FkSW1hZ2Uuc2V0KHRydWUpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5sb2FkSW1hZ2Uuc2V0KHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlQ3JvcCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNyb3BwZXI6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1jcm9wcGVyJyk7XHJcbiAgICBjcm9wcGVyLnN0eWxlLndpZHRoID0gdGhpcy5jcm9wV2lkdGgudmFsdWUgKyAncHgnO1xyXG4gICAgY3JvcHBlci5zdHlsZS5oZWlnaHQgPSB0aGlzLmNyb3BIZWlnaHQudmFsdWUgKyAncHgnO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ3JvcFN0YXRlQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY3JvcHBlcjogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UtY3JvcHBlcicpO1xyXG4gICAgY29uc3QgZnVsbEltYWdlOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1mdWxsJyk7XHJcbiAgICBjb25zdCBhc3BlY3RSYXRpbzogbnVtYmVyID0gZnVsbEltYWdlLm9mZnNldFdpZHRoIC8gZnVsbEltYWdlLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93Q3JvcC52YWx1ZSkge1xyXG4gICAgICBjcm9wcGVyLnN0eWxlLm9wYWNpdHkgPSAnMS4wJztcclxuICAgICAgdGhpcy5kcmFnRWxlbWVudChjcm9wcGVyKTtcclxuICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllczogUmVzaXplT2JzZXJ2ZXJFbnRyeVtdKTogdm9pZCA9PiB7XHJcbiAgICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeTogUmVzaXplT2JzZXJ2ZXJFbnRyeSk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0VkaXRQYW5lbCgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRDcm9wcGVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1jcm9wcGVyJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRGdWxsOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1mdWxsJyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZWN0SG9sZGVyOiBET01SZWN0ID0gZWxlbWVudEZ1bGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlY3RFbGVtZW50OiBET01SZWN0ID0gZWxlbWVudENyb3BwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBtYXhXaWR0aDogbnVtYmVyID0gcmVjdEhvbGRlci54ICsgcmVjdEhvbGRlci53aWR0aCAtIHJlY3RFbGVtZW50LnggLSA0O1xyXG4gICAgICAgICAgICBjb25zdCBtYXhIZWlnaHQ6IG51bWJlciA9IHJlY3RIb2xkZXIueSArIHJlY3RIb2xkZXIuaGVpZ2h0IC0gcmVjdEVsZW1lbnQueSAtIDQ7XHJcblxyXG4gICAgICAgICAgICAvLyBPYnRlbmVyIGVsIHRhbWHDsW8gZGVsIMOhcmVhIGRlIHJlY29ydGUgc2VsZWNjaW9uYWRhIHBvciBlbCB1c3VhcmlvXHJcbiAgICAgICAgICAgIGNvbnN0IGNyb3BXaWR0aDogbnVtYmVyID0gZWxlbWVudENyb3BwZXIub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IGNyb3BIZWlnaHQ6IG51bWJlciA9IGVsZW1lbnRDcm9wcGVyLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIC8vIENhbGN1bGFyIGVsIGFuY2hvIHkgZWwgYWx0byBkZWwgw6FyZWEgZGUgcmVjb3J0ZSBtYW50ZW5pZW5kbyBsYSByZWxhY2nDs24gZGUgYXNwZWN0byBkZSBsYSBpbWFnZW4gb3JpZ2luYWxcclxuICAgICAgICAgICAgbGV0IG5ld1dpZHRoOiBudW1iZXIgPSBjcm9wV2lkdGg7XHJcbiAgICAgICAgICAgIGxldCBuZXdIZWlnaHQ6IG51bWJlciA9IGNyb3BIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYWludGFpbkFzcGVjdFJhdGlvLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNyb3BXaWR0aCAvIGNyb3BIZWlnaHQgPiBhc3BlY3RSYXRpbykge1xyXG4gICAgICAgICAgICAgICAgbmV3SGVpZ2h0ID0gY3JvcFdpZHRoIC8gYXNwZWN0UmF0aW87XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ld1dpZHRoID0gY3JvcEhlaWdodCAqIGFzcGVjdFJhdGlvO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQWp1c3RhciBlbCBhbmNobyB5IGVsIGFsdG8gZGVsIMOhcmVhIGRlIHJlY29ydGUgc2kgc3VwZXJhIGxvcyBsw61taXRlc1xyXG4gICAgICAgICAgICBuZXdXaWR0aCA9IE1hdGgubWluKG5ld1dpZHRoLCBtYXhXaWR0aCk7XHJcbiAgICAgICAgICAgIG5ld0hlaWdodCA9IE1hdGgubWluKG5ld0hlaWdodCwgbWF4SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIC8vIEVzdGFibGVjZXIgZWwgdGFtYcOxbyB5IGxhIHBvc2ljacOzbiBkZWwgw6FyZWEgZGUgcmVjb3J0ZVxyXG4gICAgICAgICAgICBlbGVtZW50Q3JvcHBlci5zdHlsZS53aWR0aCA9IGAke25ld1dpZHRofXB4YDtcclxuICAgICAgICAgICAgZWxlbWVudENyb3BwZXIuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3JvcFdpZHRoLnNldFZhbHVlKHJlY3RFbGVtZW50LndpZHRoKTtcclxuICAgICAgICAgICAgdGhpcy5jcm9wSGVpZ2h0LnNldFZhbHVlKHJlY3RFbGVtZW50LmhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZW50cnkudGFyZ2V0LmlkID09ICdpbWFnZS1mdWxsJykge1xyXG4gICAgICAgICAgICAgIGlmIChyZWN0SG9sZGVyLnRvcCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRDcm9wcGVyLnN0eWxlLnRvcCA9IHJlY3RIb2xkZXIudG9wICsgNCArICdweCc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsZW1lbnRDcm9wcGVyLnN0eWxlLmxlZnQgPSByZWN0SG9sZGVyLmxlZnQgKyA0ICsgJ3B4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1jcm9wcGVyJykpO1xyXG4gICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWZ1bGwnKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjcm9wcGVyLnN0eWxlLm9wYWNpdHkgPSAnMC4wJztcclxuICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIgaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRDcm9wcGVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS1jcm9wcGVyJyk7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudEZ1bGw6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWZ1bGwnKTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLnVub2JzZXJ2ZShlbGVtZW50Q3JvcHBlcik7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci51bm9ic2VydmUoZWxlbWVudEZ1bGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Dcm9wKHR5cGU/OiBhbnkpOiB2b2lkIHtcclxuICAgIHR5cGUgPSB0eXBlID8/IHRoaXMuZm9ybWF0LnZhbHVlO1xyXG4gICAgY29uc3QgY3JvcHBlcjogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UtY3JvcHBlcicpO1xyXG4gICAgY29uc3QgZWxlbWVudEZ1bGw6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlLWZ1bGwnKTtcclxuICAgIGNvbnN0IHJlY3RDcm9wcGVyOiBET01SZWN0ID0gY3JvcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGRhdGFIb2xkZXJSZWN0OiBET01SZWN0ID0gZWxlbWVudEZ1bGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XHJcbiAgICAgIGxldCBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgbGV0IGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50ID0gbmV3IEltYWdlKCk7XHJcbiAgICAgIGltYWdlLnNyYyA9IHRoaXMuaW1hZ2VTcmMoKTtcclxuICAgICAgaW1hZ2Uub25sb2FkID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgIGxldCByYXRpbzogbnVtYmVyID0gaW1hZ2UuaGVpZ2h0IC8gZGF0YUhvbGRlclJlY3QuaGVpZ2h0O1xyXG4gICAgICAgIGxldCBuZXdXaWR0aDogbnVtYmVyID0gcmVjdENyb3BwZXIud2lkdGggKiByYXRpbztcclxuICAgICAgICBsZXQgbmV3SGVpZ2h0OiBudW1iZXIgPSByZWN0Q3JvcHBlci5oZWlnaHQgKiByYXRpbztcclxuICAgICAgICBjYW52YXMud2lkdGggPSBuZXdXaWR0aDtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xyXG4gICAgICAgIGN0eD8uZHJhd0ltYWdlKFxyXG4gICAgICAgICAgaW1hZ2UsXHJcbiAgICAgICAgICBNYXRoLmFicyhyZWN0Q3JvcHBlci54ICogcmF0aW8pIC0gTWF0aC5hYnMoZGF0YUhvbGRlclJlY3QueCAqIHJhdGlvKSxcclxuICAgICAgICAgIE1hdGguYWJzKHJlY3RDcm9wcGVyLnkgKiByYXRpbykgLSBNYXRoLmFicyhkYXRhSG9sZGVyUmVjdC55ICogcmF0aW8pLFxyXG4gICAgICAgICAgbmV3V2lkdGgsXHJcbiAgICAgICAgICBuZXdIZWlnaHQsXHJcbiAgICAgICAgICAwLFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgIG5ld1dpZHRoLFxyXG4gICAgICAgICAgbmV3SGVpZ2h0LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJlc29sdmUoY2FudmFzLnRvRGF0YVVSTChgaW1hZ2UvJHt0eXBlfWAsIHRoaXMucXVhbGl0eS52YWx1ZSkpO1xyXG4gICAgICB9O1xyXG4gICAgICBpbWFnZS5vbmVycm9yID0gKGU6IHN0cmluZyB8IEV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICB9O1xyXG4gICAgfSlcclxuICAgICAgLnRoZW4oKGRhdGFVcmk6IGFueSk6IHZvaWQgPT4ge1xyXG4gICAgICAgIHRoaXMuaW1hZ2VTcmMuc2V0KGRhdGFVcmkpO1xyXG4gICAgICAgIHRoaXMuc2hvd0Nyb3Auc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMub25Dcm9wU3RhdGVDaGFuZ2UoKTtcclxuICAgICAgICB0aGlzLm1heFdpZHRoID0gY2FudmFzPy53aWR0aDtcclxuICAgICAgICB0aGlzLm1heEhlaWdodCA9IGNhbnZhcz8uaGVpZ2h0O1xyXG4gICAgICAgIHRoaXMubGFzdE9yaWdpblNyYyA9IHRoaXMub3JpZ2luSW1hZ2VTcmMgKyAnJztcclxuICAgICAgICB0aGlzLm9yaWdpbkltYWdlU3JjID0gZGF0YVVyaTtcclxuICAgICAgICB0aGlzLiRpbWFnZUNoYW5nZWQubmV4dCh0aGlzLmltYWdlU3JjKCkpO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGUpOiB2b2lkID0+IHtcclxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL2NvbnNvbGUubG9nKC4uLm9vX29vKGA0Mjg5NzM4NDY2XzU1Ml84XzU1Ml8yMl80YCxlKSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUmVzdG9yZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmFycmF5Q29waWVkSW1hZ2VzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgbGFzdFN0YXRlID0gdGhpcy5hcnJheUNvcGllZEltYWdlcy5wb3AoKTtcclxuICAgICAgdGhpcy5pbWFnZVNyYy5zZXQobGFzdFN0YXRlLmxhc3RJbWFnZSk7XHJcbiAgICAgIHRoaXMubWF4V2lkdGggPSBsYXN0U3RhdGUud2lkdGg7XHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gbGFzdFN0YXRlLmhlaWdodDtcclxuICAgICAgdGhpcy5vcmlnaW5JbWFnZVNyYyA9IHRoaXMubGFzdE9yaWdpblNyYyArICcnO1xyXG4gICAgICB0aGlzLm5vRWRpdC5zZXQoZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbWFnZVNyYy5zZXQodGhpcy5sYXN0T3JpZ2luU3JjKTtcclxuICAgICAgdGhpcy5vcmlnaW5JbWFnZVNyYyA9IHRoaXMubGFzdE9yaWdpblNyYyArICcnO1xyXG4gICAgICB0aGlzLm5vRWRpdC5zZXQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuJGltYWdlQ2hhbmdlZC5uZXh0KHRoaXMuaW1hZ2VTcmMoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25SZW1vdmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmltYWdlU3JjLnNldChudWxsKTtcclxuICAgIHRoaXMub3JpZ2luSW1hZ2VTcmMgPSBudWxsO1xyXG4gICAgdGhpcy5sb2FkSW1hZ2Uuc2V0KGZhbHNlKTtcclxuICAgIHRoaXMuYXJyYXlDb3BpZWRJbWFnZXMgPSBbXTtcclxuICAgIHRoaXMubGFzdE9yaWdpblNyYyA9IG51bGw7XHJcbiAgICB0aGlzLiRpbWFnZU9yaWdpbmFsLm5leHQobnVsbCk7XHJcbiAgICB0aGlzLiRpbWFnZUNoYW5nZWQubmV4dChudWxsKTtcclxuICAgIHRoaXMuZm9ybWF0LnNldFZhbHVlKCdqcGVnJyk7XHJcbiAgICB0aGlzLm1heEhlaWdodCA9IDIwMDA7XHJcbiAgICB0aGlzLm1heFdpZHRoID0gMjAwMDtcclxuICAgIHRoaXMuY3JvcEhlaWdodC5zZXRWYWx1ZSgxNTApO1xyXG4gICAgdGhpcy5jcm9wV2lkdGguc2V0VmFsdWUoMTUwKTtcclxuICAgIHRoaXMubWFpbnRhaW5Bc3BlY3RSYXRpby5zZXRWYWx1ZSh0cnVlKTtcclxuICAgIHRoaXMuc2hvd0VkaXRQYW5lbC5zZXQoZmFsc2UpO1xyXG4gICAgdGhpcy5ub0VkaXQuc2V0KGZhbHNlKTtcclxuICAgIHRoaXMuaW1hZ2VSZW1vdmVkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUFsbCQubmV4dCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUFsbCQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8vKiBjOCBpZ25vcmUgc3RhcnQgKi8vKiBlc2xpbnQtZGlzYWJsZSAqLztmdW5jdGlvbiBvb19jbSgpe3RyeXtyZXR1cm4gKDAsZXZhbCkoXCJnbG9iYWxUaGlzLl9jb25zb2xlX25pbmphXCIpIHx8ICgwLGV2YWwpKFwiLyogaHR0cHM6Ly9naXRodWIuY29tL3dhbGxhYnlqcy9jb25zb2xlLW5pbmphI2hvdy1kb2VzLWl0LXdvcmsgKi8ndXNlIHN0cmljdCc7dmFyIF8weDFmN2ZlMT1fMHgzN2U0OyhmdW5jdGlvbihfMHg0N2ZmYjUsXzB4MzA1NzE2KXt2YXIgXzB4MzcyZDg0PV8weDM3ZTQsXzB4MzI1ZThmPV8weDQ3ZmZiNSgpO3doaWxlKCEhW10pe3RyeXt2YXIgXzB4NDkzNjExPS1wYXJzZUludChfMHgzNzJkODQoMHgyMjUpKS8weDEqKC1wYXJzZUludChfMHgzNzJkODQoMHgxZDYpKS8weDIpKy1wYXJzZUludChfMHgzNzJkODQoMHgxYTkpKS8weDMqKC1wYXJzZUludChfMHgzNzJkODQoMHgyNzIpKS8weDQpKy1wYXJzZUludChfMHgzNzJkODQoMHgyNWIpKS8weDUrLXBhcnNlSW50KF8weDM3MmQ4NCgweDE4YikpLzB4NiooLXBhcnNlSW50KF8weDM3MmQ4NCgweDIzNSkpLzB4NykrLXBhcnNlSW50KF8weDM3MmQ4NCgweDFmMSkpLzB4OCoocGFyc2VJbnQoXzB4MzcyZDg0KDB4MWI5KSkvMHg5KStwYXJzZUludChfMHgzNzJkODQoMHgxZjIpKS8weGEqKC1wYXJzZUludChfMHgzNzJkODQoMHgxZWQpKS8weGIpK3BhcnNlSW50KF8weDM3MmQ4NCgweDFlOCkpLzB4YztpZihfMHg0OTM2MTE9PT1fMHgzMDU3MTYpYnJlYWs7ZWxzZSBfMHgzMjVlOGZbJ3B1c2gnXShfMHgzMjVlOGZbJ3NoaWZ0J10oKSk7fWNhdGNoKF8weDJiNDk5ZSl7XzB4MzI1ZThmWydwdXNoJ10oXzB4MzI1ZThmWydzaGlmdCddKCkpO319fShfMHgyOGVkLDB4NDVmNTgpKTtmdW5jdGlvbiBfMHgyOGVkKCl7dmFyIF8weDhiYTRkNz1bJzpsb2dQb2ludElkOicsJ19IVE1MQWxsQ29sbGVjdGlvbicsJzIzNzYzNjVtalRNUWEnLCdjb25jYXQnLCdfZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywnc2V0dGVyJywnQ29uc29sZVxcXFx4MjBOaW5qYVxcXFx4MjBmYWlsZWRcXFxceDIwdG9cXFxceDIwc2VuZFxcXFx4MjBsb2dzLFxcXFx4MjByZWZyZXNoaW5nXFxcXHgyMHRoZVxcXFx4MjBwYWdlXFxcXHgyMG1heVxcXFx4MjBoZWxwO1xcXFx4MjBhbHNvXFxcXHgyMHNlZVxcXFx4MjAnLCdyZXBsYWNlJywncGFyc2UnLCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywncG9ydCcsJ19yZWNvbm5lY3RUaW1lb3V0Jywnbm9kZU1vZHVsZXMnLCdTdHJpbmcnLCdfcHJvcGVydHknLCdhdXRvRXhwYW5kTWF4RGVwdGgnLCdfYWRkaXRpb25hbE1ldGFkYXRhJywnX2FsbG93ZWRUb1NlbmQnLCd1cmwnLCd3cy9pbmRleC5qcycsJ0NvbnNvbGVcXFxceDIwTmluamFcXFxceDIwZmFpbGVkXFxcXHgyMHRvXFxcXHgyMHNlbmRcXFxceDIwbG9ncyxcXFxceDIwcmVzdGFydGluZ1xcXFx4MjB0aGVcXFxceDIwcHJvY2Vzc1xcXFx4MjBtYXlcXFxceDIwaGVscDtcXFxceDIwYWxzb1xcXFx4MjBzZWVcXFxceDIwJywnX2NvbnNvbGVfbmluamFfc2Vzc2lvbicsJ3Jlc29sdmVHZXR0ZXJzJywnY29uc3RydWN0b3InLCdfcHJvcGVydHlOYW1lJywnODg4NjRQZU5vUW4nLCdwcm9wcycsJ2F1dG9FeHBhbmQnLCdfZ2V0T3duUHJvcGVydHlOYW1lcycsJ21ldGhvZCcsJ2xldmVsJywnY3JlYXRlJywnb25jbG9zZScsJ3ZlcnNpb25zJywnZXhwSWQnLCc0NTM3ODZoWlJUTVEnLCdfaXNQcmltaXRpdmVXcmFwcGVyVHlwZScsJ19pbk5leHRFZGdlJywnMTcwOTU4MzI3Njc2MycsJ19jb25uZWN0VG9Ib3N0Tm93JywnaGFzT3duUHJvcGVydHknLCdpbmRleCcsJ19zZXROb2RlRXhwcmVzc2lvblBhdGgnLCdzdGFjaycsJ193cycsJ2F1dG9FeHBhbmRQcm9wZXJ0eUNvdW50JywnZWRnZScsJ0J1ZmZlcicsJ29iamVjdCcsJ3NldCcsJ3dzOi8vJywnX2NsZWFuTm9kZScsJ2FzdHJvJywnX3R5cGUnLCdfd2ViU29ja2V0RXJyb3JEb2NzTGluaycsJ2NhdGNoJywncHJvdG90eXBlJywnX3BfJywndGltZUVuZCcsJ1dlYlNvY2tldCcsJ2dsb2JhbCcsJ3NsaWNlJywnRXJyb3InLCdfaXNQcmltaXRpdmVUeXBlJywnX2lzVW5kZWZpbmVkJywnNTRpUm5RSk4nLCdfb2JqZWN0VG9TdHJpbmcnLCd0cmFjZScsJ2lzQXJyYXknLCdfcXVvdGVkUmVnRXhwJywndGltZScsJycsJ19zZXROb2RlTGFiZWwnLCcnLCd1bmtub3duJywnZnVuY05hbWUnLCdTZXQnLCdcXFxceDIwYnJvd3NlcicsJ3JlZHVjZUxpbWl0cycsJ2ZhaWxlZFxcXFx4MjB0b1xcXFx4MjBjb25uZWN0XFxcXHgyMHRvXFxcXHgyMGhvc3Q6XFxcXHgyMCcsJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsJzlWcEhFTVMnLCdpbmNsdWRlcycsJ19TeW1ib2wnLCduZWdhdGl2ZUluZmluaXR5JywnZnVuY3Rpb24nLCdtZXNzYWdlJywnbmFuJywnb25tZXNzYWdlJywnX2RhdGVUb1N0cmluZycsJ3Jvb3RfZXhwJywncm9vdEV4cHJlc3Npb24nLCdkb2NrZXJpemVkQXBwJywnX1dlYlNvY2tldENsYXNzJywnZ2V0dGVyJywnaG9zdG5hbWUnLCd3YXJuJywnYXJyYXknLCdfaXNNYXAnLCdlbGFwc2VkJywnX2FsbG93ZWRUb0Nvbm5lY3RPblNlbmQnLCdsb2cnLCdORUdBVElWRV9JTkZJTklUWScsJ2NhcHBlZEVsZW1lbnRzJywnX3Byb2Nlc3NUcmVlTm9kZVJlc3VsdCcsJ3JlbG9hZCcsJ19jb25uZWN0ZWQnLCd2YWx1ZScsJ3JlYWR5U3RhdGUnLCdhdXRvRXhwYW5kTGltaXQnLCcxNHR3VWdYSCcsXFxcImM6XFxcXFxcXFxVc2Vyc1xcXFxcXFxcZmNhcnJcXFxcXFxcXC52c2NvZGVcXFxcXFxcXGV4dGVuc2lvbnNcXFxcXFxcXHdhbGxhYnlqcy5jb25zb2xlLW5pbmphLTEuMC4yOTBcXFxcXFxcXG5vZGVfbW9kdWxlc1xcXCIsJ190cmVlTm9kZVByb3BlcnRpZXNBZnRlckZ1bGxWYWx1ZScsJy4uLicsJ3N0cmluZycsJ19tYXhDb25uZWN0QXR0ZW1wdENvdW50JywnX2NhcElmU3RyaW5nJywnYWxsU3RyTGVuZ3RoJywnY292ZXJhZ2UnLCdtYXAnLCdwb3AnLCdfYWRkTG9hZE5vZGUnLCdlbGVtZW50cycsJ251bWJlcicsJ01hcCcsJ3BhdGgnLCdbb2JqZWN0XFxcXHgyMEFycmF5XScsJ05FWFRfUlVOVElNRScsJzg3NzIwOTZhQmVpTmEnLCdfcmVnRXhwVG9TdHJpbmcnLCdfc2V0Tm9kZUlkJywndG90YWxTdHJMZW5ndGgnLCdkYXRhJywnMjc1ekNmYXVHJywnbmVnYXRpdmVaZXJvJywnc3ltYm9sJywnZ2V0V2ViU29ja2V0Q2xhc3MnLCczODI3NDY0ZnNpdlVjJywnOTk0MzByTXB3Y3MnLCdwdXNoJywnX2Nvbm5lY3RBdHRlbXB0Q291bnQnLCdlbnYnLCdzcGxpdCcsJ251bGwnLCdfc2V0Tm9kZVBlcm1pc3Npb25zJywndHlwZScsJ19rZXlTdHJSZWdFeHAnLCdfX2VzJysnTW9kdWxlJywnbm9kZScsJ19oYXNNYXBPbkl0c1BhdGgnLCd0b1N0cmluZycsJ19jb25zb2xlTmluamFBbGxvd2VkVG9TdGFydCcsJ2Nsb3NlJywnc2VuZCcsJ19pc05lZ2F0aXZlWmVybycsJ3RoZW4nLCdfaW5Ccm93c2VyJywndW5yZWYnLCduYW1lJywndW5zaGlmdCcsJ2hpdHMnLCdhbmd1bGFyJywnX3NvY2tldCcsJ19kaXNwb3NlV2Vic29ja2V0JywnMTA0MTgnLCdsZW5ndGgnLCdfYmxhY2tsaXN0ZWRQcm9wZXJ0eScsJ3BlcmZfaG9va3MnLCdleHByZXNzaW9uc1RvRXZhbHVhdGUnLCdfaXNTZXQnLCdfc2VuZEVycm9yTWVzc2FnZScsJzEyNy4wLjAuMScsJ3Byb2Nlc3MnLCdob3N0Jywnam9pbicsJ0hUTUxBbGxDb2xsZWN0aW9uJywnX2FkZEZ1bmN0aW9uc05vZGUnLCdfdHJlZU5vZGVQcm9wZXJ0aWVzQmVmb3JlRnVsbFZhbHVlJywnZ2V0T3duUHJvcGVydHlTeW1ib2xzJywnc3RyTGVuZ3RoJywnZmFpbGVkXFxcXHgyMHRvXFxcXHgyMGZpbmRcXFxceDIwYW5kXFxcXHgyMGxvYWRcXFxceDIwV2ViU29ja2V0JywnY2FsbCcsJ19nZXRPd25Qcm9wZXJ0eVN5bWJvbHMnLCdfaGFzU3ltYm9sUHJvcGVydHlPbkl0c1BhdGgnLCdkZXB0aCcsJ19XZWJTb2NrZXQnLCdiaW5kJywnX3NldE5vZGVRdWVyeVBhdGgnLCdpc0V4cHJlc3Npb25Ub0V2YWx1YXRlJywnMjk1MjVZR1JOQkonLCdjb3VudCcsJ25vRnVuY3Rpb25zJywnX2F0dGVtcHRUb1JlY29ubmVjdFNob3J0bHknLCdzdGFja1RyYWNlTGltaXQnLCdOdW1iZXInLCdwZXJmb3JtYW5jZScsJ3Rlc3QnLCd2YWx1ZU9mJywncG9zaXRpdmVJbmZpbml0eScsJ19wX2xlbmd0aCcsJ2Vycm9yJywnb25lcnJvcicsJ19jb25zb2xlX25pbmphJywnW29iamVjdFxcXFx4MjBNYXBdJywnY2FwcGVkUHJvcHMnLCcxNGh4REtZVicsJ2luZGV4T2YnLCdmb3JFYWNoJywncGFyZW50JywnZ2V0Jywnc2VyaWFsaXplJywnZ2V0UHJvdG90eXBlT2YnLCdfYWRkUHJvcGVydHknLCd0aW1lU3RhbXAnLCdsb2NhdGlvbicsJ2NhcHBlZCcsJ3VuZGVmaW5lZCcsJ19jb25uZWN0aW5nJywnW29iamVjdFxcXFx4MjBCaWdJbnRdJywnX3NldE5vZGVFeHBhbmRhYmxlU3RhdGUnLCdlbnVtZXJhYmxlJywnYXV0b0V4cGFuZFByZXZpb3VzT2JqZWN0cycsJ2h0dHBzOi8vdGlueXVybC5jb20vMzd4OGI3OXQnLCdcXFxceDIwc2VydmVyJywnaHJ0aW1lJywnc29ydFByb3BzJywnbWF0Y2gnLCdiaWdpbnQnLCdsb2dnZXJcXFxceDIwZmFpbGVkXFxcXHgyMHRvXFxcXHgyMGNvbm5lY3RcXFxceDIwdG9cXFxceDIwaG9zdCxcXFxceDIwc2VlXFxcXHgyMCcsJ3NvcnQnLCd0b0xvd2VyQ2FzZScsJ191bmRlZmluZWQnLCdvbm9wZW4nLCdub3cnLCdQT1NJVElWRV9JTkZJTklUWScsJ2N1cnJlbnQnLCdsb2dnZXJcXFxceDIwZmFpbGVkXFxcXHgyMHRvXFxcXHgyMGNvbm5lY3RcXFxceDIwdG9cXFxceDIwaG9zdCcsJ19pc0FycmF5JywnY29uc29sZScsJ19hZGRPYmplY3RQcm9wZXJ0eScsJ2dhdGV3YXkuZG9ja2VyLmludGVybmFsJ107XzB4MjhlZD1mdW5jdGlvbigpe3JldHVybiBfMHg4YmE0ZDc7fTtyZXR1cm4gXzB4MjhlZCgpO31mdW5jdGlvbiBfMHgzN2U0KF8weDY5ZTE0NixfMHgzZGIyOGQpe3ZhciBfMHgyOGVkNmU9XzB4MjhlZCgpO3JldHVybiBfMHgzN2U0PWZ1bmN0aW9uKF8weDM3ZTQ2MCxfMHgxOWEyNTcpe18weDM3ZTQ2MD1fMHgzN2U0NjAtMHgxODk7dmFyIF8weDE4OTBjZD1fMHgyOGVkNmVbXzB4MzdlNDYwXTtyZXR1cm4gXzB4MTg5MGNkO30sXzB4MzdlNChfMHg2OWUxNDYsXzB4M2RiMjhkKTt9dmFyIGo9T2JqZWN0W18weDFmN2ZlMSgweDI3OCldLEg9T2JqZWN0WydkZWZpbmVQcm9wZXJ0eSddLEc9T2JqZWN0W18weDFmN2ZlMSgweDFiOCldLGVlPU9iamVjdFtfMHgxZjdmZTEoMHgyNjIpXSx0ZT1PYmplY3RbXzB4MWY3ZmUxKDB4MjNiKV0sbmU9T2JqZWN0W18weDFmN2ZlMSgweDFhMCldW18weDFmN2ZlMSgweDE5MCldLHJlPShfMHg1YWM2NDIsXzB4MWNmNTYwLF8weDU2MTU1MyxfMHgyMGM0NDcpPT57dmFyIF8weDQ1YzIwMj1fMHgxZjdmZTE7aWYoXzB4MWNmNTYwJiZ0eXBlb2YgXzB4MWNmNTYwPT1fMHg0NWMyMDIoMHgxOTgpfHx0eXBlb2YgXzB4MWNmNTYwPT1fMHg0NWMyMDIoMHgxYmQpKXtmb3IobGV0IF8weDUwOGEyYyBvZiBlZShfMHgxY2Y1NjApKSFuZVtfMHg0NWMyMDIoMHgyMWQpXShfMHg1YWM2NDIsXzB4NTA4YTJjKSYmXzB4NTA4YTJjIT09XzB4NTYxNTUzJiZIKF8weDVhYzY0MixfMHg1MDhhMmMseydnZXQnOigpPT5fMHgxY2Y1NjBbXzB4NTA4YTJjXSwnZW51bWVyYWJsZSc6IShfMHgyMGM0NDc9RyhfMHgxY2Y1NjAsXzB4NTA4YTJjKSl8fF8weDIwYzQ0N1tfMHg0NWMyMDIoMHgyNDQpXX0pO31yZXR1cm4gXzB4NWFjNjQyO30seD0oXzB4MWE5MjYxLF8weGI4NDJlMSxfMHgzYTEyM2QpPT4oXzB4M2ExMjNkPV8weDFhOTI2MSE9bnVsbD9qKHRlKF8weDFhOTI2MSkpOnt9LHJlKF8weGI4NDJlMXx8IV8weDFhOTI2MXx8IV8weDFhOTI2MVtfMHgxZjdmZTEoMHgxZmIpXT9IKF8weDNhMTIzZCwnZGVmYXVsdCcseyd2YWx1ZSc6XzB4MWE5MjYxLCdlbnVtZXJhYmxlJzohMHgwfSk6XzB4M2ExMjNkLF8weDFhOTI2MSkpLFg9Y2xhc3N7Y29uc3RydWN0b3IoXzB4MjU4OTQ2LF8weDRhYmMyNCxfMHg1M2E5MGEsXzB4NjhkYjQ1LF8weDU0NTdlOCl7dmFyIF8weDI1OTdjYj1fMHgxZjdmZTE7dGhpc1tfMHgyNTk3Y2IoMHgxYTQpXT1fMHgyNTg5NDYsdGhpc1tfMHgyNTk3Y2IoMHgyMTUpXT1fMHg0YWJjMjQsdGhpc1tfMHgyNTk3Y2IoMHgyNjMpXT1fMHg1M2E5MGEsdGhpc1tfMHgyNTk3Y2IoMHgyNjUpXT1fMHg2OGRiNDUsdGhpc1snZG9ja2VyaXplZEFwcCddPV8weDU0NTdlOCx0aGlzWydfYWxsb3dlZFRvU2VuZCddPSEweDAsdGhpc1tfMHgyNTk3Y2IoMHgxY2MpXT0hMHgwLHRoaXNbXzB4MjU5N2NiKDB4MWQyKV09ITB4MSx0aGlzW18weDI1OTdjYigweDI0MSldPSEweDEsdGhpc1tfMHgyNTk3Y2IoMHgxOGQpXT1fMHgyNTg5NDZbXzB4MjU5N2NiKDB4MjE0KV0/LlsnZW52J10/LltfMHgyNTk3Y2IoMHgxZTcpXT09PSdlZGdlJyx0aGlzW18weDI1OTdjYigweDIwNCldPSF0aGlzW18weDI1OTdjYigweDFhNCldW18weDI1OTdjYigweDIxNCldPy5bXzB4MjU5N2NiKDB4MTg5KV0/LltfMHgyNTk3Y2IoMHgxZmMpXSYmIXRoaXNbXzB4MjU5N2NiKDB4MThkKV0sdGhpc1snX1dlYlNvY2tldENsYXNzJ109bnVsbCx0aGlzW18weDI1OTdjYigweDFmNCldPTB4MCx0aGlzW18weDI1OTdjYigweDFkYildPTB4MTQsdGhpc1tfMHgyNTk3Y2IoMHgxOWUpXT1fMHgyNTk3Y2IoMHgyNDYpLHRoaXNbXzB4MjU5N2NiKDB4MjEyKV09KHRoaXNbXzB4MjU5N2NiKDB4MjA0KV0/XzB4MjU5N2NiKDB4MjVmKTpfMHgyNTk3Y2IoMHgyNmQpKSt0aGlzWydfd2ViU29ja2V0RXJyb3JEb2NzTGluayddO31hc3luY1tfMHgxZjdmZTEoMHgxZjApXSgpe3ZhciBfMHgzMzYxYTY9XzB4MWY3ZmUxO2lmKHRoaXNbXzB4MzM2MWE2KDB4MWM1KV0pcmV0dXJuIHRoaXNbJ19XZWJTb2NrZXRDbGFzcyddO2xldCBfMHgyNDBkOGY7aWYodGhpc1tfMHgzMzYxYTYoMHgyMDQpXXx8dGhpc1snX2luTmV4dEVkZ2UnXSlfMHgyNDBkOGY9dGhpc1snZ2xvYmFsJ11bXzB4MzM2MWE2KDB4MWEzKV07ZWxzZXtpZih0aGlzWydnbG9iYWwnXVsncHJvY2VzcyddPy5bXzB4MzM2MWE2KDB4MjIxKV0pXzB4MjQwZDhmPXRoaXNbJ2dsb2JhbCddW18weDMzNjFhNigweDIxNCldPy5bXzB4MzM2MWE2KDB4MjIxKV07ZWxzZSB0cnl7bGV0IF8weDQyNTkxMj1hd2FpdCBpbXBvcnQoXzB4MzM2MWE2KDB4MWU1KSk7XzB4MjQwZDhmPShhd2FpdCBpbXBvcnQoKGF3YWl0IGltcG9ydChfMHgzMzYxYTYoMHgyNmIpKSlbJ3BhdGhUb0ZpbGVVUkwnXShfMHg0MjU5MTJbXzB4MzM2MWE2KDB4MjE2KV0odGhpc1tfMHgzMzYxYTYoMHgyNjUpXSxfMHgzMzYxYTYoMHgyNmMpKSlbXzB4MzM2MWE2KDB4MWZlKV0oKSkpWydkZWZhdWx0J107fWNhdGNoe3RyeXtfMHgyNDBkOGY9cmVxdWlyZShyZXF1aXJlKF8weDMzNjFhNigweDFlNSkpW18weDMzNjFhNigweDIxNildKHRoaXNbXzB4MzM2MWE2KDB4MjY1KV0sJ3dzJykpO31jYXRjaHt0aHJvdyBuZXcgRXJyb3IoXzB4MzM2MWE2KDB4MjFjKSk7fX19cmV0dXJuIHRoaXNbXzB4MzM2MWE2KDB4MWM1KV09XzB4MjQwZDhmLF8weDI0MGQ4Zjt9W18weDFmN2ZlMSgweDE4ZildKCl7dmFyIF8weDEwNDFjNz1fMHgxZjdmZTE7dGhpc1tfMHgxMDQxYzcoMHgyNDEpXXx8dGhpc1tfMHgxMDQxYzcoMHgxZDIpXXx8dGhpc1tfMHgxMDQxYzcoMHgxZjQpXT49dGhpc1snX21heENvbm5lY3RBdHRlbXB0Q291bnQnXXx8KHRoaXNbXzB4MTA0MWM3KDB4MWNjKV09ITB4MSx0aGlzW18weDEwNDFjNygweDI0MSldPSEweDAsdGhpc1tfMHgxMDQxYzcoMHgxZjQpXSsrLHRoaXNbXzB4MTA0MWM3KDB4MTk0KV09bmV3IFByb21pc2UoKF8weDFkNDdhOCxfMHgzMDI2ZDYpPT57dmFyIF8weGRkMTEwNj1fMHgxMDQxYzc7dGhpc1tfMHhkZDExMDYoMHgxZjApXSgpW18weGRkMTEwNigweDIwMyldKF8weDRjYzhmZj0+e3ZhciBfMHg0N2RhYzc9XzB4ZGQxMTA2O2xldCBfMHgxZDEwZDA9bmV3IF8weDRjYzhmZihfMHg0N2RhYzcoMHgxOWEpKyghdGhpc1tfMHg0N2RhYzcoMHgyMDQpXSYmdGhpc1tfMHg0N2RhYzcoMHgxYzQpXT9fMHg0N2RhYzcoMHgyNTgpOnRoaXNbJ2hvc3QnXSkrJzonK3RoaXNbJ3BvcnQnXSk7XzB4MWQxMGQwW18weDQ3ZGFjNygweDIzMSldPSgpPT57dmFyIF8weDgzNmNlMD1fMHg0N2RhYzc7dGhpc1tfMHg4MzZjZTAoMHgyNmEpXT0hMHgxLHRoaXNbJ19kaXNwb3NlV2Vic29ja2V0J10oXzB4MWQxMGQwKSx0aGlzW18weDgzNmNlMCgweDIyOCldKCksXzB4MzAyNmQ2KG5ldyBFcnJvcignbG9nZ2VyXFxcXHgyMHdlYnNvY2tldFxcXFx4MjBlcnJvcicpKTt9LF8weDFkMTBkMFtfMHg0N2RhYzcoMHgyNTApXT0oKT0+e3ZhciBfMHgzMTZkOTg9XzB4NDdkYWM3O3RoaXNbJ19pbkJyb3dzZXInXXx8XzB4MWQxMGQwW18weDMxNmQ5OCgweDIwYSldJiZfMHgxZDEwZDBbXzB4MzE2ZDk4KDB4MjBhKV1bJ3VucmVmJ10mJl8weDFkMTBkMFtfMHgzMTZkOTgoMHgyMGEpXVtfMHgzMTZkOTgoMHgyMDUpXSgpLF8weDFkNDdhOChfMHgxZDEwZDApO30sXzB4MWQxMGQwWydvbmNsb3NlJ109KCk9Pnt2YXIgXzB4MzE5MDFiPV8weDQ3ZGFjNzt0aGlzW18weDMxOTAxYigweDFjYyldPSEweDAsdGhpc1tfMHgzMTkwMWIoMHgyMGIpXShfMHgxZDEwZDApLHRoaXNbXzB4MzE5MDFiKDB4MjI4KV0oKTt9LF8weDFkMTBkMFtfMHg0N2RhYzcoMHgxYzApXT1fMHg5MzQzMTk9Pnt2YXIgXzB4MmYyOTE3PV8weDQ3ZGFjNzt0cnl7XzB4OTM0MzE5JiZfMHg5MzQzMTlbXzB4MmYyOTE3KDB4MWVjKV0mJnRoaXNbXzB4MmYyOTE3KDB4MjA0KV0mJkpTT05bXzB4MmYyOTE3KDB4MjYxKV0oXzB4OTM0MzE5WydkYXRhJ10pW18weDJmMjkxNygweDI3NildPT09XzB4MmYyOTE3KDB4MWQxKSYmdGhpc1tfMHgyZjI5MTcoMHgxYTQpXVtfMHgyZjI5MTcoMHgyM2UpXVsncmVsb2FkJ10oKTt9Y2F0Y2h7fX07fSlbXzB4ZGQxMTA2KDB4MjAzKV0oXzB4NDc5NTc4PT4odGhpc1tfMHhkZDExMDYoMHgxZDIpXT0hMHgwLHRoaXNbXzB4ZGQxMTA2KDB4MjQxKV09ITB4MSx0aGlzW18weGRkMTEwNigweDFjYyldPSEweDEsdGhpc1tfMHhkZDExMDYoMHgyNmEpXT0hMHgwLHRoaXNbXzB4ZGQxMTA2KDB4MWY0KV09MHgwLF8weDQ3OTU3OCkpW18weGRkMTEwNigweDE5ZildKF8weDRlZGQzMD0+KHRoaXNbXzB4ZGQxMTA2KDB4MWQyKV09ITB4MSx0aGlzWydfY29ubmVjdGluZyddPSEweDEsY29uc29sZVtfMHhkZDExMDYoMHgxYzgpXShfMHhkZDExMDYoMHgyNGMpK3RoaXNbXzB4ZGQxMTA2KDB4MTllKV0pLF8weDMwMjZkNihuZXcgRXJyb3IoXzB4ZGQxMTA2KDB4MWI3KSsoXzB4NGVkZDMwJiZfMHg0ZWRkMzBbXzB4ZGQxMTA2KDB4MWJlKV0pKSkpKTt9KSk7fVsnX2Rpc3Bvc2VXZWJzb2NrZXQnXShfMHg0OTMxOGQpe3ZhciBfMHg0MzIzYzA9XzB4MWY3ZmUxO3RoaXNbXzB4NDMyM2MwKDB4MWQyKV09ITB4MSx0aGlzW18weDQzMjNjMCgweDI0MSldPSEweDE7dHJ5e18weDQ5MzE4ZFtfMHg0MzIzYzAoMHgyNzkpXT1udWxsLF8weDQ5MzE4ZFtfMHg0MzIzYzAoMHgyMzEpXT1udWxsLF8weDQ5MzE4ZFtfMHg0MzIzYzAoMHgyNTApXT1udWxsO31jYXRjaHt9dHJ5e18weDQ5MzE4ZFtfMHg0MzIzYzAoMHgxZDQpXTwweDImJl8weDQ5MzE4ZFtfMHg0MzIzYzAoMHgyMDApXSgpO31jYXRjaHt9fVsnX2F0dGVtcHRUb1JlY29ubmVjdFNob3J0bHknXSgpe3ZhciBfMHhhZmFlNTg9XzB4MWY3ZmUxO2NsZWFyVGltZW91dCh0aGlzW18weGFmYWU1OCgweDI2NCldKSwhKHRoaXNbXzB4YWZhZTU4KDB4MWY0KV0+PXRoaXNbXzB4YWZhZTU4KDB4MWRiKV0pJiYodGhpc1tfMHhhZmFlNTgoMHgyNjQpXT1zZXRUaW1lb3V0KCgpPT57dmFyIF8weDE3Y2UxYj1fMHhhZmFlNTg7dGhpc1tfMHgxN2NlMWIoMHgxZDIpXXx8dGhpc1tfMHgxN2NlMWIoMHgyNDEpXXx8KHRoaXNbXzB4MTdjZTFiKDB4MThmKV0oKSx0aGlzWydfd3MnXT8uW18weDE3Y2UxYigweDE5ZildKCgpPT50aGlzW18weDE3Y2UxYigweDIyOCldKCkpKTt9LDB4MWY0KSx0aGlzW18weGFmYWU1OCgweDI2NCldW18weGFmYWU1OCgweDIwNSldJiZ0aGlzWydfcmVjb25uZWN0VGltZW91dCddW18weGFmYWU1OCgweDIwNSldKCkpO31hc3luY1tfMHgxZjdmZTEoMHgyMDEpXShfMHgxNjc2NmUpe3ZhciBfMHgxNTBjNGU9XzB4MWY3ZmUxO3RyeXtpZighdGhpc1tfMHgxNTBjNGUoMHgyNmEpXSlyZXR1cm47dGhpc1tfMHgxNTBjNGUoMHgxY2MpXSYmdGhpc1tfMHgxNTBjNGUoMHgxOGYpXSgpLChhd2FpdCB0aGlzW18weDE1MGM0ZSgweDE5NCldKVtfMHgxNTBjNGUoMHgyMDEpXShKU09OWydzdHJpbmdpZnknXShfMHgxNjc2NmUpKTt9Y2F0Y2goXzB4NThkOWFhKXtjb25zb2xlW18weDE1MGM0ZSgweDFjOCldKHRoaXNbXzB4MTUwYzRlKDB4MjEyKV0rJzpcXFxceDIwJysoXzB4NThkOWFhJiZfMHg1OGQ5YWFbXzB4MTUwYzRlKDB4MWJlKV0pKSx0aGlzW18weDE1MGM0ZSgweDI2YSldPSEweDEsdGhpc1snX2F0dGVtcHRUb1JlY29ubmVjdFNob3J0bHknXSgpO319fTtmdW5jdGlvbiBiKF8weDEyNjZlNixfMHg1ZTVlYmUsXzB4MzY1OWIwLF8weDQyZTA0ZSxfMHg1MDM3NTQsXzB4Zjk1NTAxKXt2YXIgXzB4MWNiZjc3PV8weDFmN2ZlMTtsZXQgXzB4MWMyODE0PV8weDM2NTliMFsnc3BsaXQnXSgnLCcpW18weDFjYmY3NygweDFkZildKF8weDI5MDE0OD0+e3ZhciBfMHg0MzM2ZTU9XzB4MWNiZjc3O3RyeXtfMHgxMjY2ZTZbXzB4NDMzNmU1KDB4MjZlKV18fCgoXzB4NTAzNzU0PT09J25leHQuanMnfHxfMHg1MDM3NTQ9PT0ncmVtaXgnfHxfMHg1MDM3NTQ9PT1fMHg0MzM2ZTUoMHgxOWMpfHxfMHg1MDM3NTQ9PT0nYW5ndWxhcicpJiYoXzB4NTAzNzU0Kz0hXzB4MTI2NmU2W18weDQzMzZlNSgweDIxNCldPy5bJ3ZlcnNpb25zJ10/LltfMHg0MzM2ZTUoMHgxZmMpXSYmXzB4MTI2NmU2W18weDQzMzZlNSgweDIxNCldPy5bXzB4NDMzNmU1KDB4MWY1KV0/LlsnTkVYVF9SVU5USU1FJ10hPT1fMHg0MzM2ZTUoMHgxOTYpP18weDQzMzZlNSgweDFiNSk6XzB4NDMzNmU1KDB4MjQ3KSksXzB4MTI2NmU2WydfY29uc29sZV9uaW5qYV9zZXNzaW9uJ109eydpZCc6K25ldyBEYXRlKCksJ3Rvb2wnOl8weDUwMzc1NH0pO2xldCBfMHhkMmUzNjY9bmV3IFgoXzB4MTI2NmU2LF8weDVlNWViZSxfMHgyOTAxNDgsXzB4NDJlMDRlLF8weGY5NTUwMSk7cmV0dXJuIF8weGQyZTM2NltfMHg0MzM2ZTUoMHgyMDEpXVtfMHg0MzM2ZTUoMHgyMjIpXShfMHhkMmUzNjYpO31jYXRjaChfMHg0NjMwNGYpe3JldHVybiBjb25zb2xlWyd3YXJuJ10oXzB4NDMzNmU1KDB4MjU0KSxfMHg0NjMwNGYmJl8weDQ2MzA0ZltfMHg0MzM2ZTUoMHgxYmUpXSksKCk9Pnt9O319KTtyZXR1cm4gXzB4MTMwYWY0PT5fMHgxYzI4MTRbXzB4MWNiZjc3KDB4MjM3KV0oXzB4MzUzODkxPT5fMHgzNTM4OTEoXzB4MTMwYWY0KSk7fWZ1bmN0aW9uIFcoXzB4MjNmYTlmKXt2YXIgXzB4NDA5ZTBkPV8weDFmN2ZlMTtsZXQgXzB4NGU4Mjg5PWZ1bmN0aW9uKF8weDFkZWFmOCxfMHgxNzViMGIpe3JldHVybiBfMHgxNzViMGItXzB4MWRlYWY4O30sXzB4NTI2MzBmO2lmKF8weDIzZmE5ZltfMHg0MDllMGQoMHgyMmIpXSlfMHg1MjYzMGY9ZnVuY3Rpb24oKXt2YXIgXzB4MzQzYmY9XzB4NDA5ZTBkO3JldHVybiBfMHgyM2ZhOWZbXzB4MzQzYmYoMHgyMmIpXVtfMHgzNDNiZigweDI1MSldKCk7fTtlbHNle2lmKF8weDIzZmE5ZltfMHg0MDllMGQoMHgyMTQpXSYmXzB4MjNmYTlmW18weDQwOWUwZCgweDIxNCldW18weDQwOWUwZCgweDI0OCldJiZfMHgyM2ZhOWZbXzB4NDA5ZTBkKDB4MjE0KV0/LltfMHg0MDllMGQoMHgxZjUpXT8uW18weDQwOWUwZCgweDFlNyldIT09XzB4NDA5ZTBkKDB4MTk2KSlfMHg1MjYzMGY9ZnVuY3Rpb24oKXt2YXIgXzB4M2YyMWI0PV8weDQwOWUwZDtyZXR1cm4gXzB4MjNmYTlmW18weDNmMjFiNCgweDIxNCldW18weDNmMjFiNCgweDI0OCldKCk7fSxfMHg0ZTgyODk9ZnVuY3Rpb24oXzB4NWJhMGZmLF8weDNmNzVmYil7cmV0dXJuIDB4M2U4KihfMHgzZjc1ZmJbMHgwXS1fMHg1YmEwZmZbMHgwXSkrKF8weDNmNzVmYlsweDFdLV8weDViYTBmZlsweDFdKS8weGY0MjQwO307ZWxzZSB0cnl7bGV0IHtwZXJmb3JtYW5jZTpfMHg4MzBmNDF9PXJlcXVpcmUoXzB4NDA5ZTBkKDB4MjBmKSk7XzB4NTI2MzBmPWZ1bmN0aW9uKCl7cmV0dXJuIF8weDgzMGY0MVsnbm93J10oKTt9O31jYXRjaHtfMHg1MjYzMGY9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGUoKTt9O319cmV0dXJueydlbGFwc2VkJzpfMHg0ZTgyODksJ3RpbWVTdGFtcCc6XzB4NTI2MzBmLCdub3cnOigpPT5EYXRlW18weDQwOWUwZCgweDI1MSldKCl9O31mdW5jdGlvbiBKKF8weDQyMjBjMSxfMHgyYWVmNzQsXzB4M2NmMDI5KXt2YXIgXzB4NTUxMjQ2PV8weDFmN2ZlMTtpZihfMHg0MjIwYzFbXzB4NTUxMjQ2KDB4MWZmKV0hPT12b2lkIDB4MClyZXR1cm4gXzB4NDIyMGMxWydfY29uc29sZU5pbmphQWxsb3dlZFRvU3RhcnQnXTtsZXQgXzB4MTI4M2Y0PV8weDQyMjBjMVtfMHg1NTEyNDYoMHgyMTQpXT8uW18weDU1MTI0NigweDE4OSldPy5bXzB4NTUxMjQ2KDB4MWZjKV18fF8weDQyMjBjMVtfMHg1NTEyNDYoMHgyMTQpXT8uW18weDU1MTI0NigweDFmNSldPy5bJ05FWFRfUlVOVElNRSddPT09XzB4NTUxMjQ2KDB4MTk2KTtyZXR1cm4gXzB4MTI4M2Y0JiZfMHgzY2YwMjk9PT0nbnV4dCc/XzB4NDIyMGMxW18weDU1MTI0NigweDFmZildPSEweDE6XzB4NDIyMGMxW18weDU1MTI0NigweDFmZildPV8weDEyODNmNHx8IV8weDJhZWY3NHx8XzB4NDIyMGMxWydsb2NhdGlvbiddPy5bJ2hvc3RuYW1lJ10mJl8weDJhZWY3NFtfMHg1NTEyNDYoMHgxYmEpXShfMHg0MjIwYzFbJ2xvY2F0aW9uJ11bXzB4NTUxMjQ2KDB4MWM3KV0pLF8weDQyMjBjMVsnX2NvbnNvbGVOaW5qYUFsbG93ZWRUb1N0YXJ0J107fWZ1bmN0aW9uIFkoXzB4NGEyMzFjLF8weDM5ZTU4YixfMHgyZTBiODMsXzB4MTJkZTBiKXt2YXIgXzB4MTFkMmZkPV8weDFmN2ZlMTtfMHg0YTIzMWM9XzB4NGEyMzFjLF8weDM5ZTU4Yj1fMHgzOWU1OGIsXzB4MmUwYjgzPV8weDJlMGI4MyxfMHgxMmRlMGI9XzB4MTJkZTBiO2xldCBfMHgzNWNiOTk9VyhfMHg0YTIzMWMpLF8weDI3ZmMxNT1fMHgzNWNiOTlbXzB4MTFkMmZkKDB4MWNiKV0sXzB4OWU0YzRkPV8weDM1Y2I5OVsndGltZVN0YW1wJ107Y2xhc3MgXzB4MzM4NzJme2NvbnN0cnVjdG9yKCl7dmFyIF8weDI1Nzc0Zj1fMHgxMWQyZmQ7dGhpc1tfMHgyNTc3NGYoMHgxZmEpXT0vXig/ISg/OmRvfGlmfGlufGZvcnxsZXR8bmV3fHRyeXx2YXJ8Y2FzZXxlbHNlfGVudW18ZXZhbHxmYWxzZXxudWxsfHRoaXN8dHJ1ZXx2b2lkfHdpdGh8YnJlYWt8Y2F0Y2h8Y2xhc3N8Y29uc3R8c3VwZXJ8dGhyb3d8d2hpbGV8eWllbGR8ZGVsZXRlfGV4cG9ydHxpbXBvcnR8cHVibGljfHJldHVybnxzdGF0aWN8c3dpdGNofHR5cGVvZnxkZWZhdWx0fGV4dGVuZHN8ZmluYWxseXxwYWNrYWdlfHByaXZhdGV8Y29udGludWV8ZGVidWdnZXJ8ZnVuY3Rpb258YXJndW1lbnRzfGludGVyZmFjZXxwcm90ZWN0ZWR8aW1wbGVtZW50c3xpbnN0YW5jZW9mKSQpW18kYS16QS1aXFxcXHhBMC1cXFxcdUZGRkZdW18kYS16QS1aMC05XFxcXHhBMC1cXFxcdUZGRkZdKiQvLHRoaXNbJ19udW1iZXJSZWdFeHAnXT0vXigwfFsxLTldWzAtOV0qKSQvLHRoaXNbXzB4MjU3NzRmKDB4MWFkKV09LycoW15cXFxcXFxcXCddfFxcXFxcXFxcJykqJy8sdGhpc1snX3VuZGVmaW5lZCddPV8weDRhMjMxY1tfMHgyNTc3NGYoMHgyNDApXSx0aGlzW18weDI1Nzc0ZigweDI1YSldPV8weDRhMjMxY1snSFRNTEFsbENvbGxlY3Rpb24nXSx0aGlzWydfZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJ109T2JqZWN0WydnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InXSx0aGlzW18weDI1Nzc0ZigweDI3NSldPU9iamVjdFtfMHgyNTc3NGYoMHgyNjIpXSx0aGlzWydfU3ltYm9sJ109XzB4NGEyMzFjWydTeW1ib2wnXSx0aGlzWydfcmVnRXhwVG9TdHJpbmcnXT1SZWdFeHBbXzB4MjU3NzRmKDB4MWEwKV1bJ3RvU3RyaW5nJ10sdGhpc1tfMHgyNTc3NGYoMHgxYzEpXT1EYXRlW18weDI1Nzc0ZigweDFhMCldW18weDI1Nzc0ZigweDFmZSldO31bXzB4MTFkMmZkKDB4MjNhKV0oXzB4MzgxMWNmLF8weDM1NjA2NCxfMHg0ZjJjMDQsXzB4MWVlZjIwKXt2YXIgXzB4NDQ5NzBjPV8weDExZDJmZCxfMHgyYzQyOGY9dGhpcyxfMHg0ZTliOTQ9XzB4NGYyYzA0W18weDQ0OTcwYygweDI3NCldO2Z1bmN0aW9uIF8weDU2YTlhNyhfMHg1NmVjYzYsXzB4NDUwMDlkLF8weDMwYWFlZSl7dmFyIF8weDRlMDA3NT1fMHg0NDk3MGM7XzB4NDUwMDlkWyd0eXBlJ109XzB4NGUwMDc1KDB4MWIyKSxfMHg0NTAwOWRbXzB4NGUwMDc1KDB4MjMwKV09XzB4NTZlY2M2W18weDRlMDA3NSgweDFiZSldLF8weDMwMzJiNj1fMHgzMGFhZWVbXzB4NGUwMDc1KDB4MWZjKV1bXzB4NGUwMDc1KDB4MjUzKV0sXzB4MzBhYWVlW18weDRlMDA3NSgweDFmYyldW18weDRlMDA3NSgweDI1MyldPV8weDQ1MDA5ZCxfMHgyYzQyOGZbXzB4NGUwMDc1KDB4MjE5KV0oXzB4NDUwMDlkLF8weDMwYWFlZSk7fXRyeXtfMHg0ZjJjMDRbXzB4NDQ5NzBjKDB4Mjc3KV0rKyxfMHg0ZjJjMDRbXzB4NDQ5NzBjKDB4Mjc0KV0mJl8weDRmMmMwNFtfMHg0NDk3MGMoMHgyNDUpXVtfMHg0NDk3MGMoMHgxZjMpXShfMHgzNTYwNjQpO3ZhciBfMHg0ODM5YmQsXzB4NGI0ZjYxLF8weDFlYmZlMSxfMHgyNDRkODAsXzB4YmU0ZDlhPVtdLF8weGRmYWM3YT1bXSxfMHgxNzA1YWYsXzB4M2UzZTdmPXRoaXNbXzB4NDQ5NzBjKDB4MTlkKV0oXzB4MzU2MDY0KSxfMHgxYzM2ZmU9XzB4M2UzZTdmPT09XzB4NDQ5NzBjKDB4MWM5KSxfMHgxM2I1MzY9ITB4MSxfMHg1YjE0OGI9XzB4M2UzZTdmPT09J2Z1bmN0aW9uJyxfMHg1NzUzODQ9dGhpc1tfMHg0NDk3MGMoMHgxYTcpXShfMHgzZTNlN2YpLF8weDM0MjUwYz10aGlzWydfaXNQcmltaXRpdmVXcmFwcGVyVHlwZSddKF8weDNlM2U3ZiksXzB4M2U4NWUwPV8weDU3NTM4NHx8XzB4MzQyNTBjLF8weDI1YzMzOT17fSxfMHgxNmUwMzY9MHgwLF8weDNjYzVmZD0hMHgxLF8weDMwMzJiNixfMHg4ZGMzMGM9L14oKFsxLTldezF9WzAtOV0qKXwwKSQvO2lmKF8weDRmMmMwNFtfMHg0NDk3MGMoMHgyMjApXSl7aWYoXzB4MWMzNmZlKXtpZihfMHg0YjRmNjE9XzB4MzU2MDY0W18weDQ0OTcwYygweDIwZCldLF8weDRiNGY2MT5fMHg0ZjJjMDRbJ2VsZW1lbnRzJ10pe2ZvcihfMHgxZWJmZTE9MHgwLF8weDI0NGQ4MD1fMHg0ZjJjMDRbXzB4NDQ5NzBjKDB4MWUyKV0sXzB4NDgzOWJkPV8weDFlYmZlMTtfMHg0ODM5YmQ8XzB4MjQ0ZDgwO18weDQ4MzliZCsrKV8weGRmYWM3YVsncHVzaCddKF8weDJjNDI4ZlsnX2FkZFByb3BlcnR5J10oXzB4YmU0ZDlhLF8weDM1NjA2NCxfMHgzZTNlN2YsXzB4NDgzOWJkLF8weDRmMmMwNCkpO18weDM4MTFjZltfMHg0NDk3MGMoMHgxY2YpXT0hMHgwO31lbHNle2ZvcihfMHgxZWJmZTE9MHgwLF8weDI0NGQ4MD1fMHg0YjRmNjEsXzB4NDgzOWJkPV8weDFlYmZlMTtfMHg0ODM5YmQ8XzB4MjQ0ZDgwO18weDQ4MzliZCsrKV8weGRmYWM3YVtfMHg0NDk3MGMoMHgxZjMpXShfMHgyYzQyOGZbXzB4NDQ5NzBjKDB4MjNjKV0oXzB4YmU0ZDlhLF8weDM1NjA2NCxfMHgzZTNlN2YsXzB4NDgzOWJkLF8weDRmMmMwNCkpO31fMHg0ZjJjMDRbXzB4NDQ5NzBjKDB4MTk1KV0rPV8weGRmYWM3YVtfMHg0NDk3MGMoMHgyMGQpXTt9aWYoIShfMHgzZTNlN2Y9PT1fMHg0NDk3MGMoMHgxZjcpfHxfMHgzZTNlN2Y9PT0ndW5kZWZpbmVkJykmJiFfMHg1NzUzODQmJl8weDNlM2U3ZiE9PV8weDQ0OTcwYygweDI2NikmJl8weDNlM2U3ZiE9PV8weDQ0OTcwYygweDE5NykmJl8weDNlM2U3ZiE9PV8weDQ0OTcwYygweDI0Yikpe3ZhciBfMHhiOTlmM2M9XzB4MWVlZjIwW18weDQ0OTcwYygweDI3MyldfHxfMHg0ZjJjMDRbXzB4NDQ5NzBjKDB4MjczKV07aWYodGhpc1tfMHg0NDk3MGMoMHgyMTEpXShfMHgzNTYwNjQpPyhfMHg0ODM5YmQ9MHgwLF8weDM1NjA2NFtfMHg0NDk3MGMoMHgyMzcpXShmdW5jdGlvbihfMHgxOWMxNmEpe3ZhciBfMHhiYWU1NWU9XzB4NDQ5NzBjO2lmKF8weDE2ZTAzNisrLF8weDRmMmMwNFsnYXV0b0V4cGFuZFByb3BlcnR5Q291bnQnXSsrLF8weDE2ZTAzNj5fMHhiOTlmM2Mpe18weDNjYzVmZD0hMHgwO3JldHVybjt9aWYoIV8weDRmMmMwNFtfMHhiYWU1NWUoMHgyMjQpXSYmXzB4NGYyYzA0WydhdXRvRXhwYW5kJ10mJl8weDRmMmMwNFtfMHhiYWU1NWUoMHgxOTUpXT5fMHg0ZjJjMDRbXzB4YmFlNTVlKDB4MWQ1KV0pe18weDNjYzVmZD0hMHgwO3JldHVybjt9XzB4ZGZhYzdhW18weGJhZTU1ZSgweDFmMyldKF8weDJjNDI4ZltfMHhiYWU1NWUoMHgyM2MpXShfMHhiZTRkOWEsXzB4MzU2MDY0LF8weGJhZTU1ZSgweDFiNCksXzB4NDgzOWJkKyssXzB4NGYyYzA0LGZ1bmN0aW9uKF8weDIzMmExNyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIF8weDIzMmExNzt9O30oXzB4MTljMTZhKSkpO30pKTp0aGlzW18weDQ0OTcwYygweDFjYSldKF8weDM1NjA2NCkmJl8weDM1NjA2NFtfMHg0NDk3MGMoMHgyMzcpXShmdW5jdGlvbihfMHg0OWU1YTgsXzB4MTRiZjkyKXt2YXIgXzB4MjFjMjg5PV8weDQ0OTcwYztpZihfMHgxNmUwMzYrKyxfMHg0ZjJjMDRbXzB4MjFjMjg5KDB4MTk1KV0rKyxfMHgxNmUwMzY+XzB4Yjk5ZjNjKXtfMHgzY2M1ZmQ9ITB4MDtyZXR1cm47fWlmKCFfMHg0ZjJjMDRbJ2lzRXhwcmVzc2lvblRvRXZhbHVhdGUnXSYmXzB4NGYyYzA0WydhdXRvRXhwYW5kJ10mJl8weDRmMmMwNFtfMHgyMWMyODkoMHgxOTUpXT5fMHg0ZjJjMDRbJ2F1dG9FeHBhbmRMaW1pdCddKXtfMHgzY2M1ZmQ9ITB4MDtyZXR1cm47fXZhciBfMHg1Nzg1OGI9XzB4MTRiZjkyW18weDIxYzI4OSgweDFmZSldKCk7XzB4NTc4NThiW18weDIxYzI4OSgweDIwZCldPjB4NjQmJihfMHg1Nzg1OGI9XzB4NTc4NThiW18weDIxYzI4OSgweDFhNSldKDB4MCwweDY0KStfMHgyMWMyODkoMHgxZDkpKSxfMHhkZmFjN2FbXzB4MjFjMjg5KDB4MWYzKV0oXzB4MmM0MjhmW18weDIxYzI4OSgweDIzYyldKF8weGJlNGQ5YSxfMHgzNTYwNjQsXzB4MjFjMjg5KDB4MWU0KSxfMHg1Nzg1OGIsXzB4NGYyYzA0LGZ1bmN0aW9uKF8weDMxMWMzOCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIF8weDMxMWMzODt9O30oXzB4NDllNWE4KSkpO30pLCFfMHgxM2I1MzYpe3RyeXtmb3IoXzB4MTcwNWFmIGluIF8weDM1NjA2NClpZighKF8weDFjMzZmZSYmXzB4OGRjMzBjWyd0ZXN0J10oXzB4MTcwNWFmKSkmJiF0aGlzW18weDQ0OTcwYygweDIwZSldKF8weDM1NjA2NCxfMHgxNzA1YWYsXzB4NGYyYzA0KSl7aWYoXzB4MTZlMDM2KyssXzB4NGYyYzA0W18weDQ0OTcwYygweDE5NSldKyssXzB4MTZlMDM2Pl8weGI5OWYzYyl7XzB4M2NjNWZkPSEweDA7YnJlYWs7fWlmKCFfMHg0ZjJjMDRbXzB4NDQ5NzBjKDB4MjI0KV0mJl8weDRmMmMwNFsnYXV0b0V4cGFuZCddJiZfMHg0ZjJjMDRbJ2F1dG9FeHBhbmRQcm9wZXJ0eUNvdW50J10+XzB4NGYyYzA0W18weDQ0OTcwYygweDFkNSldKXtfMHgzY2M1ZmQ9ITB4MDticmVhazt9XzB4ZGZhYzdhW18weDQ0OTcwYygweDFmMyldKF8weDJjNDI4ZlsnX2FkZE9iamVjdFByb3BlcnR5J10oXzB4YmU0ZDlhLF8weDI1YzMzOSxfMHgzNTYwNjQsXzB4M2UzZTdmLF8weDE3MDVhZixfMHg0ZjJjMDQpKTt9fWNhdGNoe31pZihfMHgyNWMzMzlbXzB4NDQ5NzBjKDB4MjJmKV09ITB4MCxfMHg1YjE0OGImJihfMHgyNWMzMzlbJ19wX25hbWUnXT0hMHgwKSwhXzB4M2NjNWZkKXt2YXIgXzB4OWUzMT1bXVtfMHg0NDk3MGMoMHgyNWMpXSh0aGlzW18weDQ0OTcwYygweDI3NSldKF8weDM1NjA2NCkpW18weDQ0OTcwYygweDI1YyldKHRoaXNbXzB4NDQ5NzBjKDB4MjFlKV0oXzB4MzU2MDY0KSk7Zm9yKF8weDQ4MzliZD0weDAsXzB4NGI0ZjYxPV8weDllMzFbXzB4NDQ5NzBjKDB4MjBkKV07XzB4NDgzOWJkPF8weDRiNGY2MTtfMHg0ODM5YmQrKylpZihfMHgxNzA1YWY9XzB4OWUzMVtfMHg0ODM5YmRdLCEoXzB4MWMzNmZlJiZfMHg4ZGMzMGNbXzB4NDQ5NzBjKDB4MjJjKV0oXzB4MTcwNWFmW18weDQ0OTcwYygweDFmZSldKCkpKSYmIXRoaXNbXzB4NDQ5NzBjKDB4MjBlKV0oXzB4MzU2MDY0LF8weDE3MDVhZixfMHg0ZjJjMDQpJiYhXzB4MjVjMzM5W18weDQ0OTcwYygweDFhMSkrXzB4MTcwNWFmW18weDQ0OTcwYygweDFmZSldKCldKXtpZihfMHgxNmUwMzYrKyxfMHg0ZjJjMDRbJ2F1dG9FeHBhbmRQcm9wZXJ0eUNvdW50J10rKyxfMHgxNmUwMzY+XzB4Yjk5ZjNjKXtfMHgzY2M1ZmQ9ITB4MDticmVhazt9aWYoIV8weDRmMmMwNFtfMHg0NDk3MGMoMHgyMjQpXSYmXzB4NGYyYzA0WydhdXRvRXhwYW5kJ10mJl8weDRmMmMwNFsnYXV0b0V4cGFuZFByb3BlcnR5Q291bnQnXT5fMHg0ZjJjMDRbXzB4NDQ5NzBjKDB4MWQ1KV0pe18weDNjYzVmZD0hMHgwO2JyZWFrO31fMHhkZmFjN2FbXzB4NDQ5NzBjKDB4MWYzKV0oXzB4MmM0MjhmW18weDQ0OTcwYygweDI1NyldKF8weGJlNGQ5YSxfMHgyNWMzMzksXzB4MzU2MDY0LF8weDNlM2U3ZixfMHgxNzA1YWYsXzB4NGYyYzA0KSk7fX19fX1pZihfMHgzODExY2ZbJ3R5cGUnXT1fMHgzZTNlN2YsXzB4M2U4NWUwPyhfMHgzODExY2ZbXzB4NDQ5NzBjKDB4MWQzKV09XzB4MzU2MDY0W18weDQ0OTcwYygweDIyZCldKCksdGhpc1tfMHg0NDk3MGMoMHgxZGMpXShfMHgzZTNlN2YsXzB4MzgxMWNmLF8weDRmMmMwNCxfMHgxZWVmMjApKTpfMHgzZTNlN2Y9PT0nZGF0ZSc/XzB4MzgxMWNmWyd2YWx1ZSddPXRoaXNbXzB4NDQ5NzBjKDB4MWMxKV1bJ2NhbGwnXShfMHgzNTYwNjQpOl8weDNlM2U3Zj09PV8weDQ0OTcwYygweDI0Yik/XzB4MzgxMWNmW18weDQ0OTcwYygweDFkMyldPV8weDM1NjA2NFtfMHg0NDk3MGMoMHgxZmUpXSgpOl8weDNlM2U3Zj09PSdSZWdFeHAnP18weDM4MTFjZlsndmFsdWUnXT10aGlzW18weDQ0OTcwYygweDFlOSldW18weDQ0OTcwYygweDIxZCldKF8weDM1NjA2NCk6XzB4M2UzZTdmPT09XzB4NDQ5NzBjKDB4MWVmKSYmdGhpc1tfMHg0NDk3MGMoMHgxYmIpXT9fMHgzODExY2ZbXzB4NDQ5NzBjKDB4MWQzKV09dGhpc1snX1N5bWJvbCddW18weDQ0OTcwYygweDFhMCldW18weDQ0OTcwYygweDFmZSldW18weDQ0OTcwYygweDIxZCldKF8weDM1NjA2NCk6IV8weDRmMmMwNFsnZGVwdGgnXSYmIShfMHgzZTNlN2Y9PT1fMHg0NDk3MGMoMHgxZjcpfHxfMHgzZTNlN2Y9PT1fMHg0NDk3MGMoMHgyNDApKSYmKGRlbGV0ZSBfMHgzODExY2ZbJ3ZhbHVlJ10sXzB4MzgxMWNmWydjYXBwZWQnXT0hMHgwKSxfMHgzY2M1ZmQmJihfMHgzODExY2ZbXzB4NDQ5NzBjKDB4MjM0KV09ITB4MCksXzB4MzAzMmI2PV8weDRmMmMwNFtfMHg0NDk3MGMoMHgxZmMpXVtfMHg0NDk3MGMoMHgyNTMpXSxfMHg0ZjJjMDRbXzB4NDQ5NzBjKDB4MWZjKV1bXzB4NDQ5NzBjKDB4MjUzKV09XzB4MzgxMWNmLHRoaXNbJ190cmVlTm9kZVByb3BlcnRpZXNCZWZvcmVGdWxsVmFsdWUnXShfMHgzODExY2YsXzB4NGYyYzA0KSxfMHhkZmFjN2FbXzB4NDQ5NzBjKDB4MjBkKV0pe2ZvcihfMHg0ODM5YmQ9MHgwLF8weDRiNGY2MT1fMHhkZmFjN2FbXzB4NDQ5NzBjKDB4MjBkKV07XzB4NDgzOWJkPF8weDRiNGY2MTtfMHg0ODM5YmQrKylfMHhkZmFjN2FbXzB4NDgzOWJkXShfMHg0ODM5YmQpO31fMHhiZTRkOWFbJ2xlbmd0aCddJiYoXzB4MzgxMWNmW18weDQ0OTcwYygweDI3MyldPV8weGJlNGQ5YSk7fWNhdGNoKF8weDM3MGQ0NCl7XzB4NTZhOWE3KF8weDM3MGQ0NCxfMHgzODExY2YsXzB4NGYyYzA0KTt9cmV0dXJuIHRoaXNbXzB4NDQ5NzBjKDB4MjY5KV0oXzB4MzU2MDY0LF8weDM4MTFjZiksdGhpc1snX3RyZWVOb2RlUHJvcGVydGllc0FmdGVyRnVsbFZhbHVlJ10oXzB4MzgxMWNmLF8weDRmMmMwNCksXzB4NGYyYzA0W18weDQ0OTcwYygweDFmYyldW18weDQ0OTcwYygweDI1MyldPV8weDMwMzJiNixfMHg0ZjJjMDRbJ2xldmVsJ10tLSxfMHg0ZjJjMDRbJ2F1dG9FeHBhbmQnXT1fMHg0ZTliOTQsXzB4NGYyYzA0W18weDQ0OTcwYygweDI3NCldJiZfMHg0ZjJjMDRbXzB4NDQ5NzBjKDB4MjQ1KV1bXzB4NDQ5NzBjKDB4MWUwKV0oKSxfMHgzODExY2Y7fVtfMHgxMWQyZmQoMHgyMWUpXShfMHg0OGI3ZDYpe3ZhciBfMHgzZGUzMDc9XzB4MTFkMmZkO3JldHVybiBPYmplY3RbJ2dldE93blByb3BlcnR5U3ltYm9scyddP09iamVjdFtfMHgzZGUzMDcoMHgyMWEpXShfMHg0OGI3ZDYpOltdO31bXzB4MTFkMmZkKDB4MjExKV0oXzB4Mzc2M2U0KXt2YXIgXzB4NTViOGExPV8weDExZDJmZDtyZXR1cm4hIShfMHgzNzYzZTQmJl8weDRhMjMxY1tfMHg1NWI4YTEoMHgxYjQpXSYmdGhpc1snX29iamVjdFRvU3RyaW5nJ10oXzB4Mzc2M2U0KT09PSdbb2JqZWN0XFxcXHgyMFNldF0nJiZfMHgzNzYzZTRbXzB4NTViOGExKDB4MjM3KV0pO31bXzB4MTFkMmZkKDB4MjBlKV0oXzB4NDc2OWU0LF8weDQ4Y2Y3OSxfMHg1YTQyZTgpe3ZhciBfMHgyOGMwMTQ9XzB4MTFkMmZkO3JldHVybiBfMHg1YTQyZThbXzB4MjhjMDE0KDB4MjI3KV0/dHlwZW9mIF8weDQ3NjllNFtfMHg0OGNmNzldPT1fMHgyOGMwMTQoMHgxYmQpOiEweDE7fVsnX3R5cGUnXShfMHg0OWRmZGQpe3ZhciBfMHg1NTE3M2E9XzB4MTFkMmZkLF8weDkxMjI5Mj0nJztyZXR1cm4gXzB4OTEyMjkyPXR5cGVvZiBfMHg0OWRmZGQsXzB4OTEyMjkyPT09XzB4NTUxNzNhKDB4MTk4KT90aGlzW18weDU1MTczYSgweDFhYSldKF8weDQ5ZGZkZCk9PT1fMHg1NTE3M2EoMHgxZTYpP18weDkxMjI5Mj1fMHg1NTE3M2EoMHgxYzkpOnRoaXNbJ19vYmplY3RUb1N0cmluZyddKF8weDQ5ZGZkZCk9PT0nW29iamVjdFxcXFx4MjBEYXRlXSc/XzB4OTEyMjkyPSdkYXRlJzp0aGlzW18weDU1MTczYSgweDFhYSldKF8weDQ5ZGZkZCk9PT1fMHg1NTE3M2EoMHgyNDIpP18weDkxMjI5Mj1fMHg1NTE3M2EoMHgyNGIpOl8weDQ5ZGZkZD09PW51bGw/XzB4OTEyMjkyPV8weDU1MTczYSgweDFmNyk6XzB4NDlkZmRkW18weDU1MTczYSgweDI3MCldJiYoXzB4OTEyMjkyPV8weDQ5ZGZkZFsnY29uc3RydWN0b3InXVtfMHg1NTE3M2EoMHgyMDYpXXx8XzB4OTEyMjkyKTpfMHg5MTIyOTI9PT0ndW5kZWZpbmVkJyYmdGhpc1tfMHg1NTE3M2EoMHgyNWEpXSYmXzB4NDlkZmRkIGluc3RhbmNlb2YgdGhpc1snX0hUTUxBbGxDb2xsZWN0aW9uJ10mJihfMHg5MTIyOTI9XzB4NTUxNzNhKDB4MjE3KSksXzB4OTEyMjkyO31bXzB4MTFkMmZkKDB4MWFhKV0oXzB4NDNkNDE0KXt2YXIgXzB4NTdkZTQwPV8weDExZDJmZDtyZXR1cm4gT2JqZWN0W18weDU3ZGU0MCgweDFhMCldW18weDU3ZGU0MCgweDFmZSldW18weDU3ZGU0MCgweDIxZCldKF8weDQzZDQxNCk7fVtfMHgxMWQyZmQoMHgxYTcpXShfMHhjZGFlYjcpe3ZhciBfMHgxOTIzMzQ9XzB4MTFkMmZkO3JldHVybiBfMHhjZGFlYjc9PT0nYm9vbGVhbid8fF8weGNkYWViNz09PV8weDE5MjMzNCgweDFkYSl8fF8weGNkYWViNz09PSdudW1iZXInO31bXzB4MTFkMmZkKDB4MThjKV0oXzB4NWNhMjdmKXt2YXIgXzB4MzQ2MDc4PV8weDExZDJmZDtyZXR1cm4gXzB4NWNhMjdmPT09J0Jvb2xlYW4nfHxfMHg1Y2EyN2Y9PT1fMHgzNDYwNzgoMHgyNjYpfHxfMHg1Y2EyN2Y9PT1fMHgzNDYwNzgoMHgyMmEpO31bXzB4MTFkMmZkKDB4MjNjKV0oXzB4MWI4NzA2LF8weDQ4MTllMSxfMHg0ZWUzZmIsXzB4NWE3YTcwLF8weDEwN2IwNSxfMHg0ZWE2ZTEpe3ZhciBfMHg1ZDdlMjI9dGhpcztyZXR1cm4gZnVuY3Rpb24oXzB4MmI1ODBiKXt2YXIgXzB4NDcyOTBmPV8weDM3ZTQsXzB4ZmNjMTdhPV8weDEwN2IwNVtfMHg0NzI5MGYoMHgxZmMpXVtfMHg0NzI5MGYoMHgyNTMpXSxfMHgxOTRkMzA9XzB4MTA3YjA1W18weDQ3MjkwZigweDFmYyldW18weDQ3MjkwZigweDE5MSldLF8weDFmZWRmZD1fMHgxMDdiMDVbXzB4NDcyOTBmKDB4MWZjKV1bJ3BhcmVudCddO18weDEwN2IwNVtfMHg0NzI5MGYoMHgxZmMpXVtfMHg0NzI5MGYoMHgyMzgpXT1fMHhmY2MxN2EsXzB4MTA3YjA1Wydub2RlJ11bXzB4NDcyOTBmKDB4MTkxKV09dHlwZW9mIF8weDVhN2E3MD09J251bWJlcic/XzB4NWE3YTcwOl8weDJiNTgwYixfMHgxYjg3MDZbXzB4NDcyOTBmKDB4MWYzKV0oXzB4NWQ3ZTIyW18weDQ3MjkwZigweDI2NyldKF8weDQ4MTllMSxfMHg0ZWUzZmIsXzB4NWE3YTcwLF8weDEwN2IwNSxfMHg0ZWE2ZTEpKSxfMHgxMDdiMDVbXzB4NDcyOTBmKDB4MWZjKV1bJ3BhcmVudCddPV8weDFmZWRmZCxfMHgxMDdiMDVbXzB4NDcyOTBmKDB4MWZjKV1bXzB4NDcyOTBmKDB4MTkxKV09XzB4MTk0ZDMwO307fVsnX2FkZE9iamVjdFByb3BlcnR5J10oXzB4MTY1ODhiLF8weDExY2VhNyxfMHgxM2I2ZWYsXzB4MzgwMzEwLF8weDFjMDFkNCxfMHg0ZDRiNmIsXzB4N2ZlY2E2KXt2YXIgXzB4MjQzZTUwPV8weDExZDJmZCxfMHg0NGFiYmE9dGhpcztyZXR1cm4gXzB4MTFjZWE3W18weDI0M2U1MCgweDFhMSkrXzB4MWMwMWQ0W18weDI0M2U1MCgweDFmZSldKCldPSEweDAsZnVuY3Rpb24oXzB4MWY0ZDUxKXt2YXIgXzB4NGJkYzFmPV8weDI0M2U1MCxfMHg0NGQyODM9XzB4NGQ0YjZiW18weDRiZGMxZigweDFmYyldW18weDRiZGMxZigweDI1MyldLF8weDRmYjgyOD1fMHg0ZDRiNmJbXzB4NGJkYzFmKDB4MWZjKV1bXzB4NGJkYzFmKDB4MTkxKV0sXzB4MzE2OWQ3PV8weDRkNGI2Ylsnbm9kZSddW18weDRiZGMxZigweDIzOCldO18weDRkNGI2YltfMHg0YmRjMWYoMHgxZmMpXVsncGFyZW50J109XzB4NDRkMjgzLF8weDRkNGI2YltfMHg0YmRjMWYoMHgxZmMpXVtfMHg0YmRjMWYoMHgxOTEpXT1fMHgxZjRkNTEsXzB4MTY1ODhiWydwdXNoJ10oXzB4NDRhYmJhW18weDRiZGMxZigweDI2NyldKF8weDEzYjZlZixfMHgzODAzMTAsXzB4MWMwMWQ0LF8weDRkNGI2YixfMHg3ZmVjYTYpKSxfMHg0ZDRiNmJbJ25vZGUnXVtfMHg0YmRjMWYoMHgyMzgpXT1fMHgzMTY5ZDcsXzB4NGQ0YjZiW18weDRiZGMxZigweDFmYyldW18weDRiZGMxZigweDE5MSldPV8weDRmYjgyODt9O31bXzB4MTFkMmZkKDB4MjY3KV0oXzB4MmVlMmY5LF8weDUwNGM2MyxfMHgyYmU4MzksXzB4NWQ0YmZlLF8weDQ2Njc3Mil7dmFyIF8weDI4MGY2ZT1fMHgxMWQyZmQsXzB4YzZhZmUwPXRoaXM7XzB4NDY2NzcyfHwoXzB4NDY2NzcyPWZ1bmN0aW9uKF8weGU3ZmRmLF8weDQ0MTk0Zil7cmV0dXJuIF8weGU3ZmRmW18weDQ0MTk0Zl07fSk7dmFyIF8weDI5ODEwMz1fMHgyYmU4MzlbXzB4MjgwZjZlKDB4MWZlKV0oKSxfMHgyOGY1OTQ9XzB4NWQ0YmZlW18weDI4MGY2ZSgweDIxMCldfHx7fSxfMHg1Yzc5YTg9XzB4NWQ0YmZlW18weDI4MGY2ZSgweDIyMCldLF8weDIwYmViYz1fMHg1ZDRiZmVbXzB4MjgwZjZlKDB4MjI0KV07dHJ5e3ZhciBfMHgyN2YxNTM9dGhpc1tfMHgyODBmNmUoMHgxY2EpXShfMHgyZWUyZjkpLF8weDE0MTc4YT1fMHgyOTgxMDM7XzB4MjdmMTUzJiZfMHgxNDE3OGFbMHgwXT09PSdcXFxceDI3JyYmKF8weDE0MTc4YT1fMHgxNDE3OGFbJ3N1YnN0ciddKDB4MSxfMHgxNDE3OGFbXzB4MjgwZjZlKDB4MjBkKV0tMHgyKSk7dmFyIF8weDEyNjM3MT1fMHg1ZDRiZmVbXzB4MjgwZjZlKDB4MjEwKV09XzB4MjhmNTk0WydfcF8nK18weDE0MTc4YV07XzB4MTI2MzcxJiYoXzB4NWQ0YmZlW18weDI4MGY2ZSgweDIyMCldPV8weDVkNGJmZVtfMHgyODBmNmUoMHgyMjApXSsweDEpLF8weDVkNGJmZVsnaXNFeHByZXNzaW9uVG9FdmFsdWF0ZSddPSEhXzB4MTI2MzcxO3ZhciBfMHgyMzk1Nzk9dHlwZW9mIF8weDJiZTgzOT09XzB4MjgwZjZlKDB4MWVmKSxfMHgyMDc1YjU9eyduYW1lJzpfMHgyMzk1Nzl8fF8weDI3ZjE1Mz9fMHgyOTgxMDM6dGhpc1tfMHgyODBmNmUoMHgyNzEpXShfMHgyOTgxMDMpfTtpZihfMHgyMzk1NzkmJihfMHgyMDc1YjVbXzB4MjgwZjZlKDB4MWVmKV09ITB4MCksIShfMHg1MDRjNjM9PT0nYXJyYXknfHxfMHg1MDRjNjM9PT1fMHgyODBmNmUoMHgxYTYpKSl7dmFyIF8weDNkMmQ4ZT10aGlzW18weDI4MGY2ZSgweDI1ZCldKF8weDJlZTJmOSxfMHgyYmU4MzkpO2lmKF8weDNkMmQ4ZSYmKF8weDNkMmQ4ZVtfMHgyODBmNmUoMHgxOTkpXSYmKF8weDIwNzViNVtfMHgyODBmNmUoMHgyNWUpXT0hMHgwKSxfMHgzZDJkOGVbXzB4MjgwZjZlKDB4MjM5KV0mJiFfMHgxMjYzNzEmJiFfMHg1ZDRiZmVbJ3Jlc29sdmVHZXR0ZXJzJ10pKXJldHVybiBfMHgyMDc1YjVbXzB4MjgwZjZlKDB4MWM2KV09ITB4MCx0aGlzW18weDI4MGY2ZSgweDFkMCldKF8weDIwNzViNSxfMHg1ZDRiZmUpLF8weDIwNzViNTt9dmFyIF8weDIxNmYzNTt0cnl7XzB4MjE2ZjM1PV8weDQ2Njc3MihfMHgyZWUyZjksXzB4MmJlODM5KTt9Y2F0Y2goXzB4NTBmNTU4KXtyZXR1cm4gXzB4MjA3NWI1PXsnbmFtZSc6XzB4Mjk4MTAzLCd0eXBlJzpfMHgyODBmNmUoMHgxYjIpLCdlcnJvcic6XzB4NTBmNTU4W18weDI4MGY2ZSgweDFiZSldfSx0aGlzW18weDI4MGY2ZSgweDFkMCldKF8weDIwNzViNSxfMHg1ZDRiZmUpLF8weDIwNzViNTt9dmFyIF8weDRkYzI0OT10aGlzW18weDI4MGY2ZSgweDE5ZCldKF8weDIxNmYzNSksXzB4NWU4NjNhPXRoaXNbXzB4MjgwZjZlKDB4MWE3KV0oXzB4NGRjMjQ5KTtpZihfMHgyMDc1YjVbXzB4MjgwZjZlKDB4MWY5KV09XzB4NGRjMjQ5LF8weDVlODYzYSl0aGlzW18weDI4MGY2ZSgweDFkMCldKF8weDIwNzViNSxfMHg1ZDRiZmUsXzB4MjE2ZjM1LGZ1bmN0aW9uKCl7dmFyIF8weDVjYTQwZj1fMHgyODBmNmU7XzB4MjA3NWI1W18weDVjYTQwZigweDFkMyldPV8weDIxNmYzNVtfMHg1Y2E0MGYoMHgyMmQpXSgpLCFfMHgxMjYzNzEmJl8weGM2YWZlMFtfMHg1Y2E0MGYoMHgxZGMpXShfMHg0ZGMyNDksXzB4MjA3NWI1LF8weDVkNGJmZSx7fSk7fSk7ZWxzZXt2YXIgXzB4MWU1NGRiPV8weDVkNGJmZVsnYXV0b0V4cGFuZCddJiZfMHg1ZDRiZmVbXzB4MjgwZjZlKDB4Mjc3KV08XzB4NWQ0YmZlW18weDI4MGY2ZSgweDI2OCldJiZfMHg1ZDRiZmVbXzB4MjgwZjZlKDB4MjQ1KV1bXzB4MjgwZjZlKDB4MjM2KV0oXzB4MjE2ZjM1KTwweDAmJl8weDRkYzI0OSE9PV8weDI4MGY2ZSgweDFiZCkmJl8weDVkNGJmZVtfMHgyODBmNmUoMHgxOTUpXTxfMHg1ZDRiZmVbXzB4MjgwZjZlKDB4MWQ1KV07XzB4MWU1NGRifHxfMHg1ZDRiZmVbJ2xldmVsJ108XzB4NWM3OWE4fHxfMHgxMjYzNzE/KHRoaXNbXzB4MjgwZjZlKDB4MjNhKV0oXzB4MjA3NWI1LF8weDIxNmYzNSxfMHg1ZDRiZmUsXzB4MTI2MzcxfHx7fSksdGhpc1tfMHgyODBmNmUoMHgyNjkpXShfMHgyMTZmMzUsXzB4MjA3NWI1KSk6dGhpc1tfMHgyODBmNmUoMHgxZDApXShfMHgyMDc1YjUsXzB4NWQ0YmZlLF8weDIxNmYzNSxmdW5jdGlvbigpe3ZhciBfMHg1MTk1MDQ9XzB4MjgwZjZlO18weDRkYzI0OT09PV8weDUxOTUwNCgweDFmNyl8fF8weDRkYzI0OT09PV8weDUxOTUwNCgweDI0MCl8fChkZWxldGUgXzB4MjA3NWI1W18weDUxOTUwNCgweDFkMyldLF8weDIwNzViNVtfMHg1MTk1MDQoMHgyM2YpXT0hMHgwKTt9KTt9cmV0dXJuIF8weDIwNzViNTt9ZmluYWxseXtfMHg1ZDRiZmVbXzB4MjgwZjZlKDB4MjEwKV09XzB4MjhmNTk0LF8weDVkNGJmZVtfMHgyODBmNmUoMHgyMjApXT1fMHg1Yzc5YTgsXzB4NWQ0YmZlW18weDI4MGY2ZSgweDIyNCldPV8weDIwYmViYzt9fVsnX2NhcElmU3RyaW5nJ10oXzB4M2ZjNmNlLF8weDQ3OGI2MSxfMHgxMTM1MWUsXzB4M2ViMTA5KXt2YXIgXzB4NDViYjdjPV8weDExZDJmZCxfMHgxOTYyMjM9XzB4M2ViMTA5WydzdHJMZW5ndGgnXXx8XzB4MTEzNTFlWydzdHJMZW5ndGgnXTtpZigoXzB4M2ZjNmNlPT09J3N0cmluZyd8fF8weDNmYzZjZT09PV8weDQ1YmI3YygweDI2NikpJiZfMHg0NzhiNjFbXzB4NDViYjdjKDB4MWQzKV0pe2xldCBfMHg1ODMyZGQ9XzB4NDc4YjYxW18weDQ1YmI3YygweDFkMyldW18weDQ1YmI3YygweDIwZCldO18weDExMzUxZVtfMHg0NWJiN2MoMHgxZGQpXSs9XzB4NTgzMmRkLF8weDExMzUxZVsnYWxsU3RyTGVuZ3RoJ10+XzB4MTEzNTFlW18weDQ1YmI3YygweDFlYildPyhfMHg0NzhiNjFbXzB4NDViYjdjKDB4MjNmKV09JycsZGVsZXRlIF8weDQ3OGI2MVsndmFsdWUnXSk6XzB4NTgzMmRkPl8weDE5NjIyMyYmKF8weDQ3OGI2MVtfMHg0NWJiN2MoMHgyM2YpXT1fMHg0NzhiNjFbXzB4NDViYjdjKDB4MWQzKV1bJ3N1YnN0ciddKDB4MCxfMHgxOTYyMjMpLGRlbGV0ZSBfMHg0NzhiNjFbJ3ZhbHVlJ10pO319W18weDExZDJmZCgweDFjYSldKF8weDM2ZWE1OCl7dmFyIF8weDRlMTg1Mz1fMHgxMWQyZmQ7cmV0dXJuISEoXzB4MzZlYTU4JiZfMHg0YTIzMWNbXzB4NGUxODUzKDB4MWU0KV0mJnRoaXNbXzB4NGUxODUzKDB4MWFhKV0oXzB4MzZlYTU4KT09PV8weDRlMTg1MygweDIzMykmJl8weDM2ZWE1OFtfMHg0ZTE4NTMoMHgyMzcpXSk7fVsnX3Byb3BlcnR5TmFtZSddKF8weDg4OWQwOCl7dmFyIF8weDJhOWUwZj1fMHgxMWQyZmQ7aWYoXzB4ODg5ZDA4W18weDJhOWUwZigweDI0YSldKC9eXFxcXGQrJC8pKXJldHVybiBfMHg4ODlkMDg7dmFyIF8weDViZTlmMzt0cnl7XzB4NWJlOWYzPUpTT05bJ3N0cmluZ2lmeSddKCcnK18weDg4OWQwOCk7fWNhdGNoe18weDViZTlmMz0nXFxcXHgyMicrdGhpc1tfMHgyYTllMGYoMHgxYWEpXShfMHg4ODlkMDgpKydcXFxceDIyJzt9cmV0dXJuIF8weDViZTlmM1snbWF0Y2gnXSgvXlxcXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcXFwiJC8pP18weDViZTlmMz1fMHg1YmU5ZjNbJ3N1YnN0ciddKDB4MSxfMHg1YmU5ZjNbXzB4MmE5ZTBmKDB4MjBkKV0tMHgyKTpfMHg1YmU5ZjM9XzB4NWJlOWYzW18weDJhOWUwZigweDI2MCldKC8nL2csJ1xcXFx4NWNcXFxceDI3JylbJ3JlcGxhY2UnXSgvXFxcXFxcXFxcXFwiL2csJ1xcXFx4MjInKVsncmVwbGFjZSddKC8oXlxcXCJ8XFxcIiQpL2csJ1xcXFx4MjcnKSxfMHg1YmU5ZjM7fVtfMHgxMWQyZmQoMHgxZDApXShfMHgyMjNjMzgsXzB4ZWUzNzhlLF8weGNlZDk4NixfMHg0ODAzYzIpe3ZhciBfMHg4NDgwYWU9XzB4MTFkMmZkO3RoaXNbXzB4ODQ4MGFlKDB4MjE5KV0oXzB4MjIzYzM4LF8weGVlMzc4ZSksXzB4NDgwM2MyJiZfMHg0ODAzYzIoKSx0aGlzW18weDg0ODBhZSgweDI2OSldKF8weGNlZDk4NixfMHgyMjNjMzgpLHRoaXNbJ190cmVlTm9kZVByb3BlcnRpZXNBZnRlckZ1bGxWYWx1ZSddKF8weDIyM2MzOCxfMHhlZTM3OGUpO31bJ190cmVlTm9kZVByb3BlcnRpZXNCZWZvcmVGdWxsVmFsdWUnXShfMHgxM2MwMTEsXzB4MzFmYzdjKXt2YXIgXzB4Mzk0ZTgxPV8weDExZDJmZDt0aGlzW18weDM5NGU4MSgweDFlYSldKF8weDEzYzAxMSxfMHgzMWZjN2MpLHRoaXNbXzB4Mzk0ZTgxKDB4MjIzKV0oXzB4MTNjMDExLF8weDMxZmM3YyksdGhpc1tfMHgzOTRlODEoMHgxOTIpXShfMHgxM2MwMTEsXzB4MzFmYzdjKSx0aGlzWydfc2V0Tm9kZVBlcm1pc3Npb25zJ10oXzB4MTNjMDExLF8weDMxZmM3Yyk7fVtfMHgxMWQyZmQoMHgxZWEpXShfMHgxMTVjNWMsXzB4MWM4MzU1KXt9W18weDExZDJmZCgweDIyMyldKF8weDU0YmJjZSxfMHgxNzljZjQpe31bXzB4MTFkMmZkKDB4MWIwKV0oXzB4NDc5NTkwLF8weDI1OGRkZSl7fVtfMHgxMWQyZmQoMHgxYTgpXShfMHgzMGQ1NzEpe3ZhciBfMHgzYzM2YmY9XzB4MTFkMmZkO3JldHVybiBfMHgzMGQ1NzE9PT10aGlzW18weDNjMzZiZigweDI0ZildO31bXzB4MTFkMmZkKDB4MWQ4KV0oXzB4MWU0OThlLF8weDQyNTE3OCl7dmFyIF8weDU1Mzg5Yj1fMHgxMWQyZmQ7dGhpc1tfMHg1NTM4OWIoMHgxYjApXShfMHgxZTQ5OGUsXzB4NDI1MTc4KSx0aGlzWydfc2V0Tm9kZUV4cGFuZGFibGVTdGF0ZSddKF8weDFlNDk4ZSksXzB4NDI1MTc4W18weDU1Mzg5YigweDI0OSldJiZ0aGlzWydfc29ydFByb3BzJ10oXzB4MWU0OThlKSx0aGlzW18weDU1Mzg5YigweDIxOCldKF8weDFlNDk4ZSxfMHg0MjUxNzgpLHRoaXNbJ19hZGRMb2FkTm9kZSddKF8weDFlNDk4ZSxfMHg0MjUxNzgpLHRoaXNbXzB4NTUzODliKDB4MTliKV0oXzB4MWU0OThlKTt9WydfYWRkaXRpb25hbE1ldGFkYXRhJ10oXzB4NDQ2YzMzLF8weDUxMDBlMSl7dmFyIF8weGE2MTJkND1fMHgxMWQyZmQ7bGV0IF8weDRjMTcxYzt0cnl7XzB4NGEyMzFjW18weGE2MTJkNCgweDI1NildJiYoXzB4NGMxNzFjPV8weDRhMjMxY1tfMHhhNjEyZDQoMHgyNTYpXVtfMHhhNjEyZDQoMHgyMzApXSxfMHg0YTIzMWNbXzB4YTYxMmQ0KDB4MjU2KV1bXzB4YTYxMmQ0KDB4MjMwKV09ZnVuY3Rpb24oKXt9KSxfMHg0NDZjMzMmJnR5cGVvZiBfMHg0NDZjMzNbXzB4YTYxMmQ0KDB4MjBkKV09PV8weGE2MTJkNCgweDFlMykmJihfMHg1MTAwZTFbJ2xlbmd0aCddPV8weDQ0NmMzM1tfMHhhNjEyZDQoMHgyMGQpXSk7fWNhdGNoe31maW5hbGx5e18weDRjMTcxYyYmKF8weDRhMjMxY1tfMHhhNjEyZDQoMHgyNTYpXVtfMHhhNjEyZDQoMHgyMzApXT1fMHg0YzE3MWMpO31pZihfMHg1MTAwZTFbXzB4YTYxMmQ0KDB4MWY5KV09PT1fMHhhNjEyZDQoMHgxZTMpfHxfMHg1MTAwZTFbXzB4YTYxMmQ0KDB4MWY5KV09PT0nTnVtYmVyJyl7aWYoaXNOYU4oXzB4NTEwMGUxW18weGE2MTJkNCgweDFkMyldKSlfMHg1MTAwZTFbXzB4YTYxMmQ0KDB4MWJmKV09ITB4MCxkZWxldGUgXzB4NTEwMGUxW18weGE2MTJkNCgweDFkMyldO2Vsc2Ugc3dpdGNoKF8weDUxMDBlMVsndmFsdWUnXSl7Y2FzZSBOdW1iZXJbXzB4YTYxMmQ0KDB4MjUyKV06XzB4NTEwMGUxW18weGE2MTJkNCgweDIyZSldPSEweDAsZGVsZXRlIF8weDUxMDBlMVsndmFsdWUnXTticmVhaztjYXNlIE51bWJlcltfMHhhNjEyZDQoMHgxY2UpXTpfMHg1MTAwZTFbXzB4YTYxMmQ0KDB4MWJjKV09ITB4MCxkZWxldGUgXzB4NTEwMGUxW18weGE2MTJkNCgweDFkMyldO2JyZWFrO2Nhc2UgMHgwOnRoaXNbXzB4YTYxMmQ0KDB4MjAyKV0oXzB4NTEwMGUxW18weGE2MTJkNCgweDFkMyldKSYmKF8weDUxMDBlMVtfMHhhNjEyZDQoMHgxZWUpXT0hMHgwKTticmVhazt9fWVsc2UgXzB4NTEwMGUxW18weGE2MTJkNCgweDFmOSldPT09XzB4YTYxMmQ0KDB4MWJkKSYmdHlwZW9mIF8weDQ0NmMzM1tfMHhhNjEyZDQoMHgyMDYpXT09J3N0cmluZycmJl8weDQ0NmMzM1tfMHhhNjEyZDQoMHgyMDYpXSYmXzB4NTEwMGUxWyduYW1lJ10mJl8weDQ0NmMzM1snbmFtZSddIT09XzB4NTEwMGUxW18weGE2MTJkNCgweDIwNildJiYoXzB4NTEwMGUxW18weGE2MTJkNCgweDFiMyldPV8weDQ0NmMzM1tfMHhhNjEyZDQoMHgyMDYpXSk7fVsnX2lzTmVnYXRpdmVaZXJvJ10oXzB4NTljOWJhKXtyZXR1cm4gMHgxL18weDU5YzliYT09PU51bWJlclsnTkVHQVRJVkVfSU5GSU5JVFknXTt9Wydfc29ydFByb3BzJ10oXzB4MTk0YjIyKXt2YXIgXzB4NDg5NzYyPV8weDExZDJmZDshXzB4MTk0YjIyWydwcm9wcyddfHwhXzB4MTk0YjIyW18weDQ4OTc2MigweDI3MyldW18weDQ4OTc2MigweDIwZCldfHxfMHgxOTRiMjJbXzB4NDg5NzYyKDB4MWY5KV09PT1fMHg0ODk3NjIoMHgxYzkpfHxfMHgxOTRiMjJbXzB4NDg5NzYyKDB4MWY5KV09PT1fMHg0ODk3NjIoMHgxZTQpfHxfMHgxOTRiMjJbXzB4NDg5NzYyKDB4MWY5KV09PT1fMHg0ODk3NjIoMHgxYjQpfHxfMHgxOTRiMjJbJ3Byb3BzJ11bXzB4NDg5NzYyKDB4MjRkKV0oZnVuY3Rpb24oXzB4NTc1MGYxLF8weDJlYjczOCl7dmFyIF8weDc2ZjhhYz1fMHg0ODk3NjIsXzB4NWIyYmI4PV8weDU3NTBmMVtfMHg3NmY4YWMoMHgyMDYpXVtfMHg3NmY4YWMoMHgyNGUpXSgpLF8weDRhNGY4Zj1fMHgyZWI3MzhbXzB4NzZmOGFjKDB4MjA2KV1bJ3RvTG93ZXJDYXNlJ10oKTtyZXR1cm4gXzB4NWIyYmI4PF8weDRhNGY4Zj8tMHgxOl8weDViMmJiOD5fMHg0YTRmOGY/MHgxOjB4MDt9KTt9W18weDExZDJmZCgweDIxOCldKF8weDFjNTY5MixfMHg1OTQxZDIpe3ZhciBfMHg2ZGRjNjM9XzB4MTFkMmZkO2lmKCEoXzB4NTk0MWQyW18weDZkZGM2MygweDIyNyldfHwhXzB4MWM1NjkyW18weDZkZGM2MygweDI3MyldfHwhXzB4MWM1NjkyWydwcm9wcyddWydsZW5ndGgnXSkpe2Zvcih2YXIgXzB4Mzk3ODE4PVtdLF8weDFiYjBkNj1bXSxfMHhjZjYzZjk9MHgwLF8weDUyMmFlZD1fMHgxYzU2OTJbXzB4NmRkYzYzKDB4MjczKV1bXzB4NmRkYzYzKDB4MjBkKV07XzB4Y2Y2M2Y5PF8weDUyMmFlZDtfMHhjZjYzZjkrKyl7dmFyIF8weDViNjZlYT1fMHgxYzU2OTJbJ3Byb3BzJ11bXzB4Y2Y2M2Y5XTtfMHg1YjY2ZWFbXzB4NmRkYzYzKDB4MWY5KV09PT1fMHg2ZGRjNjMoMHgxYmQpP18weDM5NzgxOFtfMHg2ZGRjNjMoMHgxZjMpXShfMHg1YjY2ZWEpOl8weDFiYjBkNltfMHg2ZGRjNjMoMHgxZjMpXShfMHg1YjY2ZWEpO31pZighKCFfMHgxYmIwZDZbJ2xlbmd0aCddfHxfMHgzOTc4MThbXzB4NmRkYzYzKDB4MjBkKV08PTB4MSkpe18weDFjNTY5MltfMHg2ZGRjNjMoMHgyNzMpXT1fMHgxYmIwZDY7dmFyIF8weDRkOGVmZD17J2Z1bmN0aW9uc05vZGUnOiEweDAsJ3Byb3BzJzpfMHgzOTc4MTh9O3RoaXNbXzB4NmRkYzYzKDB4MWVhKV0oXzB4NGQ4ZWZkLF8weDU5NDFkMiksdGhpc1tfMHg2ZGRjNjMoMHgxYjApXShfMHg0ZDhlZmQsXzB4NTk0MWQyKSx0aGlzW18weDZkZGM2MygweDI0MyldKF8weDRkOGVmZCksdGhpc1tfMHg2ZGRjNjMoMHgxZjgpXShfMHg0ZDhlZmQsXzB4NTk0MWQyKSxfMHg0ZDhlZmRbJ2lkJ10rPSdcXFxceDIwZicsXzB4MWM1NjkyWydwcm9wcyddW18weDZkZGM2MygweDIwNyldKF8weDRkOGVmZCk7fX19W18weDExZDJmZCgweDFlMSldKF8weDFjN2FkMCxfMHgyOTdiNmQpe31bXzB4MTFkMmZkKDB4MjQzKV0oXzB4MmY1MDg3KXt9W18weDExZDJmZCgweDI1NSldKF8weDQwMTY5OCl7dmFyIF8weDNmZGI5MT1fMHgxMWQyZmQ7cmV0dXJuIEFycmF5W18weDNmZGI5MSgweDFhYyldKF8weDQwMTY5OCl8fHR5cGVvZiBfMHg0MDE2OTg9PV8weDNmZGI5MSgweDE5OCkmJnRoaXNbXzB4M2ZkYjkxKDB4MWFhKV0oXzB4NDAxNjk4KT09PSdbb2JqZWN0XFxcXHgyMEFycmF5XSc7fVtfMHgxMWQyZmQoMHgxZjgpXShfMHgxNTIxNjIsXzB4MWVkNTc0KXt9W18weDExZDJmZCgweDE5YildKF8weDE2MTI1Myl7dmFyIF8weDY3OWEwYz1fMHgxMWQyZmQ7ZGVsZXRlIF8weDE2MTI1M1tfMHg2NzlhMGMoMHgyMWYpXSxkZWxldGUgXzB4MTYxMjUzWydfaGFzU2V0T25JdHNQYXRoJ10sZGVsZXRlIF8weDE2MTI1M1tfMHg2NzlhMGMoMHgxZmQpXTt9W18weDExZDJmZCgweDE5MildKF8weDQzYTkxYyxfMHg0YjFjZWYpe319bGV0IF8weDE2OThkYT1uZXcgXzB4MzM4NzJmKCksXzB4NDMzNmQ4PXsncHJvcHMnOjB4NjQsJ2VsZW1lbnRzJzoweDY0LCdzdHJMZW5ndGgnOjB4NDAwKjB4MzIsJ3RvdGFsU3RyTGVuZ3RoJzoweDQwMCoweDMyLCdhdXRvRXhwYW5kTGltaXQnOjB4MTM4OCwnYXV0b0V4cGFuZE1heERlcHRoJzoweGF9LF8weDUwNzM2OD17J3Byb3BzJzoweDUsJ2VsZW1lbnRzJzoweDUsJ3N0ckxlbmd0aCc6MHgxMDAsJ3RvdGFsU3RyTGVuZ3RoJzoweDEwMCoweDMsJ2F1dG9FeHBhbmRMaW1pdCc6MHgxZSwnYXV0b0V4cGFuZE1heERlcHRoJzoweDJ9O2Z1bmN0aW9uIF8weDIzYzJiZShfMHgxOWZjZDIsXzB4NDUzNDUxLF8weDE4MWI2ZCxfMHgyYTA4YjMsXzB4NGI0MzRlLF8weDU0MTg1ZCl7dmFyIF8weDkyMTBkNT1fMHgxMWQyZmQ7bGV0IF8weDViNDRmMCxfMHgzNjcxNWI7dHJ5e18weDM2NzE1Yj1fMHg5ZTRjNGQoKSxfMHg1YjQ0ZjA9XzB4MmUwYjgzW18weDQ1MzQ1MV0sIV8weDViNDRmMHx8XzB4MzY3MTViLV8weDViNDRmMFsndHMnXT4weDFmNCYmXzB4NWI0NGYwW18weDkyMTBkNSgweDIyNildJiZfMHg1YjQ0ZjBbJ3RpbWUnXS9fMHg1YjQ0ZjBbXzB4OTIxMGQ1KDB4MjI2KV08MHg2ND8oXzB4MmUwYjgzW18weDQ1MzQ1MV09XzB4NWI0NGYwPXsnY291bnQnOjB4MCwndGltZSc6MHgwLCd0cyc6XzB4MzY3MTVifSxfMHgyZTBiODNbXzB4OTIxMGQ1KDB4MjA4KV09e30pOl8weDM2NzE1Yi1fMHgyZTBiODNbXzB4OTIxMGQ1KDB4MjA4KV1bJ3RzJ10+MHgzMiYmXzB4MmUwYjgzW18weDkyMTBkNSgweDIwOCldW18weDkyMTBkNSgweDIyNildJiZfMHgyZTBiODNbXzB4OTIxMGQ1KDB4MjA4KV1bXzB4OTIxMGQ1KDB4MWFlKV0vXzB4MmUwYjgzW18weDkyMTBkNSgweDIwOCldWydjb3VudCddPDB4NjQmJihfMHgyZTBiODNbXzB4OTIxMGQ1KDB4MjA4KV09e30pO2xldCBfMHg3MjkzYTA9W10sXzB4MzYyOTZiPV8weDViNDRmMFsncmVkdWNlTGltaXRzJ118fF8weDJlMGI4M1tfMHg5MjEwZDUoMHgyMDgpXVtfMHg5MjEwZDUoMHgxYjYpXT9fMHg1MDczNjg6XzB4NDMzNmQ4LF8weDI0N2JlYj1fMHgyMTdhNDc9Pnt2YXIgXzB4NGE4OWEyPV8weDkyMTBkNTtsZXQgXzB4NTQxNDU0PXt9O3JldHVybiBfMHg1NDE0NTRbXzB4NGE4OWEyKDB4MjczKV09XzB4MjE3YTQ3W18weDRhODlhMigweDI3MyldLF8weDU0MTQ1NFtfMHg0YTg5YTIoMHgxZTIpXT1fMHgyMTdhNDdbXzB4NGE4OWEyKDB4MWUyKV0sXzB4NTQxNDU0W18weDRhODlhMigweDIxYildPV8weDIxN2E0N1tfMHg0YTg5YTIoMHgyMWIpXSxfMHg1NDE0NTRbXzB4NGE4OWEyKDB4MWViKV09XzB4MjE3YTQ3W18weDRhODlhMigweDFlYildLF8weDU0MTQ1NFsnYXV0b0V4cGFuZExpbWl0J109XzB4MjE3YTQ3WydhdXRvRXhwYW5kTGltaXQnXSxfMHg1NDE0NTRbXzB4NGE4OWEyKDB4MjY4KV09XzB4MjE3YTQ3WydhdXRvRXhwYW5kTWF4RGVwdGgnXSxfMHg1NDE0NTRbXzB4NGE4OWEyKDB4MjQ5KV09ITB4MSxfMHg1NDE0NTRbXzB4NGE4OWEyKDB4MjI3KV09IV8weDM5ZTU4YixfMHg1NDE0NTRbJ2RlcHRoJ109MHgxLF8weDU0MTQ1NFtfMHg0YTg5YTIoMHgyNzcpXT0weDAsXzB4NTQxNDU0W18weDRhODlhMigweDE4YSldPSdyb290X2V4cF9pZCcsXzB4NTQxNDU0W18weDRhODlhMigweDFjMyldPV8weDRhODlhMigweDFjMiksXzB4NTQxNDU0WydhdXRvRXhwYW5kJ109ITB4MCxfMHg1NDE0NTRbXzB4NGE4OWEyKDB4MjQ1KV09W10sXzB4NTQxNDU0W18weDRhODlhMigweDE5NSldPTB4MCxfMHg1NDE0NTRbXzB4NGE4OWEyKDB4MjZmKV09ITB4MCxfMHg1NDE0NTRbXzB4NGE4OWEyKDB4MWRkKV09MHgwLF8weDU0MTQ1NFtfMHg0YTg5YTIoMHgxZmMpXT17J2N1cnJlbnQnOnZvaWQgMHgwLCdwYXJlbnQnOnZvaWQgMHgwLCdpbmRleCc6MHgwfSxfMHg1NDE0NTQ7fTtmb3IodmFyIF8weDQwYzg0OT0weDA7XzB4NDBjODQ5PF8weDRiNDM0ZVtfMHg5MjEwZDUoMHgyMGQpXTtfMHg0MGM4NDkrKylfMHg3MjkzYTBbJ3B1c2gnXShfMHgxNjk4ZGFbXzB4OTIxMGQ1KDB4MjNhKV0oeyd0aW1lTm9kZSc6XzB4MTlmY2QyPT09J3RpbWUnfHx2b2lkIDB4MH0sXzB4NGI0MzRlW18weDQwYzg0OV0sXzB4MjQ3YmViKF8weDM2Mjk2Yikse30pKTtpZihfMHgxOWZjZDI9PT1fMHg5MjEwZDUoMHgxYWIpKXtsZXQgXzB4NGI0ZTllPUVycm9yW18weDkyMTBkNSgweDIyOSldO3RyeXtFcnJvclsnc3RhY2tUcmFjZUxpbWl0J109MHgxLzB4MCxfMHg3MjkzYTBbXzB4OTIxMGQ1KDB4MWYzKV0oXzB4MTY5OGRhW18weDkyMTBkNSgweDIzYSldKHsnc3RhY2tOb2RlJzohMHgwfSxuZXcgRXJyb3IoKVtfMHg5MjEwZDUoMHgxOTMpXSxfMHgyNDdiZWIoXzB4MzYyOTZiKSx7J3N0ckxlbmd0aCc6MHgxLzB4MH0pKTt9ZmluYWxseXtFcnJvcltfMHg5MjEwZDUoMHgyMjkpXT1fMHg0YjRlOWU7fX1yZXR1cm57J21ldGhvZCc6XzB4OTIxMGQ1KDB4MWNkKSwndmVyc2lvbic6XzB4MTJkZTBiLCdhcmdzJzpbeyd0cyc6XzB4MTgxYjZkLCdzZXNzaW9uJzpfMHgyYTA4YjMsJ2FyZ3MnOl8weDcyOTNhMCwnaWQnOl8weDQ1MzQ1MSwnY29udGV4dCc6XzB4NTQxODVkfV19O31jYXRjaChfMHgzYzRmY2Qpe3JldHVybnsnbWV0aG9kJzonbG9nJywndmVyc2lvbic6XzB4MTJkZTBiLCdhcmdzJzpbeyd0cyc6XzB4MTgxYjZkLCdzZXNzaW9uJzpfMHgyYTA4YjMsJ2FyZ3MnOlt7J3R5cGUnOl8weDkyMTBkNSgweDFiMiksJ2Vycm9yJzpfMHgzYzRmY2QmJl8weDNjNGZjZFtfMHg5MjEwZDUoMHgxYmUpXX1dLCdpZCc6XzB4NDUzNDUxLCdjb250ZXh0JzpfMHg1NDE4NWR9XX07fWZpbmFsbHl7dHJ5e2lmKF8weDViNDRmMCYmXzB4MzY3MTViKXtsZXQgXzB4MzljMDRlPV8weDllNGM0ZCgpO18weDViNDRmMFtfMHg5MjEwZDUoMHgyMjYpXSsrLF8weDViNDRmMFsndGltZSddKz1fMHgyN2ZjMTUoXzB4MzY3MTViLF8weDM5YzA0ZSksXzB4NWI0NGYwWyd0cyddPV8weDM5YzA0ZSxfMHgyZTBiODNbXzB4OTIxMGQ1KDB4MjA4KV1bXzB4OTIxMGQ1KDB4MjI2KV0rKyxfMHgyZTBiODNbJ2hpdHMnXVtfMHg5MjEwZDUoMHgxYWUpXSs9XzB4MjdmYzE1KF8weDM2NzE1YixfMHgzOWMwNGUpLF8weDJlMGI4M1snaGl0cyddWyd0cyddPV8weDM5YzA0ZSwoXzB4NWI0NGYwW18weDkyMTBkNSgweDIyNildPjB4MzJ8fF8weDViNDRmMFsndGltZSddPjB4NjQpJiYoXzB4NWI0NGYwW18weDkyMTBkNSgweDFiNildPSEweDApLChfMHgyZTBiODNbJ2hpdHMnXVsnY291bnQnXT4weDNlOHx8XzB4MmUwYjgzW18weDkyMTBkNSgweDIwOCldW18weDkyMTBkNSgweDFhZSldPjB4MTJjKSYmKF8weDJlMGI4M1tfMHg5MjEwZDUoMHgyMDgpXVtfMHg5MjEwZDUoMHgxYjYpXT0hMHgwKTt9fWNhdGNoe319fXJldHVybiBfMHgyM2MyYmU7fSgoXzB4NGIwMGQ4LF8weDU1NzhmMSxfMHgzZWQyYTcsXzB4MzBlYWFiLF8weDIxMzI5NSxfMHg1Nzg4OGIsXzB4NGQyODhhLF8weDJmZTg5NCxfMHgzY2ZhNmEsXzB4MjZkMWQ0KT0+e3ZhciBfMHgxOTk4ZDM9XzB4MWY3ZmUxO2lmKF8weDRiMDBkOFtfMHgxOTk4ZDMoMHgyMzIpXSlyZXR1cm4gXzB4NGIwMGQ4WydfY29uc29sZV9uaW5qYSddO2lmKCFKKF8weDRiMDBkOCxfMHgyZmU4OTQsXzB4MjEzMjk1KSlyZXR1cm4gXzB4NGIwMGQ4WydfY29uc29sZV9uaW5qYSddPXsnY29uc29sZUxvZyc6KCk9Pnt9LCdjb25zb2xlVHJhY2UnOigpPT57fSwnY29uc29sZVRpbWUnOigpPT57fSwnY29uc29sZVRpbWVFbmQnOigpPT57fSwnYXV0b0xvZyc6KCk9Pnt9LCdhdXRvTG9nTWFueSc6KCk9Pnt9LCdhdXRvVHJhY2VNYW55JzooKT0+e30sJ2NvdmVyYWdlJzooKT0+e30sJ2F1dG9UcmFjZSc6KCk9Pnt9LCdhdXRvVGltZSc6KCk9Pnt9LCdhdXRvVGltZUVuZCc6KCk9Pnt9fSxfMHg0YjAwZDhbXzB4MTk5OGQzKDB4MjMyKV07bGV0IF8weDFlYzhjOD1XKF8weDRiMDBkOCksXzB4MWEzYzdmPV8weDFlYzhjOFsnZWxhcHNlZCddLF8weDQxY2Y2YT1fMHgxZWM4YzhbXzB4MTk5OGQzKDB4MjNkKV0sXzB4MjQ3MDYwPV8weDFlYzhjOFtfMHgxOTk4ZDMoMHgyNTEpXSxfMHgxZDNjNDU9eydoaXRzJzp7fSwndHMnOnt9fSxfMHg1NjgzYmU9WShfMHg0YjAwZDgsXzB4M2NmYTZhLF8weDFkM2M0NSxfMHg1Nzg4OGIpLF8weDNlMjQ4Zj1fMHgxMDM5MmY9PntfMHgxZDNjNDVbJ3RzJ11bXzB4MTAzOTJmXT1fMHg0MWNmNmEoKTt9LF8weDJlYmJlNz0oXzB4MWEwMmM4LF8weDQzMjdjMSk9Pnt2YXIgXzB4MTU5NWEzPV8weDE5OThkMztsZXQgXzB4NDgwMTFiPV8weDFkM2M0NVsndHMnXVtfMHg0MzI3YzFdO2lmKGRlbGV0ZSBfMHgxZDNjNDVbJ3RzJ11bXzB4NDMyN2MxXSxfMHg0ODAxMWIpe2xldCBfMHg0NDFmZWM9XzB4MWEzYzdmKF8weDQ4MDExYixfMHg0MWNmNmEoKSk7XzB4MzQxYWRmKF8weDU2ODNiZShfMHgxNTk1YTMoMHgxYWUpLF8weDFhMDJjOCxfMHgyNDcwNjAoKSxfMHgzZTAwZmMsW18weDQ0MWZlY10sXzB4NDMyN2MxKSk7fX0sXzB4NjY1MzAxPV8weDQwOTU1Mz0+XzB4MmE4ZDk2PT57dmFyIF8weDM1YjJhYT1fMHgxOTk4ZDM7dHJ5e18weDNlMjQ4ZihfMHgyYThkOTYpLF8weDQwOTU1MyhfMHgyYThkOTYpO31maW5hbGx5e18weDRiMDBkOFsnY29uc29sZSddW18weDM1YjJhYSgweDFhZSldPV8weDQwOTU1Mzt9fSxfMHgxNDYyMTU9XzB4NWFhNTkxPT5fMHg0NGI4YzA9Pnt2YXIgXzB4YzViNmUzPV8weDE5OThkMzt0cnl7bGV0IFtfMHg0ZWIxYjYsXzB4MTU0YWRjXT1fMHg0NGI4YzBbXzB4YzViNmUzKDB4MWY2KV0oXzB4YzViNmUzKDB4MjU5KSk7XzB4MmViYmU3KF8weDE1NGFkYyxfMHg0ZWIxYjYpLF8weDVhYTU5MShfMHg0ZWIxYjYpO31maW5hbGx5e18weDRiMDBkOFtfMHhjNWI2ZTMoMHgyNTYpXVsndGltZUVuZCddPV8weDVhYTU5MTt9fTtfMHg0YjAwZDhbXzB4MTk5OGQzKDB4MjMyKV09eydjb25zb2xlTG9nJzooXzB4MjM5M2Y4LF8weDUxYmU2Mik9Pnt2YXIgXzB4NTExNTFiPV8weDE5OThkMztfMHg0YjAwZDhbXzB4NTExNTFiKDB4MjU2KV1bXzB4NTExNTFiKDB4MWNkKV1bXzB4NTExNTFiKDB4MjA2KV0hPT0nZGlzYWJsZWRMb2cnJiZfMHgzNDFhZGYoXzB4NTY4M2JlKF8weDUxMTUxYigweDFjZCksXzB4MjM5M2Y4LF8weDI0NzA2MCgpLF8weDNlMDBmYyxfMHg1MWJlNjIpKTt9LCdjb25zb2xlVHJhY2UnOihfMHgxMTkzNjksXzB4NDQyMDMxKT0+e3ZhciBfMHg1OTRjODA9XzB4MTk5OGQzO18weDRiMDBkOFtfMHg1OTRjODAoMHgyNTYpXVtfMHg1OTRjODAoMHgxY2QpXVsnbmFtZSddIT09J2Rpc2FibGVkVHJhY2UnJiZfMHgzNDFhZGYoXzB4NTY4M2JlKF8weDU5NGM4MCgweDFhYiksXzB4MTE5MzY5LF8weDI0NzA2MCgpLF8weDNlMDBmYyxfMHg0NDIwMzEpKTt9LCdjb25zb2xlVGltZSc6KCk9Pnt2YXIgXzB4MzJlZGYwPV8weDE5OThkMztfMHg0YjAwZDhbXzB4MzJlZGYwKDB4MjU2KV1bXzB4MzJlZGYwKDB4MWFlKV09XzB4NjY1MzAxKF8weDRiMDBkOFtfMHgzMmVkZjAoMHgyNTYpXVtfMHgzMmVkZjAoMHgxYWUpXSk7fSwnY29uc29sZVRpbWVFbmQnOigpPT57dmFyIF8weGNlYjdhOT1fMHgxOTk4ZDM7XzB4NGIwMGQ4W18weGNlYjdhOSgweDI1NildW18weGNlYjdhOSgweDFhMildPV8weDE0NjIxNShfMHg0YjAwZDhbJ2NvbnNvbGUnXVsndGltZUVuZCddKTt9LCdhdXRvTG9nJzooXzB4NTYxMDIxLF8weDMzNDNhNik9Pnt2YXIgXzB4OTkyNTNmPV8weDE5OThkMztfMHgzNDFhZGYoXzB4NTY4M2JlKF8weDk5MjUzZigweDFjZCksXzB4MzM0M2E2LF8weDI0NzA2MCgpLF8weDNlMDBmYyxbXzB4NTYxMDIxXSkpO30sJ2F1dG9Mb2dNYW55JzooXzB4MTRkZjYyLF8weDFhY2E4NSk9Pnt2YXIgXzB4NGU5OTM0PV8weDE5OThkMztfMHgzNDFhZGYoXzB4NTY4M2JlKF8weDRlOTkzNCgweDFjZCksXzB4MTRkZjYyLF8weDI0NzA2MCgpLF8weDNlMDBmYyxfMHgxYWNhODUpKTt9LCdhdXRvVHJhY2UnOihfMHgxOWYzM2IsXzB4NDljZjVjKT0+e3ZhciBfMHgzOGFiYTU9XzB4MTk5OGQzO18weDM0MWFkZihfMHg1NjgzYmUoXzB4MzhhYmE1KDB4MWFiKSxfMHg0OWNmNWMsXzB4MjQ3MDYwKCksXzB4M2UwMGZjLFtfMHgxOWYzM2JdKSk7fSwnYXV0b1RyYWNlTWFueSc6KF8weGNkOTk2MixfMHgzYWRiYzApPT57dmFyIF8weDQwYTdhYT1fMHgxOTk4ZDM7XzB4MzQxYWRmKF8weDU2ODNiZShfMHg0MGE3YWEoMHgxYWIpLF8weGNkOTk2MixfMHgyNDcwNjAoKSxfMHgzZTAwZmMsXzB4M2FkYmMwKSk7fSwnYXV0b1RpbWUnOihfMHgxZTFmZDcsXzB4MmU1NDI5LF8weDJjY2IwMik9PntfMHgzZTI0OGYoXzB4MmNjYjAyKTt9LCdhdXRvVGltZUVuZCc6KF8weDJlMzhlNixfMHgxNDFiZjgsXzB4ZGMzM2IyKT0+e18weDJlYmJlNyhfMHgxNDFiZjgsXzB4ZGMzM2IyKTt9LCdjb3ZlcmFnZSc6XzB4Mjk4ZjM3PT57dmFyIF8weDIzODBiMj1fMHgxOTk4ZDM7XzB4MzQxYWRmKHsnbWV0aG9kJzpfMHgyMzgwYjIoMHgxZGUpLCd2ZXJzaW9uJzpfMHg1Nzg4OGIsJ2FyZ3MnOlt7J2lkJzpfMHgyOThmMzd9XX0pO319O2xldCBfMHgzNDFhZGY9YihfMHg0YjAwZDgsXzB4NTU3OGYxLF8weDNlZDJhNyxfMHgzMGVhYWIsXzB4MjEzMjk1LF8weDI2ZDFkNCksXzB4M2UwMGZjPV8weDRiMDBkOFtfMHgxOTk4ZDMoMHgyNmUpXTtyZXR1cm4gXzB4NGIwMGQ4W18weDE5OThkMygweDIzMildO30pKGdsb2JhbFRoaXMsXzB4MWY3ZmUxKDB4MjEzKSxfMHgxZjdmZTEoMHgyMGMpLF8weDFmN2ZlMSgweDFkNyksXzB4MWY3ZmUxKDB4MjA5KSwnMS4wLjAnLF8weDFmN2ZlMSgweDE4ZSksW1xcXCJsb2NhbGhvc3RcXFwiLFxcXCIxMjcuMC4wLjFcXFwiLFxcXCJleGFtcGxlLmN5cHJlc3MuaW9cXFwiLFxcXCJOYW5kb1xcXCIsXFxcIjEwLjcuMC4yOVxcXCIsXFxcIjE3Mi4xNy44MC4xXFxcIixcXFwiMTkyLjE2OC4xLjYxXFxcIl0sXzB4MWY3ZmUxKDB4MWFmKSxfMHgxZjdmZTEoMHgxYjEpKTtcIik7fWNhdGNoKGUpe319Oy8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovZnVuY3Rpb24gb29fb28oaTpzdHJpbmcsLi4udjphbnlbXSl7dHJ5e29vX2NtKCkuY29uc29sZUxvZyhpLCB2KTt9Y2F0Y2goZSl7fSByZXR1cm4gdn07b29fb287LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9mdW5jdGlvbiBvb190cihpOnN0cmluZywuLi52OmFueVtdKXt0cnl7b29fY20oKS5jb25zb2xlVHJhY2UoaSwgdik7fWNhdGNoKGUpe30gcmV0dXJuIHZ9O29vX3RyOy8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovZnVuY3Rpb24gb29fdHMoKXt0cnl7b29fY20oKS5jb25zb2xlVGltZSgpO31jYXRjaChlKXt9fTtvb190czsvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL2Z1bmN0aW9uIG9vX3RlKCl7dHJ5e29vX2NtKCkuY29uc29sZVRpbWVFbmQoKTt9Y2F0Y2goZSl7fX07b29fdGU7Lyplc2xpbnQgdW5pY29ybi9uby1hYnVzaXZlLWVzbGludC1kaXNhYmxlOixlc2xpbnQtY29tbWVudHMvZGlzYWJsZS1lbmFibGUtcGFpcjosZXNsaW50LWNvbW1lbnRzL25vLXVubGltaXRlZC1kaXNhYmxlOixlc2xpbnQtY29tbWVudHMvbm8tYWdncmVnYXRpbmctZW5hYmxlOixlc2xpbnQtY29tbWVudHMvbm8tZHVwbGljYXRlLWRpc2FibGU6LGVzbGludC1jb21tZW50cy9uby11bnVzZWQtZGlzYWJsZTosZXNsaW50LWNvbW1lbnRzL25vLXVudXNlZC1lbmFibGU6LCovIiwiQGlmICghbG9hZEltYWdlKCkpIHtcclxuICA8ZGl2IGNsYXNzPSdwbGFjZS1pbWFnZSc+XHJcbiAgICA8ZGl2IGNsYXNzPSdpbWFnZS1ob2xkZXInXHJcbiAgICAgICAgIFtuZ1N0eWxlXT0neyB3aWR0aDogY29uZmlnKCk/LndpZHRoLGhlaWdodDogY29uZmlnKCk/LmhlaWdodCxib3JkZXJSYWRpdXM6IGNvbmZpZygpPy5ib3JkZXJSYWRpdXN9Jz5cclxuICAgICAgPGJ1dHRvbiBbbWF0VG9vbHRpcF09XCInVVBMT0FEX0FfSU1BR0UnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlXCIgY2xhc3M9J2ltYWdlLXVwbG9hZC1idG4nIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgIChjbGljayk9J29uVXBsb2FkKCRldmVudCknPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0nbWF0LTE4Jz5hZGRfYV9waG90bzwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8aW5wdXQgI2ltYWdlUGlja2VyIHR5cGU9J2ZpbGUnIGNsYXNzPSdkLW5vbmUnIFtpZF09XCInZmlsZVBpY2tlci0nICsgdXVpZEZpbGVQaWNrZXJcIlxyXG4gICAgICAgICAgICAgKGNoYW5nZSk9J2hhbmRsZUZpbGVTZWxlY3QoJGV2ZW50KScgW2FjY2VwdF09J2ltYWdlc0FsbG93ZWQnPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbn1cclxuXHJcbkBpZiAobG9hZEltYWdlKCkpIHtcclxuICA8ZGl2IGNsYXNzPSdwbGFjZS1pbWFnZSc+XHJcbiAgICA8ZGl2IGNsYXNzPSdpbWFnZS1ob2xkZXItbG9hZGVkJ1xyXG4gICAgICAgICBbbmdTdHlsZV09J3t3aWR0aDogY29uZmlnKCk/LndpZHRoLGhlaWdodDogY29uZmlnKCk/LmhlaWdodCxib3JkZXJSYWRpdXM6IGNvbmZpZygpPy5ib3JkZXJSYWRpdXN9Jz5cclxuICAgICAgPGltZyBbc3JjXT0naW1hZ2VTcmMoKScgYWx0PSdpbWFnZS1sb2FkZWQnIFtuZ1N0eWxlXT0neyBib3JkZXJSYWRpdXM6IGNvbmZpZygpPy5ib3JkZXJSYWRpdXMgfSc+XHJcbiAgICAgIDxpbnB1dCAjaW1hZ2VQaWNrZXIgdHlwZT0nZmlsZScgY2xhc3M9J2Qtbm9uZScgW2lkXT1cIidmaWxlUGlja2VyLScgKyB1dWlkRmlsZVBpY2tlclwiXHJcbiAgICAgICAgICAgICAoY2hhbmdlKT0naGFuZGxlRmlsZVNlbGVjdCgkZXZlbnQpJyBbYWNjZXB0XT0naW1hZ2VzQWxsb3dlZCc+XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAoaW1hZ2VTcmMoKT8ubGVuZ3RoKSB7XHJcbiAgICAgIDxwIGNsYXNzPSdtYXQtY2FwdGlvbiBpbWFnZS1jYXB0aW9uJyBbY2xhc3Mud2Fybl09JyhpbWFnZVNyYygpPy5sZW5ndGggfCBjYWxjdWxhdGVTaXplKSA+IDIwMCdcclxuICAgICAgICAgW2NsYXNzLmZ3LTYwMF09JyhpbWFnZVNyYygpPy5sZW5ndGggfCBjYWxjdWxhdGVTaXplKSA+IDIwMCc+XHJcbiAgICAgICAge3sgXCJTSVpFXCIgfCBpMThuOiBjdXJyZW50TGFuZ3VhZ2UoKSB9fToge3sgKGltYWdlU3JjKCk/Lmxlbmd0aCB8IGNhbGN1bGF0ZVNpemUpIH19S2IgJm5ic3A7IHt7IGZvcm1hdC52YWx1ZSB9fVxyXG4gICAgICA8L3A+XHJcbiAgICB9XHJcbiAgICA8ZGl2IGNsYXNzPSdlZGl0aW5nLWJhci1idG4nPlxyXG4gICAgICBAaWYgKCFjb25maWcoKT8uaGlkZUFkZEJ0bikge1xyXG4gICAgICAgIDxidXR0b24gaWQ9J3VwbG9hZC1pbWcnIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSdvblVwbG9hZCgkZXZlbnQpJ1xyXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1VQTE9BRF9BX0lNQUdFJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSdtYXQtMTgnPmFkZF9hX3Bob3RvPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKCFjb25maWcoKT8uaGlkZUVkaXRCdG4gJiYgIW5vRWRpdCgpKSB7XHJcbiAgICAgICAgPGJ1dHRvbiBpZD0nZWRpdC1pbWcnIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSdzaG93RWRpdFBhbmVsLnNldCh0cnVlKSdcclxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidPUEVOX0VESVRPUl9QQU5FTCcgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2VcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0nbWF0LTE4Jz5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKCFjb25maWcoKT8uaGlkZURvd25sb2FkQnRuKSB7XHJcbiAgICAgICAgPGEgaWQ9J2Rvd25sb2FkLWltZycgW21hdFRvb2x0aXBdPVwiJ0RPV05MT0FEJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZVwiXHJcbiAgICAgICAgICAgW2hyZWZdPSdpbWFnZVNyYygpJyBtYXQtaWNvbi1idXR0b24gW2Rvd25sb2FkXT0naW1hZ2VOYW1lJz5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0nbWF0LTE4Jz5jbG91ZF9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICB9XHJcbiAgICAgIEBpZiAoIWNvbmZpZygpPy5oaWRlRGVsZXRlQnRuKSB7XHJcbiAgICAgICAgPGJ1dHRvbiBpZD0nZGVsZXRlLWltZycgbWF0LWljb24tYnV0dG9uIChjbGljayk9J29uUmVtb3ZlKCknXHJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInUkVNT1ZFJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSdtYXQtMTgnPmRlbGV0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG59XHJcblxyXG5AaWYgKHNob3dFZGl0UGFuZWwoKSkge1xyXG4gIDxkaXYgaWQ9J3BvcHVwJyBjbGFzcz0ncG9wdXAnPlxyXG4gICAgPGRpdiBjbGFzcz0ncG9wdXAtY2xlYXInPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSdvbkNsb3NlRWRpdFBhbmVsKCknPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0nbWF0LTE4Jz5jbGVhcjwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPSdpbWFnZS1jb250YWluZXInPlxyXG4gICAgICA8ZGl2IGNsYXNzPSdpbWFnZS1ob2xkZXItZnVsbCc+XHJcbiAgICAgICAgPGltZyBpZD0naW1hZ2UtZnVsbCcgW3NyY109J2ltYWdlU3JjKCknIGFsdD0nJz5cclxuICAgICAgICA8ZGl2IGlkPSdpbWFnZS1jcm9wcGVyJyBjbGFzcz0naW1hZ2UtY3JvcHBlcic+XHJcbiAgICAgICAgICA8ZGl2IGlkPSdpbWFnZS1jcm9wcGVyLWhlYWRlcic+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9J2NvbnRyb2wtcGFuZWwnPlxyXG4gICAgICAgIDxwIGNsYXNzPSdpdGVtLXBhbmVsIGZ3LTYwMCc+e3sgJ1FVQUxJVFknIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlIH19PC9wPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9J3F1YWxpdHktY29udGFpbmVyJz5cclxuICAgICAgICAgIDxtYXQtc2xpZGVyIG5nRGVmYXVsdENvbnRyb2wgW2NvbG9yXT0nY29sb3InIGNsYXNzPSd3LTEwMCBtdy0xMDAnIChjaGFuZ2UpPSdvbkNoYW5nZVF1YWxpdHkoKSdcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXhdPScxMDAnIFttaW5dPScwJyBbc3RlcF09JzEnIFtkaXNjcmV0ZV09J3RydWUnIFtzaG93VGlja01hcmtzXT0ndHJ1ZSc+XHJcbiAgICAgICAgICAgIDxpbnB1dCBtYXRTbGlkZXJUaHVtYiBbZm9ybUNvbnRyb2xdPSdxdWFsaXR5Jz5cclxuICAgICAgICAgIDwvbWF0LXNsaWRlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPSdpdGVtLXBhbmVsJz5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPSdmdy02MDAnPnt7ICdNQVhfRElNRU5TSU9OUycgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2UgfX08L3NwYW4+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPSdmbG9hdC1yaWdodCcgW2Zvcm1Db250cm9sXT0nbWFpbnRhaW5Bc3BlY3RSYXRpbycgW2NvbG9yXT0nY29sb3InPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyAnQVNQRUNUX1JBVElPJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9J21heC1kaW1lbnNpb24tY29udGFpbmVyJz5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ndy00OCcgW2FwcGVhcmFuY2VdPSdhcHBlYXJhbmNlJyBbY29sb3JdPSdjb2xvcic+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ01BWF9XSURUSF9QWCcgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2UgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IChjaGFuZ2UpPSdvbkNoYW5nZVNpemUodHJ1ZSwgZmFsc2UpJyBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidNQVhfV0lEVEhfUFgnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlXCJcclxuICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPSdtYXhXaWR0aCcgdHlwZT0nbnVtYmVyJyBbbWluXT0nMCcgW21heF09JzIwMDAnPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ndy00OCcgW2FwcGVhcmFuY2VdPSdhcHBlYXJhbmNlJyBbY29sb3JdPSdjb2xvcic+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ01BWF9IRUlHSFRfUFgnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCAoY2hhbmdlKT0nb25DaGFuZ2VTaXplKGZhbHNlLCB0cnVlKScgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInTUFYX0hFSUdIVF9QWCcgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09J21heEhlaWdodCcgdHlwZT0nbnVtYmVyJyBbbWluXT0nMCcgW21heF09JzIwMDAnPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8cCBjbGFzcz0naXRlbS1wYW5lbCBmdy02MDAnPnt7ICdGT1JNQVQnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlIH19PC9wPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9J2Zvcm1hdHMtc2VsZWN0aW9uJz5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ndy0xMDAgbXctMTAwJyBbYXBwZWFyYW5jZV09J2FwcGVhcmFuY2UnIFtjb2xvcl09J2NvbG9yJz5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT0nZm9ybWF0JyAoc2VsZWN0aW9uQ2hhbmdlKT0nb25DaGFuZ2VGb3JtYXQoKSc+XHJcbiAgICAgICAgICAgICAgQGZvciAoZm9ybWF0IG9mIGFsbEZvcm1hdHM7IHRyYWNrIGZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0nZm9ybWF0Jz5cclxuICAgICAgICAgICAgICAgICAge3sgZm9ybWF0IH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9J3JlZnJlc2gtY29udGFpbmVyJz5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9J29uQ3JvcFN0YXRlQ2hhbmdlKCknIFtmb3JtQ29udHJvbF09J3Nob3dDcm9wJyBbY29sb3JdPSdjb2xvcic+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPSdpdGVtLXBhbmVsIGZ3LTYwMCc+e3sgJ0NST1AnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlIH19PC9wPlxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPSdkLWZsZXggJz5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0nZmxvYXQtcmlnaHQnIG1hdC1pY29uLWJ1dHRvbiBbY29sb3JdPSdjb2xvcicgKGNsaWNrKT0nb25SZXN0b3JlKCknPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5yZWZyZXNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIEBpZiAoc2hvd0Nyb3AudmFsdWUpIHtcclxuICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFtjb2xvcl09J2NvbG9yJyAoY2xpY2spPSdvbkNyb3AoKSc+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jcm9wPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgQGlmIChzaG93Q3JvcC52YWx1ZSkge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz0nZGltZW5zaW9uLWNvbnRhaW5lcic+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ndy00OCBtdy00OCcgW2FwcGVhcmFuY2VdPSdhcHBlYXJhbmNlJyBbY29sb3JdPSdjb2xvcic+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnV0lEVEhfUFgnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IChjaGFuZ2UpPSdvbkNoYW5nZUNyb3AoKScgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cIidXSURUSF9QWCcgfCBpMThuOiBjb25maWcoKT8ubGFuZ3VhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSdjcm9wV2lkdGgnIHR5cGU9J251bWJlcicgW21pbl09JzAnIFttYXhdPScyMDAwJz5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSd3LTQ4IG13LTQ4JyBbYXBwZWFyYW5jZV09J2FwcGVhcmFuY2UnIFtjb2xvcl09J2NvbG9yJz5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdIRUlHSFRfUFgnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IChjaGFuZ2UpPSdvbkNoYW5nZUNyb3AoKScgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cIidIRUlHSFRfUFgnIHwgaTE4bjogY29uZmlnKCk/Lmxhbmd1YWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0nY3JvcEhlaWdodCcgdHlwZT0nbnVtYmVyJyBbbWluXT0nMCcgW21heF09JzIwMDAnPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxkaXYgY2xhc3M9J3NhdmUtY29udGFpbmVyJz5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIChjbGljayk9J29uQ2xvc2VFZGl0UGFuZWwoKScgW2NvbG9yXT0nY29sb3InIGNsYXNzPSdzYXZlLWJ1dHRvbic+XHJcbiAgICAgICAgICAgIHt7ICdTQVZFJyB8IGkxOG46IGNvbmZpZygpPy5sYW5ndWFnZSB9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICBAaWYgKGltYWdlU3JjKCk/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICA8cCBjbGFzcz0nbWF0LWNhcHRpb24gaW1hZ2UtY2FwdGlvbidcclxuICAgICAgICAgICAgICAgW2NsYXNzLndhcm5dPScoaW1hZ2VTcmMoKT8ubGVuZ3RoIHwgY2FsY3VsYXRlU2l6ZSkgPiAyMDAnXHJcbiAgICAgICAgICAgICAgIFtjbGFzcy5mdy02MDBdPScoaW1hZ2VTcmMoKT8ubGVuZ3RoIHwgY2FsY3VsYXRlU2l6ZSkgPiAyMDAnPlxyXG4gICAgICAgICAgICAgIHt7IFwiU0laRVwiIHwgaTE4bjogY3VycmVudExhbmd1YWdlKCkgfX06IHt7IChpbWFnZVNyYygpPy5sZW5ndGggfCBjYWxjdWxhdGVTaXplKSB9fUtiXHJcbiAgICAgICAgICAgICAgJm5ic3A7IHt7IGZvcm1hdC52YWx1ZSB9fVxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbn1cclxuIl19
|
|
648
617
|
|
|
649
618
|
/*
|
|
650
619
|
* Public API Surface of guachos-image-picker
|