/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { ModalDirective } from 'ngx-bootstrap';
import { AppConfigService } from '../app-config/app-config.service';
import { Request } from '../_services/request.service';
import { Common } from '../_services/common.service';
import { FormBuilder, Validators } from '@angular/forms';
import { CustomValidators } from 'ng2-validation';
import { UploadAttachmentComponent } from '../upload-attachment/upload-attachment.component';
import * as _ from 'lodash';
var Options = /** @class */ (function () {
function Options() {
}
return Options;
}());
if (false) {
/**
* title ที่ต้องการแสดง
* @type {?}
*/
Options.prototype.title;
/**
* data
* @type {?}
*/
Options.prototype.data;
/** @type {?} */
Options.prototype.mode;
/** @type {?} */
Options.prototype.downloadToken;
/**
* name ที่ต้องการแสดง
* @type {?}
*/
Options.prototype.config;
}
var ModalAttachmentViewComponent = /** @class */ (function (_super) {
tslib_1.__extends(ModalAttachmentViewComponent, _super);
function ModalAttachmentViewComponent(appConfigService, request, formBuilder, common) {
var _this = _super.call(this) || this;
_this.appConfigService = appConfigService;
_this.request = request;
_this.formBuilder = formBuilder;
_this.common = common;
_this.isImage = false;
_this.onModalCreateSubmit = new EventEmitter();
_this.onModalEditSubmit = new EventEmitter();
_this.submitted = false;
_this.title = '';
_this.selectList = [];
_this.modalConfig = {
ignoreBackdropClick: true
};
_this.isMore = false;
_this.attachmentData = {
doc_type: null
};
_this.tmpData = {};
_this.filteredDepartments = [];
_this.departmentList = [];
_this.disabledForm = false;
_this.isOpen = false;
_this.config = appConfigService.getConfig();
_this.attachmentUrl = _.get(_this.config, 'apiServers.alfresco.url') || "https://203.154.32.126:2585/api/mfec/Alfresco";
return _this;
}
/**
* @return {?}
*/
ModalAttachmentViewComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.th = this.common.fnLocalPCalendar('th');
this.registerForm = this.formBuilder.group({
name: [{ value: '', disabled: this.disabledForm }],
doc_type: [{ value: '', disabled: this.disabledForm }],
url: [{ value: '', disabled: this.disabledForm }],
is_classifieds: [{ value: '', disabled: this.disabledForm }],
is_image: [{ value: '', disabled: this.disabledForm }],
keyword: [{ value: '', disabled: this.disabledForm }],
book_no: [{ value: '', disabled: this.disabledForm }],
amount: [{ value: '', disabled: this.disabledForm }],
record_date: [{ value: '', disabled: this.disabledForm }],
version: [{ value: '', disabled: this.disabledForm }],
resolution: [{ value: '', disabled: this.disabledForm }],
remark: [{ value: '', disabled: this.disabledForm }],
moreField: this.formBuilder.array([])
});
};
/**
* @param {?=} options
* @return {?}
*/
ModalAttachmentViewComponent.prototype.open = /**
* @param {?=} options
* @return {?}
*/
function (options) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
console.log(options);
this.attachmentData = {};
if (!options) return [3 /*break*/, 2];
this.mode = options.mode;
this.title = options.title || '';
this.downloadToken = options.downloadToken;
this.attachmentData = _.cloneDeep(options.data);
if (!this.attachmentData.doc_type) {
this.attachmentData.doc_type = null;
}
// ต้องเปลี่ยนเป็นเรียก api
_a = this;
return [4 /*yield*/, this.request.getDropDown(options.data.system_id, "ประเภทเอกสาร")];
case 1:
// ต้องเปลี่ยนเป็นเรียก api
_a.selectList = _b.sent();
_b.label = 2;
case 2:
if (this.mode !== 'VIEW') {
this.uploadAttachment.clearValue();
this.disabledForm = false;
}
else {
this.disabledForm = true;
}
this.modal.show();
this.isOpen = true;
return [2 /*return*/];
}
});
});
};
/**
* @return {?}
*/
ModalAttachmentViewComponent.prototype.f = /**
* @return {?}
*/
function () {
return this.registerForm.controls;
};
/**
* @return {?}
*/
ModalAttachmentViewComponent.prototype.closeModal = /**
* @return {?}
*/
function () {
this.submitted = false;
this.selectList = [];
this.isMore = false;
this.moreField = [];
this.attachmentData = {};
this.modal.hide();
this.isOpen = false;
};
/**
* @param {?} modal
* @return {?}
*/
ModalAttachmentViewComponent.prototype.onYesClick = /**
* @param {?} modal
* @return {?}
*/
function (modal) {
modal.hide();
};
/**
* @param {?} modal
* @return {?}
*/
ModalAttachmentViewComponent.prototype.onNoClick = /**
* @param {?} modal
* @return {?}
*/
function (modal) {
modal.hide();
};
/**
* @param {?} $event
* @return {?}
*/
ModalAttachmentViewComponent.prototype.onHidden = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
console.log('LOG MESSAGE: ModalConfirm -> onHidden -> $event', $event);
};
/**
* @return {?}
*/
ModalAttachmentViewComponent.prototype.checkExtraField = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
this.moreField = [];
if (this.attachmentData.system_id) {
// this.addField(newField, +requireFlag);
// this.moreField.push(newField);
this.isMore = true;
}
else {
this.isMore = false;
}
return [2 /*return*/];
});
});
};
/**
* @param {?} e
* @return {?}
*/
ModalAttachmentViewComponent.prototype.onCellPrepared = /**
* @param {?} e
* @return {?}
*/
function (e) {
if (e.rowType === 'data') {
for (var i in e.component.columns) {
if (e.column.dataField === e.component.columns[i]) {
e.cellElement.accessKey = e.component.columns[i];
}
}
}
};
/**
* @param {?} data
* @param {?} required
* @return {?}
*/
ModalAttachmentViewComponent.prototype.addField = /**
* @param {?} data
* @param {?} required
* @return {?}
*/
function (data, required) {
/** @type {?} */
var control = /** @type {?} */ (this.registerForm.controls['moreField']);
/** @type {?} */
var newgroup;
if (data.type === 'text') {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = [{ value: '', disabled: this.disabledForm }];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [{ value: '', disabled: this.disabledForm }];
newgroup = this.formBuilder.group(group);
}
}
else if (data.type === 'datetime') {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = [Validators.required, CustomValidators.date];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [{ value: '', disabled: this.disabledForm }];
newgroup = this.formBuilder.group(group);
}
}
else if (data.type === 'special') {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = [{ value: '', disabled: this.disabledForm }];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [{ value: '', disabled: this.disabledForm }];
newgroup = this.formBuilder.group(group);
}
if (data.field_name === 'amount') {
/** @type {?} */
var group = {};
group['amount_type'] = [{ value: '', disabled: this.disabledForm }];
control.push(this.formBuilder.group(group));
}
}
control.push(newgroup);
};
/**
* @param {?} i
* @param {?} field
* @param {?=} validateType
* @return {?}
*/
ModalAttachmentViewComponent.prototype.getValidateMoreField = /**
* @param {?} i
* @param {?} field
* @param {?=} validateType
* @return {?}
*/
function (i, field, validateType) {
/** @type {?} */
var formMoreField = this.f['moreField'];
if (validateType) {
formMoreField = formMoreField.controls[i];
formMoreField = formMoreField.controls[field];
if (formMoreField.errors) {
return formMoreField.errors[validateType];
}
else {
return formMoreField.errors;
}
}
else {
return formMoreField.errors;
}
};
/**
* @param {?} data
* @return {?}
*/
ModalAttachmentViewComponent.prototype.getRowIndex = /**
* @param {?} data
* @return {?}
*/
function (data) {
if (!data.data) {
return '';
}
/** @type {?} */
var no = data.row.dataIndex + 1;
return no;
};
/**
* @return {?}
*/
ModalAttachmentViewComponent.prototype.onSubmit = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
this.submitted = true;
// ถ้า form ไม่ครบหรือผิดตามเงื่อนไขที่ตั้งไว้จะจบที่ตรงนี้
if (this.registerForm.invalid) {
return [2 /*return*/];
}
// let postData = [];
// await this.request.post("/db/rc_attachment",this.attachmentData);
if (this.mode === 'CREATE') {
this.onModalCreateSubmit.emit(this.attachmentData);
}
else {
this.onModalEditSubmit.emit(this.attachmentData);
}
this.closeModal();
;
this.isOpen = false;
return [2 /*return*/];
});
});
};
/**
* @param {?} data
* @return {?}
*/
ModalAttachmentViewComponent.prototype.onUploaded = /**
* @param {?} data
* @return {?}
*/
function (data) {
console.log("data", data);
this.attachmentData.url = this.attachmentUrl + '/' + data.uuid;
this.attachmentData.uuid = data.uuid;
this.attachmentData.filename = data.fileName;
};
/**
* @return {?}
*/
ModalAttachmentViewComponent.prototype.clickUrl = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, _b;
return tslib_1.__generator(this, function (_c) {
switch (_c.label) {
case 0:
_b = (_a = window).open;
return [4 /*yield*/, this.request.getAttachmentLinkToken(this.attachmentData.url)];
case 1:
_b.apply(_a, [_c.sent()]);
return [2 /*return*/];
}
});
});
};
/**
* @param {?} data
* @return {?}
*/
ModalAttachmentViewComponent.prototype.getImageLink = /**
* @param {?} data
* @return {?}
*/
function (data) {
return data.url + "?downloadToken=" + this.downloadToken;
};
ModalAttachmentViewComponent.decorators = [
{ type: Component, args: [{
selector: 'modal-attachment-view',
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
\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
{{attachmentData.url}}\n
![]()
\n
\n
\n
\n
\n
\n \n \n \n
\n \n \n \n \u0E08\u0E31\u0E14\u0E40\u0E02\u0E49\u0E32\u0E27\u0E32\u0E23\u0E30\n \n \n \n \n \n
\n
\n
\n
\n
\n \n \n \n
\n \n \n \n \u0E41\u0E1B\u0E25\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E20\u0E32\u0E1E\u0E41\u0E25\u0E49\u0E27\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 \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 \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n
\n
\n
\n
\n
\n
"
}] }
];
/** @nocollapse */
ModalAttachmentViewComponent.ctorParameters = function () { return [
{ type: AppConfigService },
{ type: Request },
{ type: FormBuilder },
{ type: Common }
]; };
ModalAttachmentViewComponent.propDecorators = {
isImage: [{ type: Input }],
onModalCreateSubmit: [{ type: Output }],
onModalEditSubmit: [{ type: Output }],
modal: [{ type: ViewChild, args: ['modal',] }],
uploadAttachment: [{ type: ViewChild, args: ['uploadAttachment',] }]
};
return ModalAttachmentViewComponent;
}(Options));
export { ModalAttachmentViewComponent };
if (false) {
/** @type {?} */
ModalAttachmentViewComponent.prototype.isImage;
/** @type {?} */
ModalAttachmentViewComponent.prototype.onModalCreateSubmit;
/** @type {?} */
ModalAttachmentViewComponent.prototype.onModalEditSubmit;
/** @type {?} */
ModalAttachmentViewComponent.prototype.modal;
/** @type {?} */
ModalAttachmentViewComponent.prototype.uploadAttachment;
/** @type {?} */
ModalAttachmentViewComponent.prototype.registerForm;
/** @type {?} */
ModalAttachmentViewComponent.prototype.control;
/** @type {?} */
ModalAttachmentViewComponent.prototype.submitted;
/** @type {?} */
ModalAttachmentViewComponent.prototype.title;
/** @type {?} */
ModalAttachmentViewComponent.prototype.selectList;
/** @type {?} */
ModalAttachmentViewComponent.prototype.modalConfig;
/** @type {?} */
ModalAttachmentViewComponent.prototype.th;
/** @type {?} */
ModalAttachmentViewComponent.prototype.isMore;
/** @type {?} */
ModalAttachmentViewComponent.prototype.moreField;
/** @type {?} */
ModalAttachmentViewComponent.prototype.config;
/** @type {?} */
ModalAttachmentViewComponent.prototype.attachmentData;
/** @type {?} */
ModalAttachmentViewComponent.prototype.tmpData;
/** @type {?} */
ModalAttachmentViewComponent.prototype.filteredDepartments;
/** @type {?} */
ModalAttachmentViewComponent.prototype.departmentList;
/** @type {?} */
ModalAttachmentViewComponent.prototype.attachmentUrl;
/** @type {?} */
ModalAttachmentViewComponent.prototype.disabledForm;
/** @type {?} */
ModalAttachmentViewComponent.prototype.isOpen;
/** @type {?} */
ModalAttachmentViewComponent.prototype.appConfigService;
/** @type {?} */
ModalAttachmentViewComponent.prototype.request;
/** @type {?} */
ModalAttachmentViewComponent.prototype.formBuilder;
/** @type {?} */
ModalAttachmentViewComponent.prototype.common;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtYXR0YWNobWVudC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvYy1hcHAtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbC1hdHRhY2htZW50LXZpZXcvbW9kYWwtYXR0YWNobWVudC12aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQWUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDbkQsT0FBTyxFQUFDLFdBQVcsRUFBd0IsVUFBVSxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBQzlGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR2hELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLElBQUE7OztrQkFaQTtJQXFCQyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQU1pRCx3REFBTztJQTZCckQsc0NBQW9CLGdCQUFrQyxFQUFVLE9BQWdCLEVBQVUsV0FBd0IsRUFBUyxNQUFjO1FBQXpJLFlBQ0ksaUJBQU8sU0FHVjtRQUptQixzQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsYUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFVLGlCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVMsWUFBTSxHQUFOLE1BQU0sQ0FBUTt3QkEzQjdHLEtBQUs7b0NBQ0QsSUFB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QUFPO21DQUNqQixTQUFTLFNBQUMsa0JBQWtCOzt1Q0FqQ2pDO0VBMkJrRCxPQUFPO1NBQTVDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNb2RhbE9wdGlvbnMsIE1vZGFsRGlyZWN0aXZlfSBmcm9tICduZ3gtYm9vdHN0cmFwJztcbmltcG9ydCB7QXBwQ29uZmlnU2VydmljZX0gZnJvbSAnLi4vYXBwLWNvbmZpZy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdCB9IGZyb20gJy4uL19zZXJ2aWNlcy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHtDb21tb259IGZyb20gJy4uL19zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtQXJyYXksIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgQWJzdHJhY3RDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0N1c3RvbVZhbGlkYXRvcnN9IGZyb20gJ25nMi12YWxpZGF0aW9uJztcbmltcG9ydCB7RHhEYXRhR3JpZENvbXBvbmVudH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyJztcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XG5pbXBvcnQge1VwbG9hZEF0dGFjaG1lbnRDb21wb25lbnR9IGZyb20gJy4uL3VwbG9hZC1hdHRhY2htZW50L3VwbG9hZC1hdHRhY2htZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5cbmNsYXNzIE9wdGlvbnMge1xuICAgIC8qKiB0aXRsZSDguJfguLXguYjguJXguYnguK3guIfguIHguLLguKPguYHguKrguJTguIcgKi9cbiAgICB0aXRsZT86IFN0cmluZztcbiAgICAvKiogZGF0YSAqL1xuICAgIGRhdGE6IGFueTtcbiAgICBtb2RlOiBhbnk7XG4gICAgZG93bmxvYWRUb2tlbjogYW55O1xuICAgIC8qKiBuYW1lIOC4l+C4teC5iOC4leC5ieC4reC4h+C4geC4suC4o+C5geC4quC4lOC4hyAqL1xuICAgIGNvbmZpZzogYW55O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21vZGFsLWF0dGFjaG1lbnQtdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLWF0dGFjaG1lbnQtdmlldy5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsQXR0YWNobWVudFZpZXdDb21wb25lbnQgZXh0ZW5kcyBPcHRpb25zIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIEBJbnB1dCgpIGlzSW1hZ2UgOmJvb2xlYW4gPSBmYWxzZTtcbiAgICBAT3V0cHV0KCkgb25Nb2RhbENyZWF0ZVN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25Nb2RhbEVkaXRTdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQFZpZXdDaGlsZCgnbW9kYWwnKSBtb2RhbDogTW9kYWxEaXJlY3RpdmU7XG4gICAgQFZpZXdDaGlsZCgndXBsb2FkQXR0YWNobWVudCcpIHVwbG9hZEF0dGFjaG1lbnQ6IFVwbG9hZEF0dGFjaG1lbnRDb21wb25lbnQ7XG4gICAgcmVnaXN0ZXJGb3JtOiBGb3JtR3JvdXA7XG4gICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgIHRpdGxlOiBhbnkgPSAnJztcbiAgICBzZWxlY3RMaXN0OiBhbnkgPSBbXTtcbiAgICBtb2RhbENvbmZpZzogTW9kYWxPcHRpb25zID0ge1xuICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlXG4gICAgfTtcbiAgICB0aDtcbiAgICBpc01vcmUgPSBmYWxzZTtcbiAgICBtb3JlRmllbGQ6IGFueTtcbiAgICBwdWJsaWMgY29uZmlnOiBhbnk7XG4gICAgYXR0YWNobWVudERhdGE6IGFueSA9IHtcbiAgICAgICAgZG9jX3R5cGU6bnVsbFxuICAgIH07XG4gICAgdG1wRGF0YTphbnkgPSB7fTtcbiAgICBmaWx0ZXJlZERlcGFydG1lbnRzOmFueSA9IFtdO1xuICAgIGRlcGFydG1lbnRMaXN0OmFueSA9IFtdO1xuICAgIGF0dGFjaG1lbnRVcmw7XG4gICAgZGlzYWJsZWRGb3JtID0gZmFsc2U7XG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsIHByaXZhdGUgcmVxdWVzdDogUmVxdWVzdCwgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIHB1YmxpYyBjb21tb246IENvbW1vbikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudFVybCA9IF8uZ2V0KHRoaXMuY29uZmlnLCAnYXBpU2VydmVycy5hbGZyZXNjby51cmwnKSB8fCBcImh0dHBzOi8vMjAzLjE1NC4zMi4xMjY6MjU4NS9hcGkvbWZlYy9BbGZyZXNjb1wiO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnRoID0gdGhpcy5jb21tb24uZm5Mb2NhbFBDYWxlbmRhcigndGgnKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIG5hbWU6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dLFxuICAgICAgICAgICAgZG9jX3R5cGU6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dLFxuICAgICAgICAgICAgdXJsOiBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XSxcbiAgICAgICAgICAgIGlzX2NsYXNzaWZpZWRzOiBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XSxcbiAgICAgICAgICAgIGlzX2ltYWdlOiBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XSxcbiAgICAgICAgICAgIGtleXdvcmQ6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dLFxuICAgICAgICAgICAgYm9va19ubzogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV0sXG4gICAgICAgICAgICBhbW91bnQ6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dLFxuICAgICAgICAgICAgcmVjb3JkX2RhdGU6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dLFxuICAgICAgICAgICAgdmVyc2lvbjogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV0sXG4gICAgICAgICAgICByZXNvbHV0aW9uOiBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XSxcbiAgICAgICAgICAgIHJlbWFyazogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV0sXG4gICAgICAgICAgICBtb3JlRmllbGQ6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIG9wZW4ob3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICAgICAgY29uc29sZS5sb2cob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudERhdGEgPSB7fTtcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgICAgICAgICAgIHRoaXMudGl0bGUgPSBvcHRpb25zLnRpdGxlIHx8ICcnO1xuICAgICAgICAgICAgdGhpcy5kb3dubG9hZFRva2VuID0gb3B0aW9ucy5kb3dubG9hZFRva2VuO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50RGF0YSA9IF8uY2xvbmVEZWVwKG9wdGlvbnMuZGF0YSk7XG4gICAgICAgICAgICBpZighdGhpcy5hdHRhY2htZW50RGF0YS5kb2NfdHlwZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50RGF0YS5kb2NfdHlwZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyDguJXguYnguK3guIfguYDguJvguKXguLXguYjguKLguJnguYDguJvguYfguJnguYDguKPguLXguKLguIEgYXBpXG4gICAgICAgICAgICB0aGlzLnNlbGVjdExpc3QgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0RHJvcERvd24ob3B0aW9ucy5kYXRhLnN5c3RlbV9pZCxcIuC4m+C4o+C4sOC5gOC4oOC4l+C5gOC4reC4geC4quC4suC4o1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLm1vZGUgIT09ICdWSUVXJyl7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZEF0dGFjaG1lbnQuY2xlYXJWYWx1ZSgpO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZEZvcm0gPSBmYWxzZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkRm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RhbC5zaG93KCk7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RlckZvcm0uY29udHJvbHM7XG4gICAgfVxuXG4gICAgY2xvc2VNb2RhbCgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxlY3RMaXN0ID0gW107XG4gICAgICAgIHRoaXMuaXNNb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubW9yZUZpZWxkID0gW107XG4gICAgICAgIHRoaXMuYXR0YWNobWVudERhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5tb2RhbC5oaWRlKCk7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25ZZXNDbGljayhtb2RhbCkge1xuICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgfVxuXG4gICAgb25Ob0NsaWNrKG1vZGFsKSB7XG4gICAgICAgIG1vZGFsLmhpZGUoKTtcbiAgICB9XG5cbiAgICBvbkhpZGRlbigkZXZlbnQ6IE1vZGFsRGlyZWN0aXZlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdMT0cgTUVTU0FHRTogTW9kYWxDb25maXJtIC0+IG9uSGlkZGVuIC0+ICRldmVudCcsICRldmVudCk7XG5cbiAgICB9XG5cbiAgICBhc3luYyBjaGVja0V4dHJhRmllbGQoKSB7XG4gICAgICAgIHRoaXMubW9yZUZpZWxkID0gW107XG4gICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnREYXRhLnN5c3RlbV9pZCApIHtcbiAgICAgICAgICAgIC8vIHRoaXMuYWRkRmllbGQobmV3RmllbGQsICtyZXF1aXJlRmxhZyk7XG4gICAgICAgICAgICAvLyB0aGlzLm1vcmVGaWVsZC5wdXNoKG5ld0ZpZWxkKTtcbiAgICAgICAgICAgIHRoaXMuaXNNb3JlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3JlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNlbGxQcmVwYXJlZChlKSB7XG4gICAgICAgIGlmIChlLnJvd1R5cGUgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIGUuY29tcG9uZW50LmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5jb2x1bW4uZGF0YUZpZWxkID09PSBlLmNvbXBvbmVudC5jb2x1bW5zW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGUuY2VsbEVsZW1lbnQuYWNjZXNzS2V5ID0gZS5jb21wb25lbnQuY29sdW1uc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRGaWVsZChkYXRhLCByZXF1aXJlZCkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gPEZvcm1BcnJheT50aGlzLnJlZ2lzdGVyRm9ybS5jb250cm9sc1snbW9yZUZpZWxkJ107XG4gICAgICAgIGxldCBuZXdncm91cDtcbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dO1xuICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV07XG4gICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEN1c3RvbVZhbGlkYXRvcnMuZGF0ZV07XG4gICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XTtcbiAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ3NwZWNpYWwnKXtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV07XG4gICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XTtcbiAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5maWVsZF9uYW1lID09PSAnYW1vdW50Jyl7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwWydhbW91bnRfdHlwZSddID0gW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV07XG4gICAgICAgICAgICAgICAgY29udHJvbC5wdXNoKHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRyb2wucHVzaChuZXdncm91cCk7XG4gICAgfVxuXG4gICAgZ2V0VmFsaWRhdGVNb3JlRmllbGQoaSwgZmllbGQsIHZhbGlkYXRlVHlwZT8pIHtcbiAgICAgICAgbGV0IGZvcm1Nb3JlRmllbGQ6IGFueSA9IHRoaXMuZlsnbW9yZUZpZWxkJ107XG4gICAgICAgIGlmICh2YWxpZGF0ZVR5cGUpIHtcbiAgICAgICAgICAgIGZvcm1Nb3JlRmllbGQgPSBmb3JtTW9yZUZpZWxkLmNvbnRyb2xzW2ldO1xuICAgICAgICAgICAgZm9ybU1vcmVGaWVsZCA9IGZvcm1Nb3JlRmllbGQuY29udHJvbHNbZmllbGRdO1xuICAgICAgICAgICAgaWYgKGZvcm1Nb3JlRmllbGQuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1Nb3JlRmllbGQuZXJyb3JzW3ZhbGlkYXRlVHlwZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtTW9yZUZpZWxkLmVycm9ycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtTW9yZUZpZWxkLmVycm9ycztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFJvd0luZGV4KGRhdGEpIHtcbiAgICAgICAgaWYgKCFkYXRhLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBubyA9IGRhdGEucm93LmRhdGFJbmRleCArIDE7XG4gICAgICAgIHJldHVybiBubztcbiAgICB9XG5cbiAgICBhc3luYyBvblN1Ym1pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICAvLyDguJbguYnguLIgZm9ybSDguYTguKHguYjguITguKPguJrguKvguKPguLfguK3guJzguLTguJTguJXguLLguKHguYDguIfguLfguYjguK3guJnguYTguILguJfguLXguYjguJXguLHguYnguIfguYTguKfguYnguIjguLDguIjguJrguJfguLXguYjguJXguKPguIfguJnguLXguYlcbiAgICAgICAgaWYgKHRoaXMucmVnaXN0ZXJGb3JtLmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBsZXQgcG9zdERhdGEgPSBbXTtcbiAgICAgICAgLy8gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3QoXCIvZGIvcmNfYXR0YWNobWVudFwiLHRoaXMuYXR0YWNobWVudERhdGEpO1xuICAgICAgICBpZih0aGlzLm1vZGUgPT09ICdDUkVBVEUnKXtcbiAgICAgICAgICAgIHRoaXMub25Nb2RhbENyZWF0ZVN1Ym1pdC5lbWl0KHRoaXMuYXR0YWNobWVudERhdGEpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMub25Nb2RhbEVkaXRTdWJtaXQuZW1pdCh0aGlzLmF0dGFjaG1lbnREYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlTW9kYWwoKTs7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25VcGxvYWRlZChkYXRhKXtcbiAgICAgICAgY29uc29sZS5sb2coXCJkYXRhXCIsZGF0YSk7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudERhdGEudXJsID0gdGhpcy5hdHRhY2htZW50VXJsKycvJytkYXRhLnV1aWQ7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudERhdGEudXVpZCA9IGRhdGEudXVpZDtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50RGF0YS5maWxlbmFtZSA9IGRhdGEuZmlsZU5hbWU7XG4gICAgfVxuXG4gICAgYXN5bmMgY2xpY2tVcmwoKXtcbiAgICAgICAgd2luZG93Lm9wZW4oYXdhaXQgdGhpcy5yZXF1ZXN0LmdldEF0dGFjaG1lbnRMaW5rVG9rZW4odGhpcy5hdHRhY2htZW50RGF0YS51cmwpKTtcbiAgICB9XG5cbiAgICBnZXRJbWFnZUxpbmsoZGF0YSl7XG4gICAgICAgIHJldHVybiBkYXRhLnVybCtcIj9kb3dubG9hZFRva2VuPVwiK3RoaXMuZG93bmxvYWRUb2tlbjtcbiAgICB9XG59XG4iXX0=