UNPKG

ngx-mask-2

Version:
988 lines (978 loc) 92.4 kB
import { InjectionToken, Inject, Injectable, ElementRef, Renderer2, Directive, forwardRef, HostListener, Input, Pipe, NgModule } from '@angular/core'; import { __read, __awaiter, __generator, __extends, __assign } from 'tslib'; import { DOCUMENT } from '@angular/common'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ /** @type {?} */ var config = new InjectionToken('config'); /** @type {?} */ var NEW_CONFIG = new InjectionToken('NEW_CONFIG'); /** @type {?} */ var INITIAL_CONFIG = new InjectionToken('INITIAL_CONFIG'); /** @type {?} */ var initialConfig = { sufix: '', prefix: '', clearIfNotMatch: false, showTemplate: false, showMaskTyped: false, dropSpecialCharacters: true, specialCharacters: ['/', '(', ')', '.', ':', '-', ' ', '+', ',', '@', '[', ']', '\"', '\''], appendPrefixToModel: false, patterns: { '0': { pattern: new RegExp('\\d'), }, '9': { pattern: new RegExp('\\d'), optional: true }, 'A': { pattern: new RegExp('\[a-zA-Z0-9\]') }, 'S': { pattern: new RegExp('\[a-zA-Z\]') }, 'd': { pattern: new RegExp('\\d'), }, 'm': { pattern: new RegExp('\\d'), }, } }; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var MaskApplierService = /** @class */ (function () { function MaskApplierService(_config) { this._config = _config; this.maskExpression = ''; this._shift = new Set(); this.maskSpecialCharacters = /** @type {?} */ ((this._config)).specialCharacters; this.maskAvailablePatterns = this._config.patterns; this.clearIfNotMatch = this._config.clearIfNotMatch; this.dropSpecialCharacters = this._config.dropSpecialCharacters; this.maskSpecialCharacters = /** @type {?} */ ((this._config)).specialCharacters; this.maskAvailablePatterns = this._config.patterns; this.prefix = this._config.prefix; this.sufix = this._config.sufix; this.appendPrefixToModel = this._config.appendPrefixToModel; } /** * @param {?} inputValue * @param {?} maskAndPattern * @return {?} */ MaskApplierService.prototype.applyMaskWithPattern = /** * @param {?} inputValue * @param {?} maskAndPattern * @return {?} */ function (inputValue, maskAndPattern) { var _a = __read(maskAndPattern, 2), mask = _a[0], customPattern = _a[1]; this.customPattern = customPattern; return this.applyMask(inputValue, mask); }; /** * @param {?} inputValue * @param {?} maskExpression * @param {?=} position * @param {?=} cb * @return {?} */ MaskApplierService.prototype.applyMask = /** * @param {?} inputValue * @param {?} maskExpression * @param {?=} position * @param {?=} cb * @return {?} */ function (inputValue, maskExpression, position, cb) { if (position === void 0) { position = 0; } if (cb === void 0) { cb = function () { }; } if (inputValue === undefined || inputValue === null || maskExpression === undefined) { return ''; } /** @type {?} */ var cursor = 0; /** @type {?} */ var result = ""; /** @type {?} */ var multi = false; if (inputValue.slice(0, this.prefix.length) === this.prefix) { inputValue = inputValue.slice(this.prefix.length, inputValue.length); } /** @type {?} */ var inputArray = inputValue.toString() .split(''); // tslint:disable-next-line for (var i = 0, inputSymbol = inputArray[0]; i < inputArray.length; i++, inputSymbol = inputArray[i]) { if (cursor === maskExpression.length) { break; } if (this._checkSymbolMask(inputSymbol, maskExpression[cursor]) && maskExpression[cursor + 1] === '?') { result += inputSymbol; cursor += 2; } else if (maskExpression[cursor + 1] === '*' && multi && this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2])) { result += inputSymbol; cursor += 3; multi = false; } else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor]) && maskExpression[cursor + 1] === '*') { result += inputSymbol; multi = true; } else if (maskExpression[cursor + 1] === '?' && this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2])) { result += inputSymbol; cursor += 3; } else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor])) { if (maskExpression[cursor] === 'd') { if (Number(inputSymbol) > 3) { result += 0; cursor += 1; /** @type {?} */ var shiftStep = /\*|\?/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor; this._shift.add(shiftStep + this.prefix.length || 0); i--; continue; } } if (maskExpression[cursor - 1] === 'd') { if (Number(inputValue.slice(cursor - 1, cursor + 1)) > 31) { continue; } } if (maskExpression[cursor] === 'm') { if (Number(inputSymbol) > 1) { result += 0; cursor += 1; /** @type {?} */ var shiftStep = /\*|\?/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor; this._shift.add(shiftStep + this.prefix.length || 0); i--; continue; } } if (maskExpression[cursor - 1] === 'm') { if (Number(inputValue.slice(cursor - 1, cursor + 1)) > 12) { continue; } } result += inputSymbol; cursor++; } else if (this.maskSpecialCharacters.indexOf(maskExpression[cursor]) !== -1) { result += maskExpression[cursor]; cursor++; /** @type {?} */ var shiftStep = /\*|\?/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor; this._shift.add(shiftStep + this.prefix.length || 0); i--; } else if (this.maskSpecialCharacters.indexOf(inputSymbol) > -1 && this.maskAvailablePatterns[maskExpression[cursor]] && this.maskAvailablePatterns[maskExpression[cursor]].optional) { cursor++; i--; } else if ((this.maskExpression[cursor + 1] === '*') && (this._findSpecialChar(this.maskExpression[cursor + 2])) && (this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2])) { cursor += 3; result += inputSymbol; } } if (result.length + 1 === maskExpression.length && this.maskSpecialCharacters.indexOf(maskExpression[maskExpression.length - 1]) !== -1) { result += maskExpression[maskExpression.length - 1]; } /** @type {?} */ var shift = 1; /** @type {?} */ var newPosition = position + 1; while (this._shift.has(newPosition)) { shift++; newPosition++; } cb(this._shift.has(position) ? shift : 0); /** @type {?} */ var res = "" + this.prefix + result; res = this.sufix && cursor === maskExpression.length ? "" + this.prefix + result + this.sufix : "" + this.prefix + result; return res; }; /** * @param {?} inputSymbol * @return {?} */ MaskApplierService.prototype._findSpecialChar = /** * @param {?} inputSymbol * @return {?} */ function (inputSymbol) { /** @type {?} */ var symbol = this.maskSpecialCharacters .find(function (val) { return val === inputSymbol; }); return symbol; }; /** * @param {?} inputSymbol * @param {?} maskSymbol * @return {?} */ MaskApplierService.prototype._checkSymbolMask = /** * @param {?} inputSymbol * @param {?} maskSymbol * @return {?} */ function (inputSymbol, maskSymbol) { this.maskAvailablePatterns = this.customPattern ? this.customPattern : this.maskAvailablePatterns; return this.maskAvailablePatterns[maskSymbol] && this.maskAvailablePatterns[maskSymbol].pattern && this.maskAvailablePatterns[maskSymbol].pattern.test(inputSymbol); }; MaskApplierService.decorators = [ { type: Injectable } ]; /** @nocollapse */ MaskApplierService.ctorParameters = function () { return [ { type: undefined, decorators: [{ type: Inject, args: [config,] }] } ]; }; return MaskApplierService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var MaskService = /** @class */ (function (_super) { __extends(MaskService, _super); function MaskService( // tslint:disable-next-line document, _config, _elementRef, _renderer) { var _this = _super.call(this, _config) || this; _this.document = document; _this._config = _config; _this._elementRef = _elementRef; _this._renderer = _renderer; _this.maskExpression = ''; _this.isNumberValue = false; _this.showMaskTyped = false; _this.maskIsShown = ''; _this.onChange = function (_) { }; _this.onTouch = function () { }; _this._formElement = _this._elementRef.nativeElement; return _this; } /** * @param {?} inputValue * @param {?} maskExpression * @param {?=} position * @param {?=} cb * @return {?} */ MaskService.prototype.applyMask = /** * @param {?} inputValue * @param {?} maskExpression * @param {?=} position * @param {?=} cb * @return {?} */ function (inputValue, maskExpression, position, cb) { if (position === void 0) { position = 0; } if (cb === void 0) { cb = function () { }; } this.maskIsShown = this.showMaskTyped ? this.maskExpression.replace(/[0-9]/g, '_') : ''; if (!inputValue && this.showMaskTyped) { return this.prefix + this.maskIsShown; } /** @type {?} */ var result = _super.prototype.applyMask.call(this, inputValue, maskExpression, position, cb); /** @type {?} */ var finalResult = Array.isArray(this.dropSpecialCharacters) ? (this._removeMask(this._removeSufix((this.appendPrefixToModel ? result : this._removePrefix(result))), this.dropSpecialCharacters)) : (this.dropSpecialCharacters === true ? (this.isNumberValue ? Number(this._removeMask(this._removeSufix((this.appendPrefixToModel ? result : this._removePrefix(result))), this.maskSpecialCharacters)) : this._removeMask(this._removeSufix((this.appendPrefixToModel ? result : this._removePrefix(result))), this.maskSpecialCharacters)) : (this._removeSufix((this.appendPrefixToModel ? result : this._removePrefix(result))))); if (this.prefix === finalResult || this.prefix.replace(' ', '') === finalResult || this._removeMask(this.prefix, this.maskSpecialCharacters) === finalResult) { finalResult = ''; } this.onChange(finalResult); /** @type {?} */ var ifMaskIsShown = ''; if (!this.showMaskTyped) { return result; } /** @type {?} */ var resLen = result.length; /** @type {?} */ var prefNmask = this.prefix + this.maskIsShown; ifMaskIsShown = prefNmask.slice(resLen); return result + ifMaskIsShown; }; /** * @param {?=} position * @param {?=} cb * @return {?} */ MaskService.prototype.applyValueChanges = /** * @param {?=} position * @param {?=} cb * @return {?} */ function (position, cb) { if (position === void 0) { position = 0; } if (cb === void 0) { cb = function () { }; } /** @type {?} */ var maskedInput = this.applyMask(this._formElement.value, this.maskExpression, position, cb); this._formElement.value = maskedInput; if (this._formElement === this.document.activeElement) { return; } this.clearIfNotMatchFn(); }; /** * @return {?} */ MaskService.prototype.showMaskInInput = /** * @return {?} */ function () { if (this.showMaskTyped) { this.maskIsShown = this.maskExpression.replace(/[0-9]/g, '_'); } }; /** * @return {?} */ MaskService.prototype.clearIfNotMatchFn = /** * @return {?} */ function () { if (this.clearIfNotMatch === true && this.maskExpression.length !== this._formElement.value.length) { this.formElementProperty = ['value', '']; this.applyMask(this._formElement.value, this.maskExpression); } }; Object.defineProperty(MaskService.prototype, "formElementProperty", { set: /** * @param {?} __0 * @return {?} */ function (_a) { var _b = __read(_a, 2), name = _b[0], value = _b[1]; this._renderer.setProperty(this._formElement, name, value); }, enumerable: true, configurable: true }); /** * @param {?} value * @param {?} specialCharactersForRemove * @return {?} */ MaskService.prototype._removeMask = /** * @param {?} value * @param {?} specialCharactersForRemove * @return {?} */ function (value, specialCharactersForRemove) { return value ? value.replace(this._regExpForRemove(specialCharactersForRemove), '') : value; }; /** * @param {?} value * @return {?} */ MaskService.prototype._removePrefix = /** * @param {?} value * @return {?} */ function (value) { if (!this.prefix) { return value; } return value ? value.replace(this.prefix, '') : value; }; /** * @param {?} value * @return {?} */ MaskService.prototype._removeSufix = /** * @param {?} value * @return {?} */ function (value) { if (!this.sufix) { return value; } return value ? value.replace(this.sufix, '') : value; }; /** * @param {?} specialCharactersForRemove * @return {?} */ MaskService.prototype._regExpForRemove = /** * @param {?} specialCharactersForRemove * @return {?} */ function (specialCharactersForRemove) { return new RegExp(specialCharactersForRemove.map(function (item) { return "\\" + item; }).join('|'), 'gi'); }; MaskService.decorators = [ { type: Injectable } ]; /** @nocollapse */ MaskService.ctorParameters = function () { return [ { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, { type: undefined, decorators: [{ type: Inject, args: [config,] }] }, { type: ElementRef }, { type: Renderer2 } ]; }; return MaskService; }(MaskApplierService)); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var MaskDirective = /** @class */ (function () { function MaskDirective( // tslint:disable-next-line document, _maskService) { this.document = document; this._maskService = _maskService; this._position = null; this.onChange = function (_) { }; this.onTouch = function () { }; } Object.defineProperty(MaskDirective.prototype, "maskExpression", { set: /** * @param {?} value * @return {?} */ function (value) { this._maskValue = value || ''; if (!this._maskValue) { return; } this._maskService.maskExpression = this._repeatPatternSymbols(this._maskValue); this._maskService.formElementProperty = [ 'value', this._maskService.applyMask(this._inputValue, this._maskService.maskExpression) ]; }, enumerable: true, configurable: true }); Object.defineProperty(MaskDirective.prototype, "specialCharacters", { set: /** * @param {?} value * @return {?} */ function (value) { if (!value || !Array.isArray(value) || (Array.isArray(value) && !value.length)) { return; } this._maskService.maskSpecialCharacters = value; }, enumerable: true, configurable: true }); Object.defineProperty(MaskDirective.prototype, "patterns", { set: /** * @param {?} value * @return {?} */ function (value) { if (!value) { return; } this._maskService.maskAvailablePatterns = value; }, enumerable: true, configurable: true }); Object.defineProperty(MaskDirective.prototype, "prefix", { set: /** * @param {?} value * @return {?} */ function (value) { if (!value) { return; } this._maskService.prefix = value; }, enumerable: true, configurable: true }); Object.defineProperty(MaskDirective.prototype, "sufix", { set: /** * @param {?} value * @return {?} */ function (value) { if (!value) { return; } this._maskService.sufix = value; }, enumerable: true, configurable: true }); Object.defineProperty(MaskDirective.prototype, "dropSpecialCharacters", { set: /** * @param {?} value * @return {?} */ function (value) { this._maskService.dropSpecialCharacters = value; }, enumerable: true, configurable: true }); Object.defineProperty(MaskDirective.prototype, "showMaskTyped", { set: /** * @param {?} value * @return {?} */ function (value) { if (!value) { return; } this._maskService.showMaskTyped = value; }, enumerable: true, configurable: true }); Object.defineProperty(MaskDirective.prototype, "showTemplate", { set: /** * @param {?} value * @return {?} */ function (value) { this._maskService.showTemplate = value; }, enumerable: true, configurable: true }); Object.defineProperty(MaskDirective.prototype, "clearIfNotMatch", { set: /** * @param {?} value * @return {?} */ function (value) { this._maskService.clearIfNotMatch = value; }, enumerable: true, configurable: true }); Object.defineProperty(MaskDirective.prototype, "appendPrefixToModel", { set: /** * @param {?} value * @return {?} */ function (value) { this._maskService.appendPrefixToModel = value; }, enumerable: true, configurable: true }); /** * @param {?} e * @return {?} */ MaskDirective.prototype.onInput = /** * @param {?} e * @return {?} */ function (e) { /** @type {?} */ var el = /** @type {?} */ (e.target); this._inputValue = el.value; if (!this._maskValue) { this.onChange(el.value); return; } /** @type {?} */ var position = (/** @type {?} */ (el.selectionStart)) === 1 ? (/** @type {?} */ (el.selectionStart)) + this._maskService.prefix.length : /** @type {?} */ (el.selectionStart); /** @type {?} */ var caretShift = 0; this._maskService.applyValueChanges(position, function (shift) { return (caretShift = shift); }); // only set the selection if the element is active if (this.document.activeElement !== el) { return; } el.selectionStart = el.selectionEnd = this._position !== null ? this._position : position + // tslint:disable-next-line ((/** @type {?} */ (e)).inputType === 'deleteContentBackward' ? 0 : caretShift); this._position = null; }; /** * @return {?} */ MaskDirective.prototype.onBlur = /** * @return {?} */ function () { this._maskService.clearIfNotMatchFn(); this.onTouch(); }; /** * @param {?} e * @return {?} */ MaskDirective.prototype.onFocus = /** * @param {?} e * @return {?} */ function (e) { /** @type {?} */ var el = /** @type {?} */ (e.target); if (el !== null && el.selectionStart !== null && el.selectionStart === el.selectionEnd && el.selectionStart > this._maskService.prefix.length && // tslint:disable-next-line (/** @type {?} */ (e)).keyCode !== 38) { return; } if (this._maskService.showMaskTyped) { this._maskService.maskIsShown = this._maskService.maskExpression.replace(/[0-9]/g, '_'); } el.value = !el.value || el.value === this._maskService.prefix ? this._maskService.prefix + this._maskService.maskIsShown : el.value; /** fix of cursor position with prefix when mouse click occur */ if (((/** @type {?} */ (el.selectionStart)) || (/** @type {?} */ (el.selectionEnd))) <= this._maskService.prefix.length) { el.selectionStart = this._maskService.prefix.length; return; } }; /** * @param {?} e * @return {?} */ MaskDirective.prototype.a = /** * @param {?} e * @return {?} */ function (e) { /** @type {?} */ var el = /** @type {?} */ (e.target); if (e.keyCode === 38) { e.preventDefault(); } if (e.keyCode === 37 || e.keyCode === 8) { if ((/** @type {?} */ (el.selectionStart)) <= this._maskService.prefix.length && (/** @type {?} */ (el.selectionEnd)) <= this._maskService.prefix.length) { e.preventDefault(); } this.onFocus(e); if (e.keyCode === 8 && el.selectionStart === 0 && el.selectionEnd === el.value.length) { el.value = this._maskService.prefix; this._position = this._maskService.prefix ? this._maskService.prefix.length : 1; this.onInput(e); } } }; /** * @return {?} */ MaskDirective.prototype.onPaste = /** * @return {?} */ function () { this._position = Number.MAX_SAFE_INTEGER; }; /** * It writes the value in the input * @param {?} inputValue * @return {?} */ MaskDirective.prototype.writeValue = /** * It writes the value in the input * @param {?} inputValue * @return {?} */ function (inputValue) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { if (inputValue === undefined) { inputValue = ''; } if (inputValue && inputValue.indexOf(this._maskService.prefix) === 0) { inputValue = inputValue.replace(this._maskService.prefix, ''); } if (inputValue && inputValue.indexOf(this._maskService.prefix.replace(' ', '')) === 0) { inputValue = inputValue.replace(this._maskService.prefix.replace(' ', ''), ''); } if (typeof inputValue === 'number') { inputValue = String(inputValue); this._maskService.isNumberValue = true; } inputValue && this._maskService.maskExpression || this._maskService.maskExpression && (this._maskService.prefix || this._maskService.showMaskTyped) ? (this._maskService.formElementProperty = [ 'value', this._maskService.applyMask(inputValue, this._maskService.maskExpression) ]) : (this._maskService.formElementProperty = ['value', inputValue]); this._inputValue = inputValue; return [2 /*return*/]; }); }); }; /** * @param {?} fn * @return {?} */ MaskDirective.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.onChange = fn; this._maskService.onChange = this.onChange; }; /** * @param {?} fn * @return {?} */ MaskDirective.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { this.onTouch = fn; }; /** * It disables the input element * @param {?} isDisabled * @return {?} */ MaskDirective.prototype.setDisabledState = /** * It disables the input element * @param {?} isDisabled * @return {?} */ function (isDisabled) { this._maskService.formElementProperty = ['disabled', isDisabled]; }; /** * @param {?} maskExp * @return {?} */ MaskDirective.prototype._repeatPatternSymbols = /** * @param {?} maskExp * @return {?} */ function (maskExp) { var _this = this; return maskExp.match(/{[0-9a-zA-Z]}/) && maskExp.split('') .reduce(function (accum, currval, index) { _this._start = (currval === '{') ? index : _this._start; if (currval !== '}') { return _this._maskService._findSpecialChar(currval) ? accum + currval : accum; } _this._end = index; /** @type {?} */ var repeatNumber = Number(maskExp .slice(_this._start + 1, _this._end)); /** @type {?} */ var repaceWith = new Array(repeatNumber + 1) .join(maskExp[_this._start - 1]); return accum + repaceWith; }, '') || maskExp; }; MaskDirective.decorators = [ { type: Directive, args: [{ selector: '[mask]', providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(function () { return MaskDirective; }), multi: true }, MaskService ] },] } ]; /** @nocollapse */ MaskDirective.ctorParameters = function () { return [ { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, { type: MaskService } ]; }; MaskDirective.propDecorators = { maskExpression: [{ type: Input, args: ['mask',] }], specialCharacters: [{ type: Input }], patterns: [{ type: Input }], prefix: [{ type: Input }], sufix: [{ type: Input }], dropSpecialCharacters: [{ type: Input }], showMaskTyped: [{ type: Input }], showTemplate: [{ type: Input }], clearIfNotMatch: [{ type: Input }], appendPrefixToModel: [{ type: Input }], onInput: [{ type: HostListener, args: ['input', ['$event'],] }], onBlur: [{ type: HostListener, args: ['blur',] }], onFocus: [{ type: HostListener, args: ['click', ['$event'],] }], a: [{ type: HostListener, args: ['keydown', ['$event'],] }], onPaste: [{ type: HostListener, args: ['paste',] }] }; return MaskDirective; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var MaskPipe = /** @class */ (function () { function MaskPipe(_maskService) { this._maskService = _maskService; } /** * @param {?} value * @param {?} mask * @return {?} */ MaskPipe.prototype.transform = /** * @param {?} value * @param {?} mask * @return {?} */ function (value, mask) { if (!value) { return ''; } if (typeof mask === 'string') { return this._maskService.applyMask("" + value, mask); } return this._maskService.applyMaskWithPattern("" + value, mask); }; MaskPipe.decorators = [ { type: Pipe, args: [{ name: 'mask', pure: true },] } ]; /** @nocollapse */ MaskPipe.ctorParameters = function () { return [ { type: MaskApplierService } ]; }; return MaskPipe; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var NgxMaskModule = /** @class */ (function () { function NgxMaskModule() { } /** * @param {?=} configValue * @return {?} */ NgxMaskModule.forRoot = /** * @param {?=} configValue * @return {?} */ function (configValue) { return { ngModule: NgxMaskModule, providers: [ { provide: NEW_CONFIG, useValue: configValue }, { provide: INITIAL_CONFIG, useValue: initialConfig }, { provide: config, useFactory: _configFactory, deps: [INITIAL_CONFIG, NEW_CONFIG] }, ] }; }; /** * @param {?=} configValue * @return {?} */ NgxMaskModule.forChild = /** * @param {?=} configValue * @return {?} */ function (configValue) { return { ngModule: NgxMaskModule, }; }; NgxMaskModule.decorators = [ { type: NgModule, args: [{ providers: [MaskApplierService], exports: [MaskDirective, MaskPipe], declarations: [MaskDirective, MaskPipe] },] } ]; return NgxMaskModule; }()); /** * \@internal * @param {?} initConfig * @param {?} configValue * @return {?} */ function _configFactory(initConfig, configValue) { return (typeof configValue === 'function') ? configValue() : __assign({}, initConfig, configValue); } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ export { config, NEW_CONFIG, INITIAL_CONFIG, initialConfig, MaskDirective, MaskService, _configFactory, NgxMaskModule, MaskPipe, MaskApplierService as ɵa }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hc2stMi5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vbmd4LW1hc2stMi9hcHAvbmd4LW1hc2svY29uZmlnLnRzIiwibmc6Ly9uZ3gtbWFzay0yL2FwcC9uZ3gtbWFzay9tYXNrLWFwcGxpZXIuc2VydmljZS50cyIsIm5nOi8vbmd4LW1hc2stMi9hcHAvbmd4LW1hc2svbWFzay5zZXJ2aWNlLnRzIiwibmc6Ly9uZ3gtbWFzay0yL2FwcC9uZ3gtbWFzay9tYXNrLmRpcmVjdGl2ZS50cyIsIm5nOi8vbmd4LW1hc2stMi9hcHAvbmd4LW1hc2svbWFzay5waXBlLnRzIiwibmc6Ly9uZ3gtbWFzay0yL2FwcC9uZ3gtbWFzay9uZ3gtbWFzay5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvbmZpZyB7XHJcbiAgICBzdWZpeDogc3RyaW5nO1xyXG4gICAgcHJlZml4OiBzdHJpbmc7XHJcbiAgICBjbGVhcklmTm90TWF0Y2g6IGJvb2xlYW47XHJcbiAgICBzaG93VGVtcGxhdGU6IGJvb2xlYW47XHJcbiAgICBzaG93TWFza1R5cGVkOiBib29sZWFuO1xyXG4gICAgZHJvcFNwZWNpYWxDaGFyYWN0ZXJzOiBib29sZWFuIHwgc3RyaW5nW107XHJcbiAgICBzcGVjaWFsQ2hhcmFjdGVyczogc3RyaW5nW107XHJcbiAgICBhcHBlbmRQcmVmaXhUb01vZGVsOiBib29sZWFuO1xyXG4gICAgcGF0dGVybnM6IHtcclxuICAgICAgICBbY2hhcmFjdGVyOiBzdHJpbmddOiB7XHJcbiAgICAgICAgICAgIHBhdHRlcm46IFJlZ0V4cCxcclxuICAgICAgICAgICAgb3B0aW9uYWw/OiBib29sZWFuXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgb3B0aW9uc0NvbmZpZyA9IFBhcnRpYWw8SUNvbmZpZz47XHJcbmV4cG9ydCBjb25zdCBjb25maWc6IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2NvbmZpZycpO1xyXG5leHBvcnQgY29uc3QgTkVXX0NPTkZJRzogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IG5ldyBJbmplY3Rpb25Ub2tlbignTkVXX0NPTkZJRycpO1xyXG5leHBvcnQgY29uc3QgSU5JVElBTF9DT05GSUc6IEluamVjdGlvblRva2VuPElDb25maWc+ID0gbmV3IEluamVjdGlvblRva2VuKCdJTklUSUFMX0NPTkZJRycpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGluaXRpYWxDb25maWc6IElDb25maWcgPSB7XHJcbiAgICBzdWZpeDogJycsXHJcbiAgICBwcmVmaXg6ICcnLFxyXG4gICAgY2xlYXJJZk5vdE1hdGNoOiBmYWxzZSxcclxuICAgIHNob3dUZW1wbGF0ZTogZmFsc2UsXHJcbiAgICBzaG93TWFza1R5cGVkOiBmYWxzZSxcclxuICAgIGRyb3BTcGVjaWFsQ2hhcmFjdGVyczogdHJ1ZSxcclxuICAgIHNwZWNpYWxDaGFyYWN0ZXJzOiBbJy8nLCAnKCcsICcpJywgJy4nLCAnOicsICctJywgJyAnLCAnKycsICcsJywgJ0AnLCAnWycsICddJywgJ1xcXCInLCAnXFwnJ10sXHJcbiAgICBhcHBlbmRQcmVmaXhUb01vZGVsOiBmYWxzZSxcclxuICAgIHBhdHRlcm5zOiB7XHJcbiAgICAgICAgJzAnOiB7XHJcbiAgICAgICAgICAgIHBhdHRlcm46IG5ldyBSZWdFeHAoJ1xcXFxkJyksXHJcbiAgICAgICAgfSxcclxuICAgICAgICAnOSc6IHtcclxuICAgICAgICAgICAgcGF0dGVybjogbmV3IFJlZ0V4cCgnXFxcXGQnKSxcclxuICAgICAgICAgICAgb3B0aW9uYWw6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgICdBJzoge1xyXG4gICAgICAgICAgICBwYXR0ZXJuOiBuZXcgUmVnRXhwKCdcXFthLXpBLVowLTlcXF0nKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ1MnOiB7XHJcbiAgICAgICAgICAgIHBhdHRlcm46IG5ldyBSZWdFeHAoJ1xcW2EtekEtWlxcXScpXHJcbiAgICAgICAgfSxcclxuICAgICAgICAnZCc6IHtcclxuICAgICAgICAgIHBhdHRlcm46IG5ldyBSZWdFeHAoJ1xcXFxkJyksXHJcbiAgICAgICAgfSxcclxuICAgICAgICAnbSc6IHtcclxuICAgICAgICAgIHBhdHRlcm46IG5ldyBSZWdFeHAoJ1xcXFxkJyksXHJcbiAgICAgICAgfSxcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNvbmZpZywgSUNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE1hc2tBcHBsaWVyU2VydmljZSB7XHJcblxyXG4gICAgcHVibGljIGRyb3BTcGVjaWFsQ2hhcmFjdGVyczogSUNvbmZpZ1snZHJvcFNwZWNpYWxDaGFyYWN0ZXJzJ107XHJcbiAgICBwdWJsaWMgc2hvd1RlbXBsYXRlOiBJQ29uZmlnWydzaG93VGVtcGxhdGUnXTtcclxuICAgIHB1YmxpYyBjbGVhcklmTm90TWF0Y2g6IElDb25maWdbJ2NsZWFySWZOb3RNYXRjaCddO1xyXG4gICAgcHVibGljIG1hc2tFeHByZXNzaW9uOiBzdHJpbmcgPSAnJztcclxuICAgIHB1YmxpYyBtYXNrU3BlY2lhbENoYXJhY3RlcnM6IElDb25maWdbJ3NwZWNpYWxDaGFyYWN0ZXJzJ107XHJcbiAgICBwdWJsaWMgbWFza0F2YWlsYWJsZVBhdHRlcm5zOiBJQ29uZmlnWydwYXR0ZXJucyddO1xyXG4gICAgcHVibGljIHByZWZpeDogSUNvbmZpZ1sncHJlZml4J107XHJcbiAgICBwdWJsaWMgc3VmaXg6IElDb25maWdbJ3N1Zml4J107XHJcbiAgICBwdWJsaWMgY3VzdG9tUGF0dGVybjogSUNvbmZpZ1sncGF0dGVybnMnXTtcclxuICAgIHB1YmxpYyBhcHBlbmRQcmVmaXhUb01vZGVsOiBJQ29uZmlnWydhcHBlbmRQcmVmaXhUb01vZGVsJ107XHJcblxyXG5cclxuICAgIHByaXZhdGUgX3NoaWZ0OiBTZXQ8bnVtYmVyPjtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdChjb25maWcpIHByb3RlY3RlZCBfY29uZmlnOiBJQ29uZmlnXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLl9zaGlmdCA9IG5ldyBTZXQoKTtcclxuICAgICAgICB0aGlzLm1hc2tTcGVjaWFsQ2hhcmFjdGVycyA9IHRoaXMuX2NvbmZpZyEuc3BlY2lhbENoYXJhY3RlcnM7XHJcbiAgICAgICAgdGhpcy5tYXNrQXZhaWxhYmxlUGF0dGVybnMgPSB0aGlzLl9jb25maWcucGF0dGVybnM7XHJcbiAgICAgICAgdGhpcy5jbGVhcklmTm90TWF0Y2ggPSB0aGlzLl9jb25maWcuY2xlYXJJZk5vdE1hdGNoO1xyXG4gICAgICAgIHRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzID0gdGhpcy5fY29uZmlnLmRyb3BTcGVjaWFsQ2hhcmFjdGVycztcclxuICAgICAgICB0aGlzLm1hc2tTcGVjaWFsQ2hhcmFjdGVycyA9IHRoaXMuX2NvbmZpZyEuc3BlY2lhbENoYXJhY3RlcnM7XHJcbiAgICAgICAgdGhpcy5tYXNrQXZhaWxhYmxlUGF0dGVybnMgPSB0aGlzLl9jb25maWcucGF0dGVybnM7XHJcbiAgICAgICAgdGhpcy5wcmVmaXggPSB0aGlzLl9jb25maWcucHJlZml4O1xyXG4gICAgICAgIHRoaXMuc3VmaXggPSB0aGlzLl9jb25maWcuc3VmaXg7XHJcbiAgICAgICAgdGhpcy5hcHBlbmRQcmVmaXhUb01vZGVsID0gdGhpcy5fY29uZmlnLmFwcGVuZFByZWZpeFRvTW9kZWw7XHJcblxyXG4gICAgfVxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxyXG4gICAgcHVibGljIGFwcGx5TWFza1dpdGhQYXR0ZXJuKGlucHV0VmFsdWU6IHN0cmluZywgbWFza0FuZFBhdHRlcm46IFtzdHJpbmcsIElDb25maWdbJ3BhdHRlcm5zJ11dKTogc3RyaW5nIHtcclxuICAgICAgY29uc3QgW21hc2ssIGN1c3RvbVBhdHRlcm5dID0gbWFza0FuZFBhdHRlcm47XHJcbiAgICAgIHRoaXMuY3VzdG9tUGF0dGVybiA9IGN1c3RvbVBhdHRlcm47XHJcbiAgICAgIHJldHVybiB0aGlzLmFwcGx5TWFzayhpbnB1dFZhbHVlLCBtYXNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhcHBseU1hc2soXHJcbiAgICAgICAgaW5wdXRWYWx1ZTogc3RyaW5nLFxyXG4gICAgICAgIG1hc2tFeHByZXNzaW9uOiBzdHJpbmcsXHJcbiAgICAgICAgcG9zaXRpb246IG51bWJlciA9IDAsXHJcbiAgICAgICAgY2I6IEZ1bmN0aW9uID0gKCkgPT4ge31cclxuICAgICAgKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGlucHV0VmFsdWUgPT09IG51bGwgfHwgbWFza0V4cHJlc3Npb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY3Vyc29yOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IGBgO1xyXG4gICAgICAgIGxldCBtdWx0aTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZS5zbGljZSgwLCB0aGlzLnByZWZpeC5sZW5ndGgpID09PSB0aGlzLnByZWZpeCkge1xyXG4gICAgICAgICAgICBpbnB1dFZhbHVlID0gaW5wdXRWYWx1ZS5zbGljZSh0aGlzLnByZWZpeC5sZW5ndGgsIGlucHV0VmFsdWUubGVuZ3RoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlucHV0QXJyYXk6IHN0cmluZ1tdID0gaW5wdXRWYWx1ZS50b1N0cmluZygpXHJcbiAgICAgICAgICAgIC5zcGxpdCgnJyk7XHJcblxyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDAsIGlucHV0U3ltYm9sOiBzdHJpbmcgPSBpbnB1dEFycmF5WzBdOyBpXHJcbiAgICAgICAgPCBpbnB1dEFycmF5Lmxlbmd0aDsgaSsrLCBpbnB1dFN5bWJvbCA9IGlucHV0QXJyYXlbaV0pIHtcclxuICAgICAgICAgICAgaWYgKGN1cnNvciA9PT0gbWFza0V4cHJlc3Npb24ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2hlY2tTeW1ib2xNYXNrKGlucHV0U3ltYm9sLCBtYXNrRXhwcmVzc2lvbltjdXJzb3JdKSAmJiBtYXNrRXhwcmVzc2lvbltjdXJzb3IgKyAxXSA9PT0gJz8nKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gaW5wdXRTeW1ib2w7XHJcbiAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICBtYXNrRXhwcmVzc2lvbltjdXJzb3IgKyAxXSA9PT0gJyonICYmIG11bHRpXHJcbiAgICAgICAgICAgICAgJiYgdGhpcy5fY2hlY2tTeW1ib2xNYXNrKGlucHV0U3ltYm9sLCBtYXNrRXhwcmVzc2lvbltjdXJzb3IgKyAyXSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0ICs9IGlucHV0U3ltYm9sO1xyXG4gICAgICAgICAgICAgIGN1cnNvciArPSAzO1xyXG4gICAgICAgICAgICAgIG11bHRpID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tTeW1ib2xNYXNrKGlucHV0U3ltYm9sLCBtYXNrRXhwcmVzc2lvbltjdXJzb3JdKVxyXG4gICAgICAgICAgICAgICAgJiYgbWFza0V4cHJlc3Npb25bY3Vyc29yICsgMV1cclxuICAgICAgICAgICAgICAgID09PSAnKicpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbnB1dFN5bWJvbDtcclxuICAgICAgICAgICAgICAgIG11bHRpID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXNrRXhwcmVzc2lvbltjdXJzb3IgKyAxXSA9PT0gJz8nICYmIHRoaXMuX2NoZWNrU3ltYm9sTWFzayhcclxuICAgICAgICAgICAgICAgIGlucHV0U3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgbWFza0V4cHJlc3Npb25bY3Vyc29yICsgMl1cclxuICAgICAgICAgICAgKSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGlucHV0U3ltYm9sO1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yICs9IDM7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tTeW1ib2xNYXNrKGlucHV0U3ltYm9sLCBtYXNrRXhwcmVzc2lvbltjdXJzb3JdKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hc2tFeHByZXNzaW9uW2N1cnNvcl0gPT09ICdkJykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKGlucHV0U3ltYm9sKSA+IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gMDtcclxuICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGlmdFN0ZXA6IG51bWJlciA9IC9cXCp8XFw/L2cudGVzdChtYXNrRXhwcmVzc2lvbi5zbGljZSgwLCBjdXJzb3IpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgPyBpbnB1dEFycmF5Lmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgOiBjdXJzb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hpZnQuYWRkKCBzaGlmdFN0ZXAgKyB0aGlzLnByZWZpeC5sZW5ndGggfHwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKG1hc2tFeHByZXNzaW9uW2N1cnNvciAtIDFdID09PSAnZCcpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihpbnB1dFZhbHVlLnNsaWNlKGN1cnNvciAtIDEsIGN1cnNvciArIDEpKSA+IDMxICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChtYXNrRXhwcmVzc2lvbltjdXJzb3JdID09PSAnbScpIHtcclxuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoaW5wdXRTeW1ib2wpID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICByZXN1bHQgKz0gMDtcclxuICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNoaWZ0U3RlcDogbnVtYmVyID0gL1xcKnxcXD8vZy50ZXN0KG1hc2tFeHByZXNzaW9uLnNsaWNlKDAsIGN1cnNvcikpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dEFycmF5Lmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgIDogY3Vyc29yO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zaGlmdC5hZGQoIHNoaWZ0U3RlcCArIHRoaXMucHJlZml4Lmxlbmd0aCB8fCAwKTtcclxuICAgICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKG1hc2tFeHByZXNzaW9uW2N1cnNvciAtIDFdID09PSAnbScpIHtcclxuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoaW5wdXRWYWx1ZS5zbGljZShjdXJzb3IgLSAxLCBjdXJzb3IgKyAxKSkgPiAxMiApIHtcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGlucHV0U3ltYm9sO1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yKys7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXNrU3BlY2lhbENoYXJhY3RlcnMuaW5kZXhPZihtYXNrRXhwcmVzc2lvbltjdXJzb3JdKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBtYXNrRXhwcmVzc2lvbltjdXJzb3JdO1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yKys7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzaGlmdFN0ZXA6IG51bWJlciA9IC9cXCp8XFw/L2cudGVzdChtYXNrRXhwcmVzc2lvbi5zbGljZSgwLCBjdXJzb3IpKVxyXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXRBcnJheS5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICA6IGN1cnNvcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NoaWZ0LmFkZChzaGlmdFN0ZXAgKyB0aGlzLnByZWZpeC5sZW5ndGggfHwgMCk7XHJcbiAgICAgICAgICAgICAgICBpLS07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXNrU3BlY2lhbENoYXJhY3RlcnMuaW5kZXhPZihpbnB1dFN5bWJvbCkgPiAtMVxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5tYXNrQXZhaWxhYmxlUGF0dGVybnNbbWFza0V4cHJlc3Npb25bY3Vyc29yXV1cclxuICAgICAgICAgICAgICAgICYmIHRoaXMubWFza0F2YWlsYWJsZVBhdHRlcm5zW21hc2tFeHByZXNzaW9uW2N1cnNvcl1dLm9wdGlvbmFsKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJzb3IrKztcclxuICAgICAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggKHRoaXMubWFza0V4cHJlc3Npb25bY3Vyc29yICsgMV0gPT09ICcqJylcclxuICAgICAgICAgICAgICAmJiAodGhpcy5fZmluZFNwZWNpYWxDaGFyKHRoaXMubWFza0V4cHJlc3Npb25bY3Vyc29yICsgMl0pKVxyXG4gICAgICAgICAgICAgICYmICh0aGlzLl9maW5kU3BlY2lhbENoYXIoaW5wdXRTeW1ib2wpID09PSB0aGlzLm1hc2tFeHByZXNzaW9uW2N1cnNvciArIDJdKSApIHtcclxuICAgICAgICAgICAgICBjdXJzb3IgKz0gMztcclxuICAgICAgICAgICAgICByZXN1bHQgKz0gaW5wdXRTeW1ib2w7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCArIDEgPT09IG1hc2tFeHByZXNzaW9uLmxlbmd0aFxyXG4gICAgICAgICAgICAmJiB0aGlzLm1hc2tTcGVjaWFsQ2hhcmFjdGVycy5pbmRleE9mKG1hc2tFeHByZXNzaW9uW21hc2tFeHByZXNzaW9uLmxlbmd0aCAtIDFdKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IG1hc2tFeHByZXNzaW9uW21hc2tFeHByZXNzaW9uLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBzaGlmdDogbnVtYmVyID0gMTtcclxuICAgICAgICBsZXQgbmV3UG9zaXRpb246IG51bWJlciA9IHBvc2l0aW9uICsgMTtcclxuXHJcbiAgICAgICAgd2hpbGUgKHRoaXMuX3NoaWZ0LmhhcyhuZXdQb3NpdGlvbikpIHtcclxuICAgICAgICAgICAgc2hpZnQrKztcclxuICAgICAgICAgICAgbmV3UG9zaXRpb24rKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNiKHRoaXMuX3NoaWZ0Lmhhcyhwb3NpdGlvbikgPyBzaGlmdCA6IDApO1xyXG4gICAgICAgIGxldCByZXM6IHN0cmluZyA9IGAke3RoaXMucHJlZml4fSR7cmVzdWx0fWA7XHJcbiAgICAgICAgcmVzID0gdGhpcy5zdWZpeCAmJlxyXG4gICAgICAgICAgICAgIGN1cnNvciA9PT0gbWFza0V4cHJlc3Npb24ubGVuZ3RoXHJcbiAgICAgICAgICAgID8gYCR7dGhpcy5wcmVmaXh9JHtyZXN1bHR9JHt0aGlzLnN1Zml4fWBcclxuICAgICAgICAgICAgOiBgJHt0aGlzLnByZWZpeH0ke3Jlc3VsdH1gO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgX2ZpbmRTcGVjaWFsQ2hhciAoaW5wdXRTeW1ib2w6IHN0cmluZyk6IHVuZGVmaW5lZCB8IHN0cmluZyB7XHJcbiAgICAgIGNvbnN0IHN5bWJvbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5tYXNrU3BlY2lhbENoYXJhY3RlcnNcclxuICAgICAgICAgIC5maW5kKCAodmFsOiBzdHJpbmcpID0+IHZhbCA9PT0gaW5wdXRTeW1ib2wpO1xyXG4gICAgICByZXR1cm4gc3ltYm9sIDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jaGVja1N5bWJvbE1hc2soaW5wdXRTeW1ib2w6IHN0cmluZywgbWFza1N5bWJvbDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgIHRoaXMubWFza0F2YWlsYWJsZVBhdHRlcm5zID0gdGhpcy5jdXN0b21QYXR0ZXJuXHJcbiAgICAgICAgPyB0aGlzLmN1c3RvbVBhdHRlcm5cclxuICAgICAgICA6IHRoaXMubWFza0F2YWlsYWJsZVBhdHRlcm5zO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hc2tBdmFpbGFibGVQYXR0ZXJuc1ttYXNrU3ltYm9sXVxyXG4gICAgICAgICAgICAmJiB0aGlzLm1hc2tBdmFpbGFibGVQYXR0ZXJuc1ttYXNrU3ltYm9sXS5wYXR0ZXJuXHJcbiAgICAgICAgICAgICYmIHRoaXMubWFza0F2YWlsYWJsZVBhdHRlcm5zW21hc2tTeW1ib2xdLnBhdHRlcm4udGVzdChpbnB1dFN5bWJvbCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0LCBJbmplY3RhYmxlLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY29uZmlnLCBJQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1hc2tBcHBsaWVyU2VydmljZSB9IGZyb20gJy4vbWFzay1hcHBsaWVyLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTWFza1NlcnZpY2UgZXh0ZW5kcyBNYXNrQXBwbGllclNlcnZpY2Uge1xyXG4gIHB1YmxpYyBtYXNrRXhwcmVzc2lvbjogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGlzTnVtYmVyVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd01hc2tUeXBlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBtYXNrSXNTaG93bjogc3RyaW5nID0gJyc7XHJcbiAgcHJpdmF0ZSBfZm9ybUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXHJcbiAgcHVibGljIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XHJcbiAgcHVibGljIG9uVG91Y2ggPSAoKSA9PiB7fTtcclxuICBwdWJsaWMgY29uc3RydWN0b3IoXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSxcclxuICAgIEBJbmplY3QoY29uZmlnKSBwcm90ZWN0ZWQgX2NvbmZpZzogSUNvbmZpZyxcclxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyXHJcbiAgKSB7XHJcbiAgICBzdXBlcihfY29uZmlnKTtcclxuICAgIHRoaXMuX2Zvcm1FbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGx5TWFzayhcclxuICAgIGlucHV0VmFsdWU6IHN0cmluZyxcclxuICAgIG1hc2tFeHByZXNzaW9uOiBzdHJpbmcsXHJcbiAgICBwb3NpdGlvbjogbnVtYmVyID0gMCxcclxuICAgIGNiOiBGdW5jdGlvbiA9ICgpID0+IHt9XHJcbiAgKTogc3RyaW5nICB7XHJcbiAgICB0aGlzLm1hc2tJc1Nob3duID0gdGhpcy5zaG93TWFza1R5cGVkXHJcbiAgICAgICAgPyB0aGlzLm1hc2tFeHByZXNzaW9uLnJlcGxhY2UoL1swLTldL2csICdfJylcclxuICAgICAgICA6ICcnO1xyXG4gICAgaWYgKCFpbnB1dFZhbHVlICYmIHRoaXMuc2hvd01hc2tUeXBlZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wcmVmaXggKyB0aGlzLm1hc2tJc1Nob3duO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmcgID0gc3VwZXIuYXBwbHlNYXNrKFxyXG4gICAgICBpbnB1dFZhbHVlLFxyXG4gICAgICBtYXNrRXhwcmVzc2lvbixcclxuICAgICAgcG9zaXRpb24sXHJcbiAgICAgIGNiXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBmaW5hbFJlc3VsdDogc3RyaW5nIHwgbnVtYmVyID0gQXJyYXkuaXNBcnJheSh0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycylcclxuICAgICAgICA/ICh0aGlzLl9yZW1vdmVNYXNrKHRoaXMuX3JlbW92ZVN1Zml4KFxyXG4gICAgICAgICh0aGlzLmFwcGVuZFByZWZpeFRvTW9kZWwgPyByZXN1bHQgOiB0aGlzLl9yZW1vdmVQcmVmaXgocmVzdWx0KSlcclxuICAgICAgICApLCB0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycykpXHJcbiAgICAgICAgOiAodGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnMgPT09IHRydWVcclxuICAgICAgICAgPyAoXHJcbiAgICAgICAgIHRoaXMuaXNOdW1iZXJWYWx1ZVxyXG4gICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5fcmVtb3ZlTWFzayh0aGlzLl9yZW1vdmVTdWZpeChcclxuICAgICAgICAgICAgICh0aGlzLmFwcGVuZFByZWZpeFRvTW9kZWwgPyByZXN1bHQgOiB0aGlzLl9yZW1vdmVQcmVmaXgocmVzdWx0KSkpLCB0aGlzLm1hc2tTcGVjaWFsQ2hhcmFjdGVycykpXHJcbiAgICAgICAgICAgICA6IHRoaXMuX3JlbW92ZU1hc2sodGhpcy5fcmVtb3ZlU3VmaXgoXHJcbiAgICAgICAgICAgICAodGhpcy5hcHBlbmRQcmVmaXhUb01vZGVsID8gcmVzdWx0IDogdGhpcy5fcmVtb3ZlUHJlZml4KHJlc3VsdCkpKSwgdGhpcy5tYXNrU3BlY2lhbENoYXJhY3RlcnMpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgOiAodGhpcy5fcmVtb3ZlU3VmaXgoKHRoaXMuYXBwZW5kUHJlZml4VG9Nb2RlbCA/IHJlc3VsdCA6IHRoaXMuX3JlbW92ZVByZWZpeChyZXN1bHQpKSkpKTtcclxuXHJcbiAgICBpZiA