UNPKG

@kre-form/ant

Version:

361 lines 48.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component } from "@angular/core"; import * as differenceInCalendarDays_ from "date-fns/difference_in_calendar_days"; import { FieldType, KreFormCommonService } from "@kre-form/core"; import * as moment_ from "moment"; import { FormGlobalService } from "@kre-form/core"; /** @type {?} */ var moment = moment_; /** @type {?} */ var differenceInCalendarDays = differenceInCalendarDays_; var KreFormFieldDateTime = /** @class */ (function (_super) { tslib_1.__extends(KreFormFieldDateTime, _super); function KreFormFieldDateTime(globalService, commonService) { var _this = _super.call(this) || this; _this.globalService = globalService; _this.commonService = commonService; _this.disabledDate = (/** * @param {?} current * @return {?} */ function (current) { if (!!(/** @type {?} */ (_this.to)).maxDate && !!(/** @type {?} */ (_this.to)).minDate) { return (differenceInCalendarDays(current, new Date((/** @type {?} */ (_this.to)).maxDate)) > 0 || differenceInCalendarDays(current, new Date((/** @type {?} */ ((/** @type {?} */ (_this.to)).minDate)))) < 0); } else if (!!(/** @type {?} */ (_this.to)).maxDate && !(/** @type {?} */ (_this.to)).minDate) { return differenceInCalendarDays(current, new Date((/** @type {?} */ (_this.to)).maxDate)) > 0; } else if (!(/** @type {?} */ (_this.to)).maxDate && !!(/** @type {?} */ (_this.to)).minDate) { return differenceInCalendarDays(current, new Date((/** @type {?} */ (_this.to)).minDate)) < 0; } else { return false; } }); _this.disabledDateTime = (/** * @param {?} e * @return {?} */ function (e) { /** @type {?} */ var nzDisabledHours = []; /** @type {?} */ var nzDisabledMinutes = []; if (!!(/** @type {?} */ (_this.to)).maxDate && !!(/** @type {?} */ (_this.to)).minDate) { if (differenceInCalendarDays(e, new Date((/** @type {?} */ (_this.to)).minDate)) === 0) { nzDisabledHours = _this.range(-1, new Date((/** @type {?} */ (_this.to)).minDate).getHours()); if (!!e && new Date((/** @type {?} */ (_this.to)).minDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(-1, new Date((/** @type {?} */ (_this.to)).minDate).getMinutes()); } } if (differenceInCalendarDays(e, new Date((/** @type {?} */ (_this.to)).maxDate)) === 0) { nzDisabledHours = tslib_1.__spread(nzDisabledHours, _this.range(new Date((/** @type {?} */ (_this.to)).maxDate).getHours() + 1, 24)); if (!!e && new Date((/** @type {?} */ (_this.to)).maxDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = tslib_1.__spread(nzDisabledMinutes, _this.range(new Date((/** @type {?} */ (_this.to)).maxDate).getMinutes(), 60)); } } } else if (!!(/** @type {?} */ (_this.to)).maxDate && !(/** @type {?} */ (_this.to)).minDate) { if (!!e && differenceInCalendarDays(e, new Date((/** @type {?} */ (_this.to)).maxDate)) === 0) { nzDisabledHours = _this.range(new Date((/** @type {?} */ (_this.to)).maxDate).getHours() + 1, 24); if (!!e && new Date((/** @type {?} */ (_this.to)).maxDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(new Date((/** @type {?} */ (_this.to)).maxDate).getMinutes(), 60); } } } else if (!(/** @type {?} */ (_this.to)).maxDate && !!(/** @type {?} */ (_this.to)).minDate) { if (!!e && differenceInCalendarDays(e, new Date((/** @type {?} */ (_this.to)).minDate)) === 0) { nzDisabledHours = _this.range(0, new Date((/** @type {?} */ (_this.to)).minDate).getHours()); if (!!e && new Date((/** @type {?} */ (_this.to)).minDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(-1, new Date((/** @type {?} */ (_this.to)).minDate).getMinutes()); } } } return { nzDisabledHours: (/** * @return {?} */ function () { return nzDisabledHours; }), nzDisabledMinutes: (/** * @return {?} */ function () { return nzDisabledMinutes; }), nzDisabledSeconds: (/** * @return {?} */ function () { return []; }), }; }); _this.disabledHours = (/** * @return {?} */ function () { /** @type {?} */ var nzDisabledHours = []; if (!!(/** @type {?} */ (_this.to)).maxDate && !!(/** @type {?} */ (_this.to)).minDate) { nzDisabledHours = _this.range(-1, new Date((/** @type {?} */ (_this.to)).minDate).getHours()); nzDisabledHours = nzDisabledHours.concat(_this.range(new Date((/** @type {?} */ (_this.to)).maxDate).getHours() + 1, 24)); } else if (!!(/** @type {?} */ (_this.to)).maxDate && !(/** @type {?} */ (_this.to)).minDate) { nzDisabledHours = _this.range(new Date((/** @type {?} */ (_this.to)).maxDate).getHours() + 1, 24); } else if (!(/** @type {?} */ (_this.to)).maxDate && !!(/** @type {?} */ (_this.to)).minDate) { nzDisabledHours = _this.range(0, new Date((/** @type {?} */ (_this.to)).minDate).getHours()); } return nzDisabledHours; }); _this.disabledMinutes = (/** * @param {?} e * @return {?} */ function (e) { /** @type {?} */ var nzDisabledMinutes = []; if (!!(/** @type {?} */ (_this.to)).maxDate && !!(/** @type {?} */ (_this.to)).minDate) { if (differenceInCalendarDays(e, new Date((/** @type {?} */ (_this.to)).minDate)) === 0) { if (!!e && new Date((/** @type {?} */ (_this.to)).minDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(-1, new Date((/** @type {?} */ (_this.to)).minDate).getMinutes()); } } if (differenceInCalendarDays(e, new Date((/** @type {?} */ (_this.to)).maxDate)) === 0) { if (!!e && new Date((/** @type {?} */ (_this.to)).maxDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(new Date((/** @type {?} */ (_this.to)).maxDate).getMinutes(), 60); } } } else if (!!(/** @type {?} */ (_this.to)).maxDate && !(/** @type {?} */ (_this.to)).minDate) { if (!!e && differenceInCalendarDays(e, new Date((/** @type {?} */ (_this.to)).maxDate)) === 0) { if (!!e && new Date((/** @type {?} */ (_this.to)).maxDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(new Date((/** @type {?} */ (_this.to)).maxDate).getMinutes(), 60); } } } else if (!(/** @type {?} */ (_this.to)).maxDate && !!(/** @type {?} */ (_this.to)).minDate) { if (!!e && differenceInCalendarDays(e, new Date((/** @type {?} */ (_this.to)).minDate)) === 0) { if (!!e && new Date((/** @type {?} */ (_this.to)).minDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(-1, new Date((/** @type {?} */ (_this.to)).minDate).getMinutes()); } } } return nzDisabledMinutes; }); return _this; } /** * * @param e * @param global 该变量是用来做之前的兼容,具体用来干什么 需要看外部的调用 */ /** * * @param {?} e * @param {?} global 该变量是用来做之前的兼容,具体用来干什么 需要看外部的调用 * @return {?} */ KreFormFieldDateTime.prototype.nzOnOpenChange = /** * * @param {?} e * @param {?} global 该变量是用来做之前的兼容,具体用来干什么 需要看外部的调用 * @return {?} */ function (e, global) { if (global == true) { if (!!this.field && !!this.field.templateOptions && this.field.templateOptions.enableInterface) { this.globalService.notifyDataChanged("DateTimeClick", { rdm: Math.random(), config: this.field, state: e, }); } } if (e == false && this.to != undefined && this.to != null && this.to.blur != undefined && this.to.blur != null) { this.to.blur(this.field, null); } }; Object.defineProperty(KreFormFieldDateTime.prototype, "format", { //datetime date month year time get: //datetime date month year time /** * @return {?} */ function () { /** @type {?} */ var result = "yyyy/MM/dd HH:mm"; if ((/** @type {?} */ (this.to))["format"] != undefined && (/** @type {?} */ (this.to))["format"] != null && (/** @type {?} */ (this.to))["format"] != "") { result = (/** @type {?} */ (this.to))["format"]; } return result; }, enumerable: true, configurable: true }); Object.defineProperty(KreFormFieldDateTime.prototype, "showType", { get: /** * @return {?} */ function () { /** @type {?} */ var result = "datetime"; if ((/** @type {?} */ (this.to))["type"] != undefined && (/** @type {?} */ (this.to))["type"] != null && (/** @type {?} */ (this.to))["type"] != "") { result = (/** @type {?} */ (this.to))["type"].toLowerCase(); } return result; }, enumerable: true, configurable: true }); /** * @return {?} */ KreFormFieldDateTime.prototype.getText = /** * @return {?} */ function () { /** @type {?} */ var result = ""; if ((/** @type {?} */ (this.to)).type === undefined || (/** @type {?} */ (this.to)).type === null || (/** @type {?} */ (this.to)).type === "") { (/** @type {?} */ (this.to)).type = "datetime"; } if (this.model != undefined && this.model != null && this.field != undefined && this.field != null && this.field.key != undefined && this.field.key != null && this.model[this.field.key] != undefined && this.model[this.field.key] != null && this.model[this.field.key] != "") { if (moment(this.model[this.field.key]).isValid()) { /** @type {?} */ var date = this.model[this.field.key]; switch ((/** @type {?} */ (this.to)).type) { case "datetime": result = moment(date).format("YYYY/MM/DD HH:mm"); break; case "date": result = moment(date).format("YYYY/MM/DD"); break; case "year": result = moment(date).format("YYYY"); break; case "month": result = moment(date).format("YYYY/MM"); break; case "time": result = moment(date).format("HH:mm"); break; } } } return result; }; // differenceInCalendarDays(e: Date | null, date: Date): number { // if (!!e) { // return e.getDate() - date.getDate(); // } else { // return 0; // } // } // differenceInCalendarDays(e: Date | null, date: Date): number { // if (!!e) { // return e.getDate() - date.getDate(); // } else { // return 0; // } // } /** * @param {?} start * @param {?} end * @return {?} */ KreFormFieldDateTime.prototype.range = // differenceInCalendarDays(e: Date | null, date: Date): number { // if (!!e) { // return e.getDate() - date.getDate(); // } else { // return 0; // } // } /** * @param {?} start * @param {?} end * @return {?} */ function (start, end) { /** @type {?} */ var result = []; for (var i = start; i < end; i++) { result.push(i); } return result; }; Object.defineProperty(KreFormFieldDateTime.prototype, "showToday", { get: /** * @return {?} */ function () { if (typeof this.to.today === "undefined") { return true; } return !!this.to.today; }, enumerable: true, configurable: true }); KreFormFieldDateTime.decorators = [ { type: Component, args: [{ selector: "krefield-datetime", template: "\n <ng-container *ngIf=\"formStatus !== 0; else other\">\n <div class=\"control-design\">\n <input nz-input disabled />\n </div>\n </ng-container>\n\n <ng-template #other>\n <ng-container *ngIf=\"editor === true\">\n <ng-container [ngSwitch]=\"showType\">\n <ng-container *ngSwitchCase=\"'datetime'\">\n <nz-date-picker\n nzShowTime\n [nzShowTime]=\"{ nzFormat: 'HH:mm' }\"\n nzFormat=\"yyyy/MM/dd HH:mm\"\n [formControl]=\"formControl\"\n [kreFormAttributes]=\"field\"\n [class.is-invalid]=\"showError\"\n [nzDisabledDate]=\"disabledDate\"\n [nzDisabledTime]=\"disabledDateTime\"\n [nzPlaceHolder]=\"to.placeholder || undefined\"\n (nzOnOpenChange)=\"nzOnOpenChange($event, true)\"\n ></nz-date-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <nz-date-picker\n nzFormat=\"yyyy/MM/dd\"\n [formControl]=\"formControl\"\n [kreFormAttributes]=\"field\"\n [nzDisabledDate]=\"disabledDate\"\n [class.is-invalid]=\"showError\"\n [nzShowToday]=\"showToday\"\n [nzPlaceHolder]=\"to.placeholder || undefined\"\n (nzOnOpenChange)=\"nzOnOpenChange($event, false)\"\n ></nz-date-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"'year'\">\n <nz-year-picker\n nzFormat=\"yyyy\"\n [formControl]=\"formControl\"\n [kreFormAttributes]=\"field\"\n [class.is-invalid]=\"showError\"\n [nzPlaceHolder]=\"to.placeholder || undefined\"\n (nzOnOpenChange)=\"nzOnOpenChange($event, false)\"\n ></nz-year-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"'month'\">\n <nz-month-picker\n nzFormat=\"yyyy/MM\"\n [formControl]=\"formControl\"\n [kreFormAttributes]=\"field\"\n [class.is-invalid]=\"showError\"\n [nzPlaceHolder]=\"to.placeholder || undefined\"\n (nzOnOpenChange)=\"nzOnOpenChange($event, false)\"\n ></nz-month-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"'time'\">\n <nz-time-picker\n nzFormat=\"HH:mm\"\n [formControl]=\"formControl\"\n [kreFormAttributes]=\"field\"\n [class.is-invalid]=\"showError\"\n [nzDisabledHours]=\"disabledHours\"\n [nzDisabledMinutes]=\"disabledMinutes\"\n (nzOpenChange)=\"nzOnOpenChange($event, true)\"\n [nzPlaceHolder]=\"to.placeholder || undefined\"\n nzClearText=\"\"\n [nzPopupClassName]=\"field.className\"\n ></nz-time-picker>\n </ng-container>\n <ng-container *ngSwitchDefault></ng-container>\n </ng-container>\n </ng-container>\n\n <div class=\"fieldtext\" *ngIf=\"editor === false\">\n {{ getText() }}\n </div>\n </ng-template>\n " }] } ]; /** @nocollapse */ KreFormFieldDateTime.ctorParameters = function () { return [ { type: FormGlobalService }, { type: KreFormCommonService } ]; }; return KreFormFieldDateTime; }(FieldType)); export { KreFormFieldDateTime }; if (false) { /** @type {?} */ KreFormFieldDateTime.prototype.disabledDate; /** @type {?} */ KreFormFieldDateTime.prototype.disabledDateTime; /** @type {?} */ KreFormFieldDateTime.prototype.disabledHours; /** @type {?} */ KreFormFieldDateTime.prototype.disabledMinutes; /** * @type {?} * @private */ KreFormFieldDateTime.prototype.globalService; /** * @type {?} * @private */ KreFormFieldDateTime.prototype.commonService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aa3JlLWZvcm0vYW50LyIsInNvdXJjZXMiOlsibGliL3R5cGVzL2RhdGV0aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEtBQUsseUJBQXlCLE1BQU0sc0NBQXNDLENBQUM7QUFDbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7SUFFM0QsTUFBTSxHQUFHLE9BQU87O0lBQ2hCLHdCQUF3QixHQUFHLHlCQUF5QjtBQUUxRDtJQWtGMEMsZ0RBQVM7SUFDakQsOEJBQ1UsYUFBZ0MsRUFDaEMsYUFBbUM7UUFGN0MsWUFJRSxpQkFBTyxTQUNSO1FBSlMsbUJBQWEsR0FBYixhQUFhLENBQW1CO1FBQ2hDLG1CQUFhLEdBQWIsYUFBYSxDQUFzQjtRQXVHN0Msa0JBQVk7Ozs7UUFBRyxVQUFDLE9BQWE7WUFDM0IsSUFBSSxDQUFDLENBQUMsbUJBQUEsS0FBSSxDQUFDLEVBQUUsRUFBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsbUJBQUEsS0FBSSxDQUFDLEVBQUUsRUFBQyxDQUFDLE9BQU8sRUFBRTtnQkFDNUMsT0FBTyxDQUNMLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxtQkFBQSxLQUFJLENBQUMsRUFBRSxFQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDO29CQUNqRSx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsbUJBQUEsbUJBQUEsS0FBSSxDQUFDLEVBQUUsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ25FLENBQUM7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Q0UsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsd0JBQXdCLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLG1CQUFBLEtBQUksQ0FBQyxFQUFFLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFDN0Q7b0JBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLG1CQUFBLEtBQUksQ0FBQyxFQUFFLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO3dCQUNyRSxpQkFBaUIsR0FBRyxLQUFJLENBQUMsS0FBSyxDQUM1QixJQUFJLElBQUksQ0FBQyxtQkFBQSxLQUFJLENBQUMsRUFBRSxFQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQ3ZDLEVBQUUsQ0FDSCxDQUFDO3FCQUNIO2lCQUNGO2FBQ0Y7aUJBQU0sSUFBSSxDQUFDLG1CQUFBLEtBQUksQ0FBQyxFQUFFLEVBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLG1CQUFBLEtBQUksQ0FBQyxFQUFFLEVBQUMsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2xELElBQ0UsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsd0JBQXdCLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLG1CQUFBLEtBQUksQ0FBQyxFQUFFLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFDN0Q7b0JBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLG1CQUFBLEtBQUksQ0FBQyxFQUFFLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO3dCQUNyRSxpQkFBaUIsR0FBRyxLQUFJLENBQUMsS0FBSyxDQUM1QixDQUFDLENBQUMsRUFDRixJQUFJLElBQUksQ0FBQyxtQkFBQSxLQUFJLENBQUMsRUFBRSxFQUFDLENBQUMsT0FB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCAqIGFzIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5c18gZnJvbSBcImRhdGUtZm5zL2RpZmZlcmVuY2VfaW5fY2FsZW5kYXJfZGF5c1wiO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBLcmVGb3JtQ29tbW9uU2VydmljZSB9IGZyb20gXCJAa3JlLWZvcm0vY29yZVwiO1xuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBGaWVsZFdyYXBwZXIsIEZvcm1HbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIkBrcmUtZm9ybS9jb3JlXCI7XG5cbmNvbnN0IG1vbWVudCA9IG1vbWVudF87XG5jb25zdCBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXNfO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwia3JlZmllbGQtZGF0ZXRpbWVcIixcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybVN0YXR1cyAhPT0gMDsgZWxzZSBvdGhlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZGVzaWduXCI+XG4gICAgICAgIDxpbnB1dCBuei1pbnB1dCBkaXNhYmxlZCAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI290aGVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRvciA9PT0gdHJ1ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzaG93VHlwZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRldGltZSdcIj5cbiAgICAgICAgICAgIDxuei1kYXRlLXBpY2tlclxuICAgICAgICAgICAgICBuelNob3dUaW1lXG4gICAgICAgICAgICAgIFtuelNob3dUaW1lXT1cInsgbnpGb3JtYXQ6ICdISDptbScgfVwiXG4gICAgICAgICAgICAgIG56Rm9ybWF0PVwieXl5eS9NTS9kZCBISDptbVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFtrcmVGb3JtQXR0cmlidXRlc109XCJmaWVsZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cInNob3dFcnJvclwiXG4gICAgICAgICAgICAgIFtuekRpc2FibGVkRGF0ZV09XCJkaXNhYmxlZERhdGVcIlxuICAgICAgICAgICAgICBbbnpEaXNhYmxlZFRpbWVdPVwiZGlzYWJsZWREYXRlVGltZVwiXG4gICAgICAgICAgICAgIFtuelBsYWNlSG9sZGVyXT1cInRvLnBsYWNlaG9sZGVyIHx8IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgIChuek9uT3BlbkNoYW5nZSk9XCJuek9uT3BlbkNoYW5nZSgkZXZlbnQsIHRydWUpXCJcbiAgICAgICAgICAgID48L256LWRhdGUtcGlja2VyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxuICAgICAgICAgICAgPG56LWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgIG56Rm9ybWF0PVwieXl5eS9NTS9kZFwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFtrcmVGb3JtQXR0cmlidXRlc109XCJmaWVsZFwiXG4gICAgICAgICAgICAgIFtuekRpc2FibGVkRGF0ZV09XCJkaXNhYmxlZERhdGVcIlxuICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJzaG93RXJyb3JcIlxuICAgICAgICAgICAgICBbbnpTaG93VG9kYXldPVwic2hvd1RvZGF5XCJcbiAgICAgICAgICAgICAgW256UGxhY2VIb2xkZXJdPVwidG8ucGxhY2Vob2xkZXIgfHwgdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgKG56T25PcGVuQ2hhbmdlKT1cIm56T25PcGVuQ2hhbmdlKCRldmVudCwgZmFsc2UpXCJcbiAgICAgICAgICAgID48L256LWRhdGUtcGlja2VyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid5ZWFyJ1wiPlxuICAgICAgICAgICAgPG56LXllYXItcGlja2VyXG4gICAgICAgICAgICAgIG56Rm9ybWF0PVwieXl5eVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFtrcmVGb3JtQXR0cmlidXRlc109XCJmaWVsZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cInNob3dFcnJvclwiXG4gICAgICAgICAgICAgIFtuelBsYWNlSG9sZGVyXT1cInRvLnBsYWNlaG9sZGVyIHx8IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgIChuek9uT3BlbkNoYW5nZSk9XCJuek9uT3BlbkNoYW5nZSgkZXZlbnQsIGZhbHNlKVwiXG4gICAgICAgICAgICA+PC9uei15ZWFyLXBpY2tlcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbW9udGgnXCI+XG4gICAgICAgICAgICA8bnotbW9udGgtcGlja2VyXG4gICAgICAgICAgICAgIG56Rm9ybWF0PVwieXl5eS9NTVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFtrcmVGb3JtQXR0cmlidXRlc109XCJmaWVsZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cInNob3dFcnJvclwiXG4gICAgICAgICAgICAgIFtuelBsYWNlSG9sZGVyXT1cInRvLnBsYWNlaG9sZGVyIHx8IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgIChuek9uT3BlbkNoYW5nZSk9XCJuek9uT3BlbkNoYW5nZSgkZXZlbnQsIGZhbHNlKVwiXG4gICAgICAgICAgICA+PC9uei1tb250aC1waWNrZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RpbWUnXCI+XG4gICAgICAgICAgICA8bnotdGltZS1waWNrZXJcbiAgICAgICAgICAgICAgbnpGb3JtYXQ9XCJISDptbVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFtrcmVGb3JtQXR0cmlidXRlc109XCJmaWVsZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cInNob3dFcnJvclwiXG4gICAgICAgICAgICAgIFtuekRpc2FibGVkSG91cnNdPVwiZGlzYWJsZWRIb3Vyc1wiXG4gICAgICAgICAgICAgIFtuekRpc2FibGVkTWludXRlc109XCJkaXNhYmxlZE1pbnV0ZXNcIlxuICAgICAgICAgICAgICAobnpPcGVuQ2hhbmdlKT1cIm56T25PcGVuQ2hhbmdlKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICAgICBbbnpQbGFjZUhvbGRlcl09XCJ0by5wbGFjZWhvbGRlciB8fCB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICBuekNsZWFyVGV4dD1cIlwiXG4gICAgICAgICAgICAgIFtuelBvcHVwQ2xhc3NOYW1lXT1cImZpZWxkLmNsYXNzTmFtZVwiXG4gICAgICAgICAgICA+PC9uei10aW1lLXBpY2tlcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZHRleHRcIiAqbmdJZj1cImVkaXRvciA9PT0gZmFsc2VcIj5cbiAgICAgICAge3sgZ2V0VGV4dCgpIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBLcmVGb3JtRmllbGREYXRlVGltZSBleHRlbmRzIEZpZWxkVHlwZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZ2xvYmFsU2VydmljZTogRm9ybUdsb2JhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBLcmVGb3JtQ29tbW9uU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBlXG4gICAqIEBwYXJhbSBnbG9iYWwg6K+l5Y+Y6YeP5piv55So5p2l5YGa5LmL5YmN55qE5YW85a6577yM5YW35L2T55So5p2l5bmy5LuA5LmIIOmcgOimgeeci+WklumDqOeahOiwg+eUqFxuICAgKi9cbiAgbnpPbk9wZW5DaGFuZ2UoZTogYW55LCBnbG9iYWw6IGJvb2xlYW4pIHtcbiAgICBpZiAoZ2xvYmFsID09IHRydWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgISF0aGlzLmZpZWxkICYmXG4gICAgICAgICEhdGhpcy5maWVsZC50ZW1wbGF0ZU9wdGlvbnMgJiZcbiAgICAgICAgdGhpcy5maWVsZC50ZW1wbGF0ZU9wdGlvbnMuZW5hYmxlSW50ZXJmYWNlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLm5vdGlmeURhdGFDaGFuZ2VkKFwiRGF0ZVRpbWVDbGlja1wiLCB7XG4gICAgICAgICAgcmRtOiBNYXRoLnJhbmRvbSgpLFxuICAgICAgICAgIGNvbmZpZzogdGhpcy5maWVsZCxcbiAgICAgICAgICBzdGF0ZTogZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZSA9PSBmYWxzZSAmJlxuICAgICAgdGhpcy50byAhPSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMudG8gIT0gbnVsbCAmJlxuICAgICAgdGhpcy50by5ibHVyICE9IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy50by5ibHVyICE9IG51bGxcbiAgICApIHtcbiAgICAgIHRoaXMudG8uYmx1cih0aGlzLmZpZWxkLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICAvL2RhdGV0aW1lIGRhdGUgbW9udGggeWVhciB0aW1lXG4gIGdldCBmb3JtYXQoKSB7XG4gICAgbGV0IHJlc3VsdCA9IFwieXl5eS9NTS9kZCBISDptbVwiO1xuICAgIGlmIChcbiAgICAgIHRoaXMudG8hW1wiZm9ybWF0XCJdICE9IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy50byFbXCJmb3JtYXRcIl0gIT0gbnVsbCAmJlxuICAgICAgdGhpcy50byFbXCJmb3JtYXRcIl0gIT0gXCJcIlxuICAgICkge1xuICAgICAgcmVzdWx0ID0gdGhpcy50byFbXCJmb3JtYXRcIl07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZ2V0IHNob3dUeXBlKCkge1xuICAgIGxldCByZXN1bHQgPSBcImRhdGV0aW1lXCI7XG4gICAgaWYgKFxuICAgICAgdGhpcy50byFbXCJ0eXBlXCJdICE9IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy50byFbXCJ0eXBlXCJdICE9IG51bGwgJiZcbiAgICAgIHRoaXMudG8hW1widHlwZVwiXSAhPSBcIlwiXG4gICAgKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnRvIVtcInR5cGVcIl0udG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldFRleHQoKSB7XG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgaWYgKFxuICAgICAgdGhpcy50byEudHlwZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLnRvIS50eXBlID09PSBudWxsIHx8XG4gICAgICB0aGlzLnRvIS50eXBlID09PSBcIlwiXG4gICAgKSB7XG4gICAgICB0aGlzLnRvIS50eXBlID0gXCJkYXRldGltZVwiO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLm1vZGVsICE9IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5tb2RlbCAhPSBudWxsICYmXG4gICAgICB0aGlzLmZpZWxkICE9IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5maWVsZCAhPSBudWxsICYmXG4gICAgICB0aGlzLmZpZWxkLmtleSAhPSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZmllbGQua2V5ICE9IG51bGwgJiZcbiAgICAgIHRoaXMubW9kZWxbdGhpcy5maWVsZC5rZXldICE9IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5tb2RlbFt0aGlzLmZpZWxkLmtleV0gIT0gbnVsbCAmJlxuICAgICAgdGhpcy5tb2RlbFt0aGlzLmZpZWxkLmtleV0gIT0gXCJcIlxuICAgICkge1xuICAgICAgaWYgKG1vbWVudCh0aGlzLm1vZGVsW3RoaXMuZmllbGQua2V5XSkuaXNWYWxpZCgpKSB7XG4gICAgICAgIGNvbnN0IGRhdGU6IGFueSA9IHRoaXMubW9kZWxbdGhpcy5maWVsZC5rZXldO1xuICAgICAgICBzd2l0Y2ggKHRoaXMudG8hLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcbiAgICAgICAgICAgIHJlc3VsdCA9IG1vbWVudChkYXRlKS5mb3JtYXQoXCJZWVlZL01NL0REIEhIOm1tXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgIHJlc3VsdCA9IG1vbWVudChkYXRlKS5mb3JtYXQoXCJZWVlZL01NL0REXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcInllYXJcIjpcbiAgICAgICAgICAgIHJlc3VsdCA9IG1vbWVudChkYXRlKS5mb3JtYXQoXCJZWVlZXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIm1vbnRoXCI6XG4gICAgICAgICAgICByZXN1bHQgPSBtb21lbnQoZGF0ZSkuZm9ybWF0KFwiWVlZWS9NTVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJ0aW1lXCI6XG4gICAgICAgICAgICByZXN1bHQgPSBtb21lbnQoZGF0ZSkuZm9ybWF0KFwiSEg6bW1cIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRpc2FibGVkRGF0ZSA9IChjdXJyZW50OiBEYXRlKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCEhdGhpcy50byEubWF4RGF0ZSAmJiAhIXRoaXMudG8hLm1pbkRhdGUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhjdXJyZW50LCBuZXcgRGF0ZSh0aGlzLnRvIS5tYXhEYXRlKSkgPiAwIHx8XG4gICAgICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhjdXJyZW50LCBuZXcgRGF0ZSh0aGlzLnRvIS5taW5EYXRlISkpIDwgMFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCEhdGhpcy50byEubWF4RGF0ZSAmJiAhdGhpcy50byEubWluRGF0ZSkge1xuICAgICAgcmV0dXJuIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhjdXJyZW50LCBuZXcgRGF0ZSh0aGlzLnRvIS5tYXhEYXRlKSkgPiAwO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudG8hLm1heERhdGUgJiYgISF0aGlzLnRvIS5taW5EYXRlKSB7XG4gICAgICByZXR1cm4gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGN1cnJlbnQsIG5ldyBEYXRlKHRoaXMudG8hLm1pbkRhdGUpKSA8IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgZGlzYWJsZWREYXRlVGltZSA9IChlOiBEYXRlKSA9PiB7XG4gICAgbGV0IG56RGlzYWJsZWRIb3VyczogbnVtYmVyW10gPSBbXTtcbiAgICBsZXQgbnpEaXNhYmxlZE1pbnV0ZXM6IG51bWJlcltdID0gW107XG5cbiAgICBpZiAoISF0aGlzLnRvIS5tYXhEYXRlICYmICEhdGhpcy50byEubWluRGF0ZSkge1xuICAgICAgaWYgKGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhlLCBuZXcgRGF0ZSh0aGlzLnRvIS5taW5EYXRlKSkgPT09IDApIHtcbiAgICAgICAgbnpEaXNhYmxlZEhvdXJzID0gdGhpcy5yYW5nZSgtMSwgbmV3IERhdGUodGhpcy50byEubWluRGF0ZSkuZ2V0SG91cnMoKSk7XG5cbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLnRvIS5taW5EYXRlKS5nZXRIb3VycygpIC0gZS5nZXRIb3VycygpID09PSAwKSB7XG4gICAgICAgICAgbnpEaXNhYmxlZE1pbnV0ZXMgPSB0aGlzLnJhbmdlKFxuICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLnRvIS5taW5EYXRlKS5nZXRNaW51dGVzKClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGUsIG5ldyBEYXRlKHRoaXMudG8hLm1heERhdGUpKSA9PT0gMCkge1xuICAgICAgICBuekRpc2FibGVkSG91cnMgPSBbXG4gICAgICAgICAgLi4ubnpEaXNhYmxlZEhvdXJzLFxuICAgICAgICAgIC4uLnRoaXMucmFuZ2UobmV3IERhdGUodGhpcy50byEubWF4RGF0ZSkuZ2V0SG91cnMoKSArIDEsIDI0KSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoISFlICYmIG5ldyBEYXRlKHRoaXMudG8hLm1heERhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IFtcbiAgICAgICAgICAgIC4uLm56RGlzYWJsZWRNaW51dGVzLFxuICAgICAgICAgICAgLi4udGhpcy5yYW5nZShuZXcgRGF0ZSh0aGlzLnRvIS5tYXhEYXRlKS5nZXRNaW51dGVzKCksIDYwKSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghIXRoaXMudG8hLm1heERhdGUgJiYgIXRoaXMudG8hLm1pbkRhdGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgISFlICYmXG4gICAgICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhlLCBuZXcgRGF0ZSh0aGlzLnRvIS5tYXhEYXRlKSkgPT09IDBcbiAgICAgICkge1xuICAgICAgICBuekRpc2FibGVkSG91cnMgPSB0aGlzLnJhbmdlKFxuICAgICAgICAgIG5ldyBEYXRlKHRoaXMudG8hLm1heERhdGUpLmdldEhvdXJzKCkgKyAxLFxuICAgICAgICAgIDI0XG4gICAgICAgICk7XG4gICAgICAgIGlmICghIWUgJiYgbmV3IERhdGUodGhpcy50byEubWF4RGF0ZSkuZ2V0SG91cnMoKSAtIGUuZ2V0SG91cnMoKSA9PT0gMCkge1xuICAgICAgICAgIG56RGlzYWJsZWRNaW51dGVzID0gdGhpcy5yYW5nZShcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMudG8hLm1heERhdGUpLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgIDYwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMudG8hLm1heERhdGUgJiYgISF0aGlzLnRvIS5taW5EYXRlKSB7XG4gICAgICBpZiAoXG4gICAgICAgICEhZSAmJlxuICAgICAgICBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy50byEubWluRGF0ZSkpID09PSAwXG4gICAgICApIHtcbiAgICAgICAgbnpEaXNhYmxlZEhvdXJzID0gdGhpcy5yYW5nZSgwLCBuZXcgRGF0ZSh0aGlzLnRvIS5taW5EYXRlKS5nZXRIb3VycygpKTtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLnRvIS5taW5EYXRlKS5nZXRIb3VycygpIC0gZS5nZXRIb3VycygpID09PSAwKSB7XG4gICAgICAgICAgbnpEaXNhYmxlZE1pbnV0ZXMgPSB0aGlzLnJhbmdlKFxuICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLnRvIS5taW5EYXRlKS5nZXRNaW51dGVzKClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuekRpc2FibGVkSG91cnM6ICgpID0+IG56RGlzYWJsZWRIb3VycyxcbiAgICAgIG56RGlzYWJsZWRNaW51dGVzOiAoKSA9PiBuekRpc2FibGVkTWludXRlcyxcbiAgICAgIG56RGlzYWJsZWRTZWNvbmRzOiAoKSA9PiBbXSxcbiAgICB9O1xuICB9O1xuXG4gIGRpc2FibGVkSG91cnMgPSAoKSA9PiB7XG4gICAgbGV0IG56RGlzYWJsZWRIb3VyczogbnVtYmVyW10gPSBbXTtcblxuICAgIGlmICghIXRoaXMudG8hLm1heERhdGUgJiYgISF0aGlzLnRvIS5taW5EYXRlKSB7XG4gICAgICBuekRpc2FibGVkSG91cnMgPSB0aGlzLnJhbmdlKC0xLCBuZXcgRGF0ZSh0aGlzLnRvIS5taW5EYXRlKS5nZXRIb3VycygpKTtcbiAgICAgIG56RGlzYWJsZWRIb3VycyA9IG56RGlzYWJsZWRIb3Vycy5jb25jYXQoXG4gICAgICAgIHRoaXMucmFuZ2UobmV3IERhdGUodGhpcy50byEubWF4RGF0ZSkuZ2V0SG91cnMoKSArIDEsIDI0KVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCEhdGhpcy50byEubWF4RGF0ZSAmJiAhdGhpcy50byEubWluRGF0ZSkge1xuICAgICAgbnpEaXNhYmxlZEhvdXJzID0gdGhpcy5yYW5nZShcbiAgICAgICAgbmV3IERhdGUodGhpcy50byEubWF4RGF0ZSkuZ2V0SG91cnMoKSArIDEsXG4gICAgICAgIDI0XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudG8hLm1heERhdGUgJiYgISF0aGlzLnRvIS5taW5EYXRlKSB7XG4gICAgICBuekRpc2FibGVkSG91cnMgPSB0aGlzLnJhbmdlKDAsIG5ldyBEYXRlKHRoaXMudG8hLm1pbkRhdGUpLmdldEhvdXJzKCkpO1xuICAgIH1cbiAgICByZXR1cm4gbnpEaXNhYmxlZEhvdXJzO1xuICB9O1xuXG4gIGRpc2FibGVkTWludXRlcyA9IChlOiBEYXRlKSA9PiB7XG4gICAgbGV0IG56RGlzYWJsZWRNaW51dGVzOiBudW1iZXJbXSA9IFtdO1xuICAgIGlmICghIXRoaXMudG8hLm1heERhdGUgJiYgISF0aGlzLnRvIS5taW5EYXRlKSB7XG4gICAgICBpZiAoZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGUsIG5ldyBEYXRlKHRoaXMudG8hLm1pbkRhdGUpKSA9PT0gMCkge1xuICAgICAgICBpZiAoISFlICYmIG5ldyBEYXRlKHRoaXMudG8hLm1pbkRhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICAtMSxcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMudG8hLm1pbkRhdGUpLmdldE1pbnV0ZXMoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy50byEubWF4RGF0ZSkpID09PSAwKSB7XG4gICAgICAgIGlmICghIWUgJiYgbmV3IERhdGUodGhpcy50byEubWF4RGF0ZSkuZ2V0SG91cnMoKSAtIGUuZ2V0SG91cnMoKSA9PT0gMCkge1xuICAgICAgICAgIG56RGlzYWJsZWRNaW51dGVzID0gdGhpcy5yYW5nZShcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMudG8hLm1heERhdGUpLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgIDYwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoISF0aGlzLnRvIS5tYXhEYXRlICYmICF0aGlzLnRvIS5taW5EYXRlKSB7XG4gICAgICBpZiAoXG4gICAgICAgICEhZSAmJlxuICAgICAgICBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy50byEubWF4RGF0ZSkpID09PSAwXG4gICAgICApIHtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLnRvIS5tYXhEYXRlKS5nZXRIb3VycygpIC0gZS5nZXRIb3VycygpID09PSAwKSB7XG4gICAgICAgICAgbnpEaXNhYmxlZE1pbnV0ZXMgPSB0aGlzLnJhbmdlKFxuICAgICAgICAgICAgbmV3IERhdGUodGhpcy50byEubWF4RGF0ZSkuZ2V0TWludXRlcygpLFxuICAgICAgICAgICAgNjBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghdGhpcy50byEubWF4RGF0ZSAmJiAhIXRoaXMudG8hLm1pbkRhdGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgISFlICYmXG4gICAgICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhlLCBuZXcgRGF0ZSh0aGlzLnRvIS5taW5EYXRlKSkgPT09IDBcbiAgICAgICkge1xuICAgICAgICBpZiAoISFlICYmIG5ldyBEYXRlKHRoaXMudG8hLm1pbkRhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICAtMSxcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMudG8hLm1pbkRhdGUpLmdldE1pbnV0ZXMoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnpEaXNhYmxlZE1pbnV0ZXM7XG4gIH07XG4gIC8vIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhlOiBEYXRlIHwgbnVsbCwgZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gIC8vICAgaWYgKCEhZSkge1xuICAvLyAgICAgcmV0dXJuIGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXRlKCk7XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHJldHVybiAwO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIHJhbmdlKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgcmVzdWx0LnB1c2goaSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXQgc2hvd1RvZGF5KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdGhpcy50by50b2RheSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAhIXRoaXMudG8udG9kYXk7XG4gIH1cbn1cbiJdfQ==