igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
784 lines • 71.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
/**
* Provides base filtering operations
* Implementations should be Singleton
*
* @export
*/
var /**
* Provides base filtering operations
* Implementations should be Singleton
*
* @export
*/
IgxFilteringOperand = /** @class */ (function () {
function IgxFilteringOperand() {
this.operations = [{
name: 'null',
isUnary: true,
iconName: 'is_null',
logic: function (target) {
return target === null;
}
}, {
name: 'notNull',
isUnary: true,
iconName: 'is_not_null',
logic: function (target) {
return target !== null;
}
}];
}
/**
* @return {?}
*/
IgxFilteringOperand.prototype.conditionList = /**
* @return {?}
*/
function () {
return this.operations.map(function (element) { return element.name; });
};
/**
* @param {?} name
* @return {?}
*/
IgxFilteringOperand.prototype.condition = /**
* @param {?} name
* @return {?}
*/
function (name) {
return this.operations.find(function (element) { return element.name === name; });
};
/**
* @param {?} operation
* @return {?}
*/
IgxFilteringOperand.prototype.append = /**
* @param {?} operation
* @return {?}
*/
function (operation) {
this.operations.push(operation);
};
return IgxFilteringOperand;
}());
/**
* Provides base filtering operations
* Implementations should be Singleton
*
* @export
*/
export { IgxFilteringOperand };
if (false) {
/** @type {?} */
IgxFilteringOperand.prototype.operations;
}
/**
* Provides filtering operations for booleans
*
* @export
*/
var IgxBooleanFilteringOperand = /** @class */ (function (_super) {
tslib_1.__extends(IgxBooleanFilteringOperand, _super);
function IgxBooleanFilteringOperand() {
var _this = _super.call(this) || this;
_this.operations = [{
name: 'all',
isUnary: true,
iconName: 'all',
logic: function (target) {
return true;
}
}, {
name: 'true',
isUnary: true,
iconName: 'is_true',
logic: function (target) {
return !!(target && target !== null && target !== undefined);
}
}, {
name: 'false',
isUnary: true,
iconName: 'is_false',
logic: function (target) {
return !target && target !== null && target !== undefined;
}
}, {
name: 'empty',
isUnary: true,
iconName: 'empty',
logic: function (target) {
return target === null || target === undefined;
}
}, {
name: 'notEmpty',
isUnary: true,
iconName: 'not_empty',
logic: function (target) {
return target !== null && target !== undefined;
}
}].concat(_this.operations);
return _this;
}
/**
* @return {?}
*/
IgxBooleanFilteringOperand.instance = /**
* @return {?}
*/
function () {
return this._instance || (this._instance = new this());
};
IgxBooleanFilteringOperand._instance = null;
return IgxBooleanFilteringOperand;
}(IgxFilteringOperand));
export { IgxBooleanFilteringOperand };
if (false) {
/**
* @type {?}
* @private
*/
IgxBooleanFilteringOperand._instance;
}
/**
* Provides filtering operations for Dates
*
* @export
*/
var IgxDateFilteringOperand = /** @class */ (function (_super) {
tslib_1.__extends(IgxDateFilteringOperand, _super);
function IgxDateFilteringOperand() {
var _this = _super.call(this) || this;
_this.operations = [{
name: 'equals',
isUnary: false,
iconName: 'equals',
logic: function (target, searchVal) {
if (!target) {
return false;
}
_this.validateInputData(target);
/** @type {?} */
var targetp = IgxDateFilteringOperand.getDateParts(target, 'yMd');
/** @type {?} */
var searchp = IgxDateFilteringOperand.getDateParts(searchVal, 'yMd');
return targetp.year === searchp.year &&
targetp.month === searchp.month &&
targetp.day === searchp.day;
}
}, {
name: 'doesNotEqual',
isUnary: false,
iconName: 'not_equal',
logic: function (target, searchVal) {
if (!target) {
return true;
}
_this.validateInputData(target);
/** @type {?} */
var targetp = IgxDateFilteringOperand.getDateParts(target, 'yMd');
/** @type {?} */
var searchp = IgxDateFilteringOperand.getDateParts(searchVal, 'yMd');
return targetp.year !== searchp.year ||
targetp.month !== searchp.month ||
targetp.day !== searchp.day;
}
}, {
name: 'before',
isUnary: false,
iconName: 'is_before',
logic: function (target, searchVal) {
if (!target) {
return false;
}
_this.validateInputData(target);
return target < searchVal;
}
}, {
name: 'after',
isUnary: false,
iconName: 'is_after',
logic: function (target, searchVal) {
if (!target) {
return false;
}
_this.validateInputData(target);
return target > searchVal;
}
}, {
name: 'today',
isUnary: true,
iconName: 'today',
logic: function (target) {
if (!target) {
return false;
}
_this.validateInputData(target);
/** @type {?} */
var d = IgxDateFilteringOperand.getDateParts(target, 'yMd');
/** @type {?} */
var now = IgxDateFilteringOperand.getDateParts(new Date(), 'yMd');
return d.year === now.year &&
d.month === now.month &&
d.day === now.day;
}
}, {
name: 'yesterday',
isUnary: true,
iconName: 'yesterday',
logic: function (target) {
if (!target) {
return false;
}
_this.validateInputData(target);
/** @type {?} */
var td = IgxDateFilteringOperand.getDateParts(target, 'yMd');
/** @type {?} */
var y = (function (d) { return new Date(d.setDate(d.getDate() - 1)); })(new Date());
/** @type {?} */
var yesterday = IgxDateFilteringOperand.getDateParts(y, 'yMd');
return td.year === yesterday.year &&
td.month === yesterday.month &&
td.day === yesterday.day;
}
}, {
name: 'thisMonth',
isUnary: true,
iconName: 'this_month',
logic: function (target) {
if (!target) {
return false;
}
_this.validateInputData(target);
/** @type {?} */
var d = IgxDateFilteringOperand.getDateParts(target, 'yM');
/** @type {?} */
var now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM');
return d.year === now.year &&
d.month === now.month;
}
}, {
name: 'lastMonth',
isUnary: true,
iconName: 'last_month',
logic: function (target) {
if (!target) {
return false;
}
_this.validateInputData(target);
/** @type {?} */
var d = IgxDateFilteringOperand.getDateParts(target, 'yM');
/** @type {?} */
var now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM');
if (!now.month) {
now.month = 11;
now.year -= 1;
}
else {
now.month--;
}
return d.year === now.year &&
d.month === now.month;
}
}, {
name: 'nextMonth',
isUnary: true,
iconName: 'next_month',
logic: function (target) {
if (!target) {
return false;
}
_this.validateInputData(target);
/** @type {?} */
var d = IgxDateFilteringOperand.getDateParts(target, 'yM');
/** @type {?} */
var now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM');
if (now.month === 11) {
now.month = 0;
now.year += 1;
}
else {
now.month++;
}
return d.year === now.year &&
d.month === now.month;
}
}, {
name: 'thisYear',
isUnary: true,
iconName: 'this_year',
logic: function (target) {
if (!target) {
return false;
}
_this.validateInputData(target);
/** @type {?} */
var d = IgxDateFilteringOperand.getDateParts(target, 'y');
/** @type {?} */
var now = IgxDateFilteringOperand.getDateParts(new Date(), 'y');
return d.year === now.year;
}
}, {
name: 'lastYear',
isUnary: true,
iconName: 'last_year',
logic: function (target) {
if (!target) {
return false;
}
_this.validateInputData(target);
/** @type {?} */
var d = IgxDateFilteringOperand.getDateParts(target, 'y');
/** @type {?} */
var now = IgxDateFilteringOperand.getDateParts(new Date(), 'y');
return d.year === now.year - 1;
}
}, {
name: 'nextYear',
isUnary: true,
iconName: 'next_year',
logic: function (target) {
if (!target) {
return false;
}
_this.validateInputData(target);
/** @type {?} */
var d = IgxDateFilteringOperand.getDateParts(target, 'y');
/** @type {?} */
var now = IgxDateFilteringOperand.getDateParts(new Date(), 'y');
return d.year === now.year + 1;
}
}, {
name: 'empty',
isUnary: true,
iconName: 'empty',
logic: function (target) {
return target === null || target === undefined;
}
}, {
name: 'notEmpty',
isUnary: true,
iconName: 'not_empty',
logic: function (target) {
return target !== null && target !== undefined;
}
}].concat(_this.operations);
return _this;
}
/**
* @return {?}
*/
IgxDateFilteringOperand.instance = /**
* @return {?}
*/
function () {
return this._instance || (this._instance = new this());
};
/**
* Splits a Date object into parts
*
* @memberof IgxDateFilteringOperand
*/
/**
* Splits a Date object into parts
*
* \@memberof IgxDateFilteringOperand
* @param {?} date
* @param {?=} dateFormat
* @return {?}
*/
IgxDateFilteringOperand.getDateParts = /**
* Splits a Date object into parts
*
* \@memberof IgxDateFilteringOperand
* @param {?} date
* @param {?=} dateFormat
* @return {?}
*/
function (date, dateFormat) {
/** @type {?} */
var res = {
day: null,
hours: null,
milliseconds: null,
minutes: null,
month: null,
seconds: null,
year: null
};
if (!date || !dateFormat) {
return res;
}
if (dateFormat.indexOf('y') >= 0) {
res.year = date.getFullYear();
}
if (dateFormat.indexOf('M') >= 0) {
res.month = date.getMonth();
}
if (dateFormat.indexOf('d') >= 0) {
res.day = date.getDate();
}
if (dateFormat.indexOf('h') >= 0) {
res.hours = date.getHours();
}
if (dateFormat.indexOf('m') >= 0) {
res.minutes = date.getMinutes();
}
if (dateFormat.indexOf('s') >= 0) {
res.seconds = date.getSeconds();
}
if (dateFormat.indexOf('f') >= 0) {
res.milliseconds = date.getMilliseconds();
}
return res;
};
/**
* @private
* @param {?} target
* @return {?}
*/
IgxDateFilteringOperand.prototype.validateInputData = /**
* @private
* @param {?} target
* @return {?}
*/
function (target) {
if (!(target instanceof Date)) {
throw new Error('Could not perform filtering on \'date\' column because the datasource object type is not \'Date\'.');
}
};
IgxDateFilteringOperand._instance = null;
return IgxDateFilteringOperand;
}(IgxFilteringOperand));
export { IgxDateFilteringOperand };
if (false) {
/**
* @type {?}
* @private
*/
IgxDateFilteringOperand._instance;
}
/**
* Provides filtering operations for numbers
*
* @export
*/
var IgxNumberFilteringOperand = /** @class */ (function (_super) {
tslib_1.__extends(IgxNumberFilteringOperand, _super);
function IgxNumberFilteringOperand() {
var _this = _super.call(this) || this;
_this.operations = [{
name: 'equals',
isUnary: false,
iconName: 'equals',
logic: function (target, searchVal) {
return target === searchVal;
}
}, {
name: 'doesNotEqual',
isUnary: false,
iconName: 'not_equal',
logic: function (target, searchVal) {
return target !== searchVal;
}
}, {
name: 'greaterThan',
isUnary: false,
iconName: 'greater_than',
logic: function (target, searchVal) {
return target > searchVal;
}
}, {
name: 'lessThan',
isUnary: false,
iconName: 'less_than',
logic: function (target, searchVal) {
return target < searchVal;
}
}, {
name: 'greaterThanOrEqualTo',
isUnary: false,
iconName: 'greater_than_or_equal',
logic: function (target, searchVal) {
return target >= searchVal;
}
}, {
name: 'lessThanOrEqualTo',
isUnary: false,
iconName: 'less_than_or_equal',
logic: function (target, searchVal) {
return target <= searchVal;
}
}, {
name: 'empty',
isUnary: true,
iconName: 'empty',
logic: function (target) {
return target === null || target === undefined || isNaN(target);
}
}, {
name: 'notEmpty',
isUnary: true,
iconName: 'not_empty',
logic: function (target) {
return target !== null && target !== undefined && !isNaN(target);
}
}].concat(_this.operations);
return _this;
}
/**
* @return {?}
*/
IgxNumberFilteringOperand.instance = /**
* @return {?}
*/
function () {
return this._instance || (this._instance = new this());
};
IgxNumberFilteringOperand._instance = null;
return IgxNumberFilteringOperand;
}(IgxFilteringOperand));
export { IgxNumberFilteringOperand };
if (false) {
/**
* @type {?}
* @private
*/
IgxNumberFilteringOperand._instance;
}
/**
* Provides filtering operations for strings
*
* @export
*/
var IgxStringFilteringOperand = /** @class */ (function (_super) {
tslib_1.__extends(IgxStringFilteringOperand, _super);
function IgxStringFilteringOperand() {
var _this = _super.call(this) || this;
_this.operations = [{
name: 'contains',
isUnary: false,
iconName: 'contains',
logic: function (target, searchVal, ignoreCase) {
/** @type {?} */
var search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);
target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);
return target.indexOf(search) !== -1;
}
}, {
name: 'doesNotContain',
isUnary: false,
iconName: 'does_not_contain',
logic: function (target, searchVal, ignoreCase) {
/** @type {?} */
var search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);
target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);
return target.indexOf(search) === -1;
}
}, {
name: 'startsWith',
isUnary: false,
iconName: 'starts_with',
logic: function (target, searchVal, ignoreCase) {
/** @type {?} */
var search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);
target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);
return target.startsWith(search);
}
}, {
name: 'endsWith',
isUnary: false,
iconName: 'ends_with',
logic: function (target, searchVal, ignoreCase) {
/** @type {?} */
var search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);
target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);
return target.endsWith(search);
}
}, {
name: 'equals',
isUnary: false,
iconName: 'equals',
logic: function (target, searchVal, ignoreCase) {
/** @type {?} */
var search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);
target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);
return target === search;
}
}, {
name: 'doesNotEqual',
isUnary: false,
iconName: 'not_equal',
logic: function (target, searchVal, ignoreCase) {
/** @type {?} */
var search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);
target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);
return target !== search;
}
}, {
name: 'empty',
isUnary: true,
iconName: 'empty',
logic: function (target) {
return target === null || target === undefined || target.length === 0;
}
}, {
name: 'notEmpty',
isUnary: true,
iconName: 'not_empty',
logic: function (target) {
return target !== null && target !== undefined && target.length > 0;
}
}].concat(_this.operations);
return _this;
}
/**
* @return {?}
*/
IgxStringFilteringOperand.instance = /**
* @return {?}
*/
function () {
return this._instance || (this._instance = new this());
};
/**
* Applies case sensitivity on strings if provided
*
* @memberof IgxStringFilteringOperand
*/
/**
* Applies case sensitivity on strings if provided
*
* \@memberof IgxStringFilteringOperand
* @param {?} a
* @param {?} ignoreCase
* @return {?}
*/
IgxStringFilteringOperand.applyIgnoreCase = /**
* Applies case sensitivity on strings if provided
*
* \@memberof IgxStringFilteringOperand
* @param {?} a
* @param {?} ignoreCase
* @return {?}
*/
function (a, ignoreCase) {
a = a || '';
// bulletproof
return ignoreCase ? ('' + a).toLowerCase() : a;
};
IgxStringFilteringOperand._instance = null;
return IgxStringFilteringOperand;
}(IgxFilteringOperand));
export { IgxStringFilteringOperand };
if (false) {
/**
* @type {?}
* @private
*/
IgxStringFilteringOperand._instance;
}
/**
* Interface describing filtering operations
*
* @export
* @record
*/
export function IFilteringOperation() { }
if (false) {
/** @type {?} */
IFilteringOperation.prototype.name;
/** @type {?} */
IFilteringOperation.prototype.isUnary;
/** @type {?} */
IFilteringOperation.prototype.iconName;
/** @type {?} */
IFilteringOperation.prototype.logic;
}
/**
* Interface describing Date object in parts
*
* @export
* @record
*/
export function IDateParts() { }
if (false) {
/** @type {?} */
IDateParts.prototype.year;
/** @type {?} */
IDateParts.prototype.month;
/** @type {?} */
IDateParts.prototype.day;
/** @type {?} */
IDateParts.prototype.hours;
/** @type {?} */
IDateParts.prototype.minutes;
/** @type {?} */
IDateParts.prototype.seconds;
/** @type {?} */
IDateParts.prototype.milliseconds;
}
/**
* @hidden
*/
var /**
* @hidden
*/
InFilteringOperation = /** @class */ (function () {
function InFilteringOperation() {
this.name = 'in';
this.isUnary = false;
this.iconName = 'is_in';
this.logic = function (target, searchVal) {
return searchVal.has(target);
};
}
return InFilteringOperation;
}());
/**
* @hidden
*/
export { InFilteringOperation };
if (false) {
/** @type {?} */
InFilteringOperation.prototype.name;
/** @type {?} */
InFilteringOperation.prototype.isUnary;
/** @type {?} */
InFilteringOperation.prototype.iconName;
/** @type {?} */
InFilteringOperation.prototype.logic;
}
/**
* @hidden
*/
var /**
* @hidden
*/
InDateFilteringOperation = /** @class */ (function (_super) {
tslib_1.__extends(InDateFilteringOperation, _super);
function InDateFilteringOperation() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.logic = function (target, searchVal) {
if (target instanceof Date) {
return searchVal.has(new Date(target.getFullYear(), target.getMonth(), target.getDate()).toISOString());
}
return searchVal.has(target);
};
return _this;
}
return InDateFilteringOperation;
}(InFilteringOperation));
/**
* @hidden
*/
export { InDateFilteringOperation };
if (false) {
/** @type {?} */
InDateFilteringOperation.prototype.logic;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyaW5nLWNvbmRpdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1jb25kaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFNQTs7Ozs7OztJQUdJO1FBQ0ksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDO2dCQUNmLElBQUksRUFBRSxNQUFNO2dCQUNaLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixLQUFLLEVBQUUsVUFBQyxNQUFXO29CQUNmLE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBQztnQkFDM0IsQ0FBQzthQUNKLEVBQUU7Z0JBQ0MsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLEtBQUssRUFBRSxVQUFDLE1BQVc7b0JBQ2YsT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFDO2dCQUMzQixDQUFDO2FBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7OztJQUVNLDJDQUFhOzs7SUFBcEI7UUFDSSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQUMsT0FBTyxJQUFLLE9BQUEsT0FBTyxDQUFDLElBQUksRUFBWixDQUFZLENBQUMsQ0FBQztJQUMxRCxDQUFDOzs7OztJQUVNLHVDQUFTOzs7O0lBQWhCLFVBQWlCLElBQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFDLE9BQU8sSUFBSyxPQUFBLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFyQixDQUFxQixDQUFDLENBQUM7SUFDcEUsQ0FBQzs7Ozs7SUFFTSxvQ0FBTTs7OztJQUFiLFVBQWMsU0FBOEI7UUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNMLDBCQUFDO0FBQUQsQ0FBQyxBQWhDRCxJQWdDQzs7Ozs7Ozs7OztJQS9CRyx5Q0FBeUM7Ozs7Ozs7QUFzQzdDO0lBQWdELHNEQUFtQjtJQUcvRDtRQUFBLFlBQ0ksaUJBQU8sU0FxQ1Y7UUFwQ0csS0FBSSxDQUFDLFVBQVUsR0FBRyxDQUFDO2dCQUNmLElBQUksRUFBRSxLQUFLO2dCQUNYLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVEsRUFBRSxLQUFLO2dCQUNmLEtBQUssRUFBRSxVQUFDLE1BQWU7b0JBQ25CLE9BQU8sSUFBSSxDQUFDO2dCQUNoQixDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsTUFBTTtnQkFDWixPQUFPLEVBQUUsSUFBSTtnQkFDYixRQUFRLEVBQUUsU0FBUztnQkFDbkIsS0FBSyxFQUFFLFVBQUMsTUFBZTtvQkFDbkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUM7Z0JBQ2pFLENBQUM7YUFDSixFQUFFO2dCQUNDLElBQUksRUFBRSxPQUFPO2dCQUNiLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixLQUFLLEVBQUUsVUFBQyxNQUFlO29CQUNuQixPQUFPLENBQUMsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVMsQ0FBQztnQkFDOUQsQ0FBQzthQUNKLEVBQUU7Z0JBQ0MsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLEtBQUssRUFBRSxVQUFDLE1BQWU7b0JBQ25CLE9BQU8sTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUyxDQUFDO2dCQUNuRCxDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLEtBQUssRUFBRSxVQUFDLE1BQWU7b0JBQ25CLE9BQU8sTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUyxDQUFDO2dCQUNuRCxDQUFDO2FBQ0osQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7O0lBQy9CLENBQUM7Ozs7SUFFYSxtQ0FBUTs7O0lBQXRCO1FBQ0ksT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQTVDYyxvQ0FBUyxHQUErQixJQUFJLENBQUM7SUE2Q2hFLGlDQUFDO0NBQUEsQUE5Q0QsQ0FBZ0QsbUJBQW1CLEdBOENsRTtTQTlDWSwwQkFBMEI7Ozs7OztJQUNuQyxxQ0FBNEQ7Ozs7Ozs7QUFvRGhFO0lBQTZDLG1EQUFtQjtJQUc1RDtRQUFBLFlBQ0ksaUJBQU8sU0F3TlY7UUF2TkcsS0FBSSxDQUFDLFVBQVUsR0FBRyxDQUFDO2dCQUNmLElBQUksRUFBRSxRQUFRO2dCQUNkLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixLQUFLLEVBQUUsVUFBQyxNQUFZLEVBQUUsU0FBZTtvQkFDakMsSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDVCxPQUFPLEtBQUssQ0FBQztxQkFDaEI7b0JBRUQsS0FBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzt3QkFFekIsT0FBTyxHQUFHLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDOzt3QkFDN0QsT0FBTyxHQUFHLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO29CQUN0RSxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUk7d0JBQ2hDLE9BQU8sQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUs7d0JBQy9CLE9BQU8sQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDcEMsQ0FBQzthQUNKLEVBQUU7Z0JBQ0MsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixLQUFLLEVBQUUsVUFBQyxNQUFZLEVBQUUsU0FBZTtvQkFDakMsSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDVCxPQUFPLElBQUksQ0FBQztxQkFDZjtvQkFFRCxLQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7O3dCQUV6QixPQUFPLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7O3dCQUM3RCxPQUFPLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7b0JBQ3RFLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSTt3QkFDaEMsT0FBTyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSzt3QkFDL0IsT0FBTyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNwQyxDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsUUFBUTtnQkFDZCxPQUFPLEVBQUUsS0FBSztnQkFDZCxRQUFRLEVBQUUsV0FBVztnQkFDckIsS0FBSyxFQUFFLFVBQUMsTUFBWSxFQUFFLFNBQWU7b0JBQ2pDLElBQUksQ0FBQyxNQUFNLEVBQUU7d0JBQ1QsT0FBTyxLQUFLLENBQUM7cUJBQ2hCO29CQUVELEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFFL0IsT0FBTyxNQUFNLEdBQUcsU0FBUyxDQUFDO2dCQUM5QixDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsT0FBTztnQkFDYixPQUFPLEVBQUUsS0FBSztnQkFDZCxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsS0FBSyxFQUFFLFVBQUMsTUFBWSxFQUFFLFNBQWU7b0JBQ2pDLElBQUksQ0FBQyxNQUFNLEVBQUU7d0JBQ1QsT0FBTyxLQUFLLENBQUM7cUJBQ2hCO29CQUVELEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFFL0IsT0FBTyxNQUFNLEdBQUcsU0FBUyxDQUFDO2dCQUM5QixDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsT0FBTztnQkFDYixPQUFPLEVBQUUsSUFBSTtnQkFDYixRQUFRLEVBQUUsT0FBTztnQkFDakIsS0FBSyxFQUFFLFVBQUMsTUFBWTtvQkFDaEIsSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDVCxPQUFPLEtBQUssQ0FBQztxQkFDaEI7b0JBRUQsS0FBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzt3QkFFekIsQ0FBQyxHQUFHLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDOzt3QkFDdkQsR0FBRyxHQUFHLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQztvQkFDbkUsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJO3dCQUN0QixDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxLQUFLO3dCQUNyQixDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQzFCLENBQUM7YUFDSixFQUFFO2dCQUNDLElBQUksRUFBRSxXQUFXO2dCQUNqQixPQUFPLEVBQUUsSUFBSTtnQkFDYixRQUFRLEVBQUUsV0FBVztnQkFDckIsS0FBSyxFQUFFLFVBQUMsTUFBWTtvQkFDaEIsSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDVCxPQUFPLEtBQUssQ0FBQztxQkFDaEI7b0JBRUQsS0FBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzt3QkFFekIsRUFBRSxHQUFHLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDOzt3QkFDeEQsQ0FBQyxHQUFHLENBQUMsVUFBQyxDQUFDLElBQUssT0FBQSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFwQyxDQUFvQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQzs7d0JBQzdELFNBQVMsR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztvQkFDaEUsT0FBTyxFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJO3dCQUM3QixFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLO3dCQUM1QixFQUFFLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxHQUFHLENBQUM7Z0JBQ2pDLENBQUM7YUFDSixFQUFFO2dCQUNDLElBQUksRUFBRSxXQUFXO2dCQUNqQixPQUFPLEVBQUUsSUFBSTtnQkFDYixRQUFRLEVBQUUsWUFBWTtnQkFDdEIsS0FBSyxFQUFFLFVBQUMsTUFBWTtvQkFDaEIsSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDVCxPQUFPLEtBQUssQ0FBQztxQkFDaEI7b0JBRUQsS0FBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzt3QkFFekIsQ0FBQyxHQUFHLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDOzt3QkFDdEQsR0FBRyxHQUFHLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQztvQkFDbEUsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJO3dCQUN0QixDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQzlCLENBQUM7YUFDSixFQUFFO2dCQUNDLElBQUksRUFBRSxXQUFXO2dCQUNqQixPQUFPLEVBQUUsSUFBSTtnQkFDYixRQUFRLEVBQUUsWUFBWTtnQkFDdEIsS0FBSyxFQUFFLFVBQUMsTUFBWTtvQkFDaEIsSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDVCxPQUFPLEtBQUssQ0FBQztxQkFDaEI7b0JBRUQsS0FBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzt3QkFFekIsQ0FBQyxHQUFHLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDOzt3QkFDdEQsR0FBRyxHQUFHLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQztvQkFDbEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUU7d0JBQ1osR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7d0JBQ2YsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7cUJBQ2pCO3lCQUFNO3dCQUNILEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztxQkFDZjtvQkFDRCxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUk7d0JBQ3RCLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDOUIsQ0FBQzthQUNKLEVBQUU7Z0JBQ0MsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixLQUFLLEVBQUUsVUFBQyxNQUFZO29CQUNoQixJQUFJLENBQUMsTUFBTSxFQUFFO3dCQUNULE9BQU8sS0FBSyxDQUFDO3FCQUNoQjtvQkFFRCxLQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7O3dCQUV6QixDQUFDLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7O3dCQUN0RCxHQUFHLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDO29CQUNsRSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFO3dCQUNsQixHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzt3QkFDZCxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztxQkFDakI7eUJBQU07d0JBQ0gsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUNmO29CQUNELE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSTt3QkFDdEIsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUM5QixDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLEtBQUssRUFBRSxVQUFDLE1BQVk7b0JBQ2hCLElBQUksQ0FBQyxNQUFNLEVBQUU7d0JBQ1QsT0FBTyxLQUFLLENBQUM7cUJBQ2hCO29CQUVELEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7d0JBRXpCLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQzs7d0JBQ3JELEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUM7b0JBQ2pFLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUMvQixDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLEtBQUssRUFBRSxVQUFDLE1BQVk7b0JBQ2hCLElBQUksQ0FBQyxNQUFNLEVBQUU7d0JBQ1QsT0FBTyxLQUFLLENBQUM7cUJBQ2hCO29CQUVELEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7d0JBRXpCLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQzs7d0JBQ3JELEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUM7b0JBQ2pFLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDbkMsQ0FBQzthQUNKLEVBQUU7Z0JBQ0MsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixLQUFLLEVBQUUsVUFBQyxNQUFZO29CQUNoQixJQUFJLENBQUMsTUFBTSxFQUFFO3dCQUNULE9BQU8sS0FBSyxDQUFDO3FCQUNoQjtvQkFFRCxLQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7O3dCQUV6QixDQUFDLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7O3dCQUNyRCxHQUFHLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDO29CQUNqRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7YUFDSixFQUFFO2dCQUNDLElBQUksRUFBRSxPQUFPO2dCQUNiLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixLQUFLLEVBQUUsVUFBQyxNQUFZO29CQUNoQixPQUFPLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVMsQ0FBQztnQkFDbkQsQ0FBQzthQUNKLEVBQUU7Z0JBQ0MsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixLQUFLLEVBQUUsVUFBQyxNQUFZO29CQUNoQixPQUFPLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVMsQ0FBQztnQkFDbkQsQ0FBQzthQUNKLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDOztJQUMvQixDQUFDOzs7O0lBRWEsZ0NBQVE7OztJQUF0QjtRQUNJLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7OztPQUlHOzs7Ozs7Ozs7SUFDVyxvQ0FBWTs7Ozs7Ozs7SUFBMUIsVUFBMkIsSUFBVSxFQUFFLFVBQW1COztZQUNoRCxHQUFHLEdBQUc7WUFDUixHQUFHLEVBQUUsSUFBSTtZQUNULEtBQUssRUFBRSxJQUFJO1lBQ1gsWUFBWSxFQUFFLElBQUk7WUFDbEIsT0FBTyxFQUFFLElBQUk7WUFDYixLQUFLLEVBQUUsSUFBSTtZQUNYLE9BQU8sRUFBRSxJQUFJO1lBQ2IsSUFBSSxFQUFFLElBQUk7U0FDYjtRQUNELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdEIsT0FBTyxHQUFHLENBQUM7U0FDZDtRQUNELElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUIsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDakM7UUFDRCxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzlCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM1QjtRQUNELElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUIsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDL0I7UUFDRCxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzlCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQztRQUNELElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUIsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDN0M7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Ozs7OztJQUVPLG1EQUFpQjs7Ozs7SUFBekIsVUFBMEIsTUFBWTtRQUNsQyxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksSUFBSSxDQUFDLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvR0FBb0csQ0FBQyxDQUFDO1NBQ3pIO0lBQ0wsQ0FBQztJQS9RYyxpQ0FBUyxHQUE0QixJQUFJLENBQUM7SUFnUjdELDhCQUFDO0NBQUEsQUFqUkQsQ0FBNkMsbUJBQW1CLEdBaVIvRDtTQWpSWSx1QkFBdUI7Ozs7OztJQUNoQyxrQ0FBeUQ7Ozs7Ozs7QUF1UjdEO0lBQStDLHFEQUFtQjtJQUc5RDtRQUFBLFlBQ0ksaUJBQU8sU0EwRFY7UUF6REcsS0FBSSxDQUFDLFVBQVUsR0FBRyxDQUFDO2dCQUNmLElBQUksRUFBRSxRQUFRO2dCQUNkLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixLQUFLLEVBQUUsVUFBQyxNQUFjLEVBQUUsU0FBaUI7b0JBQ3JDLE9BQU8sTUFBTSxLQUFLLFNBQVMsQ0FBQztnQkFDaEMsQ0FBQzthQUNKLEVBQUU7Z0JBQ0MsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixLQUFLLEVBQUUsVUFBQyxNQUFjLEVBQUUsU0FBaUI7b0JBQ3JDLE9BQU8sTUFBTSxLQUFLLFNBQVMsQ0FBQztnQkFDaEMsQ0FBQzthQUNKLEVBQUU7Z0JBQ0MsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixLQUFLLEVBQUUsVUFBQyxNQUFjLEVBQUUsU0FBaUI7b0JBQ3JDLE9BQU8sTUFBTSxHQUFHLFNBQVMsQ0FBQztnQkFDOUIsQ0FBQzthQUNKLEVBQUU7Z0JBQ0MsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixLQUFLLEVBQUUsVUFBQyxNQUFjLEVBQUUsU0FBaUI7b0JBQ3JDLE9BQU8sTUFBTSxHQUFHLFNBQVMsQ0FBQztnQkFDOUIsQ0FBQzthQUNKLEVBQUU7Z0JBQ0MsSUFBSSxFQUFFLHNCQUFzQjtnQkFDNUIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMsS0FBSyxFQUFFLFVBQUMsTUFBYyxFQUFFLFNBQWlCO29CQUNyQyxPQUFPLE1BQU0sSUFBSSxTQUFTLENBQUM7Z0JBQy9CLENBQUM7YUFDSixFQUFFO2dCQUNDLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLEtBQUssRUFBRSxVQUFDLE1BQWMsRUFBRSxTQUFpQjtvQkFDckMsT0FBTyxNQUFNLElBQUksU0FBUyxDQUFDO2dCQUMvQixDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsT0FBTztnQkFDYixPQUFPLEVBQUUsSUFBSTtnQkFDYixRQUFRLEVBQUUsT0FBTztnQkFDakIsS0FBSyxFQUFFLFVBQUMsTUFBYztvQkFDbEIsT0FBTyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLEtBQUssRUFBRSxVQUFDLE1BQWM7b0JBQ2xCLE9BQU8sTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNyRSxDQUFDO2FBQ0osQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7O0lBQy9CLENBQUM7Ozs7SUFFYSxrQ0FBUTs7O0lBQXRCO1FBQ0ksT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQWpFYyxtQ0FBUyxHQUE4QixJQUFJLENBQUM7SUFrRS9ELGdDQUFDO0NBQUEsQUFuRUQsQ0FBK0MsbUJBQW1CLEdBbUVqRTtTQW5FWSx5QkFBeUI7Ozs7OztJQUNsQyxvQ0FBMkQ7Ozs7Ozs7QUF5RS9EO0lBQStDLHFEQUFtQjtJQUc5RDtRQUFBLFlBQ0ksaUJBQU8sU0FzRVY7UUFyRUcsS0FBSSxDQUFDLFVBQVUsR0FBRyxDQUFDO2dCQUNmLElBQUksRUFBRSxVQUFVO2dCQUNoQixPQUFPLEVBQUUsS0FBSztnQkFDZCxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsS0FBSyxFQUFFLFVBQUMsTUFBYyxFQUFFLFNBQWlCLEVBQUUsVUFBb0I7O3dCQUNyRCxNQUFNLEdBQUcseUJBQXlCLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7b0JBQy9FLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUN2RSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7YUFDSixFQUFFO2dCQUNDLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLEtBQUssRUFBRSxVQUFDLE1BQWMsRUFBRSxTQUFpQixFQUFFLFVBQW9COzt3QkFDckQsTUFBTSxHQUFHLHlCQUF5QixDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDO29CQUMvRSxNQUFNLEdBQUcseUJBQXlCLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDdkUsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLEtBQUssRUFBRSxVQUFDLE1BQWMsRUFBRSxTQUFpQixFQUFFLFVBQW9COzt3QkFDckQsTUFBTSxHQUFHLHlCQUF5QixDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDO29CQUMvRSxNQUFNLEdBQUcseUJBQXlCLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDdkUsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLEtBQUssRUFBRSxVQUFDLE1BQWMsRUFBRSxTQUFpQixFQUFFLFVBQW9COzt3QkFDckQsTUFBTSxHQUFHLHlCQUF5QixDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDO29CQUMvRSxNQUFNLEdBQUcseUJBQXlCLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDdkUsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNuQyxDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsUUFBUTtnQkFDZCxPQUFPLEVBQUUsS0FBSztnQkFDZCxRQUFRLEVBQUUsUUFBUTtnQkFDbEIsS0FBSyxFQUFFLFVBQUMsTUFBYyxFQUFFLFNBQWlCLEVBQUUsVUFBb0I7O3dCQUNyRCxNQUFNLEdBQUcseUJBQXlCLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7b0JBQy9FLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUN2RSxPQUFPLE1BQU0sS0FBSyxNQUFNLENBQUM7Z0JBQzdCLENBQUM7YUFDSixFQUFFO2dCQUNDLElBQUksRUFBRSxjQUFjO2dCQUNwQixPQUFPLEVBQUUsS0FBSztnQkFDZCxRQUFRLEVBQUUsV0FBVztnQkFDckIsS0FBSyxFQUFFLFVBQUMsTUFBYyxFQUFFLFNBQWlCLEVBQUUsVUFBb0I7O3dCQUNyRCxNQUFNLEdBQUcseUJBQXlCLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7b0JBQy9FLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUN2RSxPQUFPLE1BQU0sS0FBSyxNQUFNLENBQUM7Z0JBQzdCLENBQUM7YUFDSixFQUFFO2dCQUNDLElBQUksRUFBRSxPQUFPO2dCQUNiLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixLQUFLLEVBQUUsVUFBQyxNQUFjO29CQUNsQixPQUFPLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztnQkFDMUUsQ0FBQzthQUNKLEVBQUU7Z0JBQ0MsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixLQUFLLEVBQUUsVUFBQyxNQUFjO29CQUNsQixPQUFPLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDeEUsQ0FBQzthQUNKLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDOztJQUMvQixDQUFDOzs7O0lBRWEsa0NBQVE7OztJQUF0QjtRQUNJLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7OztPQUlHOzs7Ozs7Ozs7SUFDVyx5Q0FBZTs7Ozs7Ozs7SUFBN0IsVUFBOEIsQ0FBUyxFQUFFLFVBQW1CO1FBQ3hELENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osY0FBYztRQUNkLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUF4RmMsbUNBQVMsR0FBOEIsSUFBSSxDQUFDO0lBeUYvRCxnQ0FBQztDQUFBLEFBMUZELENBQStDLG1CQUFtQixHQTBGakU7U0ExRlkseUJBQXlCOzs7Ozs7SUFDbEMsb0NBQTJEOzs7Ozs7OztBQWdHL0QseUNBS0M7OztJQUpHLG1DQUFhOztJQUNiLHNDQUFpQjs7SUFDakIsdUNBQWlCOztJQUNqQixvQ0FBc0U7Ozs7Ozs7O0FBUTFFLGdDQVFDOzs7SUFQRywwQkFBYTs7SUFDYiwyQkFBYzs7SUFDZCx5QkFBWTs7SUFDWiwyQkFBYzs7SUFDZCw2QkFBZ0I7O0lBQ2hCLDZCQUFnQjs7SUFDaEIsa0NBQXFCOzs7OztBQU16Qjs7OztJQUFBO1FBQ0ksU0FBSSxHQUFHLElBQUksQ0FBQztRQUNaLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsYUFBUSxHQUFHLE9BQU8sQ0FBQztRQUNuQixVQUFLLEdBQUcsVUFBQyxNQUFXLEVBQUUsU0FBbUI7WUFDckMsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQTtJQUNMLENBQUM7SUFBRCwyQkFBQztBQUFELENBQUMsQUFQRCxJQU9DOzs7Ozs7O0lBTkcsb0NBQVk7O0lBQ1osdUNBQWdCOztJQUNoQix3Q0FBbUI7O0lBQ25CLHFDQUVDOzs7OztBQU1MOzs7O0lBQThDLG9EQUFvQjtJQUFsRTtRQUFBLHFFQU9DO1FBTkcsV0FBSyxHQUFHLFVBQUMsTUFBVyxFQUFFLFNBQW1CO1lBQ3JDLElBQUksTUFBTSxZQUFZLElBQUksRUFBRTtnQkFDeEIsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQzthQUMzRztZQUNELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUE7O0lBQ0wsQ0FBQztJQUFELCtCQUFDO0FBQUQsQ0FBQyxBQVBELENBQThDLG9CQUFvQixHQU9qRTs7Ozs7OztJQU5HLHlDQUtDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQcm92aWRlcyBiYXNlIGZpbHRlcmluZyBvcGVyYXRpb25zXG4gKiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGJlIFNpbmdsZXRvblxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNsYXNzIElneEZpbHRlcmluZ09wZXJhbmQge1xuICAgIHB1YmxpYyBvcGVyYXRpb25zOiBJRmlsdGVyaW5nT3BlcmF0aW9uW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IFt7XG4gICAgICAgICAgICBuYW1lOiAnbnVsbCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpc19udWxsJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0ID09PSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnbm90TnVsbCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpc19ub3RfbnVsbCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCAhPT0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfV07XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmRpdGlvbkxpc3QoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRpb25zLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC5uYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29uZGl0aW9uKG5hbWU6IHN0cmluZyk6IElGaWx0ZXJpbmdPcGVyYXRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRpb25zLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gbmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGVuZChvcGVyYXRpb246IElGaWx0ZXJpbmdPcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKTtcbiAgICB9XG59XG5cbi8qKlxuICogUHJvdmlkZXMgZmlsdGVyaW5nIG9wZXJhdGlvbnMgZm9yIGJvb2xlYW5zXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY2xhc3MgSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQgZXh0ZW5kcyBJZ3hGaWx0ZXJpbmdPcGVyYW5kIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IElneEJvb2xlYW5GaWx0ZXJpbmdPcGVyYW5kID0gbnVsbDtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zID0gW3tcbiAgICAgICAgICAgIG5hbWU6ICdhbGwnLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnYWxsJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICd0cnVlJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2lzX3RydWUnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISEodGFyZ2V0ICYmIHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdmYWxzZScsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpc19mYWxzZScsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdGFyZ2V0ICYmIHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2VtcHR5JyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2VtcHR5JyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ25vdEVtcHR5JyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ25vdF9lbXB0eScsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1dLmNvbmNhdCh0aGlzLm9wZXJhdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2UoKTogSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IHRoaXMoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFByb3ZpZGVzIGZpbHRlcmluZyBvcGVyYXRpb25zIGZvciBEYXRlc1xuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNsYXNzIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kIGV4dGVuZHMgSWd4RmlsdGVyaW5nT3BlcmFuZCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZCA9IG51bGw7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IFt7XG4gICAgICAgICAgICBuYW1lOiAnZXF1YWxzJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdlcXVhbHMnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IERhdGUsIHNlYXJjaFZhbDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRwID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ3lNZCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaHAgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMoc2VhcmNoVmFsLCAneU1kJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldHAueWVhciA9PT0gc2VhcmNocC55ZWFyICYmXG4gICAgICAgICAgICA