/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ViewChild, Input, Output, EventEmitter } from '@angular/core'; import { AppConfigService } from '../app-config/app-config.service'; import { DxDataGridComponent } from 'devextreme-angular'; import { Request } from '../_services/request.service'; import { Common } from '../_services/common.service'; import { ModalAttachmentComponent } from '../modal-attachment/modal-attachment.component'; import * as _ from 'lodash'; import { CreateAlertComponent } from '../alert/alert.component'; import { B2bService } from '../_services/b2b.service'; import { ModalAttachmentViewComponent } from '../modal-attachment-view/modal-attachment-view.component'; var AttachmentListComponent = /** @class */ (function () { function AttachmentListComponent(appConfigService, request, common, b2b) { this.appConfigService = appConfigService; this.request = request; this.common = common; this.b2b = b2b; this.mode = 'CREATE'; this.type = 2; this.showImage = false; this.onLoaded = new EventEmitter(); this.onClickScan = new EventEmitter(); this.onClickDelete = new EventEmitter(); this.columns = ['ลำดับที่', 'ผู้แก้ไข', 'วันที่', 'สถานะการติดตาม', 'หมายเหตุ']; this.attachmentList = []; this.dxgridPageSize = 10; this.allowedPageSizes1 = 10; this.allowedPageSizes2 = 25; this.allowedPageSizes3 = 50; this.allowedPageSizes4 = 100; this.customers = []; this.lastStep = ''; this.deleteIdList = []; this.dsAttachment = []; this.selectedAttachment = []; this.tmpId = -1; this.classifieds = 0; this.username_caption = 'ผู้บันทึก/ผู้นำเข้า'; this.config = appConfigService.getConfig(); } /** * @return {?} */ AttachmentListComponent.prototype.ngOnInit = /** * @return {?} */ function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib_1.__generator(this, function (_a) { setTimeout(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { var _a; return tslib_1.__generator(this, function (_b) { switch (_b.label) { case 0: _a = this; return [4 /*yield*/, this.b2b.getAttachmentToken()]; case 1: _a.downloadToken = _b.sent(); return [2 /*return*/]; } }); }); }, 500); if (this.mode !== "CREATE") { this.getAttachmentList(); } return [2 /*return*/]; }); }); }; /** * @return {?} */ AttachmentListComponent.prototype.getAttachmentList = /** * @return {?} */ function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var e_1, _a, filter, data, _b, _c, i; return tslib_1.__generator(this, function (_d) { switch (_d.label) { case 0: console.log('getAttachmentList', this.attachmentList, this.option.username_caption); filter = { filter: { ref_table: this.option.data.ref_table, ref_id: this.option.data.ref_id, system_id: this.option.data.system_id }, order_by: ["order_no"] }; if (this.option.data.result_table_id) filter.filter.result_table_id = this.option.data.result_table_id; return [4 /*yield*/, this.request.post('/search/rc_attachment_prop', filter)]; case 1: data = _d.sent(); this.attachmentList = data.resultData; this.classifieds = 0; try { for (_b = tslib_1.__values(this.attachmentList), _c = _b.next(); !_c.done; _c = _b.next()) { i = _c.value; if (i.is_classifieds) { this.classifieds++; } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_1) throw e_1.error; } } console.log('getAttachmentList', this.attachmentList); this.onLoaded.emit(); return [2 /*return*/]; } }); }); }; /** * @param {?} data * @return {?} */ AttachmentListComponent.prototype.addAttachmentList = /** * @param {?} data * @return {?} */ function (data) { data.id = this.tmpId; this.tmpId--; if (this.b2b.getVerifyToken().phoneBookData && this.b2b.getVerifyToken().phoneBookData.length > 0) { data.username = this.b2b.getVerifyToken().username; data.recorder_name = this.b2b.getVerifyToken().phoneBookData[0].name; } data.action = "add"; if (data.is_classifieds) { this.classifieds++; } this.attachmentList.push(data); console.log('getAttachmentList', this.attachmentList); }; /** * @param {?} data * @return {?} */ AttachmentListComponent.prototype.editAttachmentList = /** * @param {?} data * @return {?} */ function (data) { for (var i = 0; i < this.attachmentList.length; i++) { if (this.attachmentList[i].id === data.id) { if (data.is_classifieds && !this.attachmentList[i].is_classifieds) { this.classifieds++; } else if (!data.is_classifieds && this.attachmentList[i].is_classifieds) { this.classifieds--; } this.attachmentList[i] = data; } } console.log('getAttachmentList', this.attachmentList); }; /** * @param {?} data * @return {?} */ AttachmentListComponent.prototype.getRowIndex = /** * @param {?} data * @return {?} */ function (data) { if (!data.data) { return ''; } data.data.order_no = data.component.pageIndex() * data.component.pageSize() + data.rowIndex + 1; return data.data.order_no; }; /** * @return {?} */ AttachmentListComponent.prototype.clickAdd = /** * @return {?} */ function () { this.option.mode = 'CREATE'; if (this.attachmentModal) { this.attachmentModal.open(this.option); } else { this.modalAttachment.open(this.option); } }; /** * @param {?} data * @return {?} */ AttachmentListComponent.prototype.clickEdit = /** * @param {?} data * @return {?} */ function (data) { console.log('clickEdit', data); /** @type {?} */ var fileName = data.filename; /** @type {?} */ var fileType = fileName.substring(fileName.length - 3, fileName.length); console.log('fileType', fileType); if (this.type == 1 && (fileType == 'pdf' || fileType == 'PDF')) { /** @type {?} */ var editData = _.cloneDeep(this.option); editData.data = data; editData.mode = 'EDIT'; editData.downloadToken = this.downloadToken; this.onClickScan.emit(editData); } else { /** @type {?} */ var editData = _.cloneDeep(this.option); editData.data = data; editData.mode = 'EDIT'; editData.downloadToken = this.downloadToken; if (this.attachmentModal) { this.attachmentModal.open(editData); } else { this.modalAttachment.open(editData); } } }; /** * @param {?} data * @return {?} */ AttachmentListComponent.prototype.clickView = /** * @param {?} data * @return {?} */ function (data) { /** @type {?} */ var fileName = data.filename; /** @type {?} */ var fileType = fileName.substring(fileName.length - 3, fileName.length); console.log('fileType', fileType); if (this.type == 1 && (fileType == 'pdf' || fileType == 'PDF')) { /** @type {?} */ var viewData = _.cloneDeep(this.option); viewData.data = data; viewData.mode = 'VIEW'; this.onClickScan.emit(viewData); } else { /** @type {?} */ var viewData = _.cloneDeep(this.option); viewData.data = data; viewData.mode = 'VIEW'; viewData.downloadToken = this.downloadToken; if (this.attachmentViewModal) { this.attachmentViewModal.open(viewData); } else { this.modalAttachmentView.open(viewData); } } }; /** * @param {?} data * @return {?} */ AttachmentListComponent.prototype.clickMoveUp = /** * @param {?} data * @return {?} */ function (data) { /** @type {?} */ var tmp = this.attachmentList[data.rowIndex]; this.attachmentList[data.rowIndex] = this.attachmentList[data.rowIndex - 1]; this.attachmentList[data.rowIndex - 1] = tmp; }; /** * @param {?} data * @return {?} */ AttachmentListComponent.prototype.clickMoveDown = /** * @param {?} data * @return {?} */ function (data) { /** @type {?} */ var tmp = this.attachmentList[data.rowIndex]; this.attachmentList[data.rowIndex] = this.attachmentList[data.rowIndex + 1]; this.attachmentList[data.rowIndex + 1] = tmp; }; /** * @param {?} data * @return {?} */ AttachmentListComponent.prototype.clickDownload = /** * @param {?} data * @return {?} */ function (data) { return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { window.open(data.url + "?downloadToken=" + this.downloadToken); return [2 /*return*/]; }); }); }; /** * @return {?} */ AttachmentListComponent.prototype.getLastStep = /** * @return {?} */ function () { return this.lastStep; }; /** START DELETE */ /** * START DELETE * @param {?} idList * @return {?} */ AttachmentListComponent.prototype.fnClickDelete = /** * START DELETE * @param {?} idList * @return {?} */ function (idList) { this.onClickDelete.emit(); this.deleteIdList = idList; if (this.deleteIdList.length > 0) { this.confirmDelete(); } }; /** * @return {?} */ AttachmentListComponent.prototype.confirmDelete = /** * @return {?} */ function () { this.goAlert('', '', 'myModalDeleteAttachment'); }; /** * @param {?} userTitle * @param {?} userMessage * @param {?} modalId * @return {?} */ AttachmentListComponent.prototype.goAlert = /** * @param {?} userTitle * @param {?} userMessage * @param {?} modalId * @return {?} */ function (userTitle, userMessage, modalId) { /** @type {?} */ var dataAlert = { 'modalId': modalId, 'userTitle': userTitle, 'userMessage': userMessage }; if (this.alertModal) { this.alertModal.openModal(dataAlert); } else { this.myModal.openModal(dataAlert); } }; /** * @param {?} e * @return {?} */ AttachmentListComponent.prototype.onCellPrepared = /** * @param {?} e * @return {?} */ function (e) { if (e.rowType === 'data') { e.cellElement.accessKey = e.column.caption; } }; /** * @return {?} */ AttachmentListComponent.prototype.fnDeleteMultiple = /** * @return {?} */ function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var e_2, _a, _b, _c, id, i; return tslib_1.__generator(this, function (_d) { console.log("this.deleteIdList", this.deleteIdList); console.log("this.attachmentList before", this.attachmentList); try { for (_b = tslib_1.__values(this.deleteIdList), _c = _b.next(); !_c.done; _c = _b.next()) { id = _c.value; for (i = this.attachmentList.length - 1; i >= 0; i--) { if (this.attachmentList[i].id === id) { if (this.attachmentList[i].is_classifieds) { this.classifieds--; } this.attachmentList.splice(i, 1); } } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_2) throw e_2.error; } } console.log("this.attachmentList after", this.attachmentList); return [2 /*return*/]; }); }); }; /** * @return {?} */ AttachmentListComponent.prototype.onClickBack = /** * @return {?} */ function () { console.log("clickback"); }; /** * @param {?} data * @return {?} */ AttachmentListComponent.prototype.getImageLink = /** * @param {?} data * @return {?} */ function (data) { return data.url + "?downloadToken=" + this.downloadToken; }; /** * @return {?} */ AttachmentListComponent.prototype.scan = /** * @return {?} */ function () { this.option.mode = 'CREATE'; this.onClickScan.emit(this.option); }; AttachmentListComponent.decorators = [ { type: Component, args: [{ selector: 'soc-attachment-list', template: "
\n
\n
\n \n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n {{getRowIndex(data)}}\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
\n\n\n\n\n\n" }] } ]; /** @nocollapse */ AttachmentListComponent.ctorParameters = function () { return [ { type: AppConfigService }, { type: Request }, { type: Common }, { type: B2bService } ]; }; AttachmentListComponent.propDecorators = { mode: [{ type: Input }], type: [{ type: Input }], option: [{ type: Input }], showImage: [{ type: Input }], alertModal: [{ type: Input }], attachmentModal: [{ type: Input }], attachmentViewModal: [{ type: Input }], onLoaded: [{ type: Output }], onClickScan: [{ type: Output }], onClickDelete: [{ type: Output }], dxDataGridAttachmentList: [{ type: ViewChild, args: ['dxDataGridAttachmentList',] }], modalAttachment: [{ type: ViewChild, args: ['modalAttachment',] }], modalAttachmentView: [{ type: ViewChild, args: ['modalAttachmentView',] }], myModal: [{ type: ViewChild, args: ['myModal',] }] }; return AttachmentListComponent; }()); export { AttachmentListComponent }; if (false) { /** @type {?} */ AttachmentListComponent.prototype.mode; /** @type {?} */ AttachmentListComponent.prototype.type; /** @type {?} */ AttachmentListComponent.prototype.option; /** @type {?} */ AttachmentListComponent.prototype.showImage; /** @type {?} */ AttachmentListComponent.prototype.alertModal; /** @type {?} */ AttachmentListComponent.prototype.attachmentModal; /** @type {?} */ AttachmentListComponent.prototype.attachmentViewModal; /** @type {?} */ AttachmentListComponent.prototype.onLoaded; /** @type {?} */ AttachmentListComponent.prototype.onClickScan; /** @type {?} */ AttachmentListComponent.prototype.onClickDelete; /** @type {?} */ AttachmentListComponent.prototype.dxDataGridAttachmentList; /** @type {?} */ AttachmentListComponent.prototype.modalAttachment; /** @type {?} */ AttachmentListComponent.prototype.modalAttachmentView; /** @type {?} */ AttachmentListComponent.prototype.myModal; /** @type {?} */ AttachmentListComponent.prototype.columns; /** @type {?} */ AttachmentListComponent.prototype.attachmentList; /** @type {?} */ AttachmentListComponent.prototype.th; /** @type {?} */ AttachmentListComponent.prototype.dxgridPageSize; /** @type {?} */ AttachmentListComponent.prototype.allowedPageSizes1; /** @type {?} */ AttachmentListComponent.prototype.allowedPageSizes2; /** @type {?} */ AttachmentListComponent.prototype.allowedPageSizes3; /** @type {?} */ AttachmentListComponent.prototype.allowedPageSizes4; /** @type {?} */ AttachmentListComponent.prototype.customers; /** @type {?} */ AttachmentListComponent.prototype.url; /** @type {?} */ AttachmentListComponent.prototype.lastStep; /** @type {?} */ AttachmentListComponent.prototype.config; /** @type {?} */ AttachmentListComponent.prototype.deleteIdList; /** @type {?} */ AttachmentListComponent.prototype.dsAttachment; /** @type {?} */ AttachmentListComponent.prototype.selectedAttachment; /** @type {?} */ AttachmentListComponent.prototype.tmpId; /** @type {?} */ AttachmentListComponent.prototype.classifieds; /** @type {?} */ AttachmentListComponent.prototype.downloadToken; /** @type {?} */ AttachmentListComponent.prototype.username_caption; /** @type {?} */ AttachmentListComponent.prototype.appConfigService; /** @type {?} */ AttachmentListComponent.prototype.request; /** @type {?} */ AttachmentListComponent.prototype.common; /** @type {?} */ AttachmentListComponent.prototype.b2b; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvYy1hcHAtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9hdHRhY2htZW50LWxpc3QvYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXlCLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXJELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzFGLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7SUErQ3BHLGlDQUNZLGtCQUNBLFNBQ0EsUUFDQTtRQUhBLHFCQUFnQixHQUFoQixnQkFBZ0I7UUFDaEIsWUFBTyxHQUFQLE9BQU87UUFDUCxXQUFNLEdBQU4sTUFBTTtRQUNOLFFBQUcsR0FBSCxHQUFHO29CQTNDNkIsUUFBUTtvQkFDNUIsQ0FBQzt5QkFFSyxLQUFLO3dCQUlkLElBQUksWUFBWSxFQUFFOzJCQUNmLElBQUksWUFBWSxFQUFFOzZCQUNoQixJQUFJLFlBQVksRUFBRTt1QkFXbEMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFB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SUFFRCw4Q0FBWTs7OztJQUFaLFVBQWEsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBRyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0tBQzVEOzs7O0lBRUQsc0NBQUk7OztJQUFKO1FBQ0ksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN0Qzs7Z0JBelBKLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQiw0OVRBQStDO2lCQUNsRDs7OztnQkFkUSxnQkFBZ0I7Z0JBRWhCLE9BQU87Z0JBQ1AsTUFBTTtnQkFLTixVQUFVOzs7dUJBU2QsS0FBSzt1QkFDTCxLQUFLO3lCQUNMLEtBQUs7NEJBQ0wsS0FBSzs2QkFDTCxLQUFLO2tDQUNMLEtBQUs7c0NBQ0wsS0FBSzsyQkFDTCxNQUFNOzhCQUNOLE1BQU07Z0NBQ04sTUFBTTsyQ0FDTixTQUFTLFNBQUMsMEJBQTBCO2tDQUlwQyxTQUFTLFNBQUMsaUJBQWlCO3NDQUUzQixTQUFTLFNBQUMscUJBQXFCOzBCQUUvQixTQUFTLFNBQUMsU0FBUzs7a0NBckN4Qjs7U0FpQmEsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi9tb2RhbC1zdGVwL21vZGFsLXN0ZXAuY29tcG9uZW50JztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBEeERhdGFHcmlkQ29tcG9uZW50IH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyJztcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICcuLi9fc2VydmljZXMvcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4uL19zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbFN0ZXBWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwtc3RlcC12aWV3L21vZGFsLXN0ZXAtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9kYWxBdHRhY2htZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwtYXR0YWNobWVudC9tb2RhbC1hdHRhY2htZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDcmVhdGVBbGVydENvbXBvbmVudCB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCMmJTZXJ2aWNlIH0gZnJvbSAnLi4vX3NlcnZpY2VzL2IyYi5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsQXR0YWNobWVudFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9tb2RhbC1hdHRhY2htZW50LXZpZXcvbW9kYWwtYXR0YWNobWVudC12aWV3LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc29jLWF0dGFjaG1lbnQtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2F0dGFjaG1lbnQtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQXR0YWNobWVudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQElucHV0KCkgbW9kZTogJ0NSRUFURScgfCAnRURJVCcgfCAnVklFVycgPSAnQ1JFQVRFJztcbiAgICBASW5wdXQoKSB0eXBlOiBudW1iZXIgPSAyO1xuICAgIEBJbnB1dCgpIG9wdGlvbjogYW55O1xuICAgIEBJbnB1dCgpIHNob3dJbWFnZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGFsZXJ0TW9kYWw6IENyZWF0ZUFsZXJ0Q29tcG9uZW50O1xuICAgIEBJbnB1dCgpIGF0dGFjaG1lbnRNb2RhbDogTW9kYWxBdHRhY2htZW50Q29tcG9uZW50O1xuICAgIEBJbnB1dCgpIGF0dGFjaG1lbnRWaWV3TW9kYWw6IE1vZGFsQXR0YWNobWVudFZpZXdDb21wb25lbnQ7XG4gICAgQE91dHB1dCgpIG9uTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBvbkNsaWNrU2NhbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25DbGlja0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAVmlld0NoaWxkKCdkeERhdGFHcmlkQXR0YWNobWVudExpc3QnKVxuICAgIGR4RGF0YUdyaWRBdHRhY2htZW50TGlzdDogRHhEYXRhR3JpZENvbXBvbmVudDtcbiAgICAvLyBAVmlld0NoaWxkKCdtb2RhbFN0ZXAnKVxuICAgIC8vIG1vZGFsU3RlcDogTW9kYWxTdGVwQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ21vZGFsQXR0YWNobWVudCcpXG4gICAgbW9kYWxBdHRhY2htZW50OiBNb2RhbEF0dGFjaG1lbnRDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnbW9kYWxBdHRhY2htZW50VmlldycpXG4gICAgbW9kYWxBdHRhY2htZW50VmlldzogTW9kYWxBdHRhY2htZW50Vmlld0NvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdteU1vZGFsJykgbXlNb2RhbDtcblxuICAgIGNvbHVtbnMgPSBbJ+C4peC4s+C4lOC4seC4muC4l+C4teC5iCcsICfguJzguLnguYnguYHguIHguYnguYTguIInLCAn4Lin4Lix4LiZ4LiX4Li14LmIJywgJ+C4quC4luC4suC4meC4sOC4geC4suC4o+C4leC4tOC4lOC4leC4suC4oScsICfguKvguKHguLLguKLguYDguKvguJXguLgnXTtcbiAgICBhdHRhY2htZW50TGlzdDogYW55ID0gW107XG4gICAgdGg7XG4gICAgZHhncmlkUGFnZVNpemUgPSAxMDtcbiAgICBhbGxvd2VkUGFnZVNpemVzMSA9IDEwO1xuICAgIGFsbG93ZWRQYWdlU2l6ZXMyID0gMjU7XG4gICAgYWxsb3dlZFBhZ2VTaXplczMgPSA1MDtcbiAgICBhbGxvd2VkUGFnZVNpemVzNCA9IDEwMDtcbiAgICBjdXN0b21lcnMgPSBbXTtcbiAgICB1cmw7XG4gICAgbGFzdFN0ZXAgPSAnJztcbiAgICBjb25maWc6IGFueTtcbiAgICBkZWxldGVJZExpc3QgPSBbXTtcbiAgICBkc0F0dGFjaG1lbnQgPSBbXTtcbiAgICBzZWxlY3RlZEF0dGFjaG1lbnQgPSBbXTtcbiAgICB0bXBJZCA9IC0xO1xuICAgIGNsYXNzaWZpZWRzID0gMDtcbiAgICBkb3dubG9hZFRva2VuO1xuICAgIHVzZXJuYW1lX2NhcHRpb24gPSAn4Lic4Li54LmJ4Lia4Lix4LiZ4LiX4Li24LiBL+C4nOC4ueC5ieC4meC4s+C5gOC4guC5ieC4sidcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgICAgIHByaXZhdGUgY29tbW9uOiBDb21tb24sXG4gICAgICAgIHByaXZhdGUgYjJiOiBCMmJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkVG9rZW4gPSBhd2FpdCB0aGlzLmIyYi5nZXRBdHRhY2htZW50VG9rZW4oKTtcbiAgICAgICAgfSwgNTAwKVxuICAgICAgICBpZiAodGhpcy5tb2RlICE9PSBcIkNSRUFURVwiKSB7XG4gICAgICAgICAgICB0aGlzLmdldEF0dGFjaG1lbnRMaXN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0QXR0YWNobWVudExpc3QoKSB7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ2dldEF0dGFjaG1lbnRMaXN0JywgdGhpcy5hdHRhY2htZW50TGlzdCwgdGhpcy5vcHRpb24udXNlcm5hbWVfY2FwdGlvbik7XG4gICAgICAgIGxldCBmaWx0ZXI6IGFueSA9IHtcbiAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgIHJlZl90YWJsZTogdGhpcy5vcHRpb24uZGF0YS5yZWZfdGFibGUsXG4gICAgICAgICAgICAgICAgcmVmX2lkOiB0aGlzLm9wdGlvbi5kYXRhLnJlZl9pZCxcbiAgICAgICAgICAgICAgICBzeXN0ZW1faWQ6IHRoaXMub3B0aW9uLmRhdGEuc3lzdGVtX2lkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3JkZXJfYnk6IFtcIm9yZGVyX25vXCJdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9uLmRhdGEucmVzdWx0X3RhYmxlX2lkKSBmaWx0ZXIuZmlsdGVyLnJlc3VsdF90YWJsZV9pZCA9IHRoaXMub3B0aW9uLmRhdGEucmVzdWx0X3RhYmxlX2lkO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3QoJy9zZWFyY2gvcmNfYXR0YWNobWVudF9wcm9wJywgZmlsdGVyKTtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50TGlzdCA9IGRhdGEucmVzdWx0RGF0YTtcbiAgICAgICAgdGhpcy5jbGFzc2lmaWVkcyA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgb2YgdGhpcy5hdHRhY2htZW50TGlzdCkge1xuICAgICAgICAgICAgaWYgKGkuaXNfY2xhc3NpZmllZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsYXNzaWZpZWRzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ2dldEF0dGFjaG1lbnRMaXN0JywgdGhpcy5hdHRhY2htZW50TGlzdCk7XG4gICAgICAgIHRoaXMub25Mb2FkZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIGFkZEF0dGFjaG1lbnRMaXN0KGRhdGEpIHtcbiAgICAgICAgZGF0YS5pZCA9IHRoaXMudG1wSWQ7XG4gICAgICAgIHRoaXMudG1wSWQtLTtcbiAgICAgICAgaWYgKHRoaXMuYjJiLmdldFZlcmlmeVRva2VuKCkucGhvbmVCb29rRGF0YSAmJiB0aGlzLmIyYi5nZXRWZXJpZnlUb2tlbigpLnBob25lQm9va0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGF0YS51c2VybmFtZSA9IHRoaXMuYjJiLmdldFZlcmlmeVRva2VuKCkudXNlcm5hbWU7XG4gICAgICAgICAgICBkYXRhLnJlY29yZGVyX25hbWUgPSB0aGlzLmIyYi5nZXRWZXJpZnlUb2tlbigpLnBob25lQm9va0RhdGFbMF0ubmFtZTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmFjdGlvbiA9IFwiYWRkXCI7XG4gICAgICAgIGlmIChkYXRhLmlzX2NsYXNzaWZpZWRzKSB7XG4gICAgICAgICAgICB0aGlzLmNsYXNzaWZpZWRzKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hdHRhY2htZW50TGlzdC5wdXNoKGRhdGEpO1xuICAgICAgICBjb25zb2xlLmxvZygnZ2V0QXR0YWNobWVudExpc3QnLCB0aGlzLmF0dGFjaG1lbnRMaXN0KTtcbiAgICB9XG5cbiAgICBlZGl0QXR0YWNobWVudExpc3QoZGF0YSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXR0YWNobWVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRMaXN0W2ldLmlkID09PSBkYXRhLmlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaXNfY2xhc3NpZmllZHMgJiYgIXRoaXMuYXR0YWNobWVudExpc3RbaV0uaXNfY2xhc3NpZmllZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGFzc2lmaWVkcysrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRhdGEuaXNfY2xhc3NpZmllZHMgJiYgdGhpcy5hdHRhY2htZW50TGlzdFtpXS5pc19jbGFzc2lmaWVkcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsYXNzaWZpZWRzLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudExpc3RbaV0gPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdnZXRBdHRhY2htZW50TGlzdCcsIHRoaXMuYXR0YWNobWVudExpc3QpO1xuICAgIH1cblxuICAgIGdldFJvd0luZGV4KGRhdGEpIHtcbiAgICAgICAgaWYgKCFkYXRhLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmRhdGEub3JkZXJfbm8gPSBkYXRhLmNvbXBvbmVudC5wYWdlSW5kZXgoKSAqIGRhdGEuY29tcG9uZW50LnBhZ2VTaXplKCkgKyBkYXRhLnJvd0luZGV4ICsgMTtcbiAgICAgICAgcmV0dXJuIGRhdGEuZGF0YS5vcmRlcl9ubztcbiAgICB9XG4gICAgY2xpY2tBZGQoKSB7XG4gICAgICAgIHRoaXMub3B0aW9uLm1vZGUgPSAnQ1JFQVRFJztcbiAgICAgICAgaWYgKHRoaXMuYXR0YWNobWVudE1vZGFsKSB7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRNb2RhbC5vcGVuKHRoaXMub3B0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxBdHRhY2htZW50Lm9wZW4odGhpcy5vcHRpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsaWNrRWRpdChkYXRhKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjbGlja0VkaXQnLCBkYXRhKVxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBkYXRhLmZpbGVuYW1lXG4gICAgICAgIGxldCBmaWxlVHlwZSA9IGZpbGVOYW1lLnN1YnN0cmluZyhmaWxlTmFtZS5sZW5ndGggLSAzLCBmaWxlTmFtZS5sZW5ndGgpXG4gICAgICAgIGNvbnNvbGUubG9nKCdmaWxlVHlwZScsIGZpbGVUeXBlKVxuICAgICAgICBpZiAodGhpcy50eXBlID09IDEgJiYgKGZpbGVUeXBlID09ICdwZGYnIHx8IGZpbGVUeXBlID09ICdQREYnKSkge1xuICAgICAgICAgICAgY29uc3QgZWRpdERhdGEgPSBfLmNsb25lRGVlcCh0aGlzLm9wdGlvbik7XG4gICAgICAgICAgICBlZGl0RGF0YS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIGVkaXREYXRhLm1vZGUgPSAnRURJVCc7XG4gICAgICAgICAgICBlZGl0RGF0YS5kb3dubG9hZFRva2VuID0gdGhpcy5kb3dubG9hZFRva2VuO1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrU2Nhbi5lbWl0KGVkaXREYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgY29uc3QgZWRpdERhdGEgPSBfLmNsb25lRGVlcCh0aGlzLm9wdGlvbik7XG4gICAgICAgICAgICBlZGl0RGF0YS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIGVkaXREYXRhLm1vZGUgPSAnRURJVCc7XG4gICAgICAgICAgICBlZGl0RGF0YS5kb3dubG9hZFRva2VuID0gdGhpcy5kb3dubG9hZFRva2VuO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNobWVudE1vZGFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50TW9kYWwub3BlbihlZGl0RGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxBdHRhY2htZW50Lm9wZW4oZWRpdERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG4gICAgY2xpY2tWaWV3KGRhdGEpIHtcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gZGF0YS5maWxlbmFtZVxuICAgICAgICBsZXQgZmlsZVR5cGUgPSBmaWxlTmFtZS5zdWJzdHJpbmcoZmlsZU5hbWUubGVuZ3RoIC0gMywgZmlsZU5hbWUubGVuZ3RoKVxuICAgICAgICBjb25zb2xlLmxvZygnZmlsZVR5cGUnLCBmaWxlVHlwZSlcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAxICYmIChmaWxlVHlwZSA9PSAncGRmJyB8fCBmaWxlVHlwZSA9PSAnUERGJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdEYXRhID0gXy5jbG9uZURlZXAodGhpcy5vcHRpb24pO1xuICAgICAgICAgICAgdmlld0RhdGEuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB2aWV3RGF0YS5tb2RlID0gJ1ZJRVcnO1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrU2Nhbi5lbWl0KHZpZXdEYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdEYXRhID0gXy5jbG9uZURlZXAodGhpcy5vcHRpb24pO1xuICAgICAgICAgICAgdmlld0RhdGEuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB2aWV3RGF0YS5tb2RlID0gJ1ZJRVcnO1xuICAgICAgICAgICAgdmlld0RhdGEuZG93bmxvYWRUb2tlbiA9IHRoaXMuZG93bmxvYWRUb2tlbjtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRWaWV3TW9kYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRWaWV3TW9kYWwub3Blbih2aWV3RGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxBdHRhY2htZW50Vmlldy5vcGVuKHZpZXdEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGlja01vdmVVcChkYXRhKSB7XG4gICAgICAgIGxldCB0bXAgPSB0aGlzLmF0dGFjaG1lbnRMaXN0W2RhdGEucm93SW5kZXhdO1xuICAgICAgICB0aGlzLmF0dGFjaG1lbnRMaXN0W2RhdGEucm93SW5kZXhdID0gdGhpcy5hdHRhY2htZW50TGlzdFtkYXRhLnJvd0luZGV4IC0gMV07XG4gICAgICAgIHRoaXMuYXR0YWNobWVudExpc3RbZGF0YS5yb3dJbmRleCAtIDFdID0gdG1wO1xuICAgIH1cbiAgICBjbGlja01vdmVEb3duKGRhdGEpIHtcbiAgICAgICAgbGV0IHRtcCA9IHRoaXMuYXR0YWNobWVudExpc3RbZGF0YS5yb3dJbmRleF07XG4gICAgICAgIHRoaXMuYXR0YWNobWVudExpc3RbZGF0YS5yb3dJbmRleF0gPSB0aGlzLmF0dGFjaG1lbnRMaXN0W2RhdGEucm93SW5kZXggKyAxXTtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50TGlzdFtkYXRhLnJvd0luZGV4ICsgMV0gPSB0bXA7XG4gICAgfVxuICAgIGFzeW5jIGNsaWNrRG93bmxvYWQoZGF0YSkge1xuICAgICAgICB3aW5kb3cub3BlbihkYXRhLnVybCArIFwiP2Rvd25sb2FkVG9rZW49XCIgKyB0aGlzLmRvd25sb2FkVG9rZW4pO1xuICAgIH1cbiAgICBnZXRMYXN0U3RlcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFN0ZXA7XG4gICAgfVxuICAgIC8qKiBTVEFSVCBERUxFVEUgKi9cbiAgICBmbkNsaWNrRGVsZXRlKGlkTGlzdDogYW55W10pIHtcbiAgICAgICAgdGhpcy5vbkNsaWNrRGVsZXRlLmVtaXQoKTtcbiAgICAgICAgdGhpcy5kZWxldGVJZExpc3QgPSBpZExpc3Q7XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZUlkTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1EZWxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25maXJtRGVsZXRlKCkge1xuICAgICAgICB0aGlzLmdvQWxlcnQoJycsICcnLCAnbXlNb2RhbERlbGV0ZUF0dGFjaG1lbnQnKTtcbiAgICB9XG5cbiAgICBnb0FsZXJ0KHVzZXJUaXRsZSwgdXNlck1lc3NhZ2UsIG1vZGFsSWQpIHtcbiAgICAgICAgY29uc3QgZGF0YUFsZXJ0ID0ge1xuICAgICAgICAgICAgJ21vZGFsSWQnOiBtb2RhbElkLFxuICAgICAgICAgICAgJ3VzZXJUaXRsZSc6IHVzZXJUaXRsZSxcbiAgICAgICAgICAgICd1c2VyTWVzc2FnZSc6IHVzZXJNZXNzYWdlXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmFsZXJ0TW9kYWwpIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRNb2RhbC5vcGVuTW9kYWwoZGF0YUFsZXJ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubXlNb2RhbC5vcGVuTW9kYWwoZGF0YUFsZXJ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2VsbFByZXBhcmVkKGUpIHtcbiAgICAgICAgaWYgKGUucm93VHlwZSA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICBlLmNlbGxFbGVtZW50LmFjY2Vzc0tleSA9IGUuY29sdW1uLmNhcHRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBmbkRlbGV0ZU11bHRpcGxlKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcInRoaXMuZGVsZXRlSWRMaXN0XCIsIHRoaXMuZGVsZXRlSWRMaXN0KTtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0aGlzLmF0dGFjaG1lbnRMaXN0IGJlZm9yZVwiLCB0aGlzLmF0dGFjaG1lbnRMaXN0KTtcbiAgICAgICAgZm9yIChsZXQgaWQgb2YgdGhpcy5kZWxldGVJZExpc3QpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmF0dGFjaG1lbnRMaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNobWVudExpc3RbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRMaXN0W2ldLmlzX2NsYXNzaWZpZWRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsYXNzaWZpZWRzLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50TGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5hdHRhY2htZW50TGlzdCBhZnRlclwiLCB0aGlzLmF0dGFjaG1lbnRMaXN0KTtcbiAgICB9XG4gICAgb25DbGlja0JhY2soKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY2xpY2tiYWNrXCIpO1xuICAgIH1cblxuICAgIGdldEltYWdlTGluayhkYXRhKSB7XG4gICAgICAgIHJldHVybiBkYXRhLnVybCArIFwiP2Rvd25sb2FkVG9rZW49XCIgKyB0aGlzLmRvd25sb2FkVG9rZW47XG4gICAgfVxuXG4gICAgc2NhbigpIHtcbiAgICAgICAgdGhpcy5vcHRpb24ubW9kZSA9ICdDUkVBVEUnO1xuICAgICAgICB0aGlzLm9uQ2xpY2tTY2FuLmVtaXQodGhpcy5vcHRpb24pO1xuICAgIH1cblxufVxuIl19