ng-cw-v12
Version:
Angular UI component library
98 lines • 18.5 kB
JavaScript
import { __awaiter } from "tslib";
import { Component, Input } from '@angular/core';
import * as i0 from "@angular/core";
export class ImgEnlargementComponent {
constructor(eleRef) {
this.eleRef = eleRef;
this.ncSmallSize = 300; //缩略图容器大小
this.ncPreviewSize = 600; //预览容器大小
this.ncSmallUrl = ''; //缩略图地址
this.ncPreviewUrl = ''; //预览图地址
}
ngOnInit() {
let el_EnlargeContainer = this.eleRef.nativeElement.querySelector('#el_EnlargeContainer');
let el_SmallContainer = this.eleRef.nativeElement.querySelector('#el_SmallContainer');
let el_SmallImage = this.eleRef.nativeElement.querySelector('#el_SmallImage');
let el_maskEnarge = this.eleRef.nativeElement.querySelector('#el_maskEnarge');
let el_PreviewContainer = this.eleRef.nativeElement.querySelector('#el_PreviewContainer');
let el_PreviewImage = this.eleRef.nativeElement.querySelector('#el_PreviewImage');
let smallImgWidth = 0;
let smallImgHeight = 0;
el_SmallImage.src = this.ncSmallUrl;
el_SmallImage.onload = () => {
//计算缩放比
let { width, height } = el_SmallImage;
const smallScale = Math.min(this.ncSmallSize / width, this.ncSmallSize / height, 1);
//计算左侧区域宽高
smallImgWidth = width * smallScale;
smallImgHeight = height * smallScale;
//设置左侧区域宽高
el_EnlargeContainer.style.width = el_SmallContainer.style.width = el_SmallImage.style.width = smallImgWidth + 'px';
el_EnlargeContainer.style.height = el_SmallContainer.style.height = el_SmallImage.style.height = smallImgHeight + 'px';
};
el_SmallContainer.onmouseenter = () => __awaiter(this, void 0, void 0, function* () {
// 加载预览大图原始图
if (this.ncPreviewUrl) {
el_PreviewImage.src = this.ncPreviewUrl;
}
else {
el_PreviewImage.src = this.ncSmallUrl;
}
el_PreviewImage.onload = () => {
// 显示蒙层和预览大图区域
el_maskEnarge.style.display = 'block';
el_PreviewContainer.style.display = 'block';
//计算缩放比
let { width, height } = el_PreviewImage;
const previewScale = Math.min(this.ncPreviewSize / width, this.ncPreviewSize / height, 1);
//计算实际展示区域
el_PreviewContainer.style.width = width * previewScale + 'px';
el_PreviewContainer.style.height = height * previewScale + 'px';
el_PreviewContainer.style.left = (smallImgWidth + 10) + 'px';
//设置蒙层的大小,使用预览大图的缩放比,才能得到准确的蒙层内容用于在右侧放大区域呈现放大效果
el_maskEnarge.style.width = smallImgWidth * previewScale + 'px';
el_maskEnarge.style.height = smallImgHeight * previewScale + 'px';
};
});
el_SmallContainer.onmouseleave = () => {
el_maskEnarge.style.display = 'none';
el_PreviewContainer.style.display = 'none';
};
el_SmallContainer.onmousemove = (event) => {
//获取鼠标移动的位置信息
let x = event.pageX - el_EnlargeContainer.getBoundingClientRect().left - el_maskEnarge.offsetWidth / 2;
let y = event.pageY - el_EnlargeContainer.getBoundingClientRect().top - el_maskEnarge.offsetHeight / 2;
//限制蒙层移动的范围,不能超出缩略小图内容区域
const xMax = el_SmallContainer.offsetWidth - el_maskEnarge.offsetWidth;
x = x < 0 ? 0 : (x > xMax ? xMax : x);
const yMax = el_SmallContainer.offsetHeight - el_maskEnarge.offsetHeight;
y = y < 0 ? 0 : (y > yMax ? yMax : y);
//更新蒙层的位置信息,实时移动蒙层元素
el_maskEnarge.style.left = x + 'px';
el_maskEnarge.style.top = y + 'px';
//右侧的预览大图等比例移动
const rate = el_PreviewImage.offsetWidth / el_SmallContainer.offsetWidth;
el_PreviewImage.style.marginTop = -(rate * y) + 'px';
el_PreviewImage.style.marginLeft = -(rate * x) + 'px';
};
}
}
ImgEnlargementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: ImgEnlargementComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
ImgEnlargementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: ImgEnlargementComponent, selector: "nc-img-enlargement", inputs: { ncSmallSize: "ncSmallSize", ncPreviewSize: "ncPreviewSize", ncSmallUrl: "ncSmallUrl", ncPreviewUrl: "ncPreviewUrl" }, ngImport: i0, template: "<div id=\"el_EnlargeContainer\" class=\"enlarge\">\r\n <!--\u539F\u59CB\u5C0F\u56FE\u533A\u57DF-->\r\n <div id=\"el_SmallContainer\" class=\"small\">\r\n <img id=\"el_SmallImage\" />\r\n <div id=\"el_maskEnarge\" class=\"mask\"></div>\r\n </div>\r\n <!--\u9884\u89C8\u5927\u56FE\u533A\u57DF-->\r\n <div id=\"el_PreviewContainer\" class=\"preview\">\r\n <img id=\"el_PreviewImage\" />\r\n </div>\r\n</div>", styles: [".enlarge,.small{position:relative}.mask{position:absolute;top:0;left:0;background:rgba(56,77,145,.3);cursor:move;display:none}.preview{position:absolute;top:0;left:150px;overflow:hidden;z-index:1001}\n"] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: ImgEnlargementComponent, decorators: [{
type: Component,
args: [{
selector: 'nc-img-enlargement',
templateUrl: './img-enlargement.component.html',
styleUrls: ['./img-enlargement.component.less']
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { ncSmallSize: [{
type: Input
}], ncPreviewSize: [{
type: Input
}], ncSmallUrl: [{
type: Input
}], ncPreviewUrl: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLWVubGFyZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvaW1nLWVubGFyZ2VtZW50L2ltZy1lbmxhcmdlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL2ltZy1lbmxhcmdlbWVudC9pbWctZW5sYXJnZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOztBQU9yRSxNQUFNLE9BQU8sdUJBQXVCO0lBTWxDLFlBQW9CLE1BQWtCO1FBQWxCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFMN0IsZ0JBQVcsR0FBVyxHQUFHLENBQUMsQ0FBQSxTQUFTO1FBQ25DLGtCQUFhLEdBQVcsR0FBRyxDQUFDLENBQUEsUUFBUTtRQUNwQyxlQUFVLEdBQVcsRUFBRSxDQUFDLENBQUEsT0FBTztRQUMvQixpQkFBWSxHQUFXLEVBQUUsQ0FBQyxDQUFBLE9BQU87SUFFQSxDQUFDO0lBRTNDLFFBQVE7UUFDTixJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFGLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDdEYsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUUsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUUsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFB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R0FBRyxlQUFlLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztZQUN6RSxlQUFlLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNyRCxlQUFlLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN4RCxDQUFDLENBQUE7SUFDSCxDQUFDOztvSEF4RlUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsMExDUHBDLDZiQVVNOzJGREhPLHVCQUF1QjtrQkFMbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixXQUFXLEVBQUUsa0NBQWtDO29CQUMvQyxTQUFTLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztpQkFDaEQ7aUdBRVUsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduYy1pbWctZW5sYXJnZW1lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWctZW5sYXJnZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ltZy1lbmxhcmdlbWVudC5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbWdFbmxhcmdlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgbmNTbWFsbFNpemU6IG51bWJlciA9IDMwMDsvL+e8qeeVpeWbvuWuueWZqOWkp+Wwj1xyXG4gIEBJbnB1dCgpIG5jUHJldmlld1NpemU6IG51bWJlciA9IDYwMDsvL+mihOiniOWuueWZqOWkp+Wwj1xyXG4gIEBJbnB1dCgpIG5jU21hbGxVcmw6IHN0cmluZyA9ICcnOy8v57yp55Wl5Zu+5Zyw5Z2AXHJcbiAgQElucHV0KCkgbmNQcmV2aWV3VXJsOiBzdHJpbmcgPSAnJzsvL+mihOiniOWbvuWcsOWdgFxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZVJlZjogRWxlbWVudFJlZikgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgbGV0IGVsX0VubGFyZ2VDb250YWluZXIgPSB0aGlzLmVsZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNlbF9FbmxhcmdlQ29udGFpbmVyJyk7XHJcbiAgICBsZXQgZWxfU21hbGxDb250YWluZXIgPSB0aGlzLmVsZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNlbF9TbWFsbENvbnRhaW5lcicpO1xyXG4gICAgbGV0IGVsX1NtYWxsSW1hZ2UgPSB0aGlzLmVsZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNlbF9TbWFsbEltYWdlJyk7XHJcbiAgICBsZXQgZWxfbWFza0VuYXJnZSA9IHRoaXMuZWxlUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2VsX21hc2tFbmFyZ2UnKTtcclxuICAgIGxldCBlbF9QcmV2aWV3Q29udGFpbmVyID0gdGhpcy5lbGVSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjZWxfUHJldmlld0NvbnRhaW5lcicpO1xyXG4gICAgbGV0IGVsX1ByZXZpZXdJbWFnZSA9IHRoaXMuZWxlUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2VsX1ByZXZpZXdJbWFnZScpO1xyXG5cclxuICAgIGxldCBzbWFsbEltZ1dpZHRoOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHNtYWxsSW1nSGVpZ2h0OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGVsX1NtYWxsSW1hZ2Uuc3JjID0gdGhpcy5uY1NtYWxsVXJsO1xyXG4gICAgZWxfU21hbGxJbWFnZS5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIC8v6K6h566X57yp5pS+5q+UXHJcbiAgICAgIGxldCB7IHdpZHRoLCBoZWlnaHQgfSA9IGVsX1NtYWxsSW1hZ2U7XHJcbiAgICAgIGNvbnN0IHNtYWxsU2NhbGUgPSBNYXRoLm1pbih0aGlzLm5jU21hbGxTaXplIC8gd2lkdGgsIHRoaXMubmNTbWFsbFNpemUgLyBoZWlnaHQsIDEpO1xyXG5cclxuICAgICAgLy/orqHnrpflt6bkvqfljLrln5/lrr3pq5hcclxuICAgICAgc21hbGxJbWdXaWR0aCA9IHdpZHRoICogc21hbGxTY2FsZTtcclxuICAgICAgc21hbGxJbWdIZWlnaHQgPSBoZWlnaHQgKiBzbWFsbFNjYWxlO1xyXG5cclxuICAgICAgLy/orr7nva7lt6bkvqfljLrln5/lrr3pq5hcclxuICAgICAgZWxfRW5sYXJnZUNvbnRhaW5lci5zdHlsZS53aWR0aCA9IGVsX1NtYWxsQ29udGFpbmVyLnN0eWxlLndpZHRoID0gZWxfU21hbGxJbWFnZS5zdHlsZS53aWR0aCA9IHNtYWxsSW1nV2lkdGggKyAncHgnO1xyXG4gICAgICBlbF9FbmxhcmdlQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGVsX1NtYWxsQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGVsX1NtYWxsSW1hZ2Uuc3R5bGUuaGVpZ2h0ID0gc21hbGxJbWdIZWlnaHQgKyAncHgnO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBlbF9TbWFsbENvbnRhaW5lci5vbm1vdXNlZW50ZXIgPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgIC8vIOWKoOi9vemihOiniOWkp+WbvuWOn+Wni+WbvlxyXG4gICAgICBpZiAodGhpcy5uY1ByZXZpZXdVcmwpIHtcclxuICAgICAgICBlbF9QcmV2aWV3SW1hZ2Uuc3JjID0gdGhpcy5uY1ByZXZpZXdVcmw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZWxfUHJldmlld0ltYWdlLnNyYyA9IHRoaXMubmNTbWFsbFVybDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZWxfUHJldmlld0ltYWdlLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAvLyDmmL7npLrokpnlsYLlkozpooTop4jlpKflm77ljLrln59cclxuICAgICAgICBlbF9tYXNrRW5hcmdlLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIGVsX1ByZXZpZXdDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgIC8v6K6h566X57yp5pS+5q+UXHJcbiAgICAgICAgbGV0IHsgd2lkdGgsIGhlaWdodCB9ID0gZWxfUHJldmlld0ltYWdlO1xyXG4gICAgICAgIGNvbnN0IHByZXZpZXdTY2FsZSA9IE1hdGgubWluKHRoaXMubmNQcmV2aWV3U2l6ZSAvIHdpZHRoLCB0aGlzLm5jUHJldmlld1NpemUgLyBoZWlnaHQsIDEpO1xyXG5cclxuICAgICAgICAvL+iuoeeul+WunumZheWxleekuuWMuuWfn1xyXG4gICAgICAgIGVsX1ByZXZpZXdDb250YWluZXIuc3R5bGUud2lkdGggPSB3aWR0aCAqIHByZXZpZXdTY2FsZSArICdweCc7XHJcbiAgICAgICAgZWxfUHJldmlld0NvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKiBwcmV2aWV3U2NhbGUgKyAncHgnO1xyXG4gICAgICAgIGVsX1ByZXZpZXdDb250YWluZXIuc3R5bGUubGVmdCA9IChzbWFsbEltZ1dpZHRoICsgMTApICsgJ3B4JztcclxuXHJcbiAgICAgICAgLy/orr7nva7okpnlsYLnmoTlpKflsI/vvIzkvb/nlKjpooTop4jlpKflm77nmoTnvKnmlL7mr5TvvIzmiY3og73lvpfliLDlh4bnoa7nmoTokpnlsYLlhoXlrrnnlKjkuo7lnKjlj7PkvqfmlL7lpKfljLrln5/lkYjnjrDmlL7lpKfmlYjmnpxcclxuICAgICAgICBlbF9tYXNrRW5hcmdlLnN0eWxlLndpZHRoID0gc21hbGxJbWdXaWR0aCAqIHByZXZpZXdTY2FsZSArICdweCc7XHJcbiAgICAgICAgZWxfbWFza0VuYXJnZS5zdHlsZS5oZWlnaHQgPSBzbWFsbEltZ0hlaWdodCAqIHByZXZpZXdTY2FsZSArICdweCc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbF9TbWFsbENvbnRhaW5lci5vbm1vdXNlbGVhdmUgPSAoKSA9PiB7XHJcbiAgICAgIGVsX21hc2tFbmFyZ2Uuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgZWxfUHJldmlld0NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgfVxyXG5cclxuICAgIGVsX1NtYWxsQ29udGFpbmVyLm9ubW91c2Vtb3ZlID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgLy/ojrflj5bpvKDmoIfnp7vliqjnmoTkvY3nva7kv6Hmga9cclxuICAgICAgbGV0IHggPSBldmVudC5wYWdlWCAtIGVsX0VubGFyZ2VDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGVsX21hc2tFbmFyZ2Uub2Zmc2V0V2lkdGggLyAyO1xyXG4gICAgICBsZXQgeSA9IGV2ZW50LnBhZ2VZIC0gZWxfRW5sYXJnZUNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBlbF9tYXNrRW5hcmdlLm9mZnNldEhlaWdodCAvIDI7XHJcblxyXG4gICAgICAvL+mZkOWItuiSmeWxguenu+WKqOeahOiMg+WbtO+8jOS4jeiDvei2heWHuue8qeeVpeWwj+WbvuWGheWuueWMuuWfn1xyXG4gICAgICBjb25zdCB4TWF4ID0gZWxfU21hbGxDb250YWluZXIub2Zmc2V0V2lkdGggLSBlbF9tYXNrRW5hcmdlLm9mZnNldFdpZHRoO1xyXG4gICAgICB4ID0geCA8IDAgPyAwIDogKHggPiB4TWF4ID8geE1heCA6IHgpO1xyXG4gICAgICBjb25zdCB5TWF4ID0gZWxfU21hbGxDb250YWluZXIub2Zmc2V0SGVpZ2h0IC0gZWxfbWFza0VuYXJnZS5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIHkgPSB5IDwgMCA/IDAgOiAoeSA+IHlNYXggPyB5TWF4IDogeSk7XHJcblxyXG4gICAgICAvL+abtOaWsOiSmeWxgueahOS9jee9ruS/oeaBr++8jOWunuaXtuenu+WKqOiSmeWxguWFg+e0oFxyXG4gICAgICBlbF9tYXNrRW5hcmdlLnN0eWxlLmxlZnQgPSB4ICsgJ3B4JztcclxuICAgICAgZWxfbWFza0VuYXJnZS5zdHlsZS50b3AgPSB5ICsgJ3B4JztcclxuXHJcbiAgICAgIC8v5Y+z5L6n55qE6aKE6KeI5aSn5Zu+562J5q+U5L6L56e75YqoXHJcbiAgICAgIGNvbnN0IHJhdGUgPSBlbF9QcmV2aWV3SW1hZ2Uub2Zmc2V0V2lkdGggLyBlbF9TbWFsbENvbnRhaW5lci5vZmZzZXRXaWR0aDtcclxuICAgICAgZWxfUHJldmlld0ltYWdlLnN0eWxlLm1hcmdpblRvcCA9IC0ocmF0ZSAqIHkpICsgJ3B4JztcclxuICAgICAgZWxfUHJldmlld0ltYWdlLnN0eWxlLm1hcmdpbkxlZnQgPSAtKHJhdGUgKiB4KSArICdweCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGlkPVwiZWxfRW5sYXJnZUNvbnRhaW5lclwiIGNsYXNzPVwiZW5sYXJnZVwiPlxyXG4gICAgPCEtLeWOn+Wni+Wwj+WbvuWMuuWfny0tPlxyXG4gICAgPGRpdiBpZD1cImVsX1NtYWxsQ29udGFpbmVyXCIgY2xhc3M9XCJzbWFsbFwiPlxyXG4gICAgICAgIDxpbWcgaWQ9XCJlbF9TbWFsbEltYWdlXCIgLz5cclxuICAgICAgICA8ZGl2IGlkPVwiZWxfbWFza0VuYXJnZVwiIGNsYXNzPVwibWFza1wiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0t6aKE6KeI5aSn5Zu+5Yy65Z+fLS0+XHJcbiAgICA8ZGl2IGlkPVwiZWxfUHJldmlld0NvbnRhaW5lclwiIGNsYXNzPVwicHJldmlld1wiPlxyXG4gICAgICAgIDxpbWcgaWQ9XCJlbF9QcmV2aWV3SW1hZ2VcIiAvPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==