/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, EventEmitter, 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 { DxDataGridComponent } from 'devextreme-angular';
import * as _ from 'lodash';
import { DateService } from '../_services/date.service';
import { UploadAttachmentComponent } from '../upload-attachment/upload-attachment.component';
import { B2bService } from '../_services/b2b.service';
var Options = /** @class */ (function () {
function Options() {
}
return Options;
}());
if (false) {
/**
* title ที่ต้องการแสดง
* @type {?}
*/
Options.prototype.title;
/**
* data
* @type {?}
*/
Options.prototype.data;
}
var ModalStepComponent = /** @class */ (function (_super) {
tslib_1.__extends(ModalStepComponent, _super);
function ModalStepComponent(appConfigService, request, formBuilder, common, date, b2bService) {
var _this = _super.call(this) || this;
_this.appConfigService = appConfigService;
_this.request = request;
_this.formBuilder = formBuilder;
_this.common = common;
_this.date = date;
_this.b2bService = b2bService;
_this.onUpdateModal = new EventEmitter();
_this.submitted = false;
_this.submittedSend = false;
_this.submittedRecieve = false;
_this.title = '';
_this.selectList = [];
_this.sendList = [];
_this.recieveList = [];
_this.modalConfig = {
ignoreBackdropClick: true
};
_this.selectedStep = null;
_this.isMore = false;
_this.stepData = {};
_this.sendData = {};
_this.recieveData = {};
_this.lastStep = '';
_this.isSend = false;
_this.isRecieve = false;
_this.isEditSend = false;
_this.isEditRecieve = false;
_this.tmpData = {};
_this.filteredDepartments = [];
_this.departmentList = [];
_this.departmentUrl = "/db/ct_ext_department";
_this.causeUrl = "/db/ct_dropdown";
_this.causeFilter = "system_id,eq,23)$and(dropdown_type,like,เรื่องส่งคืน";
_this.tempId = -1;
_this.filter_ref_ext_department_id = false;
_this.filter_ref_ext_department_id_show = true;
_this.config = appConfigService.getConfig();
_this.attachmentUrl = _.get(_this.config, 'apiServers.alfresco.url') || "https://203.154.32.126:2585/api/mfec/Alfresco";
_this.system_id = _.get(_this.config, 'system_id');
return _this;
}
/**
* @return {?}
*/
ModalStepComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.th = this.common.fnLocalPCalendar('th');
this.recieveForm = this.formBuilder.group({
book_no: ['', [Validators.required]],
recv_date: [''],
});
this.sendForm = this.formBuilder.group({
send_to: [''],
book_no: [''],
send_date: [''],
is_important: [''],
});
this.registerForm = this.formBuilder.group({
name: [''],
step_id: ['', Validators.required],
step_date: [''],
remark: [''],
lastStep: [''],
moreField: this.formBuilder.array([]),
soc_recv_no: [''],
soc_recv_date: [''],
gtc_recv_no: [''],
gtc_recv_date: [''],
book_no: [''],
book_date: [''],
'for': [''],
dept_name: [''],
ministry: ['']
});
};
/**
* @param {?=} options
* @return {?}
*/
ModalStepComponent.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.stepData = {};
if (!options) return [3 /*break*/, 2];
this.title = options.title || '';
this.lastStep = options.data.lastStep;
this.stepData = JSON.parse(JSON.stringify(options.data));
this.stepData.step_date = this.date.getNow();
delete this.stepData['lastStep'];
_a = this;
return [4 /*yield*/, this.request.get('/db/ct_step?_where=(category_id,eq,' + options.data.category_id + ')&_sort=seq_no')];
case 1:
_a.selectList = _b.sent();
_b.label = 2;
case 2:
this.uploadAttachment.clearValue();
this.modal.show();
return [2 /*return*/];
}
});
});
};
/**
* @return {?}
*/
ModalStepComponent.prototype.f = /**
* @return {?}
*/
function () { return this.registerForm.controls; };
/**
* @return {?}
*/
ModalStepComponent.prototype.fs = /**
* @return {?}
*/
function () { return this.sendForm.controls; };
/**
* @return {?}
*/
ModalStepComponent.prototype.fr = /**
* @return {?}
*/
function () { return this.recieveForm.controls; };
/**
* @return {?}
*/
ModalStepComponent.prototype.closeModal = /**
* @return {?}
*/
function () {
this.submitted = false;
this.selectList = [];
this.sendList = [];
this.selectedStep = null;
this.isMore = false;
this.isSend = false;
this.moreField = [];
this.stepData = {};
this.lastStep = '';
this.modal.hide();
};
/**
* @return {?}
*/
ModalStepComponent.prototype.closeSendModal = /**
* @return {?}
*/
function () {
this.submittedSend = false;
this.sendData = {};
this.isEditSend = false;
this.tmpData = {};
this.sendModal.hide();
};
/**
* @return {?}
*/
ModalStepComponent.prototype.closeRecieveModal = /**
* @return {?}
*/
function () {
this.submittedRecieve = false;
this.recieveData = {};
this.isEditRecieve = false;
this.tmpData = {};
this.recieveModal.hide();
};
/**
* @param {?} modal
* @return {?}
*/
ModalStepComponent.prototype.onYesClick = /**
* @param {?} modal
* @return {?}
*/
function (modal) {
modal.hide();
};
/**
* @param {?} modal
* @return {?}
*/
ModalStepComponent.prototype.onNoClick = /**
* @param {?} modal
* @return {?}
*/
function (modal) {
modal.hide();
};
/**
* @param {?} $event
* @return {?}
*/
ModalStepComponent.prototype.onHidden = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
console.log('LOG MESSAGE: ModalConfirm -> onHidden -> $event', $event);
};
/**
* @param {?} value
* @return {?}
*/
ModalStepComponent.prototype.valueSeleteMinistry = /**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
this.filter_ref_ext_department_id_show = false;
console.log('value', value);
// this.stepData.ministry_id = value && value.id ? value.id : null
if (value && value.id) {
this.stepData.dept_name = null;
this.filter_ref_ext_department_id = "&_where=(ref_ext_department_id,eq," + value.id + ")$and(type,in,2,3,4,5)";
}
else {
this.filter_ref_ext_department_id = false;
}
setTimeout(function () {
_this.filter_ref_ext_department_id_show = true;
}, 50);
};
/**
* @param {?} value
* @return {?}
*/
ModalStepComponent.prototype.valueSeleteDeptName = /**
* @param {?} value
* @return {?}
*/
function (value) {
console.log('value', value);
this.stepData.code_dept = value && value.id ? value.id : null;
};
/**
* @return {?}
*/
ModalStepComponent.prototype.checkExtraField = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var i, flag, requireFlag, ct_step_flag, newField, _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
this.stepData.step_id = this.selectedStep.id;
this.stepData.step_name = this.selectedStep.name;
console.log(this.isMore);
this.moreField = [];
if (!(this.selectedStep.flag && this.selectedStep.flag !== '')) return [3 /*break*/, 6];
i = 0;
_b.label = 1;
case 1:
if (!(i < this.selectedStep.flag.length)) return [3 /*break*/, 5];
flag = this.selectedStep.flag.charAt(i);
requireFlag = this.selectedStep.require_flag ? this.selectedStep.require_flag.charAt(i) : 0;
return [4 /*yield*/, this.request.get('/db/ct_step_flag?_where=(flag,eq,' + flag + ')')];
case 2:
ct_step_flag = _b.sent();
newField = ct_step_flag[0];
return [4 /*yield*/, this.addField(newField, +requireFlag)];
case 3:
_b.sent();
this.moreField.push(newField);
console.log(this.f);
_b.label = 4;
case 4:
i++;
return [3 /*break*/, 1];
case 5:
this.isMore = true;
this.isSend = false;
this.isRecieve = false;
return [3 /*break*/, 9];
case 6:
this.isMore = false;
if (!(this.selectedStep.type_id === 8 || this.selectedStep.type_id === 13)) return [3 /*break*/, 8];
_a = this;
return [4 /*yield*/, this.request.get('/db/ct_ext_department?_sort=name')];
case 7:
_a.departmentList = _b.sent();
this.departmentList = this.departmentList.map(function (a) { return a.name; });
this.isSend = true;
this.isRecieve = false;
// } else if (this.selectedStep.type_id === 9 || this.selectedStep.type_id === 14) {
// const data = await this.request.post('/sql/getLastSend', this.stepData);
// if (data.resultData && data.resultData.length > 0) {
// const ct_step_data_id = data.resultData[0].id;
// const ct_sendList = await this.request.get('/db/ct_send?_where=(ct_step_data_id,eq,' + ct_step_data_id + ')');
// for (const ct_send of ct_sendList) {
// const recvData: any = {
// ct_send_id: ct_send.id,
// send_book_no: ct_send.book_no,
// send_date: ct_send.send_date,
// recv_from: ct_send.send_to,
// name: ct_send.name
// };
// this.recieveList.push(recvData);
// }
// }
// this.isRecieve = true;
// this.isSend = false;
return [3 /*break*/, 9];
case 8:
this.isSend = false;
this.isRecieve = false;
_b.label = 9;
case 9: return [2 /*return*/];
}
});
});
};
/**
* @param {?} data
* @return {?}
*/
ModalStepComponent.prototype.getFieldId = /**
* @param {?} data
* @return {?}
*/
function (data) {
/** @type {?} */
var id = '';
if (data.type === 'text') {
id += 'txt';
}
else if (data.type === 'datetime') {
id += 'txt';
}
else {
id += 'txt';
}
/** @type {?} */
var field = data.field_name.charAt(0).toLocaleUpperCase() + data.field_name.substring(1);
id += field;
return id;
};
/**
* @param {?} data
* @param {?} required
* @return {?}
*/
ModalStepComponent.prototype.addField = /**
* @param {?} data
* @param {?} required
* @return {?}
*/
function (data, required) {
/** @type {?} */
var control = /** @type {?} */ (this.registerForm.controls['moreField']);
/** @type {?} */
var newgroup;
this.stepData[data.field_name] = null;
if (data.type === 'text') {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = ['', Validators.required];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [''];
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] = [''];
newgroup = this.formBuilder.group(group);
}
this.stepData[data.field_name] = this.date.getNow();
}
else if (data.type === 'number') {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = [Validators.required];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [''];
newgroup = this.formBuilder.group(group);
}
}
else if (data.type === 'special') {
if (data.field_name === 'amount') {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = ['', Validators.required];
group['amount_type'] = ['', Validators.required];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [''];
group['amount_type'] = [''];
newgroup = this.formBuilder.group(group);
}
}
else if (data.field_name === 'follow') {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = ['', Validators.required];
group['follow_remark'] = ['', Validators.required];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [''];
group['follow_remark'] = [''];
newgroup = this.formBuilder.group(group);
}
}
else {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = ['', Validators.required];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [''];
newgroup = this.formBuilder.group(group);
}
}
}
control.push(newgroup);
};
/**
* @param {?} i
* @param {?} field
* @param {?=} validateType
* @return {?}
*/
ModalStepComponent.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 {?}
*/
ModalStepComponent.prototype.getRowIndex = /**
* @param {?} data
* @return {?}
*/
function (data) {
if (!data.data) {
return '';
}
/** @type {?} */
var no = data.row.dataIndex + 1;
return no;
};
/**
* @param {?} e
* @return {?}
*/
ModalStepComponent.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];
}
}
}
};
/**
* @return {?}
*/
ModalStepComponent.prototype.addSend = /**
* @return {?}
*/
function () {
this.sendData.send_date = this.date.getNow();
this.sendModal.show();
};
/**
* @param {?} data
* @return {?}
*/
ModalStepComponent.prototype.editSend = /**
* @param {?} data
* @return {?}
*/
function (data) {
this.tmpData = data;
this.sendData = JSON.parse(JSON.stringify(data));
// this.sendData.send_date = new Date(this.sendData.send_date);
this.isEditSend = true;
this.sendModal.show();
};
/**
* @param {?} data
* @return {?}
*/
ModalStepComponent.prototype.editRecieve = /**
* @param {?} data
* @return {?}
*/
function (data) {
this.tmpData = data;
this.recieveData = JSON.parse(JSON.stringify(data));
this.recieveData.recv_date = this.recieveData.recv_date ? new Date(this.recieveData.recv_date) : this.recieveData.recv_date;
this.isEditRecieve = true;
this.recieveModal.show();
};
/**
* @param {?} event
* @return {?}
*/
ModalStepComponent.prototype.filterDepartments = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.filteredDepartments = [];
for (var i = 0; i < this.departmentList.length; i++) {
/** @type {?} */
var department = this.departmentList[i];
if (department.toLowerCase().indexOf(event.query.toLowerCase()) == 0) {
this.filteredDepartments.push(department);
}
}
};
/**
* @return {?}
*/
ModalStepComponent.prototype.onSubmit = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var e_1, _a, e_2, _b, postData, data, userData, main, ct_send, ct_recieve, _c, _d, data_1, ct_recieve, _e, _f, data_2, postResponse, stepList;
return tslib_1.__generator(this, function (_g) {
switch (_g.label) {
case 0:
this.submitted = true;
// ถ้า form ไม่ครบหรือผิดตามเงื่อนไขที่ตั้งไว้จะจบที่ตรงนี้
console.log('this.registerForm.invalid: ', this.registerForm.invalid);
if (this.registerForm.invalid) {
return [2 /*return*/];
}
postData = [];
data = _.cloneDeep(this.stepData);
data.action = "add";
userData = this.b2bService.getVerifyToken();
data.username = userData.username;
if (data.remind_date)
data.remind_date = this.date.getNow().add(data.remind_date, 'd').toDate();
delete data["ct_main_id"];
delete data["update_date"];
main = {
"ct_step_data": [data]
};
postData.push(main);
if (this.sendList && this.sendList.length > 0) {
ct_send = {
"ct_send": []
};
ct_recieve = {
"ct_recieve": []
};
try {
for (_c = tslib_1.__values(this.sendList), _d = _c.next(); !_d.done; _d = _c.next()) {
data_1 = _d.value;
data_1.name = data_1.name;
data_1.action = "add";
delete data_1.id;
ct_send.ct_send.push(data_1);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
}
finally { if (e_1) throw e_1.error; }
}
postData.push(ct_send);
}
if (this.recieveList && this.recieveList.length > 0) {
ct_recieve = {
"ct_recieve": []
};
try {
for (_e = tslib_1.__values(this.recieveList), _f = _e.next(); !_f.done; _f = _e.next()) {
data_2 = _f.value;
delete data_2['send_book_no'];
delete data_2['send_date'];
data_2.name = data_2.name;
data_2.action = "add";
ct_recieve.ct_recieve.push(data_2);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
}
finally { if (e_2) throw e_2.error; }
}
postData.push(ct_recieve);
}
console.log('postData', postData);
return [4 /*yield*/, this.request.post("/ct/main", postData)];
case 1:
postResponse = _g.sent();
if (!this.stepData.update_date) return [3 /*break*/, 5];
return [4 /*yield*/, this.getStepList()];
case 2:
stepList = _g.sent();
console.log("stepList", stepList);
if (!(stepList.length > 0)) return [3 /*break*/, 4];
return [4 /*yield*/, this.request.put("/db/" + this.stepData.ref_table + "/" + this.stepData.ref_id, { status: stepList[0].step_name, status_date: stepList[0].step_date })];
case 3:
_g.sent();
this.common.fnCheckResponse(postResponse, this.myModal);
_g.label = 4;
case 4: return [3 /*break*/, 7];
case 5: return [4 /*yield*/, this.request.put("/db/" + this.stepData.ref_table + "/" + this.stepData.ref_id, { status: this.stepData.step_name })];
case 6:
_g.sent();
this.common.fnCheckResponse(postResponse, this.myModal);
_g.label = 7;
case 7:
// }else{
// this.onCreateModal.emit(postData);
// }
return [2 /*return*/];
}
});
});
};
/**
* @return {?}
*/
ModalStepComponent.prototype.getStepList = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var filter, data;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
console.log('getStepList');
filter = {
filter: {
ref_table: "=" + this.stepData.ref_table,
ref_id: this.stepData.ref_id,
system_id: this.stepData.system_id
},
order_by: ["step_date desc"]
};
return [4 /*yield*/, this.request.post('/search/ct_step_data', filter)];
case 1:
data = _a.sent();
return [2 /*return*/, data.resultData || []];
}
});
});
};
/**
* @return {?}
*/
ModalStepComponent.prototype.onClickBack = /**
* @return {?}
*/
function () {
this.onUpdateModal.emit();
this.closeModal();
};
/**
* @return {?}
*/
ModalStepComponent.prototype.onSubmitSend = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var e_3, _a, tmpList, _b, _c, tmpSend;
return tslib_1.__generator(this, function (_d) {
this.submittedSend = true;
// ถ้า form ไม่ครบหรือผิดตามเงื่อนไขที่ตั้งไว้จะจบที่ตรงนี้
if (this.sendForm.invalid) {
return [2 /*return*/];
}
if (this.isEditSend) {
tmpList = [];
try {
for (_b = tslib_1.__values(this.sendList), _c = _b.next(); !_c.done; _c = _b.next()) {
tmpSend = _c.value;
if (tmpSend.id === this.tmpData.id) {
tmpList.push(this.sendData);
}
else {
tmpList.push(tmpSend);
}
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_3) throw e_3.error; }
}
this.sendList = tmpList;
}
else {
this.sendData.id = this.tempId;
this.tempId--;
this.sendList.push(this.sendData);
}
this.closeSendModal();
return [2 /*return*/];
});
});
};
/**
* @return {?}
*/
ModalStepComponent.prototype.onSubmitRecieve = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var e_4, _a, tmpList, _b, _c, tmpSend;
return tslib_1.__generator(this, function (_d) {
this.submittedSend = true;
// ถ้า form ไม่ครบหรือผิดตามเงื่อนไขที่ตั้งไว้จะจบที่ตรงนี้
if (this.recieveForm.invalid) {
return [2 /*return*/];
}
if (this.isEditRecieve) {
tmpList = [];
try {
for (_b = tslib_1.__values(this.recieveList), _c = _b.next(); !_c.done; _c = _b.next()) {
tmpSend = _c.value;
if (tmpSend.recv_from === this.tmpData.recv_from) {
tmpList.push(this.recieveData);
}
else {
tmpList.push(tmpSend);
}
}
}
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_4) throw e_4.error; }
}
this.recieveList = tmpList;
}
else {
this.recieveList.push(this.recieveData);
}
this.closeRecieveModal();
return [2 /*return*/];
});
});
};
/**
* @param {?} data
* @return {?}
*/
ModalStepComponent.prototype.isImportant = /**
* @param {?} data
* @return {?}
*/
function (data) {
return data.is_important ? "สำคัญ" : "";
};
/**
* @param {?} data
* @return {?}
*/
ModalStepComponent.prototype.onUploaded = /**
* @param {?} data
* @return {?}
*/
function (data) {
this.stepData.url = this.attachmentUrl + '/' + data.uuid;
this.stepData.uuid = data.uuid;
};
/**
* @param {?} field
* @return {?}
*/
ModalStepComponent.prototype.checkDisable = /**
* @param {?} field
* @return {?}
*/
function (field) {
if (this.stepData[field.field_name] !== 'ไม่ทางการ') {
return true;
}
else {
return false;
}
};
/**
* @param {?} data
* @return {?}
*/
ModalStepComponent.prototype.getImageLink = /**
* @param {?} data
* @return {?}
*/
function (data) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var url;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.request.getAttachmentLinkToken(data.url)];
case 1:
url = _a.sent();
return [2 /*return*/, url];
}
});
});
};
ModalStepComponent.decorators = [
{ type: Component, args: [{
selector: 'modal-step',
template: "
\n\n\n\n"
}] }
];
/** @nocollapse */
ModalStepComponent.ctorParameters = function () { return [
{ type: AppConfigService },
{ type: Request },
{ type: FormBuilder },
{ type: Common },
{ type: DateService },
{ type: B2bService }
]; };
ModalStepComponent.propDecorators = {
onUpdateModal: [{ type: Output }],
modal: [{ type: ViewChild, args: ['modal',] }],
myModal: [{ type: ViewChild, args: ['myModal',] }],
sendModal: [{ type: ViewChild, args: ['sendModal',] }],
recieveModal: [{ type: ViewChild, args: ['recieveModal',] }],
dxDataGridStepSendList: [{ type: ViewChild, args: ['dxDataGridStepSendList',] }],
uploadAttachment: [{ type: ViewChild, args: ['uploadAttachment',] }]
};
return ModalStepComponent;
}(Options));
export { ModalStepComponent };
if (false) {
/** @type {?} */
ModalStepComponent.prototype.onUpdateModal;
/** @type {?} */
ModalStepComponent.prototype.modal;
/** @type {?} */
ModalStepComponent.prototype.myModal;
/** @type {?} */
ModalStepComponent.prototype.sendModal;
/** @type {?} */
ModalStepComponent.prototype.recieveModal;
/** @type {?} */
ModalStepComponent.prototype.dxDataGridStepSendList;
/** @type {?} */
ModalStepComponent.prototype.uploadAttachment;
/** @type {?} */
ModalStepComponent.prototype.registerForm;
/** @type {?} */
ModalStepComponent.prototype.sendForm;
/** @type {?} */
ModalStepComponent.prototype.recieveForm;
/** @type {?} */
ModalStepComponent.prototype.submitted;
/** @type {?} */
ModalStepComponent.prototype.submittedSend;
/** @type {?} */
ModalStepComponent.prototype.submittedRecieve;
/** @type {?} */
ModalStepComponent.prototype.title;
/** @type {?} */
ModalStepComponent.prototype.selectList;
/** @type {?} */
ModalStepComponent.prototype.sendList;
/** @type {?} */
ModalStepComponent.prototype.recieveList;
/** @type {?} */
ModalStepComponent.prototype.modalConfig;
/** @type {?} */
ModalStepComponent.prototype.th;
/** @type {?} */
ModalStepComponent.prototype.selectedStep;
/** @type {?} */
ModalStepComponent.prototype.isMore;
/** @type {?} */
ModalStepComponent.prototype.moreField;
/** @type {?} */
ModalStepComponent.prototype.config;
/** @type {?} */
ModalStepComponent.prototype.stepData;
/** @type {?} */
ModalStepComponent.prototype.sendData;
/** @type {?} */
ModalStepComponent.prototype.recieveData;
/** @type {?} */
ModalStepComponent.prototype.lastStep;
/** @type {?} */
ModalStepComponent.prototype.isSend;
/** @type {?} */
ModalStepComponent.prototype.isRecieve;
/** @type {?} */
ModalStepComponent.prototype.isEditSend;
/** @type {?} */
ModalStepComponent.prototype.isEditRecieve;
/** @type {?} */
ModalStepComponent.prototype.tmpData;
/** @type {?} */
ModalStepComponent.prototype.filteredDepartments;
/** @type {?} */
ModalStepComponent.prototype.departmentList;
/** @type {?} */
ModalStepComponent.prototype.departmentUrl;
/** @type {?} */
ModalStepComponent.prototype.causeUrl;
/** @type {?} */
ModalStepComponent.prototype.causeFilter;
/** @type {?} */
ModalStepComponent.prototype.tempId;
/** @type {?} */
ModalStepComponent.prototype.attachmentUrl;
/** @type {?} */
ModalStepComponent.prototype.system_id;
/** @type {?} */
ModalStepComponent.prototype.filter_ref_ext_department_id;
/** @type {?} */
ModalStepComponent.prototype.filter_ref_ext_department_id_show;
/** @type {?} */
ModalStepComponent.prototype.appConfigService;
/** @type {?} */
ModalStepComponent.prototype.request;
/** @type {?} */
ModalStepComponent.prototype.formBuilder;
/** @type {?} */
ModalStepComponent.prototype.common;
/** @type {?} */
ModalStepComponent.prototype.date;
/** @type {?} */
ModalStepComponent.prototype.b2bService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtc3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9zb2MtYXBwLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvbW9kYWwtc3RlcC9tb2RhbC1zdGVwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUE0QixNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBZSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUF3QixVQUFVLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFdkQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUVwRCxJQUFBOzs7a0JBZEE7SUFtQkMsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7SUFNdUMsOENBQU87SUFnRDNDLDRCQUFvQixnQkFBa0MsRUFBVSxPQUFnQixFQUFVLFdBQXdCLEVBQVMsTUFBYyxFQUFTLElBQWlCLEVBQVMsVUFBc0I7UUFBbE0sWUFDSSxpQkFBTyxTQUlWO1FBTG1CLHNCQUFnQixHQUFoQixnQkFBZ0IsQ0FB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LEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFDLEdBQUcsR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7S0FDbEM7Ozs7O0lBQ0QseUNBQVk7Ozs7SUFBWixVQUFhLEtBQUs7UUFDZCxJQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFdBQVcsRUFBQztZQUMvQyxPQUFPLElBQUksQ0FBQztTQUNmO2FBQUk7WUFDRCxPQUFPLEtBQUssQ0FBQztTQUNoQjtLQUNKOzs7OztJQUVLLHlDQUFZOzs7O0lBQWxCLFVBQW1CLElBQUk7Ozs7OzRCQUNULHFCQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFBOzt3QkFBekQsR0FBRyxHQUFHLFNBQW1EO3dCQUM3RCxzQkFBTyxHQUFHLEVBQUM7Ozs7S0FDZDs7Z0JBamhCSixTQUFTLFNBQUM7b0JBQ1AsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLG0zbERBQTBDO2lCQUM3Qzs7OztnQkF0Qk8sZ0JBQWdCO2dCQUNmLE9BQU87Z0JBRVIsV0FBVztnQkFEWCxNQUFNO2dCQU1OLFdBQVc7Z0JBRVgsVUFBVTs7O2dDQWNiLE1BQU07d0JBRU4sU0FBUyxTQUFDLE9BQU87MEJBQ2pCLFNBQVMsU0FBQyxTQUFTOzRCQUNuQixTQUFTLFNBQUMsV0FBVzsrQkFDckIsU0FBUyxTQUFDLGNBQWM7eUNBQ3hCLFNBQVMsU0FBQyx3QkFBd0I7bUNBRWxDLFNBQVMsU0FBQyxrQkFBa0I7OzZCQWxDakM7RUF5QndDLE9BQU87U0FBbEMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01vZGFsT3B0aW9ucywgTW9kYWxEaXJlY3RpdmV9IGZyb20gJ25neC1ib290c3RyYXAnO1xuaW1wb3J0IHtBcHBDb25maWdTZXJ2aWNlfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnLi4vX3NlcnZpY2VzL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbn0gZnJvbSAnLi4vX3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1BcnJheSwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBBYnN0cmFjdENvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Q3VzdG9tVmFsaWRhdG9yc30gZnJvbSAnbmcyLXZhbGlkYXRpb24nO1xuaW1wb3J0IHtEeERhdGFHcmlkQ29tcG9uZW50fSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7RGF0ZVNlcnZpY2V9IGZyb20gJy4uL19zZXJ2aWNlcy9kYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHtVcGxvYWRBdHRhY2htZW50Q29tcG9uZW50fSBmcm9tICcuLi91cGxvYWQtYXR0YWNobWVudC91cGxvYWQtYXR0YWNobWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHtCMmJTZXJ2aWNlfSBmcm9tICcuLi9fc2VydmljZXMvYjJiLnNlcnZpY2UnO1xuXG5jbGFzcyBPcHRpb25zIHtcbiAgICAvKiogdGl0bGUg4LiX4Li14LmI4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4LmB4Liq4LiU4LiHICovXG4gICAgdGl0bGU/OiBTdHJpbmc7XG4gICAgLyoqIGRhdGEgKi9cbiAgICBkYXRhOiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbW9kYWwtc3RlcCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLXN0ZXAuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbFN0ZXBDb21wb25lbnQgZXh0ZW5kcyBPcHRpb25zIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAT3V0cHV0KCkgb25VcGRhdGVNb2RhbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAvLyBAT3V0cHV0KCkgb25DcmVhdGVNb2RhbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAVmlld0NoaWxkKCdtb2RhbCcpIG1vZGFsOiBNb2RhbERpcmVjdGl2ZTtcbiAgICBAVmlld0NoaWxkKCdteU1vZGFsJykgbXlNb2RhbDtcbiAgICBAVmlld0NoaWxkKCdzZW5kTW9kYWwnKSBzZW5kTW9kYWw6IE1vZGFsRGlyZWN0aXZlO1xuICAgIEBWaWV3Q2hpbGQoJ3JlY2lldmVNb2RhbCcpIHJlY2lldmVNb2RhbDogTW9kYWxEaXJlY3RpdmU7XG4gICAgQFZpZXdDaGlsZCgnZHhEYXRhR3JpZFN0ZXBTZW5kTGlzdCcpXG4gICAgZHhEYXRhR3JpZFN0ZXBTZW5kTGlzdDogRHhEYXRhR3JpZENvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCd1cGxvYWRBdHRhY2htZW50JykgdXBsb2FkQXR0YWNobWVudDogVXBsb2FkQXR0YWNobWVudENvbXBvbmVudDtcblxuICAgIHJlZ2lzdGVyRm9ybTogRm9ybUdyb3VwO1xuICAgIHNlbmRGb3JtOiBGb3JtR3JvdXA7XG4gICAgcmVjaWV2ZUZvcm06IEZvcm1Hcm91cDtcbiAgICBzdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICBzdWJtaXR0ZWRTZW5kID0gZmFsc2U7XG4gICAgc3VibWl0dGVkUmVjaWV2ZSA9IGZhbHNlO1xuICAgIHRpdGxlOiBhbnkgPSAnJztcbiAgICBzZWxlY3RMaXN0OiBhbnkgPSBbXTtcbiAgICBzZW5kTGlzdDogYW55ID0gW107XG4gICAgcmVjaWV2ZUxpc3Q6IGFueSA9IFtdO1xuICAgIG1vZGFsQ29uZmlnOiBNb2RhbE9wdGlvbnMgPSB7XG4gICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWVcbiAgICB9O1xuICAgIHRoO1xuICAgIHNlbGVjdGVkU3RlcDogYW55ID0gbnVsbDtcbiAgICBpc01vcmUgPSBmYWxzZTtcbiAgICBtb3JlRmllbGQ6IGFueTtcbiAgICBwdWJsaWMgY29uZmlnOiBhbnk7XG4gICAgc3RlcERhdGE6IGFueSA9IHt9O1xuICAgIHNlbmREYXRhOiBhbnkgPSB7fTtcbiAgICByZWNpZXZlRGF0YTogYW55ID0ge307XG4gICAgbGFzdFN0ZXAgPSAnJztcbiAgICBpc1NlbmQgPSBmYWxzZTtcbiAgICBpc1JlY2lldmUgPSBmYWxzZTtcbiAgICBpc0VkaXRTZW5kID0gZmFsc2U7XG4gICAgaXNFZGl0UmVjaWV2ZSA9IGZhbHNlO1xuICAgIHRtcERhdGE6YW55ID0ge307XG4gICAgZmlsdGVyZWREZXBhcnRtZW50czphbnkgPSBbXTtcbiAgICBkZXBhcnRtZW50TGlzdDphbnkgPSBbXTtcbiAgICBkZXBhcnRtZW50VXJsID0gXCIvZGIvY3RfZXh0X2RlcGFydG1lbnRcIjtcbiAgICBjYXVzZVVybCA9IFwiL2RiL2N0X2Ryb3Bkb3duXCI7XG4gICAgY2F1c2VGaWx0ZXIgPSBcInN5c3RlbV9pZCxlcSwyMykkYW5kKGRyb3Bkb3duX3R5cGUsbGlrZSzguYDguKPguLfguYjguK3guIfguKrguYjguIfguITguLfguJlcIjtcbiAgICB0ZW1wSWQgPSAtMTtcbiAgICBhdHRhY2htZW50VXJsO1xuICAgIHN5c3RlbV9pZDtcbiAgICBmaWx0ZXJfcmVmX2V4dF9kZXBhcnRtZW50X2lkOiBhbnkgPSBmYWxzZTtcbiAgICBmaWx0ZXJfcmVmX2V4dF9kZXBhcnRtZW50X2lkX3Nob3cgPSB0cnVlO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSwgcHJpdmF0ZSByZXF1ZXN0OiBSZXF1ZXN0LCBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHVibGljIGNvbW1vbjogQ29tbW9uLCBwdWJsaWMgZGF0ZTogRGF0ZVNlcnZpY2UsIHB1YmxpYyBiMmJTZXJ2aWNlOiBCMmJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29uZmlnID0gYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50VXJsID0gXy5nZXQodGhpcy5jb25maWcsICdhcGlTZXJ2ZXJzLmFsZnJlc2NvLnVybCcpIHx8IFwiaHR0cHM6Ly8yMDMuMTU0LjMyLjEyNjoyNTg1L2FwaS9tZmVjL0FsZnJlc2NvXCI7XG4gICAgICAgIHRoaXMuc3lzdGVtX2lkID0gXy5nZXQodGhpcy5jb25maWcsICdzeXN0ZW1faWQnKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy50aCA9IHRoaXMuY29tbW9uLmZuTG9jYWxQQ2FsZW5kYXIoJ3RoJyk7XG4gICAgICAgIHRoaXMucmVjaWV2ZUZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGJvb2tfbm86IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgICAgIHJlY3ZfZGF0ZTogWycnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VuZEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIHNlbmRfdG86IFsnJ10sXG4gICAgICAgICAgICBib29rX25vOiBbJyddLFxuICAgICAgICAgICAgc2VuZF9kYXRlOiBbJyddLFxuICAgICAgICAgICAgaXNfaW1wb3J0YW50OiBbJyddLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIG5hbWU6IFsnJ10sXG4gICAgICAgICAgICBzdGVwX2lkOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgc3RlcF9kYXRlOiBbJyddLFxuICAgICAgICAgICAgcmVtYXJrOiBbJyddLFxuICAgICAgICAgICAgbGFzdFN0ZXA6IFsnJ10sXG4gICAgICAgICAgICBtb3JlRmllbGQ6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxuICAgICAgICAgICAgc29jX3JlY3Zfbm86IFsnJ10sXG4gICAgICAgICAgICBzb2NfcmVjdl9kYXRlOiBbJyddLFxuICAgICAgICAgICAgZ3RjX3JlY3Zfbm86IFsnJ10sXG4gICAgICAgICAgICBndGNfcmVjdl9kYXRlOiBbJyddLFxuICAgICAgICAgICAgYm9va19ubzogWycnXSxcbiAgICAgICAgICAgIGJvb2tfZGF0ZTogWycnXSxcbiAgICAgICAgICAgICdmb3InOiBbJyddLFxuICAgICAgICAgICAgZGVwdF9uYW1lOiBbJyddLFxuICAgICAgICAgICAgbWluaXN0cnk6IFsnJ11cblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBvcGVuKG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnN0ZXBEYXRhID0ge307XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnRpdGxlID0gb3B0aW9ucy50aXRsZSB8fCAnJztcbiAgICAgICAgICAgIHRoaXMubGFzdFN0ZXAgPSBvcHRpb25zLmRhdGEubGFzdFN0ZXA7XG4gICAgICAgICAgICB0aGlzLnN0ZXBEYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zLmRhdGEpKTtcbiAgICAgICAgICAgIHRoaXMuc3RlcERhdGEuc3RlcF9kYXRlID0gdGhpcy5kYXRlLmdldE5vdygpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3RlcERhdGFbJ2xhc3RTdGVwJ107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdExpc3QgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvZGIvY3Rfc3RlcD9fd2hlcmU9KGNhdGVnb3J5X2lkLGVxLCcgKyBvcHRpb25zLmRhdGEuY2F0ZWdvcnlfaWQgKyAnKSZfc29ydD1zZXFfbm8nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwbG9hZEF0dGFjaG1lbnQuY2xlYXJWYWx1ZSgpO1xuICAgICAgICB0aGlzLm1vZGFsLnNob3coKTtcbiAgICB9XG5cbiAgICBmKCkgeyByZXR1cm4gdGhpcy5yZWdpc3RlckZvcm0uY29udHJvbHM7IH1cbiAgICBmcygpIHsgcmV0dXJuIHRoaXMuc2VuZEZvcm0uY29udHJvbHM7IH1cbiAgICBmcigpIHsgcmV0dXJuIHRoaXMucmVjaWV2ZUZvcm0uY29udHJvbHM7IH1cblxuICAgIGNsb3NlTW9kYWwoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0TGlzdCA9IFtdO1xuICAgICAgICB0aGlzLnNlbmRMaXN0ID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc01vcmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tb3JlRmllbGQgPSBbXTtcbiAgICAgICAgdGhpcy5zdGVwRGF0YSA9IHt9O1xuICAgICAgICB0aGlzLmxhc3RTdGVwID0gJyc7XG4gICAgICAgIHRoaXMubW9kYWwuaGlkZSgpO1xuICAgIH1cblxuICAgIGNsb3NlU2VuZE1vZGFsKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZFNlbmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZW5kRGF0YSA9IHt9O1xuICAgICAgICB0aGlzLmlzRWRpdFNlbmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50bXBEYXRhID0ge307XG4gICAgICAgIHRoaXMuc2VuZE1vZGFsLmhpZGUoKTtcbiAgICB9XG5cbiAgICBjbG9zZVJlY2lldmVNb2RhbCgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWRSZWNpZXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVjaWV2ZURhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5pc0VkaXRSZWNpZXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG1wRGF0YSA9IHt9O1xuICAgICAgICB0aGlzLnJlY2lldmVNb2RhbC5oaWRlKCk7XG4gICAgfVxuXG4gICAgb25ZZXNDbGljayhtb2RhbCkge1xuICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgfVxuXG4gICAgb25Ob0NsaWNrKG1vZGFsKSB7XG4gICAgICAgIG1vZGFsLmhpZGUoKTtcbiAgICB9XG5cbiAgICBvbkhpZGRlbigkZXZlbnQ6IE1vZGFsRGlyZWN0aXZlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdMT0cgTUVTU0FHRTogTW9kYWxDb25maXJtIC0+IG9uSGlkZGVuIC0+ICRldmVudCcsICRldmVudCk7XG5cbiAgICB9XG4gICAgXG4gICAgdmFsdWVTZWxldGVNaW5pc3RyeSh2YWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJfcmVmX2V4dF9kZXBhcnRtZW50X2lkX3Nob3cgPSBmYWxzZTtcbiAgICAgIGNvbnNvbGUubG9nKCd2YWx1ZScsIHZhbHVlKVxuICAgICAgLy8gdGhpcy5zdGVwRGF0YS5taW5pc3RyeV9pZCA9IHZhbHVlICYmIHZhbHVlLmlkID8gdmFsdWUuaWQgOiBudWxsXG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaWQpIHtcbiAgICAgICAgdGhpcy5zdGVwRGF0YS5kZXB0X25hbWUgPSBudWxsXG4gICAgICAgIHRoaXMuZmlsdGVyX3JlZl9leHRfZGVwYXJ0bWVudF9pZCA9IGAmX3doZXJlPShyZWZfZXh0X2RlcGFydG1lbnRfaWQsZXEsJHt2YWx1ZS5pZH0pJGFuZCh0eXBlLGluLDIsMyw0LDUpYFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJfcmVmX2V4dF9kZXBhcnRtZW50X2lkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJfcmVmX2V4dF9kZXBhcnRtZW50X2lkX3Nob3cgPSB0cnVlO1xuICAgICAgfSwgNTApXG5cbiAgICB9XG5cbiAgICB2YWx1ZVNlbGV0ZURlcHROYW1lKHZhbHVlKSB7XG4gICAgICBjb25zb2xlLmxvZygndmFsdWUnLCB2YWx1ZSlcbiAgICAgIHRoaXMuc3RlcERhdGEuY29kZV9kZXB0ID0gdmFsdWUgJiYgdmFsdWUuaWQgPyB2YWx1ZS5pZCA6IG51bGxcbiAgICB9XG5cblxuICAgIGFzeW5jIGNoZWNrRXh0cmFGaWVsZCgpIHtcbiAgICAgICAgdGhpcy5zdGVwRGF0YS5zdGVwX2lkID0gdGhpcy5zZWxlY3RlZFN0ZXAuaWQ7XG4gICAgICAgIHRoaXMuc3RlcERhdGEuc3RlcF9uYW1lID0gdGhpcy5zZWxlY3RlZFN0ZXAubmFtZTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5pc01vcmUpO1xuICAgICAgICB0aGlzLm1vcmVGaWVsZCA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFN0ZXAuZmxhZyAmJiB0aGlzLnNlbGVjdGVkU3RlcC5mbGFnICE9PSAnJykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkU3RlcC5mbGFnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmxhZyA9IHRoaXMuc2VsZWN0ZWRTdGVwLmZsYWcuY2hhckF0KGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVGbGFnID0gdGhpcy5zZWxlY3RlZFN0ZXAucmVxdWlyZV9mbGFnID8gdGhpcy5zZWxlY3RlZFN0ZXAucmVxdWlyZV9mbGFnLmNoYXJBdChpKSA6IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgY3Rfc3RlcF9mbGFnID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCgnL2RiL2N0X3N0ZXBfZmxhZz9fd2hlcmU9KGZsYWcsZXEsJyArIGZsYWcgKyAnKScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0ZpZWxkID0gY3Rfc3RlcF9mbGFnWzBdO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkRmllbGQobmV3RmllbGQsICtyZXF1aXJlRmxhZyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3JlRmllbGQucHVzaChuZXdGaWVsZCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5mKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNNb3JlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzUmVjaWV2ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc01vcmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU3RlcC50eXBlX2lkID09PSA4IHx8IHRoaXMuc2VsZWN0ZWRTdGVwLnR5cGVfaWQgPT09IDEzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBhcnRtZW50TGlzdCA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy9kYi9jdF9leHRfZGVwYXJ0bWVudD9fc29ydD1uYW1lJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBhcnRtZW50TGlzdCA9IHRoaXMuZGVwYXJ0bWVudExpc3QubWFwKGEgPT4gYS5uYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1JlY2lldmUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFN0ZXAudHlwZV9pZCA9PT0gOSB8fCB0aGlzLnNlbGVjdGVkU3RlcC50eXBlX2lkID09PSAxNCkge1xuICAgICAgICAgICAgLy8gICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdCgnL3NxbC9nZXRMYXN0U2VuZCcsIHRoaXMuc3RlcERhdGEpO1xuICAgICAgICAgICAgLy8gICAgIGlmIChkYXRhLnJlc3VsdERhdGEgJiYgZGF0YS5yZXN1bHREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgY29uc3QgY3Rfc3RlcF9kYXRhX2lkID0gZGF0YS5yZXN1bHREYXRhWzBdLmlkO1xuICAgICAgICAgICAgLy8gICAgICAgICBjb25zdCBjdF9zZW5kTGlzdCA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy9kYi9jdF9zZW5kP193aGVyZT0oY3Rfc3RlcF9kYXRhX2lkLGVxLCcgKyBjdF9zdGVwX2RhdGFfaWQgKyAnKScpO1xuICAgICAgICAgICAgLy8gICAgICAgICBmb3IgKGNvbnN0IGN0X3NlbmQgb2YgY3Rfc2VuZExpc3QpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IHJlY3ZEYXRhOiBhbnkgPSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgY3Rfc2VuZF9pZDogY3Rfc2VuZC5pZCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBzZW5kX2Jvb2tfbm86IGN0X3NlbmQuYm9va19ubyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBzZW5kX2RhdGU6IGN0X3NlbmQuc2VuZF9kYXRlLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIHJlY3ZfZnJvbTogY3Rfc2VuZC5zZW5kX3RvLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIG5hbWU6IGN0X3NlbmQubmFtZVxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHRoaXMucmVjaWV2ZUxpc3QucHVzaChyZWN2RGF0YSk7XG4gICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5pc1JlY2lldmUgPSB0cnVlO1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuaXNTZW5kID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1JlY2lldmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEZpZWxkSWQoZGF0YSkge1xuICAgICAgICBsZXQgaWQgPSAnJztcbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBpZCArPSAndHh0JztcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgICAgICAgIGlkICs9ICd0eHQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWQgKz0gJ3R4dCc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmllbGQgPSBkYXRhLmZpZWxkX25hbWUuY2hhckF0KDApLnRvTG9jYWxlVXBwZXJDYXNlKCkgKyBkYXRhLmZpZWxkX25hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICBpZCArPSBmaWVsZDtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cblxuICAgIGFkZEZpZWxkKGRhdGEsIHJlcXVpcmVkKSB7XG4gICAgICAgIGxldCBjb250cm9sOmFueSA9IDxGb3JtQXJyYXk+dGhpcy5yZWdpc3RlckZvcm0uY29udHJvbHNbJ21vcmVGaWVsZCddO1xuICAgICAgICBsZXQgbmV3Z3JvdXA7XG4gICAgICAgIHRoaXMuc3RlcERhdGFbZGF0YS5maWVsZF9uYW1lXSA9IG51bGw7XG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gWycnXTtcbiAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbJycsVmFsaWRhdG9ycy5yZXF1aXJlZCwgQ3VzdG9tVmFsaWRhdG9ycy5kYXRlXTtcbiAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFsnJ107XG4gICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RlcERhdGFbZGF0YS5maWVsZF9uYW1lXSA9IHRoaXMuZGF0ZS5nZXROb3coKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFsnJ107XG4gICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdzcGVjaWFsJyl7XG4gICAgICAgICAgICBpZihkYXRhLmZpZWxkX25hbWUgPT09ICdhbW91bnQnKXtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbJ2Ftb3VudF90eXBlJ10gPSBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFsnJ107XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwWydhbW91bnRfdHlwZSddID0gWycnXTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZSBpZihkYXRhLmZpZWxkX25hbWUgPT09ICdmb2xsb3cnKXtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbJ2ZvbGxvd19yZW1hcmsnXSA9IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gWycnXTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbJ2ZvbGxvd19yZW1hcmsnXSA9IFsnJ107XG4gICAgICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gWycnXTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250cm9sLnB1c2gobmV3Z3JvdXApO1xuICAgIH1cblxuICAgIGdldFZhbGlkYXRlTW9yZUZpZWxkKGksIGZpZWxkLCB2YWxpZGF0ZVR5cGU/KSB7XG4gICAgICAgIGxldCBmb3JtTW9yZUZpZWxkOiBhbnkgPSB0aGlzLmYoKVsnbW9yZUZpZWxkJ107XG4gICAgICAgIGlmICh2YWxpZGF0ZVR5cGUpIHtcbiAgICAgICAgICAgIGZvcm1Nb3JlRmllbGQgPSBmb3JtTW9yZUZpZWxkLmNvbnRyb2xzW2ldO1xuICAgICAgICAgICAgZm9ybU1vcmVGaWVsZCA9IGZvcm1Nb3JlRmllbGQuY29udHJvbHNbZmllbGRdO1xuICAgICAgICAgICAgaWYgKGZvcm1Nb3JlRmllbGQuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1Nb3JlRmllbGQuZXJyb3JzW3ZhbGlkYXRlVHlwZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtTW9yZUZpZWxkLmVycm9ycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtTW9yZUZpZWxkLmVycm9ycztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFJvd0luZGV4KGRhdGEpIHtcbiAgICAgICAgaWYgKCFkYXRhLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBubyA9IGRhdGEucm93LmRhdGFJbmRleCArIDE7XG4gICAgICAgIHJldHVybiBubztcbiAgICB9XG5cbiAgICBvbkNlbGxQcmVwYXJlZChlKSB7XG4gICAgICAgIGlmIChlLnJvd1R5cGUgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIGUuY29tcG9uZW50LmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5jb2x1bW4uZGF0YUZpZWxkID09PSBlLmNvbXBvbmVudC5jb2x1bW5zW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGUuY2VsbEVsZW1lbnQuYWNjZXNzS2V5ID0gZS5jb21wb25lbnQuY29sdW1uc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRTZW5kKCl7XG4gICAgICAgIHRoaXMuc2VuZERhdGEuc2VuZF9kYXRlID0gdGhpcy5kYXRlLmdldE5vdygpO1xuICAgICAgICB0aGlzLnNlbmRNb2RhbC5zaG93KCk7XG4gICAgfVxuXG4gICAgZWRpdFNlbmQoZGF0YSkge1xuICAgICAgICB0aGlzLnRtcERhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLnNlbmREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIC8vIHRoaXMuc2VuZERhdGEuc2VuZF9kYXRlID0gbmV3IERhdGUodGhpcy5zZW5kRGF0YS5zZW5kX2RhdGUpO1xuICAgICAgICB0aGlzLmlzRWRpdFNlbmQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbmRNb2RhbC5zaG93KCk7XG4gICAgfVxuXG4gICAgZWRpdFJlY2lldmUoZGF0YSkge1xuICAgICAgICB0aGlzLnRtcERhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLnJlY2lldmVEYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIHRoaXMucmVjaWV2ZURhdGEucmVjdl9kYXRlID0gdGhpcy5yZWNpZXZlRGF0YS5yZWN2X2RhdGUgPyBuZXcgRGF0ZSh0aGlzLnJlY2lldmVEYXRhLnJlY3ZfZGF0ZSkgOiB0aGlzLnJlY2lldmVEYXRhLnJlY3ZfZGF0ZTtcbiAgICAgICAgdGhpcy5pc0VkaXRSZWNpZXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWNpZXZlTW9kYWwuc2hvdygpO1xuICAgIH1cblxuICAgIGZpbHRlckRlcGFydG1lbnRzKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWREZXBhcnRtZW50cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGVwYXJ0bWVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcGFydG1lbnQgPSB0aGlzLmRlcGFydG1lbnRMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKGRlcGFydG1lbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKGV2ZW50LnF1ZXJ5LnRvTG93ZXJDYXNlKCkpID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudHMucHVzaChkZXBhcnRtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIG9uU3VibWl0KCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIC8vIOC4luC5ieC4siBmb3JtIOC5hOC4oeC5iOC4hOC4o+C4muC4q+C4o+C4t+C4reC4nOC4tOC4lOC4leC4suC4oeC5gOC4h+C4t+C5iOC4reC4meC5hOC4guC4l+C4teC5iOC4leC4seC5ieC4h+C5hOC4p+C5ieC4iOC4sOC4iOC4muC4l+C4teC5iOC4leC4o+C4h+C4meC4teC5iVxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5yZWdpc3RlckZvcm0uaW52YWxpZDogJywgdGhpcy5yZWdpc3RlckZvcm0uaW52YWxpZCk7XG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyRm9ybS5pbnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBvc3REYXRhID0gW107XG4gICAgICAgIGxldCBkYXRhID0gXy5jbG9uZURlZXAodGhpcy5zdGVwRGF0YSk7XG4gICAgICAgIGRhdGEuYWN0aW9uID0gXCJhZGRcIjtcbiAgICAgICAgbGV0IHVzZXJEYXRhOmFueSA9IHRoaXMuYjJiU2VydmljZS5nZXRWZXJpZnlUb2tlbigpO1xuICAgICAgICBkYXRhLnVzZXJuYW1lID0gdXNlckRhdGEudXNlcm5hbWU7XG4gICAgICAgIGlmKGRhdGEucmVtaW5kX2RhdGUpIGRhdGEucmVtaW5kX2RhdGUgPSB0aGlzLmRhdGUuZ2V0Tm93KCkuYWRkKGRhdGEucmVtaW5kX2RhdGUsICdkJykudG9EYXRlKCk7XG4gICAgICAgIGRlbGV0ZSBkYXRhW1wiY3RfbWFpbl9pZFwiXTtcbiAgICAgICAgZGVsZXRlIGRhdGFbXCJ1cGRhdGVfZGF0ZVwiXTtcbiAgICAgICAgbGV0IG1haW4gPSB7XG4gICAgICAgICAgICBcImN0X3N0ZXBfZGF0YVwiOltkYXRhXVxuICAgICAgICB9XG4gICAgICAgIHBvc3REYXRhLnB1c2gobWFpbik7XG4gICAgICAgIGlmKHRoaXMuc2VuZExpc3QgJiYgdGhpcy5zZW5kTGlzdC5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgIGxldCBjdF9zZW5kID0ge1xuICAgICAgICAgICAgICAgIFwiY3Rfc2VuZFwiOltdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IGN0X3JlY2lldmUgPSB7XG4gICAgICAgICAgICAgICAgXCJjdF9yZWNpZXZlXCI6W11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IobGV0IGRhdGEgb2YgdGhpcy5zZW5kTGlzdCl7XG4gICAgICAgICAgICAgICAgZGF0YS5uYW1lID0gZGF0YS5uYW1lO1xuICAgICAgICAgICAgICAgIGRhdGEuYWN0aW9uID0gXCJhZGRcIjtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YS5pZDtcbiAgICAgICAgICAgICAgICBjdF9zZW5kLmN0X3NlbmQucHVzaChkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvc3REYXRhLnB1c2goY3Rfc2VuZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5yZWNpZXZlTGlzdCAmJiB0aGlzLnJlY2lldmVMaXN0Lmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgbGV0IGN0X3JlY2lldmUgPSB7XG4gICAgICAgICAgICAgICAgXCJjdF9yZWNpZXZlXCI6W11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IobGV0IGRhdGEgb2YgdGhpcy5yZWNpZXZlTGlzdCl7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbJ3NlbmRfYm9va19ubyddO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhWydzZW5kX2RhdGUnXTtcbiAgICAgICAgICAgICAgICBkYXRhLm5hbWUgPSBkYXRhLm5hbWU7XG4gICAgICAgICAgICAgICAgZGF0YS5hY3Rpb24gPSBcImFkZFwiO1xuICAgICAgICAgICAgICAgIGN0X3JlY2lldmUuY3RfcmVjaWV2ZS5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9zdERhdGEucHVzaChjdF9yZWNpZXZlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygncG9zdERhdGEnLHBvc3REYXRhKTtcbiAgICAgICAgLy8gaWYodGhpcy5tb2RlID09PSAnRURJVCcpe1xuICAgICAgICBsZXQgcG9zdFJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3QoXCIvY3QvbWFpblwiLHBvc3REYXRhKTtcbiAgICAgICAgaWYodGhpcy5zdGVwRGF0YS51cGRhdGVfZGF0ZSl7XG4gICAgICAgICAgbGV0IHN0ZXBMaXN0ID0gYXdhaXQgdGhpcy5nZXRTdGVwTGlzdCgpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwic3RlcExpc3RcIixzdGVwTGlzdClcbiAgICAgICAgICBpZihzdGVwTGlzdC5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdC5wdXQoXCIvZGIvXCIrdGhpcy5zdGVwRGF0YS5yZWZfdGFibGUrXCIvXCIrdGhpcy5zdGVwRGF0YS5yZWZfaWQse3N0YXR1czpzdGVwTGlzdFswXS5zdGVwX25hbWUsc3RhdHVzX2RhdGU6c3RlcExpc3RbMF0uc3RlcF9kYXRlfSk7XG4gICAgICAgICAgICB0aGlzLmNvbW1vbi5mbkNoZWNrUmVzcG9uc2UocG9zdFJlc3BvbnNlLCB0aGlzLm15TW9kYWwpXG4gICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3QucHV0KFwiL2RiL1wiK3RoaXMuc3RlcERhdGEucmVmX3RhYmxlK1wiL1wiK3RoaXMuc3RlcERhdGEucmVmX2lkLHtzdGF0dXM6dGhpcy5zdGVwRGF0YS5zdGVwX25hbWV9KTtcbiAgICAgICAgICB0aGlzLmNvbW1vbi5mbkNoZWNrUmVzcG9uc2UocG9zdFJlc3BvbnNlLCB0aGlzLm15TW9kYWwpXG4gICAgICAgIH1cblxuICAgICAgICAvLyB9ZWxzZXtcbiAgICAgICAgLy8gICAgIHRoaXMub25DcmVhdGVNb2RhbC5lbWl0KHBvc3REYXRhKTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIGFzeW5jIGdldFN0ZXBMaXN0KCkge1xuICAgICAgICBjb25zb2xlLmxvZygnZ2V0U3RlcExpc3QnKTtcbiAgICAgICAgbGV0IGZpbHRlciA9IHtcbiAgICAgICAgICAgIGZpbHRlcjp7XG4gICAgICAgICAgICAgICAgcmVmX3RhYmxlOlwiPVwiK3RoaXMuc3RlcERhdGEucmVmX3RhYmxlLFxuICAgICAgICAgICAgICAgIHJlZl9pZDp0aGlzLnN0ZXBEYXRhLnJlZl9pZCxcbiAgICAgICAgICAgICAgICBzeXN0ZW1faWQ6dGhpcy5zdGVwRGF0YS5zeXN0ZW1faWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmRlcl9ieTpbXCJzdGVwX2RhdGUgZGVzY1wiXVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdCgnL3NlYXJjaC9jdF9zdGVwX2RhdGEnLCBmaWx0ZXIpO1xuICAgICAgICByZXR1cm4gZGF0YS5yZXN1bHREYXRhIHx8IFtdO1xuICAgIH1cblxuXG4gICAgb25DbGlja0JhY2soKXtcbiAgICAgICAgdGhpcy5vblVwZGF0ZU1vZGFsLmVtaXQoKTtcbiAgICAgICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25TdWJtaXRTZW5kKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZFNlbmQgPSB0cnVlO1xuICAgICAgICAvLyDguJbguYnguLIgZm9ybSDguYTguKHguYjguITguKPguJrguKvguKPguLfguK3guJzguLTguJTguJXguLLguKHguYDguIfguLfguYjguK3guJnguYTguILguJfguLXguYjguJXguLHguYnguIfguYTguKfguYnguIjguLDguIjguJrguJfguLXguYjguJXguKPguIfguJnguLXguYlcbiAgICAgICAgaWYgKHRoaXMuc2VuZEZvcm0uaW52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRWRpdFNlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRtcExpc3QgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdG1wU2VuZCBvZiB0aGlzLnNlbmRMaXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRtcFNlbmQuaWQgPT09IHRoaXMudG1wRGF0YS5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0bXBMaXN0LnB1c2godGhpcy5zZW5kRGF0YSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG1wTGlzdC5wdXNoKHRtcFNlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VuZExpc3QgPSB0bXBMaXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZW5kRGF0YS5pZCA9IHRoaXMudGVtcElkO1xuICAgICAgICAgICAgdGhpcy50ZW1wSWQtLTtcbiAgICAgICAgICAgIHRoaXMuc2VuZExpc3QucHVzaCh0aGlzLnNlbmREYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlU2VuZE1vZGFsKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25TdWJtaXRSZWNpZXZlKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZFNlbmQgPSB0cnVlO1xuXG4gICAgICAgIC8vIOC4luC5ieC4siBmb3JtIOC5hOC4oeC5iOC4hOC4o+C4muC4q+C4o+C4t+C4reC4nOC4tOC4lOC4leC4suC4oeC5gOC4h+C4t+C5iOC4reC4meC5hOC4guC4l+C4teC5iOC4leC4seC5ieC4h+C5hOC4p+C5ieC4iOC4sOC4iOC4muC4l+C4teC5iOC4leC4o+C4h+C4meC4teC5iVxuICAgICAgICBpZiAodGhpcy5yZWNpZXZlRm9ybS5pbnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0UmVjaWV2ZSkge1xuICAgICAgICAgICAgY29uc3QgdG1wTGlzdCA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0bXBTZW5kIG9mIHRoaXMucmVjaWV2ZUxpc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAodG1wU2VuZC5yZWN2X2Zyb20gPT09IHRoaXMudG1wRGF0YS5yZWN2X2Zyb20pIHtcbiAgICAgICAgICAgICAgICAgICAgdG1wTGlzdC5wdXNoKHRoaXMucmVjaWV2ZURhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRtcExpc3QucHVzaCh0bXBTZW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlY2lldmVMaXN0ID0gdG1wTGlzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVjaWV2ZUxpc3QucHVzaCh0aGlzLnJlY2lldmVEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlUmVjaWV2ZU1vZGFsKCk7XG4gICAgfVxuICAgIGlzSW1wb3J0YW50KGRhdGEpe1xuICAgICAgICByZXR1cm4gZGF0YS5pc19pbXBvcnRhbnQ/XCLguKrguLPguITguLHguI1cIjpcIlwiO1xuICAgIH1cbiAgICBvblVwbG9hZGVkKGRhdGEpe1xuICAgICAgICB0aGlzLnN0ZXBEYXRhLnVybCA9IHRoaXMuYXR0YWNobWVudFVybCsnLycrZGF0YS51dWlkO1xuICAgICAgICB0aGlzLnN0ZXBEYXRhLnV1aWQgPSBkYXRhLnV1aWQ7XG4gICAgfVxuICAgIGNoZWNrRGlzYWJsZShmaWVsZCl7XG4gICAgICAgIGlmKHRoaXMuc3RlcERhdGFbZmllbGQuZmllbGRfbmFtZV0gIT09ICfguYTguKHguYjguJfguLLguIfguIHguLLguKMnKXtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldEltYWdlTGluayhkYXRhKXtcbiAgICAgICAgbGV0IHVybCA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXRBdHRhY2htZW50TGlua1Rva2VuKGRhdGEudXJsKTtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG59XG4iXX0=