ng-yunzai-mobile
Version:
1. 适配yunzai_uni_app_x
399 lines • 31.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: upload-file/yz-upload-file/yz-upload-file.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, EventEmitter, Inject, Input, Output } from '@angular/core';
import { ToastService } from "ng-zorro-antd-mobile";
import { BASE_CLIENT } from "../../client/base.client";
import { UploadService } from "./upload.service";
import { MatDialog } from "@angular/material/dialog";
import { FileCarouselService } from "../yz-file-carousel/file-carousel.service";
import { FileShowService } from "../yz-file-show/file-show.service";
var YzUploadFileComponent = /** @class */ (function () {
function YzUploadFileComponent(_toast, client, uploadService, fileCarouselService, fileShowService, dialog) {
var _this = this;
this._toast = _toast;
this.client = client;
this.uploadService = uploadService;
this.fileCarouselService = fileCarouselService;
this.fileShowService = fileShowService;
this.dialog = dialog;
// 服务方式调用,返回文件本身的File对象;
// 组件方式调用,返回全部文件File数组;
this.type = 1;
this.disabled = false;
this.fileList = [];
this.confirmFile = new EventEmitter();
// 页面加载中
this.pageLoading = false;
// 文件的展示方式(使用组件方式调用才展示文件),若上传的文件均为图片格式,则以“square”方式显示,否则以“list”方式显示;默认为“list”
this.showType = ShowType.LIST;
// 右侧按钮组
this.rightBtnArr = [
{
text: '删除',
onPress: (/**
* @return {?}
*/
function () {
_this.deleteFile();
}),
className: 'btnClass',
style: { backgroundColor: '#f4333c', color: '#fff' }
}
];
// 被删除文件
this.deleteItem = {
id: null,
index: null
};
}
/**
* @return {?}
*/
YzUploadFileComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
YzUploadFileComponent.prototype.upload = /**
* @return {?}
*/
function () {
var _this = this;
if (!this.pageLoading) {
this.uploadService.uploadHandle({
type: this.type,
onOk: (/**
* @param {?} result
* @return {?}
*/
function (result) {
_this.uploadFileStart(result);
})
});
}
};
// 上传附件
// 上传附件
/**
* @param {?} file
* @return {?}
*/
YzUploadFileComponent.prototype.uploadFileStart =
// 上传附件
/**
* @param {?} file
* @return {?}
*/
function (file) {
var _this = this;
this.pageLoading = true;
this.uploadService.uploadFile(file).subscribe((/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.pageLoading = false;
if (data.data) {
/** @type {?} */
var bgUrl = '';
data.data.type = data.data.type.toLowerCase();
switch (data.data.type) {
case '.xls':
case '.xlsx':
bgUrl = './assets/imgs/icon_excel.png';
break;
case '.ppt':
case '.pptx':
bgUrl = './assets/imgs/icon_ppt.png';
break;
case '.doc':
case '.docx':
bgUrl = './assets/imgs/icon_word.png';
break;
case '.pdf':
bgUrl = './assets/imgs/icon_pdf.png';
break;
case '.txt':
bgUrl = './assets/imgs/icon_text.png';
break;
case '.gif':
case '.png':
case '.jpg':
case '.jpeg':
bgUrl = _this.client.gateway + '/filecenter/file/' + data.data.id;
break;
case '.mp3':
case '.mp4':
bgUrl = './assets/imgs/icon_img.png';
break;
default:
bgUrl = './assets/imgs/icon_othert.png';
}
_this.fileList.push(tslib_1.__assign({ bgUrl: bgUrl, url: _this.client.gateway + '/filecenter/file/' + data.data.id }, data.data));
_this.isAllImg();
_this.confirmFile.emit(_this.fileList);
}
else {
_this._toast.fail('上传失败,请重新操作!');
}
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
_this.pageLoading = false;
console.log(error);
_this._toast.fail('上传失败,请重新操作!');
}));
};
// 文件的展示方式
// 文件的展示方式
/**
* @return {?}
*/
YzUploadFileComponent.prototype.isAllImg =
// 文件的展示方式
/**
* @return {?}
*/
function () {
/** @type {?} */
var allImg = this.fileList.every((/**
* @param {?} item
* @return {?}
*/
function (item) {
return item.type === '.jpg' || item.type === '.jpeg' || item.type === '.gif' || item.type === '.png';
}));
this.showType = allImg ? ShowType.SQUARE : ShowType.LIST;
};
// 删除文件
// 删除文件
/**
* @return {?}
*/
YzUploadFileComponent.prototype.deleteFile =
// 删除文件
/**
* @return {?}
*/
function () {
var _this = this;
this.pageLoading = true;
this.uploadService.deleteFile(this.deleteItem.id).subscribe((/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.pageLoading = false;
if (data.message.indexOf('成功') != -1) {
_this.fileList.splice(_this.deleteItem.index, 1);
_this.isAllImg();
_this.confirmFile.emit(_this.fileList);
}
else {
_this._toast.fail('删除失败,请重新操作!');
}
}), (/**
* @return {?}
*/
function () {
_this.pageLoading = false;
_this._toast.fail('删除失败,请重新操作!');
}));
};
// 删除方块中的文件
// 删除方块中的文件
/**
* @param {?} id
* @param {?} index
* @return {?}
*/
YzUploadFileComponent.prototype.deleteFileBySquare =
// 删除方块中的文件
/**
* @param {?} id
* @param {?} index
* @return {?}
*/
function (id, index) {
event.stopPropagation();
this.deleteItem = {
id: id,
index: index
};
this.deleteFile();
};
// 删除list中的文件
// 删除list中的文件
/**
* @param {?} id
* @param {?} index
* @return {?}
*/
YzUploadFileComponent.prototype.deleteFileBySwipe =
// 删除list中的文件
/**
* @param {?} id
* @param {?} index
* @return {?}
*/
function (id, index) {
this.deleteItem = {
id: id,
index: index
};
};
// 查看图片文件详情
// 查看图片文件详情
/**
* @param {?} item
* @param {?} index
* @return {?}
*/
YzUploadFileComponent.prototype.viewImgFile =
// 查看图片文件详情
/**
* @param {?} item
* @param {?} index
* @return {?}
*/
function (item, index) {
this.fileCarouselService.viewImgFileCarousel({
fileList: this.fileList,
index: index
});
};
// 查看多种格式文件详情
// 查看多种格式文件详情
/**
* @param {?} item
* @return {?}
*/
YzUploadFileComponent.prototype.viewOtherFile =
// 查看多种格式文件详情
/**
* @param {?} item
* @return {?}
*/
function (item) {
this.fileShowService.viewFileShow({
id: item.id
});
};
YzUploadFileComponent.decorators = [
{ type: Component, args: [{
selector: 'yz-upload-file',
template: "<!-- \u56FE\u7247\u683C\u5F0F\u6587\u4EF6\u7684\u5C55\u793A-->\r\n<div class=\"upload-file-box\">\r\n <ng-container *ngIf=\"fileList.length>0 && showType=='square'\">\r\n <div class=\"file-item\" *ngFor=\"let item of fileList;let i=index;\">\r\n <div class=\"file-item-cont\"\r\n [ngStyle]=\"{'background':'url('+item.bgUrl+') no-repeat center #fff','background-size': (item.type=='.gif' || item.type=='.png' || item.type=='.jpg' || item.type=='.jpeg')?'cover':'auto'}\"\r\n (click)=\"viewImgFile(item, i)\">\r\n <Icon [type]=\"'cross-circle-o'\" *ngIf=\"!disabled\"\r\n [size]=\"'xs'\"\r\n [color]=\"'rgba(0,0,0,.5)'\"\r\n (click)=\"deleteFileBySquare(item.id,i)\"\r\n ></Icon>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"file-item\" *ngIf=\"!disabled\" (click)=\"upload()\">\r\n <div class=\"file-item-cont\"\r\n [class.add-file-btn]=\"!pageLoading\"\r\n [class.add-file-loading]=\"pageLoading\">\r\n <Icon *ngIf=\"pageLoading\" [type]=\"'loading'\" [size]=\"'lg'\"></Icon>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \u591A\u79CD\u683C\u5F0F\u6587\u4EF6\u7684\u5C55\u793A-->\r\n<List [className]=\"'file-list'\" *ngIf=\"fileList.length>0 && showType=='list'\">\r\n <SwipeAction\r\n *ngFor=\"let item of fileList;let i=index;\"\r\n [autoClose]=\"true\"\r\n [disabled]=\"disabled\"\r\n [right]=\"rightBtnArr\"\r\n (onOpen)=\"deleteFileBySwipe(item.id,i)\"\r\n >\r\n <ListItem\r\n [arrow]=\"'horizontal'\"\r\n [thumb]=\"iconTpl\"\r\n multipleLine\r\n (onClick)=\"viewOtherFile(item)\"\r\n >\r\n <ng-template #iconTpl>\r\n <ng-container [ngSwitch]=\"item.type\">\r\n <img *ngSwitchCase=\"'.xls'\" src=\"./assets/imgs/icon_excel.png\">\r\n <img *ngSwitchCase=\"'.xlsx'\" src=\"./assets/imgs/icon_excel.png\">\r\n\r\n <img *ngSwitchCase=\"'.ppt'\" src=\"./assets/imgs/icon_ppt.png\">\r\n <img *ngSwitchCase=\"'.pptx'\" src=\"./assets/imgs/icon_ppt.png\">\r\n\r\n <img *ngSwitchCase=\"'.doc'\" src=\"./assets/imgs/icon_word.png\">\r\n <img *ngSwitchCase=\"'.docx'\" src=\"./assets/imgs/icon_word.png\">\r\n\r\n <img *ngSwitchCase=\"'.pdf'\" src=\"./assets/imgs/icon_pdf.png\">\r\n\r\n <img *ngSwitchCase=\"'.txt'\" src=\"./assets/imgs/icon_text.png\">\r\n\r\n <img *ngSwitchCase=\"'.gif'\" src=\"./assets/imgs/icon_img.png\">\r\n <img *ngSwitchCase=\"'.png'\" src=\"./assets/imgs/icon_img.png\">\r\n <img *ngSwitchCase=\"'.jpg'\" src=\"./assets/imgs/icon_img.png\">\r\n <img *ngSwitchCase=\"'.jpeg'\" src=\"./assets/imgs/icon_img.png\">\r\n\r\n <img *ngSwitchCase=\"'.mp3'\" src=\"./assets/imgs/icon_mp3.png\">\r\n <img *ngSwitchCase=\"'.mp4'\" src=\"./assets/imgs/icon_mp4.png\">\r\n\r\n <img *ngSwitchDefault src=\"./assets/imgs/icon_othert.png\">\r\n </ng-container>\r\n </ng-template>\r\n {{item?.filename || 'XX'}}\r\n </ListItem>\r\n </SwipeAction>\r\n</List>\r\n",
styles: [".upload-file-box{overflow:hidden;margin-bottom:16px}.upload-file-box .file-item{width:33.3333%;position:relative;display:block;float:left}.upload-file-box .file-item::after{content:'';display:block;margin-top:100%}.upload-file-box .file-item-cont{position:absolute;left:3px;right:3px;top:3px;bottom:3px;background-color:#fff;border:1px solid #ddd;display:block}.upload-file-box .file-item-cont Icon{position:absolute;top:0;right:0;z-index:20;padding:7px}.upload-file-box .file-item-cont.add-file-btn::after,.upload-file-box .file-item-cont.add-file-btn::before{width:1px;height:25px;content:\" \";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#ccc}.upload-file-box .file-item-cont.add-file-btn::after{width:25px;height:1px}.upload-file-box .file-item-cont.add-file-btn:active{background:#f7f7f7}.upload-file-box .file-item-cont.add-file-loading{background:rgba(0,0,0,.3)}.upload-file-box .file-item-cont.add-file-loading Icon{top:50%;left:50%;margin-top:-19px;margin-left:-18px;padding:0;right:unset}"]
}] }
];
/** @nocollapse */
YzUploadFileComponent.ctorParameters = function () { return [
{ type: ToastService },
{ type: undefined, decorators: [{ type: Inject, args: [BASE_CLIENT,] }] },
{ type: UploadService },
{ type: FileCarouselService },
{ type: FileShowService },
{ type: MatDialog }
]; };
YzUploadFileComponent.propDecorators = {
type: [{ type: Input }],
disabled: [{ type: Input }],
fileList: [{ type: Input }],
confirmFile: [{ type: Output }]
};
return YzUploadFileComponent;
}());
export { YzUploadFileComponent };
if (false) {
/** @type {?} */
YzUploadFileComponent.prototype.type;
/** @type {?} */
YzUploadFileComponent.prototype.disabled;
/** @type {?} */
YzUploadFileComponent.prototype.fileList;
/** @type {?} */
YzUploadFileComponent.prototype.confirmFile;
/** @type {?} */
YzUploadFileComponent.prototype.pageLoading;
/** @type {?} */
YzUploadFileComponent.prototype.showType;
/** @type {?} */
YzUploadFileComponent.prototype.rightBtnArr;
/** @type {?} */
YzUploadFileComponent.prototype.deleteItem;
/**
* @type {?}
* @private
*/
YzUploadFileComponent.prototype._toast;
/**
* @type {?}
* @private
*/
YzUploadFileComponent.prototype.client;
/**
* @type {?}
* @private
*/
YzUploadFileComponent.prototype.uploadService;
/**
* @type {?}
* @private
*/
YzUploadFileComponent.prototype.fileCarouselService;
/**
* @type {?}
* @private
*/
YzUploadFileComponent.prototype.fileShowService;
/** @type {?} */
YzUploadFileComponent.prototype.dialog;
}
var fileModel = /** @class */ (function () {
function fileModel() {
}
return fileModel;
}());
export { fileModel };
if (false) {
/** @type {?} */
fileModel.prototype.id;
/** @type {?} */
fileModel.prototype.filename;
/** @type {?} */
fileModel.prototype.length;
/** @type {?} */
fileModel.prototype.chunkSize;
/** @type {?} */
fileModel.prototype.uploadDate;
/** @type {?} */
fileModel.prototype.md5;
/** @type {?} */
fileModel.prototype.type;
/** @type {?} */
fileModel.prototype.duration;
/** @type {?} */
fileModel.prototype.storeType;
/** @type {?} */
fileModel.prototype.storeInfo;
/** @type {?} */
fileModel.prototype.url;
/** @type {?} */
fileModel.prototype.bgUrl;
}
/** @enum {string} */
var ShowType = {
LIST: "list",
SQUARE: "square",
};
export { ShowType };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXotdXBsb2FkLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmcteXVuemFpLW1vYmlsZS8iLCJzb3VyY2VzIjpbInVwbG9hZC1maWxlL3l6LXVwbG9hZC1maWxlL3l6LXVwbG9hZC1maWxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFdBQVcsRUFBYSxNQUFNLDBCQUEwQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRWxFO0lBdUNFLCtCQUFvQixNQUFvQixFQUNDLE1BQWtCLEVBQ3ZDLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxlQUFnQyxFQUNqQyxNQUFpQjtRQUxwQyxpQkFNQztRQU5tQixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ0MsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUN2QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFXOzs7UUFuQzNCLFNBQUksR0FBVyxDQUFDLENBQUM7UUFDakIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixhQUFRLEdBQXFCLEVBQUUsQ0FBQztRQUMvQixnQkFBVyxHQUFtQyxJQUFJLFlBQVksRUFB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O0lBQ1osMEJBQWM7OztBQUdoQixJQUFZLFFBQVE7SUFDbEIsSUFBSSxRQUFTO0lBQ2IsTUFBTSxVQUFXO0VBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1RvYXN0U2VydmljZX0gZnJvbSBcIm5nLXpvcnJvLWFudGQtbW9iaWxlXCI7XHJcbmltcG9ydCB7QkFTRV9DTElFTlQsIEJhc2VDbGllbnR9IGZyb20gXCIuLi8uLi9jbGllbnQvYmFzZS5jbGllbnRcIjtcclxuaW1wb3J0IHtVcGxvYWRTZXJ2aWNlfSBmcm9tIFwiLi91cGxvYWQuc2VydmljZVwiO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge0ZpbGVDYXJvdXNlbFNlcnZpY2V9IGZyb20gXCIuLi95ei1maWxlLWNhcm91c2VsL2ZpbGUtY2Fyb3VzZWwuc2VydmljZVwiO1xyXG5pbXBvcnQge0ZpbGVTaG93U2VydmljZX0gZnJvbSBcIi4uL3l6LWZpbGUtc2hvdy9maWxlLXNob3cuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd5ei11cGxvYWQtZmlsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3l6LXVwbG9hZC1maWxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi95ei11cGxvYWQtZmlsZS5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBZelVwbG9hZEZpbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vIOacjeWKoeaWueW8j+iwg+eUqO+8jOi/lOWbnuaWh+S7tuacrOi6q+eahEZpbGXlr7nosaHvvJtcclxuICAvLyDnu4Tku7bmlrnlvI/osIPnlKjvvIzov5Tlm57lhajpg6jmlofku7ZGaWxl5pWw57uE77ybXHJcblxyXG4gIEBJbnB1dCgpIHR5cGU6IG51bWJlciA9IDE7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBmaWxlTGlzdDogQXJyYXk8ZmlsZU1vZGVsPiA9IFtdO1xyXG4gIEBPdXRwdXQoKSBjb25maXJtRmlsZTogRXZlbnRFbWl0dGVyPEFycmF5PGZpbGVNb2RlbD4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyDpobXpnaLliqDovb3kuK1cclxuICBwYWdlTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDmlofku7bnmoTlsZXnpLrmlrnlvI8o5L2/55So57uE5Lu25pa55byP6LCD55So5omN5bGV56S65paH5Lu2Ke+8jOiLpeS4iuS8oOeahOaWh+S7tuWdh+S4uuWbvueJh+agvOW8j++8jOWImeS7peKAnHNxdWFyZeKAneaWueW8j+aYvuekuu+8jOWQpuWImeS7peKAnGxpc3TigJ3mlrnlvI/mmL7npLrvvJvpu5jorqTkuLrigJxsaXN04oCdXHJcbiAgc2hvd1R5cGU6IFNob3dUeXBlID0gU2hvd1R5cGUuTElTVDtcclxuXHJcbiAgLy8g5Y+z5L6n5oyJ6ZKu57uEXHJcbiAgcmlnaHRCdG5BcnIgPSBbXHJcbiAgICB7XHJcbiAgICAgIHRleHQ6ICfliKDpmaQnLFxyXG4gICAgICBvblByZXNzOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVGaWxlKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNsYXNzTmFtZTogJ2J0bkNsYXNzJyxcclxuICAgICAgc3R5bGU6IHtiYWNrZ3JvdW5kQ29sb3I6ICcjZjQzMzNjJywgY29sb3I6ICcjZmZmJ31cclxuICAgIH1cclxuICBdO1xyXG5cclxuICAvLyDooqvliKDpmaTmlofku7ZcclxuICBkZWxldGVJdGVtID0ge1xyXG4gICAgaWQ6IG51bGwsXHJcbiAgICBpbmRleDogbnVsbFxyXG4gIH07XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF90b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIEBJbmplY3QoQkFTRV9DTElFTlQpIHByaXZhdGUgY2xpZW50OiBCYXNlQ2xpZW50LFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogVXBsb2FkU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGZpbGVDYXJvdXNlbFNlcnZpY2U6IEZpbGVDYXJvdXNlbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBmaWxlU2hvd1NlcnZpY2U6IEZpbGVTaG93U2VydmljZSxcclxuICAgICAgICAgICAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2cpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkKCkge1xyXG4gICAgaWYgKCF0aGlzLnBhZ2VMb2FkaW5nKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkU2VydmljZS51cGxvYWRIYW5kbGUoe1xyXG4gICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICBvbk9rOiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVTdGFydChyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyDkuIrkvKDpmYTku7ZcclxuICB1cGxvYWRGaWxlU3RhcnQoZmlsZSkge1xyXG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnVwbG9hZFNlcnZpY2UudXBsb2FkRmlsZShmaWxlKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIGlmIChkYXRhLmRhdGEpIHtcclxuICAgICAgICBsZXQgYmdVcmwgPSAnJztcclxuICAgICAgICBkYXRhLmRhdGEudHlwZSA9IGRhdGEuZGF0YS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgc3dpdGNoIChkYXRhLmRhdGEudHlwZSkge1xyXG4gICAgICAgICAgY2FzZSAnLnhscyc6XHJcbiAgICAgICAgICBjYXNlICcueGxzeCc6XHJcbiAgICAgICAgICAgIGJnVXJsID0gJy4vYXNzZXRzL2ltZ3MvaWNvbl9leGNlbC5wbmcnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJy5wcHQnOlxyXG4gICAgICAgICAgY2FzZSAnLnBwdHgnOlxyXG4gICAgICAgICAgICBiZ1VybCA9ICcuL2Fzc2V0cy9pbWdzL2ljb25fcHB0LnBuZyc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnLmRvYyc6XHJcbiAgICAgICAgICBjYXNlICcuZG9jeCc6XHJcbiAgICAgICAgICAgIGJnVXJsID0gJy4vYXNzZXRzL2ltZ3MvaWNvbl93b3JkLnBuZyc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnLnBkZic6XHJcbiAgICAgICAgICAgIGJnVXJsID0gJy4vYXNzZXRzL2ltZ3MvaWNvbl9wZGYucG5nJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICcudHh0JzpcclxuICAgICAgICAgICAgYmdVcmwgPSAnLi9hc3NldHMvaW1ncy9pY29uX3RleHQucG5nJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICcuZ2lmJzpcclxuICAgICAgICAgIGNhc2UgJy5wbmcnOlxyXG4gICAgICAgICAgY2FzZSAnLmpwZyc6XHJcbiAgICAgICAgICBjYXNlICcuanBlZyc6XHJcbiAgICAgICAgICAgIGJnVXJsID0gdGhpcy5jbGllbnQuZ2F0ZXdheSArICcvZmlsZWNlbnRlci9maWxlLycgKyBkYXRhLmRhdGEuaWQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnLm1wMyc6XHJcbiAgICAgICAgICBjYXNlICcubXA0JzpcclxuICAgICAgICAgICAgYmdVcmwgPSAnLi9hc3NldHMvaW1ncy9pY29uX2ltZy5wbmcnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGJnVXJsID0gJy4vYXNzZXRzL2ltZ3MvaWNvbl9vdGhlcnQucG5nJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmlsZUxpc3QucHVzaCh7XHJcbiAgICAgICAgICBiZ1VybDogYmdVcmwsXHJcbiAgICAgICAgICB1cmw6IHRoaXMuY2xpZW50LmdhdGV3YXkgKyAnL2ZpbGVjZW50ZXIvZmlsZS8nICsgZGF0YS5kYXRhLmlkLFxyXG4gICAgICAgICAgLi4uZGF0YS5kYXRhXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBbGxJbWcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maXJtRmlsZS5lbWl0KHRoaXMuZmlsZUxpc3QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3RvYXN0LmZhaWwoJ+S4iuS8oOWksei0pe+8jOivt+mHjeaWsOaTjeS9nO+8gScpO1xyXG4gICAgICB9XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgdGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIHRoaXMuX3RvYXN0LmZhaWwoJ+S4iuS8oOWksei0pe+8jOivt+mHjeaWsOaTjeS9nO+8gScpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyDmlofku7bnmoTlsZXnpLrmlrnlvI9cclxuICBpc0FsbEltZygpe1xyXG4gICAgY29uc3QgYWxsSW1nID0gdGhpcy5maWxlTGlzdC5ldmVyeSgoaXRlbSkgPT4ge1xyXG4gICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnLmpwZycgfHwgaXRlbS50eXBlID09PSAnLmpwZWcnIHx8IGl0ZW0udHlwZSA9PT0gJy5naWYnIHx8IGl0ZW0udHlwZSA9PT0gJy5wbmcnO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zaG93VHlwZSA9IGFsbEltZyA/IFNob3dUeXBlLlNRVUFSRSA6IFNob3dUeXBlLkxJU1Q7XHJcbiAgfVxyXG5cclxuICAvLyDliKDpmaTmlofku7ZcclxuICBkZWxldGVGaWxlKCkge1xyXG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnVwbG9hZFNlcnZpY2UuZGVsZXRlRmlsZSh0aGlzLmRlbGV0ZUl0ZW0uaWQpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgaWYgKGRhdGEubWVzc2FnZS5pbmRleE9mKCfmiJDlip8nKSAhPSAtMSkge1xyXG4gICAgICAgIHRoaXMuZmlsZUxpc3Quc3BsaWNlKHRoaXMuZGVsZXRlSXRlbS5pbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5pc0FsbEltZygpO1xyXG4gICAgICAgIHRoaXMuY29uZmlybUZpbGUuZW1pdCh0aGlzLmZpbGVMaXN0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl90b2FzdC5mYWlsKCfliKDpmaTlpLHotKXvvIzor7fph43mlrDmk43kvZzvvIEnKTtcclxuICAgICAgfVxyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX3RvYXN0LmZhaWwoJ+WIoOmZpOWksei0pe+8jOivt+mHjeaWsOaTjeS9nO+8gScpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyDliKDpmaTmlrnlnZfkuK3nmoTmlofku7ZcclxuICBkZWxldGVGaWxlQnlTcXVhcmUoaWQsIGluZGV4KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuZGVsZXRlSXRlbSA9IHtcclxuICAgICAgaWQ6IGlkLFxyXG4gICAgICBpbmRleDogaW5kZXhcclxuICAgIH07XHJcbiAgICB0aGlzLmRlbGV0ZUZpbGUoKTtcclxuICB9XHJcblxyXG4gIC8vIOWIoOmZpGxpc3TkuK3nmoTmlofku7ZcclxuICBkZWxldGVGaWxlQnlTd2lwZShpZCwgaW5kZXgpIHtcclxuICAgIHRoaXMuZGVsZXRlSXRlbSA9IHtcclxuICAgICAgaWQ6IGlkLFxyXG4gICAgICBpbmRleDogaW5kZXhcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOafpeeci+WbvueJh+aWh+S7tuivpuaDhVxyXG4gIHZpZXdJbWdGaWxlKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5maWxlQ2Fyb3VzZWxTZXJ2aWNlLnZpZXdJbWdGaWxlQ2Fyb3VzZWwoe1xyXG4gICAgICBmaWxlTGlzdDogdGhpcy5maWxlTGlzdCxcclxuICAgICAgaW5kZXg6IGluZGV4XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOafpeeci+WkmuenjeagvOW8j+aWh+S7tuivpuaDhVxyXG4gIHZpZXdPdGhlckZpbGUoaXRlbTogYW55KSB7XHJcbiAgICB0aGlzLmZpbGVTaG93U2VydmljZS52aWV3RmlsZVNob3coe1xyXG4gICAgICBpZDogaXRlbS5pZFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgZmlsZU1vZGVsIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGZpbGVuYW1lOiBzdHJpbmc7XHJcbiAgbGVuZ3RoOiBudW1iZXI7XHJcbiAgY2h1bmtTaXplOiBudW1iZXI7XHJcbiAgdXBsb2FkRGF0ZTogRGF0ZTtcclxuICBtZDU6IHN0cmluZztcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgZHVyYXRpb246IGFueTtcclxuICBzdG9yZVR5cGU6IHN0cmluZztcclxuICBzdG9yZUluZm86IHN0cmluZztcclxuICB1cmw6IHN0cmluZztcclxuICBiZ1VybDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTaG93VHlwZSB7XHJcbiAgTElTVCA9ICdsaXN0JyxcclxuICBTUVVBUkUgPSAnc3F1YXJlJ1xyXG59XHJcbiJdfQ==