src/ztfy/myams/resources/js/ext/jquery-inputmask-bundle-3.2.8.js
changeset 167 bf78f1c35edd
equal deleted inserted replaced
166:d38f0fdb0543 167:bf78f1c35edd
       
     1 /*!
       
     2 * jquery.inputmask.bundle.js
       
     3 * https://github.com/RobinHerbots/jquery.inputmask
       
     4 * Copyright (c) 2010 - 2016 Robin Herbots
       
     5 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
       
     6 * Version: 3.2.8-15
       
     7 */
       
     8 !function($) {
       
     9     function Inputmask(alias, options) {
       
    10         return this instanceof Inputmask ? ($.isPlainObject(alias) ? options = alias : (options = options || {}, 
       
    11         options.alias = alias), this.el = void 0, this.opts = $.extend(!0, {}, this.defaults, options), 
       
    12         this.noMasksCache = options && void 0 !== options.definitions, this.userOptions = options || {}, 
       
    13         this.events = {}, void resolveAlias(this.opts.alias, options, this.opts)) : new Inputmask(alias, options);
       
    14     }
       
    15     function isInputEventSupported(eventName) {
       
    16         var el = document.createElement("input"), evName = "on" + eventName, isSupported = evName in el;
       
    17         return isSupported || (el.setAttribute(evName, "return;"), isSupported = "function" == typeof el[evName]), 
       
    18         el = null, isSupported;
       
    19     }
       
    20     function isElementTypeSupported(input, opts) {
       
    21         var elementType = input.getAttribute("type"), isSupported = "INPUT" === input.tagName && -1 !== $.inArray(elementType, opts.supportsInputType) || input.isContentEditable || "TEXTAREA" === input.tagName;
       
    22         if (!isSupported && "INPUT" === input.tagName) {
       
    23             var el = document.createElement("input");
       
    24             el.setAttribute("type", elementType), isSupported = "text" === el.type, el = null;
       
    25         }
       
    26         return isSupported;
       
    27     }
       
    28     function resolveAlias(aliasStr, options, opts) {
       
    29         var aliasDefinition = opts.aliases[aliasStr];
       
    30         return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, void 0, opts), 
       
    31         $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr), 
       
    32         !1);
       
    33     }
       
    34     function importAttributeOptions(npt, opts, userOptions) {
       
    35         function importOption(option, optionData) {
       
    36             optionData = void 0 !== optionData ? optionData : npt.getAttribute("data-inputmask-" + option), 
       
    37             null !== optionData && ("string" == typeof optionData && (0 === option.indexOf("on") ? optionData = window[optionData] : "false" === optionData ? optionData = !1 : "true" === optionData && (optionData = !0)), 
       
    38             userOptions[option] = optionData);
       
    39         }
       
    40         var option, dataoptions, optionData, p, attrOptions = npt.getAttribute("data-inputmask");
       
    41         if (attrOptions && "" !== attrOptions && (attrOptions = attrOptions.replace(new RegExp("'", "g"), '"'), 
       
    42         dataoptions = JSON.parse("{" + attrOptions + "}")), dataoptions) {
       
    43             optionData = void 0;
       
    44             for (p in dataoptions) if ("alias" === p.toLowerCase()) {
       
    45                 optionData = dataoptions[p];
       
    46                 break;
       
    47             }
       
    48         }
       
    49         importOption("alias", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts);
       
    50         for (option in opts) {
       
    51             if (dataoptions) {
       
    52                 optionData = void 0;
       
    53                 for (p in dataoptions) if (p.toLowerCase() === option.toLowerCase()) {
       
    54                     optionData = dataoptions[p];
       
    55                     break;
       
    56                 }
       
    57             }
       
    58             importOption(option, optionData);
       
    59         }
       
    60         return $.extend(!0, opts, userOptions), opts;
       
    61     }
       
    62     function generateMaskSet(opts, nocache) {
       
    63         function analyseMask(mask) {
       
    64             function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {
       
    65                 this.matches = [], this.isGroup = isGroup || !1, this.isOptional = isOptional || !1, 
       
    66                 this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1, 
       
    67                 this.quantifier = {
       
    68                     min: 1,
       
    69                     max: 1
       
    70                 };
       
    71             }
       
    72             function insertTestDefinition(mtoken, element, position) {
       
    73                 var maskdef = opts.definitions[element];
       
    74                 position = void 0 !== position ? position : mtoken.matches.length;
       
    75                 var prevMatch = mtoken.matches[position - 1];
       
    76                 if (maskdef && !escaped) {
       
    77                     maskdef.placeholder = $.isFunction(maskdef.placeholder) ? maskdef.placeholder(opts) : maskdef.placeholder;
       
    78                     for (var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0, i = 1; i < maskdef.cardinality; i++) {
       
    79                         var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality;
       
    80                         mtoken.matches.splice(position++, 0, {
       
    81                             fn: validator ? "string" == typeof validator ? new RegExp(validator) : new function() {
       
    82                                 this.test = validator;
       
    83                             }() : new RegExp("."),
       
    84                             cardinality: cardinality ? cardinality : 1,
       
    85                             optionality: mtoken.isOptional,
       
    86                             newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),
       
    87                             casing: maskdef.casing,
       
    88                             def: maskdef.definitionSymbol || element,
       
    89                             placeholder: maskdef.placeholder,
       
    90                             mask: element
       
    91                         }), prevMatch = mtoken.matches[position - 1];
       
    92                     }
       
    93                     mtoken.matches.splice(position++, 0, {
       
    94                         fn: maskdef.validator ? "string" == typeof maskdef.validator ? new RegExp(maskdef.validator) : new function() {
       
    95                             this.test = maskdef.validator;
       
    96                         }() : new RegExp("."),
       
    97                         cardinality: maskdef.cardinality,
       
    98                         optionality: mtoken.isOptional,
       
    99                         newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),
       
   100                         casing: maskdef.casing,
       
   101                         def: maskdef.definitionSymbol || element,
       
   102                         placeholder: maskdef.placeholder,
       
   103                         mask: element
       
   104                     });
       
   105                 } else mtoken.matches.splice(position++, 0, {
       
   106                     fn: null,
       
   107                     cardinality: 0,
       
   108                     optionality: mtoken.isOptional,
       
   109                     newBlockMarker: void 0 === prevMatch || prevMatch.def !== element,
       
   110                     casing: null,
       
   111                     def: opts.staticDefinitionSymbol || element,
       
   112                     placeholder: void 0 !== opts.staticDefinitionSymbol ? element : void 0,
       
   113                     mask: element
       
   114                 }), escaped = !1;
       
   115             }
       
   116             function verifyGroupMarker(lastMatch, isOpenGroup) {
       
   117                 lastMatch.isGroup && (lastMatch.isGroup = !1, insertTestDefinition(lastMatch, opts.groupmarker.start, 0), 
       
   118                 isOpenGroup !== !0 && insertTestDefinition(lastMatch, opts.groupmarker.end));
       
   119             }
       
   120             function maskCurrentToken(m, currentToken, lastMatch, extraCondition) {
       
   121                 currentToken.matches.length > 0 && (void 0 === extraCondition || extraCondition) && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
       
   122                 verifyGroupMarker(lastMatch)), insertTestDefinition(currentToken, m);
       
   123             }
       
   124             function defaultCase() {
       
   125                 if (openenings.length > 0) {
       
   126                     if (currentOpeningToken = openenings[openenings.length - 1], maskCurrentToken(m, currentOpeningToken, lastMatch, !currentOpeningToken.isAlternator), 
       
   127                     currentOpeningToken.isAlternator) {
       
   128                         alternator = openenings.pop();
       
   129                         for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
       
   130                         openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
       
   131                         currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
       
   132                     }
       
   133                 } else maskCurrentToken(m, currentToken, lastMatch);
       
   134             }
       
   135             function reverseTokens(maskToken) {
       
   136                 function reverseStatic(st) {
       
   137                     return st === opts.optionalmarker.start ? st = opts.optionalmarker.end : st === opts.optionalmarker.end ? st = opts.optionalmarker.start : st === opts.groupmarker.start ? st = opts.groupmarker.end : st === opts.groupmarker.end && (st = opts.groupmarker.start), 
       
   138                     st;
       
   139                 }
       
   140                 maskToken.matches = maskToken.matches.reverse();
       
   141                 for (var match in maskToken.matches) {
       
   142                     var intMatch = parseInt(match);
       
   143                     if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {
       
   144                         var qt = maskToken.matches[match];
       
   145                         maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt);
       
   146                     }
       
   147                     void 0 !== maskToken.matches[match].matches ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = reverseStatic(maskToken.matches[match]);
       
   148                 }
       
   149                 return maskToken;
       
   150             }
       
   151             for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, groupToken, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0], 
       
   152             escaped) defaultCase(); else switch (m.charAt(0)) {
       
   153               case opts.escapeChar:
       
   154                 escaped = !0;
       
   155                 break;
       
   156 
       
   157               case opts.optionalmarker.end:
       
   158               case opts.groupmarker.end:
       
   159                 if (openingToken = openenings.pop(), void 0 !== openingToken) if (openenings.length > 0) {
       
   160                     if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.push(openingToken), 
       
   161                     currentOpeningToken.isAlternator) {
       
   162                         alternator = openenings.pop();
       
   163                         for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
       
   164                         openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
       
   165                         currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
       
   166                     }
       
   167                 } else currentToken.matches.push(openingToken); else defaultCase();
       
   168                 break;
       
   169 
       
   170               case opts.optionalmarker.start:
       
   171                 openenings.push(new MaskToken(!1, !0));
       
   172                 break;
       
   173 
       
   174               case opts.groupmarker.start:
       
   175                 openenings.push(new MaskToken(!0));
       
   176                 break;
       
   177 
       
   178               case opts.quantifiermarker.start:
       
   179                 var quantifier = new MaskToken(!1, !1, !0);
       
   180                 m = m.replace(/[{}]/g, "");
       
   181                 var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
       
   182                 if (("*" === mq1 || "+" === mq1) && (mq0 = "*" === mq1 ? 0 : 1), quantifier.quantifier = {
       
   183                     min: mq0,
       
   184                     max: mq1
       
   185                 }, openenings.length > 0) {
       
   186                     var matches = openenings[openenings.length - 1].matches;
       
   187                     match = matches.pop(), match.isGroup || (groupToken = new MaskToken(!0), groupToken.matches.push(match), 
       
   188                     match = groupToken), matches.push(match), matches.push(quantifier);
       
   189                 } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new MaskToken(!0), 
       
   190                 groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), 
       
   191                 currentToken.matches.push(quantifier);
       
   192                 break;
       
   193 
       
   194               case opts.alternatormarker:
       
   195                 openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
       
   196                 lastMatch = currentOpeningToken.matches.pop()) : lastMatch = currentToken.matches.pop(), 
       
   197                 lastMatch.isAlternator ? openenings.push(lastMatch) : (alternator = new MaskToken(!1, !1, !1, !0), 
       
   198                 alternator.matches.push(lastMatch), openenings.push(alternator));
       
   199                 break;
       
   200 
       
   201               default:
       
   202                 defaultCase();
       
   203             }
       
   204             for (;openenings.length > 0; ) openingToken = openenings.pop(), verifyGroupMarker(openingToken, !0), 
       
   205             currentToken.matches.push(openingToken);
       
   206             return currentToken.matches.length > 0 && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
       
   207             verifyGroupMarker(lastMatch), maskTokens.push(currentToken)), opts.numericInput && reverseTokens(maskTokens[0]), 
       
   208             maskTokens;
       
   209         }
       
   210         function generateMask(mask, metadata) {
       
   211             if (null === mask || "" === mask) return void 0;
       
   212             if (1 === mask.length && opts.greedy === !1 && 0 !== opts.repeat && (opts.placeholder = ""), 
       
   213             opts.repeat > 0 || "*" === opts.repeat || "+" === opts.repeat) {
       
   214                 var repeatStart = "*" === opts.repeat ? 0 : "+" === opts.repeat ? 1 : opts.repeat;
       
   215                 mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + "," + opts.repeat + opts.quantifiermarker.end;
       
   216             }
       
   217             var masksetDefinition;
       
   218             return void 0 === Inputmask.prototype.masksCache[mask] || nocache === !0 ? (masksetDefinition = {
       
   219                 mask: mask,
       
   220                 maskToken: analyseMask(mask),
       
   221                 validPositions: {},
       
   222                 _buffer: void 0,
       
   223                 buffer: void 0,
       
   224                 tests: {},
       
   225                 metadata: metadata
       
   226             }, nocache !== !0 && (Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask] = masksetDefinition, 
       
   227             masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask]), 
       
   228             masksetDefinition;
       
   229         }
       
   230         function preProcessMask(mask) {
       
   231             return mask = mask.toString();
       
   232         }
       
   233         var ms;
       
   234         if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) {
       
   235             if (opts.mask.length > 1) {
       
   236                 opts.keepStatic = null === opts.keepStatic ? !0 : opts.keepStatic;
       
   237                 var altMask = "(";
       
   238                 return $.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function(ndx, msk) {
       
   239                     altMask.length > 1 && (altMask += ")|("), altMask += preProcessMask(void 0 === msk.mask || $.isFunction(msk.mask) ? msk : msk.mask);
       
   240                 }), altMask += ")", generateMask(altMask, opts.mask);
       
   241             }
       
   242             opts.mask = opts.mask.pop();
       
   243         }
       
   244         return opts.mask && (ms = void 0 === opts.mask.mask || $.isFunction(opts.mask.mask) ? generateMask(preProcessMask(opts.mask), opts.mask) : generateMask(preProcessMask(opts.mask.mask), opts.mask)), 
       
   245         ms;
       
   246     }
       
   247     function maskScope(actionObj, maskset, opts) {
       
   248         function getMaskTemplate(baseOnInput, minimalPos, includeInput) {
       
   249             minimalPos = minimalPos || 0;
       
   250             var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0, lvp = getLastValidPosition();
       
   251             do {
       
   252                 if (baseOnInput === !0 && getMaskSet().validPositions[pos]) {
       
   253                     var validPos = getMaskSet().validPositions[pos];
       
   254                     test = validPos.match, ndxIntlzr = validPos.locator.slice(), maskTemplate.push(includeInput === !0 ? validPos.input : getPlaceholder(pos, test));
       
   255                 } else testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), test = testPos.match, 
       
   256                 ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || lvp > pos || isFinite(opts.jitMasking) && opts.jitMasking > pos) && maskTemplate.push(getPlaceholder(pos, test));
       
   257                 pos++;
       
   258             } while ((void 0 === maxLength || maxLength > pos - 1) && null !== test.fn || null === test.fn && "" !== test.def || minimalPos >= pos);
       
   259             return "" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), maskTemplate;
       
   260         }
       
   261         function getMaskSet() {
       
   262             return maskset;
       
   263         }
       
   264         function resetMaskSet(soft) {
       
   265             var maskset = getMaskSet();
       
   266             maskset.buffer = void 0, soft !== !0 && (maskset.tests = {}, maskset._buffer = void 0, 
       
   267             maskset.validPositions = {}, maskset.p = 0);
       
   268         }
       
   269         function getLastValidPosition(closestTo, strict) {
       
   270             var before = -1, after = -1, valids = getMaskSet().validPositions;
       
   271             void 0 === closestTo && (closestTo = -1);
       
   272             for (var posNdx in valids) {
       
   273                 var psNdx = parseInt(posNdx);
       
   274                 valids[psNdx] && (strict || null !== valids[psNdx].match.fn) && (closestTo >= psNdx && (before = psNdx), 
       
   275                 psNdx >= closestTo && (after = psNdx));
       
   276             }
       
   277             return -1 !== before && closestTo - before > 1 || closestTo > after ? before : after;
       
   278         }
       
   279         function setValidPosition(pos, validTest, fromSetValid, isSelection) {
       
   280             if (isSelection || opts.insertMode && void 0 !== getMaskSet().validPositions[pos] && void 0 === fromSetValid) {
       
   281                 var i, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition();
       
   282                 for (i = pos; lvp >= i; i++) delete getMaskSet().validPositions[i];
       
   283                 getMaskSet().validPositions[pos] = validTest;
       
   284                 var j, valid = !0, vps = getMaskSet().validPositions;
       
   285                 for (i = j = pos; lvp >= i; i++) {
       
   286                     var t = positionsClone[i];
       
   287                     if (void 0 !== t) for (var posMatch = j, prevPosMatch = -1; posMatch < getMaskLength() && (null == t.match.fn && vps[i] && (vps[i].match.optionalQuantifier === !0 || vps[i].match.optionality === !0) || null != t.match.fn); ) if (null === t.match.fn || !opts.keepStatic && vps[i] && (void 0 !== vps[i + 1] && getTests(i + 1, vps[i].locator.slice(), i).length > 1 || void 0 !== vps[i].alternation) ? posMatch++ : posMatch = seekNext(j), 
       
   288                     positionCanMatchDefinition(posMatch, t.match.def)) {
       
   289                         var result = isValid(posMatch, t.input, !0, !0);
       
   290                         if (valid = result !== !1, j = result.caret || result.insert ? getLastValidPosition() : posMatch, 
       
   291                         valid) break;
       
   292                     } else {
       
   293                         if (valid = null == t.match.fn, prevPosMatch === posMatch) break;
       
   294                         prevPosMatch = posMatch;
       
   295                     }
       
   296                     if (!valid) break;
       
   297                 }
       
   298                 if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone), 
       
   299                 resetMaskSet(!0), !1;
       
   300             } else getMaskSet().validPositions[pos] = validTest;
       
   301             return resetMaskSet(!0), !0;
       
   302         }
       
   303         function stripValidPositions(start, end, nocheck, strict) {
       
   304             function IsEnclosedStatic(pos) {
       
   305                 var posMatch = getMaskSet().validPositions[pos];
       
   306                 if (void 0 !== posMatch && null === posMatch.match.fn) {
       
   307                     var prevMatch = getMaskSet().validPositions[pos - 1], nextMatch = getMaskSet().validPositions[pos + 1];
       
   308                     return void 0 !== prevMatch && void 0 !== nextMatch;
       
   309                 }
       
   310                 return !1;
       
   311             }
       
   312             var i, startPos = start;
       
   313             for (getMaskSet().p = start, i = end - 1; i >= startPos; i--) void 0 !== getMaskSet().validPositions[i] && (nocheck === !0 || !IsEnclosedStatic(i) && opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), strict, opts) !== !1) && delete getMaskSet().validPositions[i];
       
   314             for (resetMaskSet(!0), i = startPos + 1; i <= getLastValidPosition(); ) {
       
   315                 for (;void 0 !== getMaskSet().validPositions[startPos]; ) startPos++;
       
   316                 var s = getMaskSet().validPositions[startPos];
       
   317                 if (startPos > i && (i = startPos + 1), void 0 === getMaskSet().validPositions[i] && isMask(i) || void 0 !== s) i++; else {
       
   318                     var t = getTestTemplate(i);
       
   319                     positionCanMatchDefinition(startPos, t.match.def) ? isValid(startPos, t.input || getPlaceholder(i), !0) !== !1 && (delete getMaskSet().validPositions[i], 
       
   320                     i++) : isMask(i) || (i++, startPos--), startPos++;
       
   321                 }
       
   322             }
       
   323             resetMaskSet(!0);
       
   324         }
       
   325         function getTestTemplate(pos, ndxIntlzr, tstPs) {
       
   326             var testPos = getMaskSet().validPositions[pos];
       
   327             if (void 0 === testPos) for (var testPositions = getTests(pos, ndxIntlzr, tstPs), lvp = getLastValidPosition(), lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0], lvTestAltArr = void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation].toString().split(",") : [], ndx = 0; ndx < testPositions.length && (testPos = testPositions[ndx], 
       
   328             !(testPos.match && (opts.greedy && testPos.match.optionalQuantifier !== !0 || (testPos.match.optionality === !1 || testPos.match.newBlockMarker === !1) && testPos.match.optionalQuantifier !== !0) && (void 0 === lvTest.alternation || lvTest.alternation !== testPos.alternation || void 0 !== testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAltArr)))); ndx++) ;
       
   329             return testPos;
       
   330         }
       
   331         function getTest(pos) {
       
   332             return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos].match : getTests(pos)[0].match;
       
   333         }
       
   334         function positionCanMatchDefinition(pos, def) {
       
   335             for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) {
       
   336                 valid = !0;
       
   337                 break;
       
   338             }
       
   339             return valid;
       
   340         }
       
   341         function selectBestMatch(pos, alternateNdx) {
       
   342             var bestMatch, indexPos;
       
   343             return (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) && $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) {
       
   344                 var ndxPos = lmnt.alternation ? lmnt.locator[lmnt.alternation].toString().indexOf(alternateNdx) : -1;
       
   345                 (void 0 === indexPos || indexPos > ndxPos) && -1 !== ndxPos && (bestMatch = lmnt, 
       
   346                 indexPos = ndxPos);
       
   347             }), bestMatch;
       
   348         }
       
   349         function getTests(pos, ndxIntlzr, tstPs) {
       
   350             function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {
       
   351                 function handleMatch(match, loopNdx, quantifierRecurse) {
       
   352                     function isFirstMatch(latestMatch, tokenGroup) {
       
   353                         var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches);
       
   354                         return firstMatch || $.each(tokenGroup.matches, function(ndx, match) {
       
   355                             return match.isQuantifier === !0 && (firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1])) ? !1 : void 0;
       
   356                         }), firstMatch;
       
   357                     }
       
   358                     function resolveNdxInitializer(pos, alternateNdx) {
       
   359                         var bestMatch = selectBestMatch(pos, alternateNdx);
       
   360                         return bestMatch ? bestMatch.locator.slice(bestMatch.alternation + 1) : [];
       
   361                     }
       
   362                     if (testPos > 1e4) throw "Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. " + getMaskSet().mask;
       
   363                     if (testPos === pos && void 0 === match.matches) return matches.push({
       
   364                         match: match,
       
   365                         locator: loopNdx.reverse(),
       
   366                         cd: cacheDependency
       
   367                     }), !0;
       
   368                     if (void 0 !== match.matches) {
       
   369                         if (match.isGroup && quantifierRecurse !== match) {
       
   370                             if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx)) return !0;
       
   371                         } else if (match.isOptional) {
       
   372                             var optionalToken = match;
       
   373                             if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) {
       
   374                                 if (latestMatch = matches[matches.length - 1].match, !isFirstMatch(latestMatch, optionalToken)) return !0;
       
   375                                 insertStop = !0, testPos = pos;
       
   376                             }
       
   377                         } else if (match.isAlternator) {
       
   378                             var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;
       
   379                             if (-1 === altIndex || "string" == typeof altIndex) {
       
   380                                 var amndx, currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = [];
       
   381                                 if ("string" == typeof altIndex) altIndexArr = altIndex.split(","); else for (amndx = 0; amndx < alternateToken.matches.length; amndx++) altIndexArr.push(amndx);
       
   382                                 for (var ndx = 0; ndx < altIndexArr.length; ndx++) {
       
   383                                     if (amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = resolveNdxInitializer(testPos, amndx), 
       
   384                                     match = handleMatch(alternateToken.matches[amndx] || maskToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) || match, 
       
   385                                     match !== !0 && void 0 !== match && altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length) {
       
   386                                         var ntndx = $.inArray(match, maskToken.matches) + 1;
       
   387                                         maskToken.matches.length > ntndx && (match = handleMatch(maskToken.matches[ntndx], [ ntndx ].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse), 
       
   388                                         match && (altIndexArr.push(ntndx.toString()), $.each(matches, function(ndx, lmnt) {
       
   389                                             lmnt.alternation = loopNdx.length - 1;
       
   390                                         })));
       
   391                                     }
       
   392                                     maltMatches = matches.slice(), testPos = currentPos, matches = [];
       
   393                                     for (var i = 0; i < ndxInitializerClone.length; i++) ndxInitializer[i] = ndxInitializerClone[i];
       
   394                                     for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {
       
   395                                         var altMatch = maltMatches[ndx1];
       
   396                                         altMatch.alternation = altMatch.alternation || loopNdxCnt;
       
   397                                         for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {
       
   398                                             var altMatch2 = malternateMatches[ndx2];
       
   399                                             if (altMatch.match.def === altMatch2.match.def && ("string" != typeof altIndex || -1 !== $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr))) {
       
   400                                                 altMatch.match.mask === altMatch2.match.mask && (maltMatches.splice(ndx1, 1), ndx1--), 
       
   401                                                 -1 === altMatch2.locator[altMatch.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) && (altMatch2.locator[altMatch.alternation] = altMatch2.locator[altMatch.alternation] + "," + altMatch.locator[altMatch.alternation], 
       
   402                                                 altMatch2.alternation = altMatch.alternation);
       
   403                                                 break;
       
   404                                             }
       
   405                                         }
       
   406                                     }
       
   407                                     malternateMatches = malternateMatches.concat(maltMatches);
       
   408                                 }
       
   409                                 "string" == typeof altIndex && (malternateMatches = $.map(malternateMatches, function(lmnt, ndx) {
       
   410                                     if (isFinite(ndx)) {
       
   411                                         var mamatch, alternation = lmnt.alternation, altLocArr = lmnt.locator[alternation].toString().split(",");
       
   412                                         lmnt.locator[alternation] = void 0, lmnt.alternation = void 0;
       
   413                                         for (var alndx = 0; alndx < altLocArr.length; alndx++) mamatch = -1 !== $.inArray(altLocArr[alndx], altIndexArr), 
       
   414                                         mamatch && (void 0 !== lmnt.locator[alternation] ? (lmnt.locator[alternation] += ",", 
       
   415                                         lmnt.locator[alternation] += altLocArr[alndx]) : lmnt.locator[alternation] = parseInt(altLocArr[alndx]), 
       
   416                                         lmnt.alternation = alternation);
       
   417                                         if (void 0 !== lmnt.locator[alternation]) return lmnt;
       
   418                                     }
       
   419                                 })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0;
       
   420                             } else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse);
       
   421                             if (match) return !0;
       
   422                         } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && pos >= testPos; qndx++) {
       
   423                             var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];
       
   424                             if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {
       
   425                                 if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1, 
       
   426                                 isFirstMatch(latestMatch, tokenGroup)) {
       
   427                                     if (qndx > qt.quantifier.min - 1) {
       
   428                                         insertStop = !0, testPos = pos;
       
   429                                         break;
       
   430                                     }
       
   431                                     return !0;
       
   432                                 }
       
   433                                 return !0;
       
   434                             }
       
   435                         } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0;
       
   436                     } else testPos++;
       
   437                 }
       
   438                 for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (maskToken.matches[tndx].isQuantifier !== !0) {
       
   439                     var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse);
       
   440                     if (match && testPos === pos) return match;
       
   441                     if (testPos > pos) break;
       
   442                 }
       
   443             }
       
   444             function mergeLocators(tests) {
       
   445                 var test = tests[0] || tests;
       
   446                 return test.locator.slice();
       
   447             }
       
   448             var latestMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr || [ 0 ], matches = [], insertStop = !1, cacheDependency = ndxIntlzr ? ndxIntlzr.join("") : "";
       
   449             if (pos > -1) {
       
   450                 if (void 0 === ndxIntlzr) {
       
   451                     for (var test, previousPos = pos - 1; void 0 === (test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) && previousPos > -1; ) previousPos--;
       
   452                     void 0 !== test && previousPos > -1 && (ndxInitializer = mergeLocators(test), cacheDependency = ndxInitializer.join(""), 
       
   453                     test = test[0] || test, testPos = previousPos);
       
   454                 }
       
   455                 if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) return getMaskSet().tests[pos];
       
   456                 for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) {
       
   457                     var match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]);
       
   458                     if (match && testPos === pos || testPos > pos) break;
       
   459                 }
       
   460             }
       
   461             return (0 === matches.length || insertStop) && matches.push({
       
   462                 match: {
       
   463                     fn: null,
       
   464                     cardinality: 0,
       
   465                     optionality: !0,
       
   466                     casing: null,
       
   467                     def: ""
       
   468                 },
       
   469                 locator: []
       
   470             }), getMaskSet().tests[pos] = $.extend(!0, [], matches), getMaskSet().tests[pos];
       
   471         }
       
   472         function getBufferTemplate() {
       
   473             return void 0 === getMaskSet()._buffer && (getMaskSet()._buffer = getMaskTemplate(!1, 1)), 
       
   474             getMaskSet()._buffer;
       
   475         }
       
   476         function getBuffer(noCache) {
       
   477             if (void 0 === getMaskSet().buffer || noCache === !0) {
       
   478                 if (noCache === !0) for (var testNdx in getMaskSet().tests) void 0 === getMaskSet().validPositions[testNdx] && delete getMaskSet().tests[testNdx];
       
   479                 getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0);
       
   480             }
       
   481             return getMaskSet().buffer;
       
   482         }
       
   483         function refreshFromBuffer(start, end, buffer) {
       
   484             var i;
       
   485             if (buffer = buffer, start === !0) resetMaskSet(), start = 0, end = buffer.length; else for (i = start; end > i; i++) delete getMaskSet().validPositions[i], 
       
   486             delete getMaskSet().tests[i];
       
   487             for (i = start; end > i; i++) resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0);
       
   488         }
       
   489         function casing(elem, test) {
       
   490             switch (test.casing) {
       
   491               case "upper":
       
   492                 elem = elem.toUpperCase();
       
   493                 break;
       
   494 
       
   495               case "lower":
       
   496                 elem = elem.toLowerCase();
       
   497             }
       
   498             return elem;
       
   499         }
       
   500         function checkAlternationMatch(altArr1, altArr2) {
       
   501             for (var altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, alndx = 0; alndx < altArr1.length; alndx++) if (-1 !== $.inArray(altArr1[alndx], altArrC)) {
       
   502                 isMatch = !0;
       
   503                 break;
       
   504             }
       
   505             return isMatch;
       
   506         }
       
   507         function isValid(pos, c, strict, fromSetValid) {
       
   508             function isSelection(posObj) {
       
   509                 return isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end === 1 && opts.insertMode : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin === 1 && opts.insertMode;
       
   510             }
       
   511             function _isValid(position, c, strict, fromSetValid) {
       
   512                 var rslt = !1;
       
   513                 return $.each(getTests(position), function(ndx, tst) {
       
   514                     for (var test = tst.match, loopend = c ? 1 : 0, chrs = "", i = test.cardinality; i > loopend; i--) chrs += getBufferElement(position - (i - 1));
       
   515                     if (c && (chrs += c), getBuffer(!0), rslt = null != test.fn ? test.fn.test(chrs, getMaskSet(), position, strict, opts) : c !== test.def && c !== opts.skipOptionalPartCharacter || "" === test.def ? !1 : {
       
   516                         c: test.placeholder || test.def,
       
   517                         pos: position
       
   518                     }, rslt !== !1) {
       
   519                         var elem = void 0 !== rslt.c ? rslt.c : c;
       
   520                         elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? test.placeholder || test.def : elem;
       
   521                         var validatedPos = position, possibleModifiedBuffer = getBuffer();
       
   522                         if (void 0 !== rslt.remove && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]), 
       
   523                         $.each(rslt.remove.sort(function(a, b) {
       
   524                             return b - a;
       
   525                         }), function(ndx, lmnt) {
       
   526                             stripValidPositions(lmnt, lmnt + 1, !0);
       
   527                         })), void 0 !== rslt.insert && ($.isArray(rslt.insert) || (rslt.insert = [ rslt.insert ]), 
       
   528                         $.each(rslt.insert.sort(function(a, b) {
       
   529                             return a - b;
       
   530                         }), function(ndx, lmnt) {
       
   531                             isValid(lmnt.pos, lmnt.c, !1, fromSetValid);
       
   532                         })), rslt.refreshFromBuffer) {
       
   533                             var refresh = rslt.refreshFromBuffer;
       
   534                             if (strict = !0, refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, possibleModifiedBuffer), 
       
   535                             void 0 === rslt.pos && void 0 === rslt.c) return rslt.pos = getLastValidPosition(), 
       
   536                             !1;
       
   537                             if (validatedPos = void 0 !== rslt.pos ? rslt.pos : position, validatedPos !== position) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0, fromSetValid)), 
       
   538                             !1;
       
   539                         } else if (rslt !== !0 && void 0 !== rslt.pos && rslt.pos !== position && (validatedPos = rslt.pos, 
       
   540                         refreshFromBuffer(position, validatedPos, getBuffer().slice()), validatedPos !== position)) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)), 
       
   541                         !1;
       
   542                         return rslt !== !0 && void 0 === rslt.pos && void 0 === rslt.c ? !1 : (ndx > 0 && resetMaskSet(!0), 
       
   543                         setValidPosition(validatedPos, $.extend({}, tst, {
       
   544                             input: casing(elem, test)
       
   545                         }), fromSetValid, isSelection(pos)) || (rslt = !1), !1);
       
   546                     }
       
   547                 }), rslt;
       
   548             }
       
   549             function alternate(pos, c, strict, fromSetValid) {
       
   550                 for (var lastAlt, alternation, isValidRslt, altPos, i, validPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), testsClone = $.extend(!0, {}, getMaskSet().tests), lAlt = getLastValidPosition(); lAlt >= 0 && (altPos = getMaskSet().validPositions[lAlt], 
       
   551                 !altPos || void 0 === altPos.alternation || (lastAlt = lAlt, alternation = getMaskSet().validPositions[lastAlt].alternation, 
       
   552                 getTestTemplate(lastAlt).locator[altPos.alternation] === altPos.locator[altPos.alternation])); lAlt--) ;
       
   553                 if (void 0 !== alternation) {
       
   554                     lastAlt = parseInt(lastAlt);
       
   555                     for (var decisionPos in getMaskSet().validPositions) if (decisionPos = parseInt(decisionPos), 
       
   556                     altPos = getMaskSet().validPositions[decisionPos], decisionPos >= lastAlt && void 0 !== altPos.alternation) {
       
   557                         var altNdxs;
       
   558                         0 === lastAlt ? (altNdxs = [], $.each(getMaskSet().tests[lastAlt], function(ndx, test) {
       
   559                             void 0 !== test.locator[alternation] && (altNdxs = altNdxs.concat(test.locator[alternation].toString().split(",")));
       
   560                         })) : altNdxs = getMaskSet().validPositions[lastAlt].locator[alternation].toString().split(",");
       
   561                         var decisionTaker = void 0 !== altPos.locator[alternation] ? altPos.locator[alternation] : altNdxs[0];
       
   562                         decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(",")[0]);
       
   563                         for (var mndx = 0; mndx < altNdxs.length; mndx++) {
       
   564                             var validInputs = [], staticInputsBeforePos = 0, staticInputsBeforePosAlternate = 0;
       
   565                             if (decisionTaker < altNdxs[mndx]) {
       
   566                                 for (var possibilityPos, possibilities, dp = decisionPos; dp >= 0; dp--) if (possibilityPos = getMaskSet().validPositions[dp], 
       
   567                                 void 0 !== possibilityPos) {
       
   568                                     var bestMatch = selectBestMatch(dp, altNdxs[mndx]);
       
   569                                     getMaskSet().validPositions[dp].match.def !== bestMatch.match.def && (validInputs.push(getMaskSet().validPositions[dp].input), 
       
   570                                     getMaskSet().validPositions[dp] = bestMatch, getMaskSet().validPositions[dp].input = getPlaceholder(dp), 
       
   571                                     null === getMaskSet().validPositions[dp].match.fn && staticInputsBeforePosAlternate++, 
       
   572                                     possibilityPos = bestMatch), possibilities = possibilityPos.locator[alternation], 
       
   573                                     possibilityPos.locator[alternation] = parseInt(altNdxs[mndx]);
       
   574                                     break;
       
   575                                 }
       
   576                                 if (decisionTaker !== possibilityPos.locator[alternation]) {
       
   577                                     for (i = decisionPos + 1; i < getLastValidPosition(void 0, !0) + 1; i++) validPos = getMaskSet().validPositions[i], 
       
   578                                     validPos && null != validPos.match.fn ? validInputs.push(validPos.input) : pos > i && staticInputsBeforePos++, 
       
   579                                     delete getMaskSet().validPositions[i], delete getMaskSet().tests[i];
       
   580                                     for (resetMaskSet(!0), opts.keepStatic = !opts.keepStatic, isValidRslt = !0; validInputs.length > 0; ) {
       
   581                                         var input = validInputs.shift();
       
   582                                         if (input !== opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition(void 0, !0) + 1, input, !1, fromSetValid))) break;
       
   583                                     }
       
   584                                     if (possibilityPos.alternation = alternation, possibilityPos.locator[alternation] = possibilities, 
       
   585                                     isValidRslt) {
       
   586                                         var targetLvp = getLastValidPosition(pos) + 1;
       
   587                                         for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) validPos = getMaskSet().validPositions[i], 
       
   588                                         (void 0 === validPos || null == validPos.match.fn) && pos > i && staticInputsBeforePosAlternate++;
       
   589                                         pos += staticInputsBeforePosAlternate - staticInputsBeforePos, isValidRslt = isValid(pos > targetLvp ? targetLvp : pos, c, strict, fromSetValid);
       
   590                                     }
       
   591                                     if (opts.keepStatic = !opts.keepStatic, isValidRslt) return isValidRslt;
       
   592                                     resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone), getMaskSet().tests = $.extend(!0, {}, testsClone);
       
   593                                 }
       
   594                             }
       
   595                         }
       
   596                         break;
       
   597                     }
       
   598                 }
       
   599                 return !1;
       
   600             }
       
   601             function trackbackAlternations(originalPos, newPos) {
       
   602                 for (var vp = getMaskSet().validPositions[newPos], targetLocator = vp.locator, tll = targetLocator.length, ps = originalPos; newPos > ps; ps++) if (void 0 === getMaskSet().validPositions[ps] && !isMask(ps, !0)) {
       
   603                     var tests = getTests(ps), bestMatch = tests[0], equality = -1;
       
   604                     $.each(tests, function(ndx, tst) {
       
   605                         for (var i = 0; tll > i && (void 0 !== tst.locator[i] && checkAlternationMatch(tst.locator[i].toString().split(","), targetLocator[i].toString().split(","))); i++) i > equality && (equality = i, 
       
   606                         bestMatch = tst);
       
   607                     }), setValidPosition(ps, $.extend({}, bestMatch, {
       
   608                         input: bestMatch.match.placeholder || bestMatch.match.def
       
   609                     }), !0);
       
   610                 }
       
   611             }
       
   612             strict = strict === !0;
       
   613             var maskPos = pos;
       
   614             void 0 !== pos.begin && (maskPos = isRTL && !isSelection(pos) ? pos.end : pos.begin);
       
   615             for (var result = !1, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), pndx = maskPos - 1; pndx > -1 && !getMaskSet().validPositions[pndx]; pndx--) ;
       
   616             pndx++;
       
   617             for (var testTemplate; maskPos > pndx; pndx++) getBuffer(), void 0 === getMaskSet().validPositions[pndx] && ((testTemplate = getTestTemplate(pndx)).match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, !0) || $.inArray(opts.radixPoint, getBuffer()) < pndx && testTemplate.match.fn && testTemplate.match.fn.test(getPlaceholder(pndx), getMaskSet(), pndx, !1, opts)) && _isValid(pndx, testTemplate.match.placeholder || (null == testTemplate.match.fn ? testTemplate.match.def : getPlaceholder(pndx)), !0, fromSetValid);
       
   618             if (isSelection(pos) && (handleRemove(void 0, Inputmask.keyCode.DELETE, pos), maskPos = getMaskSet().p), 
       
   619             maskPos < getMaskLength() && (result = _isValid(maskPos, c, strict, fromSetValid), 
       
   620             (!strict || fromSetValid === !0) && result === !1)) {
       
   621                 var currentPosValid = getMaskSet().validPositions[maskPos];
       
   622                 if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {
       
   623                     if ((opts.insertMode || void 0 === getMaskSet().validPositions[seekNext(maskPos)]) && !isMask(maskPos, !0)) {
       
   624                         var staticChar = getTestTemplate(maskPos).match;
       
   625                         staticChar = staticChar.placeholder || staticChar.def, _isValid(maskPos, staticChar, strict, fromSetValid);
       
   626                         for (var nPos = maskPos + 1, snPos = seekNext(maskPos); snPos >= nPos; nPos++) if (result = _isValid(nPos, c, strict, fromSetValid), 
       
   627                         result !== !1) {
       
   628                             trackbackAlternations(maskPos, nPos), maskPos = nPos;
       
   629                             break;
       
   630                         }
       
   631                     }
       
   632                 } else result = {
       
   633                     caret: seekNext(maskPos)
       
   634                 };
       
   635             }
       
   636             return result === !1 && opts.keepStatic && (result = alternate(maskPos, c, strict, fromSetValid)), 
       
   637             result === !0 && (result = {
       
   638                 pos: maskPos
       
   639             }), $.isFunction(opts.postValidation) && result !== !1 && !strict && fromSetValid !== !0 && (result = opts.postValidation(getBuffer(!0), result, opts) ? result : !1), 
       
   640             void 0 === result.pos && (result.pos = maskPos), result === !1 && (resetMaskSet(!0), 
       
   641             getMaskSet().validPositions = $.extend(!0, {}, positionsClone)), result;
       
   642         }
       
   643         function isMask(pos, strict) {
       
   644             var test;
       
   645             if (strict ? (test = getTestTemplate(pos).match, "" === test.def && (test = getTest(pos))) : test = getTest(pos), 
       
   646             null != test.fn) return test.fn;
       
   647             if (strict !== !0 && pos > -1 && !opts.keepStatic && void 0 === getMaskSet().validPositions[pos]) {
       
   648                 var tests = getTests(pos);
       
   649                 return tests.length > 2;
       
   650             }
       
   651             return !1;
       
   652         }
       
   653         function getMaskLength() {
       
   654             var maskLength;
       
   655             maxLength = void 0 !== el ? el.maxLength : void 0, -1 === maxLength && (maxLength = void 0);
       
   656             var pos, lvp = getLastValidPosition(), testPos = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== testPos ? testPos.locator.slice() : void 0;
       
   657             for (pos = lvp + 1; void 0 === testPos || null !== testPos.match.fn || null === testPos.match.fn && "" !== testPos.match.def; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), 
       
   658             ndxIntlzr = testPos.locator.slice();
       
   659             var lastTest = getTest(pos - 1);
       
   660             return maskLength = "" !== lastTest.def ? pos : pos - 1, void 0 === maxLength || maxLength > maskLength ? maskLength : maxLength;
       
   661         }
       
   662         function seekNext(pos, newBlock) {
       
   663             var maskL = getMaskLength();
       
   664             if (pos >= maskL) return maskL;
       
   665             for (var position = pos; ++position < maskL && (newBlock === !0 && (getTest(position).newBlockMarker !== !0 || !isMask(position)) || newBlock !== !0 && !isMask(position) && (opts.nojumps !== !0 || opts.nojumpsThreshold > position)); ) ;
       
   666             return position;
       
   667         }
       
   668         function seekPrevious(pos, newBlock) {
       
   669             var position = pos;
       
   670             if (0 >= position) return 0;
       
   671             for (;--position > 0 && (newBlock === !0 && getTest(position).newBlockMarker !== !0 || newBlock !== !0 && !isMask(position)); ) ;
       
   672             return position;
       
   673         }
       
   674         function getBufferElement(position) {
       
   675             return void 0 === getMaskSet().validPositions[position] ? getPlaceholder(position) : getMaskSet().validPositions[position].input;
       
   676         }
       
   677         function writeBuffer(input, buffer, caretPos, event, triggerInputEvent) {
       
   678             if (event && $.isFunction(opts.onBeforeWrite)) {
       
   679                 var result = opts.onBeforeWrite(event, buffer, caretPos, opts);
       
   680                 if (result) {
       
   681                     if (result.refreshFromBuffer) {
       
   682                         var refresh = result.refreshFromBuffer;
       
   683                         refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer || buffer), 
       
   684                         buffer = getBuffer(!0);
       
   685                     }
       
   686                     void 0 !== caretPos && (caretPos = void 0 !== result.caret ? result.caret : caretPos);
       
   687                 }
       
   688             }
       
   689             input.inputmask._valueSet(buffer.join("")), void 0 === caretPos || void 0 !== event && "blur" === event.type || caret(input, caretPos), 
       
   690             triggerInputEvent === !0 && (skipInputEvent = !0, $(input).trigger("input"));
       
   691         }
       
   692         function getPlaceholder(pos, test) {
       
   693             if (test = test || getTest(pos), void 0 !== test.placeholder) return test.placeholder;
       
   694             if (null === test.fn) {
       
   695                 if (pos > -1 && !opts.keepStatic && void 0 === getMaskSet().validPositions[pos]) {
       
   696                     var prevTest, tests = getTests(pos), staticAlternations = 0;
       
   697                     if (tests.length > 2) for (var i = 0; i < tests.length; i++) if (tests[i].match.optionality !== !0 && tests[i].match.optionalQuantifier !== !0 && (null === tests[i].match.fn || void 0 === prevTest || tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, !0, opts) !== !1) && (staticAlternations++, 
       
   698                     null === tests[i].match.fn && (prevTest = tests[i]), staticAlternations > 1)) return opts.placeholder.charAt(pos % opts.placeholder.length);
       
   699                 }
       
   700                 return test.def;
       
   701             }
       
   702             return opts.placeholder.charAt(pos % opts.placeholder.length);
       
   703         }
       
   704         function checkVal(input, writeOut, strict, nptvl) {
       
   705             function isTemplateMatch() {
       
   706                 var isMatch = !1, charCodeNdx = getBufferTemplate().slice(initialNdx, seekNext(initialNdx)).join("").indexOf(charCodes);
       
   707                 if (-1 !== charCodeNdx && !isMask(initialNdx)) {
       
   708                     isMatch = !0;
       
   709                     for (var bufferTemplateArr = getBufferTemplate().slice(initialNdx, initialNdx + charCodeNdx), i = 0; i < bufferTemplateArr.length; i++) if (" " !== bufferTemplateArr[i]) {
       
   710                         isMatch = !1;
       
   711                         break;
       
   712                     }
       
   713                 }
       
   714                 return isMatch;
       
   715             }
       
   716             var inputValue = nptvl.slice(), charCodes = "", initialNdx = 0;
       
   717             if (resetMaskSet(), getMaskSet().p = seekNext(-1), !strict) if (opts.autoUnmask !== !0) {
       
   718                 var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(""), matches = inputValue.join("").match(new RegExp("^" + Inputmask.escapeRegex(staticInput), "g"));
       
   719                 matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length), 
       
   720                 initialNdx = seekNext(initialNdx));
       
   721             } else initialNdx = seekNext(initialNdx);
       
   722             $.each(inputValue, function(ndx, charCode) {
       
   723                 if (void 0 !== charCode) {
       
   724                     var keypress = new $.Event("keypress");
       
   725                     keypress.which = charCode.charCodeAt(0), charCodes += charCode;
       
   726                     var lvp = getLastValidPosition(void 0, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : void 0, lvp);
       
   727                     if (!isTemplateMatch() || strict || opts.autoUnmask) {
       
   728                         var pos = strict ? ndx : null == nextTest.match.fn && nextTest.match.optionality && lvp + 1 < getMaskSet().p ? lvp + 1 : getMaskSet().p;
       
   729                         keypressEvent.call(input, keypress, !0, !1, strict, pos), initialNdx = pos + 1, 
       
   730                         charCodes = "";
       
   731                     } else keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1);
       
   732                 }
       
   733             }), writeOut && writeBuffer(input, getBuffer(), document.activeElement === input ? seekNext(getLastValidPosition(0)) : void 0, new $.Event("checkval"));
       
   734         }
       
   735         function unmaskedvalue(input) {
       
   736             if (input && void 0 === input.inputmask) return input.value;
       
   737             var umValue = [], vps = getMaskSet().validPositions;
       
   738             for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);
       
   739             var unmaskedValue = 0 === umValue.length ? null : (isRTL ? umValue.reverse() : umValue).join("");
       
   740             if (null !== unmaskedValue) {
       
   741                 var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join("");
       
   742                 $.isFunction(opts.onUnMask) && (unmaskedValue = opts.onUnMask(bufferValue, unmaskedValue, opts) || unmaskedValue);
       
   743             }
       
   744             return unmaskedValue;
       
   745         }
       
   746         function caret(input, begin, end, notranslate) {
       
   747             function translatePosition(pos) {
       
   748                 if (notranslate !== !0 && isRTL && "number" == typeof pos && (!opts.greedy || "" !== opts.placeholder)) {
       
   749                     var bffrLght = getBuffer().join("").length;
       
   750                     pos = bffrLght - pos;
       
   751                 }
       
   752                 return pos;
       
   753             }
       
   754             var range;
       
   755             if ("number" != typeof begin) return input.setSelectionRange ? (begin = input.selectionStart, 
       
   756             end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0), 
       
   757             (range.commonAncestorContainer.parentNode === input || range.commonAncestorContainer === input) && (begin = range.startOffset, 
       
   758             end = range.endOffset)) : document.selection && document.selection.createRange && (range = document.selection.createRange(), 
       
   759             begin = 0 - range.duplicate().moveStart("character", -input.inputmask._valueGet().length), 
       
   760             end = begin + range.text.length), {
       
   761                 begin: translatePosition(begin),
       
   762                 end: translatePosition(end)
       
   763             };
       
   764             begin = translatePosition(begin), end = translatePosition(end), end = "number" == typeof end ? end : begin;
       
   765             var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;
       
   766             if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, mobile || opts.insertMode !== !1 || begin !== end || end++, 
       
   767             input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) {
       
   768                 if (range = document.createRange(), void 0 === input.firstChild || null === input.firstChild) {
       
   769                     var textNode = document.createTextNode("");
       
   770                     input.appendChild(textNode);
       
   771                 }
       
   772                 range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length), 
       
   773                 range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length), 
       
   774                 range.collapse(!0);
       
   775                 var sel = window.getSelection();
       
   776                 sel.removeAllRanges(), sel.addRange(range);
       
   777             } else input.createTextRange && (range = input.createTextRange(), range.collapse(!0), 
       
   778             range.moveEnd("character", end), range.moveStart("character", begin), range.select());
       
   779         }
       
   780         function determineLastRequiredPosition(returnDefinition) {
       
   781             var pos, testPos, buffer = getBuffer(), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== lvTest ? lvTest.locator.slice() : void 0;
       
   782             for (pos = lvp + 1; pos < buffer.length; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), 
       
   783             ndxIntlzr = testPos.locator.slice(), positions[pos] = $.extend(!0, {}, testPos);
       
   784             var lvTestAlt = lvTest && void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation] : void 0;
       
   785             for (pos = bl - 1; pos > lvp && (testPos = positions[pos], (testPos.match.optionality || testPos.match.optionalQuantifier || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && null != testPos.match.fn || null === testPos.match.fn && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAlt.toString().split(",")) && "" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) bl--;
       
   786             return returnDefinition ? {
       
   787                 l: bl,
       
   788                 def: positions[bl] ? positions[bl].match : void 0
       
   789             } : bl;
       
   790         }
       
   791         function clearOptionalTail(buffer) {
       
   792             for (var rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;
       
   793             return buffer.splice(rl, lmib + 1 - rl), buffer;
       
   794         }
       
   795         function isComplete(buffer) {
       
   796             if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts);
       
   797             if ("*" === opts.repeat) return void 0;
       
   798             var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);
       
   799             if (void 0 === lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {
       
   800                 complete = !0;
       
   801                 for (var i = 0; aml >= i; i++) {
       
   802                     var test = getTestTemplate(i).match;
       
   803                     if (null !== test.fn && void 0 === getMaskSet().validPositions[i] && test.optionality !== !0 && test.optionalQuantifier !== !0 || null === test.fn && buffer[i] !== getPlaceholder(i, test)) {
       
   804                         complete = !1;
       
   805                         break;
       
   806                     }
       
   807                 }
       
   808             }
       
   809             return complete;
       
   810         }
       
   811         function patchValueProperty(npt) {
       
   812             function patchValhook(type) {
       
   813                 if ($.valHooks && (void 0 === $.valHooks[type] || $.valHooks[type].inputmaskpatch !== !0)) {
       
   814                     var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {
       
   815                         return elem.value;
       
   816                     }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {
       
   817                         return elem.value = value, elem;
       
   818                     };
       
   819                     $.valHooks[type] = {
       
   820                         get: function(elem) {
       
   821                             if (elem.inputmask) {
       
   822                                 if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue();
       
   823                                 var result = valhookGet(elem), maskset = elem.inputmask.maskset, bufferTemplate = maskset._buffer;
       
   824                                 return bufferTemplate = bufferTemplate ? bufferTemplate.join("") : "", result !== bufferTemplate ? result : "";
       
   825                             }
       
   826                             return valhookGet(elem);
       
   827                         },
       
   828                         set: function(elem, value) {
       
   829                             var result, $elem = $(elem);
       
   830                             return result = valhookSet(elem, value), elem.inputmask && $elem.trigger("setvalue"), 
       
   831                             result;
       
   832                         },
       
   833                         inputmaskpatch: !0
       
   834                     };
       
   835                 }
       
   836             }
       
   837             function getter() {
       
   838                 return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : valueGet.call(this) !== getBufferTemplate().join("") ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join("") : valueGet.call(this) : "" : valueGet.call(this);
       
   839             }
       
   840             function setter(value) {
       
   841                 valueSet.call(this, value), this.inputmask && $(this).trigger("setvalue");
       
   842             }
       
   843             function installNativeValueSetFallback(npt) {
       
   844                 EventRuler.on(npt, "mouseenter", function(event) {
       
   845                     var $input = $(this), input = this, value = input.inputmask._valueGet();
       
   846                     value !== getBuffer().join("") && $input.trigger("setvalue");
       
   847                 });
       
   848             }
       
   849             var valueGet, valueSet;
       
   850             if (!npt.inputmask.__valueGet) {
       
   851                 if (Object.getOwnPropertyDescriptor) {
       
   852                     var valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), "value");
       
   853                     valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get, 
       
   854                     valueSet = valueProperty.set, Object.defineProperty(npt, "value", {
       
   855                         get: getter,
       
   856                         set: setter,
       
   857                         configurable: !0
       
   858                     })) : "INPUT" !== npt.tagName && (valueGet = function() {
       
   859                         return this.textContent;
       
   860                     }, valueSet = function(value) {
       
   861                         this.textContent = value;
       
   862                     }, Object.defineProperty(npt, "value", {
       
   863                         get: getter,
       
   864                         set: setter,
       
   865                         configurable: !0
       
   866                     }));
       
   867                 } else document.__lookupGetter__ && npt.__lookupGetter__("value") && (valueGet = npt.__lookupGetter__("value"), 
       
   868                 valueSet = npt.__lookupSetter__("value"), npt.__defineGetter__("value", getter), 
       
   869                 npt.__defineSetter__("value", setter));
       
   870                 void 0 === valueGet && (valueGet = function() {
       
   871                     return npt.value;
       
   872                 }, valueSet = function(value) {
       
   873                     npt.value = value;
       
   874                 }, patchValhook(npt.type), installNativeValueSetFallback(npt)), npt.inputmask.__valueGet = valueGet, 
       
   875                 npt.inputmask._valueGet = function(overruleRTL) {
       
   876                     return isRTL && overruleRTL !== !0 ? valueGet.call(this.el).split("").reverse().join("") : valueGet.call(this.el);
       
   877                 }, npt.inputmask.__valueSet = valueSet, npt.inputmask._valueSet = function(value, overruleRTL) {
       
   878                     valueSet.call(this.el, null === value || void 0 === value ? "" : overruleRTL !== !0 && isRTL ? value.split("").reverse().join("") : value);
       
   879                 };
       
   880             }
       
   881         }
       
   882         function handleRemove(input, k, pos, strict) {
       
   883             function generalize() {
       
   884                 if (opts.keepStatic) {
       
   885                     resetMaskSet(!0);
       
   886                     var lastAlt, validInputs = [], positionsClone = $.extend(!0, {}, getMaskSet().validPositions);
       
   887                     for (lastAlt = getLastValidPosition(); lastAlt >= 0; lastAlt--) {
       
   888                         var validPos = getMaskSet().validPositions[lastAlt];
       
   889                         if (validPos && (null != validPos.match.fn && validInputs.push(validPos.input), 
       
   890                         delete getMaskSet().validPositions[lastAlt], void 0 !== validPos.alternation && validPos.locator[validPos.alternation] === getTestTemplate(lastAlt).locator[validPos.alternation])) break;
       
   891                     }
       
   892                     if (lastAlt > -1) for (;validInputs.length > 0; ) {
       
   893                         getMaskSet().p = seekNext(getLastValidPosition());
       
   894                         var keypress = new $.Event("keypress");
       
   895                         keypress.which = validInputs.pop().charCodeAt(0), keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);
       
   896                     } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);
       
   897                 }
       
   898             }
       
   899             if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE), 
       
   900             isRTL)) {
       
   901                 var pend = pos.end;
       
   902                 pos.end = pos.begin, pos.begin = pend;
       
   903             }
       
   904             k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode === !1) ? (pos.begin = seekPrevious(pos.begin), 
       
   905             void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.begin--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end) ? pos.end + 1 : seekNext(pos.end) + 1, 
       
   906             void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.end++), 
       
   907             stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0 && generalize();
       
   908             var lvp = getLastValidPosition(pos.begin);
       
   909             lvp < pos.begin ? (-1 === lvp && resetMaskSet(), getMaskSet().p = seekNext(lvp)) : strict !== !0 && (getMaskSet().p = pos.begin);
       
   910         }
       
   911         function keydownEvent(e) {
       
   912             var input = this, $input = $(input), k = e.keyCode, pos = caret(input);
       
   913             if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === Inputmask.keyCode.X && !isInputEventSupported("cut")) e.preventDefault(), 
       
   914             handleRemove(input, k, pos), writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join("")), 
       
   915             input.inputmask._valueGet() === getBufferTemplate().join("") ? $input.trigger("cleared") : isComplete(getBuffer()) === !0 && $input.trigger("complete"), 
       
   916             opts.showTooltip && (input.title = opts.tooltip || getMaskSet().mask); else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) {
       
   917                 e.preventDefault();
       
   918                 var caretPos = seekNext(getLastValidPosition());
       
   919                 opts.insertMode || caretPos !== getMaskLength() || e.shiftKey || caretPos--, caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0);
       
   920             } else k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? (e.preventDefault(), 
       
   921             caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && e.altKey !== !0 ? (checkVal(input, !0, !1, undoValue.split("")), 
       
   922             $input.trigger("click")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? opts.tabThrough === !0 && k === Inputmask.keyCode.TAB ? (e.shiftKey === !0 ? (null === getTest(pos.begin).fn && (pos.begin = seekNext(pos.begin)), 
       
   923             pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0), 
       
   924             pos.end = seekNext(pos.begin, !0), pos.end < getMaskLength() && pos.end--), pos.begin < getMaskLength() && (e.preventDefault(), 
       
   925             caret(input, pos.begin, pos.end))) : opts.insertMode !== !1 || e.shiftKey || (k === Inputmask.keyCode.RIGHT ? setTimeout(function() {
       
   926                 var caretPos = caret(input);
       
   927                 caret(input, caretPos.begin);
       
   928             }, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() {
       
   929                 var caretPos = caret(input);
       
   930                 caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1);
       
   931             }, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskLength() ? pos.begin : pos.begin - 1));
       
   932             opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), ignorable = -1 !== $.inArray(k, opts.ignorables);
       
   933         }
       
   934         function keypressEvent(e, checkval, writeOut, strict, ndx) {
       
   935             var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;
       
   936             if (!(checkval === !0 || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join("") && (undoValue = getBuffer().join(""), 
       
   937             setTimeout(function() {
       
   938                 $input.trigger("change");
       
   939             }, 0)), !0;
       
   940             if (k) {
       
   941                 46 === k && e.shiftKey === !1 && "," === opts.radixPoint && (k = 44);
       
   942                 var forwardPosition, pos = checkval ? {
       
   943                     begin: ndx,
       
   944                     end: ndx
       
   945                 } : caret(input), c = String.fromCharCode(k);
       
   946                 getMaskSet().writeOutBuffer = !0;
       
   947                 var valResult = isValid(pos, c, strict);
       
   948                 if (valResult !== !1) {
       
   949                     var p = valResult.pos;
       
   950                     if (resetMaskSet(!0), void 0 !== valResult.caret) forwardPosition = valResult.caret; else {
       
   951                         var vps = getMaskSet().validPositions;
       
   952                         forwardPosition = !opts.keepStatic && (void 0 !== vps[p + 1] && getTests(p + 1, vps[p].locator.slice(), p).length > 1 || void 0 !== vps[p].alternation) ? p + 1 : seekNext(p);
       
   953                     }
       
   954                     getMaskSet().p = forwardPosition;
       
   955                 }
       
   956                 if (writeOut !== !1) {
       
   957                     var self = this;
       
   958                     if (setTimeout(function() {
       
   959                         opts.onKeyValidation.call(self, k, valResult, opts);
       
   960                     }, 0), getMaskSet().writeOutBuffer && valResult !== !1) {
       
   961                         var buffer = getBuffer();
       
   962                         writeBuffer(input, buffer, opts.numericInput && void 0 === valResult.caret ? seekPrevious(forwardPosition) : forwardPosition, e, checkval !== !0), 
       
   963                         checkval !== !0 && setTimeout(function() {
       
   964                             isComplete(buffer) === !0 && $input.trigger("complete");
       
   965                         }, 0);
       
   966                     }
       
   967                 }
       
   968                 if (opts.showTooltip && (input.title = opts.tooltip || getMaskSet().mask), checkval && $.isFunction(opts.onBeforeWrite)) {
       
   969                     var result = opts.onBeforeWrite(e, getBuffer(), forwardPosition, opts);
       
   970                     if (result && result.refreshFromBuffer) {
       
   971                         var refresh = result.refreshFromBuffer;
       
   972                         refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer), 
       
   973                         resetMaskSet(!0), result.caret && (getMaskSet().p = result.caret);
       
   974                     }
       
   975                 }
       
   976                 if (e.preventDefault(), checkval) return valResult;
       
   977             }
       
   978         }
       
   979         function pasteEvent(e) {
       
   980             var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input);
       
   981             isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);
       
   982             var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
       
   983             valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""), 
       
   984             valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join("") && (valueAfterCaret = ""), 
       
   985             isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue), 
       
   986             window.clipboardData && window.clipboardData.getData ? inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret : ev.clipboardData && ev.clipboardData.getData && (inputValue = valueBeforeCaret + ev.clipboardData.getData("text/plain") + valueAfterCaret);
       
   987             var pasteValue = inputValue;
       
   988             if ($.isFunction(opts.onBeforePaste)) {
       
   989                 if (pasteValue = opts.onBeforePaste(inputValue, opts), pasteValue === !1) return e.preventDefault();
       
   990                 pasteValue || (pasteValue = inputValue);
       
   991             }
       
   992             return checkVal(input, !1, !1, isRTL ? pasteValue.split("").reverse() : pasteValue.toString().split("")), 
       
   993             writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, !0), isComplete(getBuffer()) === !0 && $input.trigger("complete"), 
       
   994             e.preventDefault();
       
   995         }
       
   996         function inputFallBackEvent(e) {
       
   997             var input = this, inputValue = input.inputmask._valueGet();
       
   998             if (getBuffer().join("") !== inputValue) {
       
   999                 var caretPos = caret(input);
       
  1000                 if (inputValue = inputValue.replace(new RegExp("(" + Inputmask.escapeRegex(getBufferTemplate().join("")) + ")*"), ""), 
       
  1001                 iemobile) {
       
  1002                     var inputChar = inputValue.replace(getBuffer().join(""), "");
       
  1003                     if (1 === inputChar.length) {
       
  1004                         var keypress = new $.Event("keypress");
       
  1005                         return keypress.which = inputChar.charCodeAt(0), keypressEvent.call(input, keypress, !0, !0, !1, getMaskSet().validPositions[caretPos.begin - 1] ? caretPos.begin : caretPos.begin - 1), 
       
  1006                         !1;
       
  1007                     }
       
  1008                 }
       
  1009                 if (caretPos.begin > inputValue.length && (caret(input, inputValue.length), caretPos = caret(input)), 
       
  1010                 getBuffer().length - inputValue.length !== 1 || inputValue.charAt(caretPos.begin) === getBuffer()[caretPos.begin] || inputValue.charAt(caretPos.begin + 1) === getBuffer()[caretPos.begin] || isMask(caretPos.begin)) {
       
  1011                     for (var lvp = getLastValidPosition() + 1, bufferTemplate = getBuffer().slice(lvp).join(""); null === inputValue.match(Inputmask.escapeRegex(bufferTemplate) + "$"); ) bufferTemplate = bufferTemplate.slice(1);
       
  1012                     inputValue = inputValue.replace(bufferTemplate, ""), inputValue = inputValue.split(""), 
       
  1013                     checkVal(input, !0, !1, inputValue), isComplete(getBuffer()) === !0 && $(input).trigger("complete");
       
  1014                 } else e.keyCode = Inputmask.keyCode.BACKSPACE, keydownEvent.call(input, e);
       
  1015                 e.preventDefault();
       
  1016             }
       
  1017         }
       
  1018         function setValueEvent(e) {
       
  1019             var input = this, value = input.inputmask._valueGet();
       
  1020             checkVal(input, !0, !1, ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(value, opts) || value : value).split("")), 
       
  1021             undoValue = getBuffer().join(""), (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join("") && input.inputmask._valueSet("");
       
  1022         }
       
  1023         function focusEvent(e) {
       
  1024             var input = this, nptValue = input.inputmask._valueGet();
       
  1025             opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && "" === nptValue) ? input.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(input, getBuffer(), seekNext(getLastValidPosition())) : mouseEnter === !1 && caret(input, seekNext(getLastValidPosition())), 
       
  1026             opts.positionCaretOnTab === !0 && setTimeout(function() {
       
  1027                 caret(input, seekNext(getLastValidPosition()));
       
  1028             }, 0), undoValue = getBuffer().join("");
       
  1029         }
       
  1030         function mouseleaveEvent(e) {
       
  1031             var input = this;
       
  1032             if (mouseEnter = !1, opts.clearMaskOnLostFocus && document.activeElement !== input) {
       
  1033                 var buffer = getBuffer().slice(), nptValue = input.inputmask._valueGet();
       
  1034                 nptValue !== input.getAttribute("placeholder") && "" !== nptValue && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer), 
       
  1035                 writeBuffer(input, buffer));
       
  1036             }
       
  1037         }
       
  1038         function clickEvent(e) {
       
  1039             function doRadixFocus(clickPos) {
       
  1040                 if (opts.radixFocus && "" !== opts.radixPoint) {
       
  1041                     var vps = getMaskSet().validPositions;
       
  1042                     if (void 0 === vps[clickPos] || vps[clickPos].input === getPlaceholder(clickPos)) {
       
  1043                         if (clickPos < seekNext(-1)) return !0;
       
  1044                         var radixPos = $.inArray(opts.radixPoint, getBuffer());
       
  1045                         if (-1 !== radixPos) {
       
  1046                             for (var vp in vps) if (vp > radixPos && vps[vp].input !== getPlaceholder(vp)) return !1;
       
  1047                             return !0;
       
  1048                         }
       
  1049                     }
       
  1050                 }
       
  1051                 return !1;
       
  1052             }
       
  1053             var input = this;
       
  1054             if (document.activeElement === input) {
       
  1055                 var selectedCaret = caret(input);
       
  1056                 if (selectedCaret.begin === selectedCaret.end) if (doRadixFocus(selectedCaret.begin)) caret(input, opts.numericInput ? seekNext($.inArray(opts.radixPoint, getBuffer())) : $.inArray(opts.radixPoint, getBuffer())); else {
       
  1057                     var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, !0), lastPosition = seekNext(lvclickPosition);
       
  1058                     lastPosition > clickPosition ? caret(input, isMask(clickPosition) || isMask(clickPosition - 1) ? clickPosition : seekNext(clickPosition)) : ((getBuffer()[lastPosition] !== getPlaceholder(lastPosition) || !isMask(lastPosition, !0) && getTest(lastPosition).def === getPlaceholder(lastPosition)) && (lastPosition = seekNext(lastPosition)), 
       
  1059                     caret(input, lastPosition));
       
  1060                 }
       
  1061             }
       
  1062         }
       
  1063         function dblclickEvent(e) {
       
  1064             var input = this;
       
  1065             setTimeout(function() {
       
  1066                 caret(input, 0, seekNext(getLastValidPosition()));
       
  1067             }, 0);
       
  1068         }
       
  1069         function cutEvent(e) {
       
  1070             var input = this, $input = $(input), pos = caret(input), ev = e.originalEvent || e, clipboardData = window.clipboardData || ev.clipboardData, clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end);
       
  1071             clipboardData.setData("text", isRTL ? clipData.reverse().join("") : clipData.join("")), 
       
  1072             document.execCommand && document.execCommand("copy"), handleRemove(input, Inputmask.keyCode.DELETE, pos), 
       
  1073             writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join("")), 
       
  1074             input.inputmask._valueGet() === getBufferTemplate().join("") && $input.trigger("cleared"), 
       
  1075             opts.showTooltip && (input.title = opts.tooltip || getMaskSet().mask);
       
  1076         }
       
  1077         function blurEvent(e) {
       
  1078             var $input = $(this), input = this;
       
  1079             if (input.inputmask) {
       
  1080                 var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice();
       
  1081                 undoValue !== buffer.join("") && setTimeout(function() {
       
  1082                     $input.trigger("change"), undoValue = buffer.join("");
       
  1083                 }, 0), "" !== nptValue && (opts.clearMaskOnLostFocus && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), 
       
  1084                 isComplete(buffer) === !1 && (setTimeout(function() {
       
  1085                     $input.trigger("incomplete");
       
  1086                 }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())), 
       
  1087                 writeBuffer(input, buffer, void 0, e));
       
  1088             }
       
  1089         }
       
  1090         function mouseenterEvent(e) {
       
  1091             var input = this;
       
  1092             mouseEnter = !0, document.activeElement !== input && opts.showMaskOnHover && input.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(input, getBuffer());
       
  1093         }
       
  1094         function submitEvent(e) {
       
  1095             undoValue !== getBuffer().join("") && $el.trigger("change"), opts.clearMaskOnLostFocus && -1 === getLastValidPosition() && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join("") && el.inputmask._valueSet(""), 
       
  1096             opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0), 
       
  1097             setTimeout(function() {
       
  1098                 writeBuffer(el, getBuffer());
       
  1099             }, 0));
       
  1100         }
       
  1101         function resetEvent(e) {
       
  1102             setTimeout(function() {
       
  1103                 $el.trigger("setvalue");
       
  1104             }, 0);
       
  1105         }
       
  1106         function mask(elem) {
       
  1107             if (el = elem, $el = $(el), opts.showTooltip && (el.title = opts.tooltip || getMaskSet().mask), 
       
  1108             ("rtl" === el.dir || opts.rightAlign) && (el.style.textAlign = "right"), ("rtl" === el.dir || opts.numericInput) && (el.dir = "ltr", 
       
  1109             el.removeAttribute("dir"), el.inputmask.isRTL = !0, isRTL = !0), EventRuler.off(el), 
       
  1110             patchValueProperty(el), isElementTypeSupported(el, opts) && (EventRuler.on(el, "submit", submitEvent), 
       
  1111             EventRuler.on(el, "reset", resetEvent), EventRuler.on(el, "mouseenter", mouseenterEvent), 
       
  1112             EventRuler.on(el, "blur", blurEvent), EventRuler.on(el, "focus", focusEvent), EventRuler.on(el, "mouseleave", mouseleaveEvent), 
       
  1113             EventRuler.on(el, "click", clickEvent), EventRuler.on(el, "dblclick", dblclickEvent), 
       
  1114             EventRuler.on(el, "paste", pasteEvent), EventRuler.on(el, "dragdrop", pasteEvent), 
       
  1115             EventRuler.on(el, "drop", pasteEvent), EventRuler.on(el, "cut", cutEvent), EventRuler.on(el, "complete", opts.oncomplete), 
       
  1116             EventRuler.on(el, "incomplete", opts.onincomplete), EventRuler.on(el, "cleared", opts.oncleared), 
       
  1117             EventRuler.on(el, "keydown", keydownEvent), EventRuler.on(el, "keypress", keypressEvent), 
       
  1118             EventRuler.on(el, "input", inputFallBackEvent)), EventRuler.on(el, "setvalue", setValueEvent), 
       
  1119             "" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1 || document.activeElement === el) {
       
  1120                 var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(el.inputmask._valueGet(), opts) || el.inputmask._valueGet() : el.inputmask._valueGet();
       
  1121                 checkVal(el, !0, !1, initialValue.split(""));
       
  1122                 var buffer = getBuffer().slice();
       
  1123                 undoValue = buffer.join(""), isComplete(buffer) === !1 && opts.clearIncomplete && resetMaskSet(), 
       
  1124                 opts.clearMaskOnLostFocus && document.activeElement !== el && (buffer.join("") === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), 
       
  1125                 writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition()));
       
  1126             }
       
  1127         }
       
  1128         var undoValue, el, $el, maxLength, valueBuffer, isRTL = !1, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !0, EventRuler = {
       
  1129             on: function(input, eventName, eventHandler) {
       
  1130                 var ev = function(e) {
       
  1131                     if (void 0 === this.inputmask && "FORM" !== this.nodeName) {
       
  1132                         var imOpts = $.data(this, "_inputmask_opts");
       
  1133                         imOpts ? new Inputmask(imOpts).mask(this) : EventRuler.off(this);
       
  1134                     } else {
       
  1135                         if ("setvalue" === e.type || !(this.disabled || this.readOnly && !("keydown" === e.type && e.ctrlKey && 67 === e.keyCode || opts.tabThrough === !1 && e.keyCode === Inputmask.keyCode.TAB))) {
       
  1136                             switch (e.type) {
       
  1137                               case "input":
       
  1138                                 if (skipInputEvent === !0) return skipInputEvent = !1, e.preventDefault();
       
  1139                                 break;
       
  1140 
       
  1141                               case "keydown":
       
  1142                                 skipKeyPressEvent = !1, skipInputEvent = !1;
       
  1143                                 break;
       
  1144 
       
  1145                               case "keypress":
       
  1146                                 if (skipKeyPressEvent === !0) return e.preventDefault();
       
  1147                                 skipKeyPressEvent = !0;
       
  1148                                 break;
       
  1149 
       
  1150                               case "click":
       
  1151                                 if (iemobile) {
       
  1152                                     var that = this;
       
  1153                                     return setTimeout(function() {
       
  1154                                         eventHandler.apply(that, arguments);
       
  1155                                     }, 0), !1;
       
  1156                                 }
       
  1157                             }
       
  1158                             var returnVal = eventHandler.apply(this, arguments);
       
  1159                             return returnVal === !1 && (e.preventDefault(), e.stopPropagation()), returnVal;
       
  1160                         }
       
  1161                         e.preventDefault();
       
  1162                     }
       
  1163                 };
       
  1164                 input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev), 
       
  1165                 -1 !== $.inArray(eventName, [ "submit", "reset" ]) ? null != input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev);
       
  1166             },
       
  1167             off: function(input, event) {
       
  1168                 if (input.inputmask && input.inputmask.events) {
       
  1169                     var events;
       
  1170                     event ? (events = [], events[event] = input.inputmask.events[event]) : events = input.inputmask.events, 
       
  1171                     $.each(events, function(eventName, evArr) {
       
  1172                         for (;evArr.length > 0; ) {
       
  1173                             var ev = evArr.pop();
       
  1174                             -1 !== $.inArray(eventName, [ "submit", "reset" ]) ? null != input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev);
       
  1175                         }
       
  1176                         delete input.inputmask.events[eventName];
       
  1177                     });
       
  1178                 }
       
  1179             }
       
  1180         };
       
  1181         if (void 0 !== actionObj) switch (actionObj.action) {
       
  1182           case "isComplete":
       
  1183             return el = actionObj.el, isComplete(getBuffer());
       
  1184 
       
  1185           case "unmaskedvalue":
       
  1186             return el = actionObj.el, void 0 !== el && void 0 !== el.inputmask ? (maskset = el.inputmask.maskset, 
       
  1187             opts = el.inputmask.opts, isRTL = el.inputmask.isRTL) : (valueBuffer = actionObj.value, 
       
  1188             opts.numericInput && (isRTL = !0), valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(valueBuffer, opts) || valueBuffer : valueBuffer).split(""), 
       
  1189             checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts)), 
       
  1190             unmaskedvalue(el);
       
  1191 
       
  1192           case "mask":
       
  1193             el = actionObj.el, maskset = el.inputmask.maskset, opts = el.inputmask.opts, isRTL = el.inputmask.isRTL, 
       
  1194             undoValue = getBuffer().join(""), mask(el);
       
  1195             break;
       
  1196 
       
  1197           case "format":
       
  1198             return opts.numericInput && (isRTL = !0), valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(actionObj.value, opts) || actionObj.value : actionObj.value).split(""), 
       
  1199             checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts), 
       
  1200             actionObj.metadata ? {
       
  1201                 value: isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""),
       
  1202                 metadata: maskScope({
       
  1203                     action: "getmetadata"
       
  1204                 }, maskset, opts)
       
  1205             } : isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join("");
       
  1206 
       
  1207           case "isValid":
       
  1208             opts.numericInput && (isRTL = !0), actionObj.value ? (valueBuffer = actionObj.value.split(""), 
       
  1209             checkVal(void 0, !1, !0, isRTL ? valueBuffer.reverse() : valueBuffer)) : actionObj.value = getBuffer().join("");
       
  1210             for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;
       
  1211             return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join("");
       
  1212 
       
  1213           case "getemptymask":
       
  1214             return getBufferTemplate().join("");
       
  1215 
       
  1216           case "remove":
       
  1217             el = actionObj.el, $el = $(el), maskset = el.inputmask.maskset, opts = el.inputmask.opts, 
       
  1218             el.inputmask._valueSet(unmaskedvalue(el)), EventRuler.off(el);
       
  1219             var valueProperty;
       
  1220             Object.getOwnPropertyDescriptor ? (valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), "value"), 
       
  1221             valueProperty && el.inputmask.__valueGet && Object.defineProperty(el, "value", {
       
  1222                 get: el.inputmask.__valueGet,
       
  1223                 set: el.inputmask.__valueSet,
       
  1224                 configurable: !0
       
  1225             })) : document.__lookupGetter__ && el.__lookupGetter__("value") && el.inputmask.__valueGet && (el.__defineGetter__("value", el.inputmask.__valueGet), 
       
  1226             el.__defineSetter__("value", el.inputmask.__valueSet)), el.inputmask = void 0;
       
  1227             break;
       
  1228 
       
  1229           case "getmetadata":
       
  1230             if ($.isArray(maskset.metadata)) {
       
  1231                 for (var alternation, lvp = getLastValidPosition(void 0, !0), firstAlt = lvp; firstAlt >= 0; firstAlt--) if (getMaskSet().validPositions[firstAlt] && void 0 !== getMaskSet().validPositions[firstAlt].alternation) {
       
  1232                     alternation = getMaskSet().validPositions[firstAlt].alternation;
       
  1233                     break;
       
  1234                 }
       
  1235                 return void 0 !== alternation ? maskset.metadata[getMaskSet().validPositions[firstAlt].locator[alternation]] : [];
       
  1236             }
       
  1237             return maskset.metadata;
       
  1238         }
       
  1239     }
       
  1240     Inputmask.prototype = {
       
  1241         defaults: {
       
  1242             placeholder: "_",
       
  1243             optionalmarker: {
       
  1244                 start: "[",
       
  1245                 end: "]"
       
  1246             },
       
  1247             quantifiermarker: {
       
  1248                 start: "{",
       
  1249                 end: "}"
       
  1250             },
       
  1251             groupmarker: {
       
  1252                 start: "(",
       
  1253                 end: ")"
       
  1254             },
       
  1255             alternatormarker: "|",
       
  1256             escapeChar: "\\",
       
  1257             mask: null,
       
  1258             oncomplete: $.noop,
       
  1259             onincomplete: $.noop,
       
  1260             oncleared: $.noop,
       
  1261             repeat: 0,
       
  1262             greedy: !0,
       
  1263             autoUnmask: !1,
       
  1264             removeMaskOnSubmit: !1,
       
  1265             clearMaskOnLostFocus: !0,
       
  1266             insertMode: !0,
       
  1267             clearIncomplete: !1,
       
  1268             aliases: {},
       
  1269             alias: null,
       
  1270             onKeyDown: $.noop,
       
  1271             onBeforeMask: null,
       
  1272             onBeforePaste: function(pastedValue, opts) {
       
  1273                 return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(pastedValue, opts) : pastedValue;
       
  1274             },
       
  1275             onBeforeWrite: null,
       
  1276             onUnMask: null,
       
  1277             showMaskOnFocus: !0,
       
  1278             showMaskOnHover: !0,
       
  1279             onKeyValidation: $.noop,
       
  1280             skipOptionalPartCharacter: " ",
       
  1281             showTooltip: !1,
       
  1282             tooltip: void 0,
       
  1283             numericInput: !1,
       
  1284             rightAlign: !1,
       
  1285             undoOnEscape: !0,
       
  1286             radixPoint: "",
       
  1287             radixPointDefinitionSymbol: void 0,
       
  1288             groupSeparator: "",
       
  1289             radixFocus: !1,
       
  1290             nojumps: !1,
       
  1291             nojumpsThreshold: 0,
       
  1292             keepStatic: null,
       
  1293             positionCaretOnTab: !1,
       
  1294             tabThrough: !1,
       
  1295             supportsInputType: [ "text", "tel", "password" ],
       
  1296             definitions: {
       
  1297                 "9": {
       
  1298                     validator: "[0-9]",
       
  1299                     cardinality: 1,
       
  1300                     definitionSymbol: "*"
       
  1301                 },
       
  1302                 a: {
       
  1303                     validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
       
  1304                     cardinality: 1,
       
  1305                     definitionSymbol: "*"
       
  1306                 },
       
  1307                 "*": {
       
  1308                     validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
       
  1309                     cardinality: 1
       
  1310                 }
       
  1311             },
       
  1312             ignorables: [ 8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123 ],
       
  1313             isComplete: null,
       
  1314             canClearPosition: $.noop,
       
  1315             postValidation: null,
       
  1316             staticDefinitionSymbol: void 0,
       
  1317             jitMasking: !1
       
  1318         },
       
  1319         masksCache: {},
       
  1320         mask: function(elems) {
       
  1321             var that = this;
       
  1322             return "string" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)), 
       
  1323             elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) {
       
  1324                 var scopedOpts = $.extend(!0, {}, that.opts);
       
  1325                 importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions));
       
  1326                 var maskset = generateMaskSet(scopedOpts, that.noMasksCache);
       
  1327                 void 0 !== maskset && (void 0 !== el.inputmask && el.inputmask.remove(), el.inputmask = new Inputmask(), 
       
  1328                 el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = that.noMasksCache, el.inputmask.userOptions = $.extend(!0, {}, that.userOptions), 
       
  1329                 el.inputmask.el = el, el.inputmask.maskset = maskset, el.inputmask.isRTL = !1, $.data(el, "_inputmask_opts", scopedOpts), 
       
  1330                 maskScope({
       
  1331                     action: "mask",
       
  1332                     el: el
       
  1333                 }));
       
  1334             }), elems && elems[0] ? elems[0].inputmask || this : this;
       
  1335         },
       
  1336         option: function(options) {
       
  1337             return "string" == typeof options ? this.opts[options] : "object" == typeof options ? ($.extend(this.opts, options), 
       
  1338             $.extend(this.userOptions, options), this.el && (void 0 !== options.mask || void 0 !== options.alias ? this.mask(this.el) : ($.data(this.el, "_inputmask_opts", this.opts), 
       
  1339             maskScope({
       
  1340                 action: "mask",
       
  1341                 el: this.el
       
  1342             }))), this) : void 0;
       
  1343         },
       
  1344         unmaskedvalue: function(value) {
       
  1345             return maskScope({
       
  1346                 action: "unmaskedvalue",
       
  1347                 el: this.el,
       
  1348                 value: value
       
  1349             }, this.el && this.el.inputmask ? this.el.inputmask.maskset : generateMaskSet(this.opts, this.noMasksCache), this.opts);
       
  1350         },
       
  1351         remove: function() {
       
  1352             return this.el ? (maskScope({
       
  1353                 action: "remove",
       
  1354                 el: this.el
       
  1355             }), this.el.inputmask = void 0, this.el) : void 0;
       
  1356         },
       
  1357         getemptymask: function() {
       
  1358             return maskScope({
       
  1359                 action: "getemptymask"
       
  1360             }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
       
  1361         },
       
  1362         hasMaskedValue: function() {
       
  1363             return !this.opts.autoUnmask;
       
  1364         },
       
  1365         isComplete: function() {
       
  1366             return maskScope({
       
  1367                 action: "isComplete",
       
  1368                 el: this.el
       
  1369             }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
       
  1370         },
       
  1371         getmetadata: function() {
       
  1372             return maskScope({
       
  1373                 action: "getmetadata"
       
  1374             }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
       
  1375         },
       
  1376         isValid: function(value) {
       
  1377             return maskScope({
       
  1378                 action: "isValid",
       
  1379                 value: value
       
  1380             }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
       
  1381         },
       
  1382         format: function(value, metadata) {
       
  1383             return maskScope({
       
  1384                 action: "format",
       
  1385                 value: value,
       
  1386                 metadata: metadata
       
  1387             }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
       
  1388         }
       
  1389     }, Inputmask.extendDefaults = function(options) {
       
  1390         $.extend(!0, Inputmask.prototype.defaults, options);
       
  1391     }, Inputmask.extendDefinitions = function(definition) {
       
  1392         $.extend(!0, Inputmask.prototype.defaults.definitions, definition);
       
  1393     }, Inputmask.extendAliases = function(alias) {
       
  1394         $.extend(!0, Inputmask.prototype.defaults.aliases, alias);
       
  1395     }, Inputmask.format = function(value, options, metadata) {
       
  1396         return Inputmask(options).format(value, metadata);
       
  1397     }, Inputmask.unmask = function(value, options) {
       
  1398         return Inputmask(options).unmaskedvalue(value);
       
  1399     }, Inputmask.isValid = function(value, options) {
       
  1400         return Inputmask(options).isValid(value);
       
  1401     }, Inputmask.remove = function(elems) {
       
  1402         $.each(elems, function(ndx, el) {
       
  1403             el.inputmask && el.inputmask.remove();
       
  1404         });
       
  1405     }, Inputmask.escapeRegex = function(str) {
       
  1406         var specials = [ "/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\", "$", "^" ];
       
  1407         return str.replace(new RegExp("(\\" + specials.join("|\\") + ")", "gim"), "\\$1");
       
  1408     }, Inputmask.keyCode = {
       
  1409         ALT: 18,
       
  1410         BACKSPACE: 8,
       
  1411         BACKSPACE_SAFARI: 127,
       
  1412         CAPS_LOCK: 20,
       
  1413         COMMA: 188,
       
  1414         COMMAND: 91,
       
  1415         COMMAND_LEFT: 91,
       
  1416         COMMAND_RIGHT: 93,
       
  1417         CONTROL: 17,
       
  1418         DELETE: 46,
       
  1419         DOWN: 40,
       
  1420         END: 35,
       
  1421         ENTER: 13,
       
  1422         ESCAPE: 27,
       
  1423         HOME: 36,
       
  1424         INSERT: 45,
       
  1425         LEFT: 37,
       
  1426         MENU: 93,
       
  1427         NUMPAD_ADD: 107,
       
  1428         NUMPAD_DECIMAL: 110,
       
  1429         NUMPAD_DIVIDE: 111,
       
  1430         NUMPAD_ENTER: 108,
       
  1431         NUMPAD_MULTIPLY: 106,
       
  1432         NUMPAD_SUBTRACT: 109,
       
  1433         PAGE_DOWN: 34,
       
  1434         PAGE_UP: 33,
       
  1435         PERIOD: 190,
       
  1436         RIGHT: 39,
       
  1437         SHIFT: 16,
       
  1438         SPACE: 32,
       
  1439         TAB: 9,
       
  1440         UP: 38,
       
  1441         WINDOWS: 91,
       
  1442         X: 88
       
  1443     };
       
  1444     var ua = navigator.userAgent, mobile = /mobile/i.test(ua), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile;
       
  1445     /android.*safari.*/i.test(ua) && !iemobile;
       
  1446     return window.Inputmask = Inputmask, Inputmask;
       
  1447 }(jQuery), function($, Inputmask) {
       
  1448     return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) {
       
  1449         var nptmask, input = this[0];
       
  1450         if (void 0 === options && (options = {}), "string" == typeof fn) switch (fn) {
       
  1451           case "unmaskedvalue":
       
  1452             return input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val();
       
  1453 
       
  1454           case "remove":
       
  1455             return this.each(function() {
       
  1456                 this.inputmask && this.inputmask.remove();
       
  1457             });
       
  1458 
       
  1459           case "getemptymask":
       
  1460             return input && input.inputmask ? input.inputmask.getemptymask() : "";
       
  1461 
       
  1462           case "hasMaskedValue":
       
  1463             return input && input.inputmask ? input.inputmask.hasMaskedValue() : !1;
       
  1464 
       
  1465           case "isComplete":
       
  1466             return input && input.inputmask ? input.inputmask.isComplete() : !0;
       
  1467 
       
  1468           case "getmetadata":
       
  1469             return input && input.inputmask ? input.inputmask.getmetadata() : void 0;
       
  1470 
       
  1471           case "setvalue":
       
  1472             $(input).val(options), input && void 0 !== input.inputmask && $(input).triggerHandler("setvalue");
       
  1473             break;
       
  1474 
       
  1475           case "option":
       
  1476             if ("string" != typeof options) return this.each(function() {
       
  1477                 return void 0 !== this.inputmask ? this.inputmask.option(options) : void 0;
       
  1478             });
       
  1479             if (input && void 0 !== input.inputmask) return input.inputmask.option(options);
       
  1480             break;
       
  1481 
       
  1482           default:
       
  1483             return options.alias = fn, nptmask = new Inputmask(options), this.each(function() {
       
  1484                 nptmask.mask(this);
       
  1485             });
       
  1486         } else {
       
  1487             if ("object" == typeof fn) return nptmask = new Inputmask(fn), void 0 === fn.mask && void 0 === fn.alias ? this.each(function() {
       
  1488                 return void 0 !== this.inputmask ? this.inputmask.option(fn) : void nptmask.mask(this);
       
  1489             }) : this.each(function() {
       
  1490                 nptmask.mask(this);
       
  1491             });
       
  1492             if (void 0 === fn) return this.each(function() {
       
  1493                 nptmask = new Inputmask(options), nptmask.mask(this);
       
  1494             });
       
  1495         }
       
  1496     }), $.fn.inputmask;
       
  1497 }(jQuery, Inputmask), function($, Inputmask) {
       
  1498     return Inputmask.extendDefinitions({
       
  1499         h: {
       
  1500             validator: "[01][0-9]|2[0-3]",
       
  1501             cardinality: 2,
       
  1502             prevalidator: [ {
       
  1503                 validator: "[0-2]",
       
  1504                 cardinality: 1
       
  1505             } ]
       
  1506         },
       
  1507         s: {
       
  1508             validator: "[0-5][0-9]",
       
  1509             cardinality: 2,
       
  1510             prevalidator: [ {
       
  1511                 validator: "[0-5]",
       
  1512                 cardinality: 1
       
  1513             } ]
       
  1514         },
       
  1515         d: {
       
  1516             validator: "0[1-9]|[12][0-9]|3[01]",
       
  1517             cardinality: 2,
       
  1518             prevalidator: [ {
       
  1519                 validator: "[0-3]",
       
  1520                 cardinality: 1
       
  1521             } ]
       
  1522         },
       
  1523         m: {
       
  1524             validator: "0[1-9]|1[012]",
       
  1525             cardinality: 2,
       
  1526             prevalidator: [ {
       
  1527                 validator: "[01]",
       
  1528                 cardinality: 1
       
  1529             } ]
       
  1530         },
       
  1531         y: {
       
  1532             validator: "(19|20)\\d{2}",
       
  1533             cardinality: 4,
       
  1534             prevalidator: [ {
       
  1535                 validator: "[12]",
       
  1536                 cardinality: 1
       
  1537             }, {
       
  1538                 validator: "(19|20)",
       
  1539                 cardinality: 2
       
  1540             }, {
       
  1541                 validator: "(19|20)\\d",
       
  1542                 cardinality: 3
       
  1543             } ]
       
  1544         }
       
  1545     }), Inputmask.extendAliases({
       
  1546         "dd/mm/yyyy": {
       
  1547             mask: "1/2/y",
       
  1548             placeholder: "dd/mm/yyyy",
       
  1549             regex: {
       
  1550                 val1pre: new RegExp("[0-3]"),
       
  1551                 val1: new RegExp("0[1-9]|[12][0-9]|3[01]"),
       
  1552                 val2pre: function(separator) {
       
  1553                     var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
       
  1554                     return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])");
       
  1555                 },
       
  1556                 val2: function(separator) {
       
  1557                     var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
       
  1558                     return new RegExp("((0[1-9]|[12][0-9])" + escapedSeparator + "(0[1-9]|1[012]))|(30" + escapedSeparator + "(0[13-9]|1[012]))|(31" + escapedSeparator + "(0[13578]|1[02]))");
       
  1559                 }
       
  1560             },
       
  1561             leapday: "29/02/",
       
  1562             separator: "/",
       
  1563             yearrange: {
       
  1564                 minyear: 1900,
       
  1565                 maxyear: 2099
       
  1566             },
       
  1567             isInYearRange: function(chrs, minyear, maxyear) {
       
  1568                 if (isNaN(chrs)) return !1;
       
  1569                 var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));
       
  1570                 return (isNaN(enteredyear) ? !1 : enteredyear >= minyear && maxyear >= enteredyear) || (isNaN(enteredyear2) ? !1 : enteredyear2 >= minyear && maxyear >= enteredyear2);
       
  1571             },
       
  1572             determinebaseyear: function(minyear, maxyear, hint) {
       
  1573                 var currentyear = new Date().getFullYear();
       
  1574                 if (minyear > currentyear) return minyear;
       
  1575                 if (currentyear > maxyear) {
       
  1576                     for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxYearPrefix + hint > maxyear; ) maxYearPrefix--;
       
  1577                     var maxxYear = maxYearPrefix + maxYearPostfix;
       
  1578                     return minyear > maxxYear ? minyear : maxxYear;
       
  1579                 }
       
  1580                 if (currentyear >= minyear && maxyear >= currentyear) {
       
  1581                     for (var currentYearPrefix = currentyear.toString().slice(0, 2); currentYearPrefix + hint > maxyear; ) currentYearPrefix--;
       
  1582                     var currentYearAndHint = currentYearPrefix + hint;
       
  1583                     return minyear > currentYearAndHint ? minyear : currentYearAndHint;
       
  1584                 }
       
  1585                 return currentyear;
       
  1586             },
       
  1587             onKeyDown: function(e, buffer, caretPos, opts) {
       
  1588                 var $input = $(this);
       
  1589                 if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
       
  1590                     var today = new Date();
       
  1591                     $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()), 
       
  1592                     $input.trigger("setvalue");
       
  1593                 }
       
  1594             },
       
  1595             getFrontValue: function(mask, buffer, opts) {
       
  1596                 for (var start = 0, length = 0, i = 0; i < mask.length && "2" !== mask.charAt(i); i++) {
       
  1597                     var definition = opts.definitions[mask.charAt(i)];
       
  1598                     definition ? (start += length, length = definition.cardinality) : length++;
       
  1599                 }
       
  1600                 return buffer.join("").substr(start, length);
       
  1601             },
       
  1602             definitions: {
       
  1603                 "1": {
       
  1604                     validator: function(chrs, maskset, pos, strict, opts) {
       
  1605                         var isValid = opts.regex.val1.test(chrs);
       
  1606                         return strict || isValid || chrs.charAt(1) !== opts.separator && -1 === "-./".indexOf(chrs.charAt(1)) || !(isValid = opts.regex.val1.test("0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0", 
       
  1607                         {
       
  1608                             refreshFromBuffer: {
       
  1609                                 start: pos - 1,
       
  1610                                 end: pos
       
  1611                             },
       
  1612                             pos: pos,
       
  1613                             c: chrs.charAt(0)
       
  1614                         });
       
  1615                     },
       
  1616                     cardinality: 2,
       
  1617                     prevalidator: [ {
       
  1618                         validator: function(chrs, maskset, pos, strict, opts) {
       
  1619                             var pchrs = chrs;
       
  1620                             isNaN(maskset.buffer[pos + 1]) || (pchrs += maskset.buffer[pos + 1]);
       
  1621                             var isValid = 1 === pchrs.length ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);
       
  1622                             if (!strict && !isValid) {
       
  1623                                 if (isValid = opts.regex.val1.test(chrs + "0")) return maskset.buffer[pos] = chrs, 
       
  1624                                 maskset.buffer[++pos] = "0", {
       
  1625                                     pos: pos,
       
  1626                                     c: "0"
       
  1627                                 };
       
  1628                                 if (isValid = opts.regex.val1.test("0" + chrs)) return maskset.buffer[pos] = "0", 
       
  1629                                 pos++, {
       
  1630                                     pos: pos
       
  1631                                 };
       
  1632                             }
       
  1633                             return isValid;
       
  1634                         },
       
  1635                         cardinality: 1
       
  1636                     } ]
       
  1637                 },
       
  1638                 "2": {
       
  1639                     validator: function(chrs, maskset, pos, strict, opts) {
       
  1640                         var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
       
  1641                         -1 !== frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
       
  1642                         var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
       
  1643                         if (!strict && !isValid && (chrs.charAt(1) === opts.separator || -1 !== "-./".indexOf(chrs.charAt(1))) && (isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0", 
       
  1644                         {
       
  1645                             refreshFromBuffer: {
       
  1646                                 start: pos - 1,
       
  1647                                 end: pos
       
  1648                             },
       
  1649                             pos: pos,
       
  1650                             c: chrs.charAt(0)
       
  1651                         };
       
  1652                         if (opts.mask.indexOf("2") === opts.mask.length - 1 && isValid) {
       
  1653                             var dayMonthValue = maskset.buffer.join("").substr(4, 4) + chrs;
       
  1654                             if (dayMonthValue !== opts.leapday) return !0;
       
  1655                             var year = parseInt(maskset.buffer.join("").substr(0, 4), 10);
       
  1656                             return year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
       
  1657                         }
       
  1658                         return isValid;
       
  1659                     },
       
  1660                     cardinality: 2,
       
  1661                     prevalidator: [ {
       
  1662                         validator: function(chrs, maskset, pos, strict, opts) {
       
  1663                             isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]);
       
  1664                             var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
       
  1665                             -1 !== frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
       
  1666                             var isValid = 1 === chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);
       
  1667                             return strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", 
       
  1668                             pos++, {
       
  1669                                 pos: pos
       
  1670                             });
       
  1671                         },
       
  1672                         cardinality: 1
       
  1673                     } ]
       
  1674                 },
       
  1675                 y: {
       
  1676                     validator: function(chrs, maskset, pos, strict, opts) {
       
  1677                         if (opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
       
  1678                             var dayMonthValue = maskset.buffer.join("").substr(0, 6);
       
  1679                             if (dayMonthValue !== opts.leapday) return !0;
       
  1680                             var year = parseInt(chrs, 10);
       
  1681                             return year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
       
  1682                         }
       
  1683                         return !1;
       
  1684                     },
       
  1685                     cardinality: 4,
       
  1686                     prevalidator: [ {
       
  1687                         validator: function(chrs, maskset, pos, strict, opts) {
       
  1688                             var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
       
  1689                             if (!strict && !isValid) {
       
  1690                                 var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1);
       
  1691                                 if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), 
       
  1692                                 {
       
  1693                                     pos: pos
       
  1694                                 };
       
  1695                                 if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2), 
       
  1696                                 isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), 
       
  1697                                 maskset.buffer[pos++] = yearPrefix.charAt(1), {
       
  1698                                     pos: pos
       
  1699                                 };
       
  1700                             }
       
  1701                             return isValid;
       
  1702                         },
       
  1703                         cardinality: 1
       
  1704                     }, {
       
  1705                         validator: function(chrs, maskset, pos, strict, opts) {
       
  1706                             var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
       
  1707                             if (!strict && !isValid) {
       
  1708                                 var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
       
  1709                                 if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1), 
       
  1710                                 {
       
  1711                                     pos: pos
       
  1712                                 };
       
  1713                                 if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2), 
       
  1714                                 opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
       
  1715                                     var dayMonthValue = maskset.buffer.join("").substr(0, 6);
       
  1716                                     if (dayMonthValue !== opts.leapday) isValid = !0; else {
       
  1717                                         var year = parseInt(chrs, 10);
       
  1718                                         isValid = year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
       
  1719                                     }
       
  1720                                 } else isValid = !1;
       
  1721                                 if (isValid) return maskset.buffer[pos - 1] = yearPrefix.charAt(0), maskset.buffer[pos++] = yearPrefix.charAt(1), 
       
  1722                                 maskset.buffer[pos++] = chrs.charAt(0), {
       
  1723                                     refreshFromBuffer: {
       
  1724                                         start: pos - 3,
       
  1725                                         end: pos
       
  1726                                     },
       
  1727                                     pos: pos
       
  1728                                 };
       
  1729                             }
       
  1730                             return isValid;
       
  1731                         },
       
  1732                         cardinality: 2
       
  1733                     }, {
       
  1734                         validator: function(chrs, maskset, pos, strict, opts) {
       
  1735                             return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
       
  1736                         },
       
  1737                         cardinality: 3
       
  1738                     } ]
       
  1739                 }
       
  1740             },
       
  1741             insertMode: !1,
       
  1742             autoUnmask: !1
       
  1743         },
       
  1744         "mm/dd/yyyy": {
       
  1745             placeholder: "mm/dd/yyyy",
       
  1746             alias: "dd/mm/yyyy",
       
  1747             regex: {
       
  1748                 val2pre: function(separator) {
       
  1749                     var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
       
  1750                     return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
       
  1751                 },
       
  1752                 val2: function(separator) {
       
  1753                     var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
       
  1754                     return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
       
  1755                 },
       
  1756                 val1pre: new RegExp("[01]"),
       
  1757                 val1: new RegExp("0[1-9]|1[012]")
       
  1758             },
       
  1759             leapday: "02/29/",
       
  1760             onKeyDown: function(e, buffer, caretPos, opts) {
       
  1761                 var $input = $(this);
       
  1762                 if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
       
  1763                     var today = new Date();
       
  1764                     $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), 
       
  1765                     $input.trigger("setvalue");
       
  1766                 }
       
  1767             }
       
  1768         },
       
  1769         "yyyy/mm/dd": {
       
  1770             mask: "y/1/2",
       
  1771             placeholder: "yyyy/mm/dd",
       
  1772             alias: "mm/dd/yyyy",
       
  1773             leapday: "/02/29",
       
  1774             onKeyDown: function(e, buffer, caretPos, opts) {
       
  1775                 var $input = $(this);
       
  1776                 if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
       
  1777                     var today = new Date();
       
  1778                     $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()), 
       
  1779                     $input.trigger("setvalue");
       
  1780                 }
       
  1781             }
       
  1782         },
       
  1783         "dd.mm.yyyy": {
       
  1784             mask: "1.2.y",
       
  1785             placeholder: "dd.mm.yyyy",
       
  1786             leapday: "29.02.",
       
  1787             separator: ".",
       
  1788             alias: "dd/mm/yyyy"
       
  1789         },
       
  1790         "dd-mm-yyyy": {
       
  1791             mask: "1-2-y",
       
  1792             placeholder: "dd-mm-yyyy",
       
  1793             leapday: "29-02-",
       
  1794             separator: "-",
       
  1795             alias: "dd/mm/yyyy"
       
  1796         },
       
  1797         "mm.dd.yyyy": {
       
  1798             mask: "1.2.y",
       
  1799             placeholder: "mm.dd.yyyy",
       
  1800             leapday: "02.29.",
       
  1801             separator: ".",
       
  1802             alias: "mm/dd/yyyy"
       
  1803         },
       
  1804         "mm-dd-yyyy": {
       
  1805             mask: "1-2-y",
       
  1806             placeholder: "mm-dd-yyyy",
       
  1807             leapday: "02-29-",
       
  1808             separator: "-",
       
  1809             alias: "mm/dd/yyyy"
       
  1810         },
       
  1811         "yyyy.mm.dd": {
       
  1812             mask: "y.1.2",
       
  1813             placeholder: "yyyy.mm.dd",
       
  1814             leapday: ".02.29",
       
  1815             separator: ".",
       
  1816             alias: "yyyy/mm/dd"
       
  1817         },
       
  1818         "yyyy-mm-dd": {
       
  1819             mask: "y-1-2",
       
  1820             placeholder: "yyyy-mm-dd",
       
  1821             leapday: "-02-29",
       
  1822             separator: "-",
       
  1823             alias: "yyyy/mm/dd"
       
  1824         },
       
  1825         datetime: {
       
  1826             mask: "1/2/y h:s",
       
  1827             placeholder: "dd/mm/yyyy hh:mm",
       
  1828             alias: "dd/mm/yyyy",
       
  1829             regex: {
       
  1830                 hrspre: new RegExp("[012]"),
       
  1831                 hrs24: new RegExp("2[0-4]|1[3-9]"),
       
  1832                 hrs: new RegExp("[01][0-9]|2[0-4]"),
       
  1833                 ampm: new RegExp("^[a|p|A|P][m|M]"),
       
  1834                 mspre: new RegExp("[0-5]"),
       
  1835                 ms: new RegExp("[0-5][0-9]")
       
  1836             },
       
  1837             timeseparator: ":",
       
  1838             hourFormat: "24",
       
  1839             definitions: {
       
  1840                 h: {
       
  1841                     validator: function(chrs, maskset, pos, strict, opts) {
       
  1842                         if ("24" === opts.hourFormat && 24 === parseInt(chrs, 10)) return maskset.buffer[pos - 1] = "0", 
       
  1843                         maskset.buffer[pos] = "0", {
       
  1844                             refreshFromBuffer: {
       
  1845                                 start: pos - 1,
       
  1846                                 end: pos
       
  1847                             },
       
  1848                             c: "0"
       
  1849                         };
       
  1850                         var isValid = opts.regex.hrs.test(chrs);
       
  1851                         if (!strict && !isValid && (chrs.charAt(1) === opts.timeseparator || -1 !== "-.:".indexOf(chrs.charAt(1))) && (isValid = opts.regex.hrs.test("0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0", 
       
  1852                         maskset.buffer[pos] = chrs.charAt(0), pos++, {
       
  1853                             refreshFromBuffer: {
       
  1854                                 start: pos - 2,
       
  1855                                 end: pos
       
  1856                             },
       
  1857                             pos: pos,
       
  1858                             c: opts.timeseparator
       
  1859                         };
       
  1860                         if (isValid && "24" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) {
       
  1861                             var tmp = parseInt(chrs, 10);
       
  1862                             return 24 === tmp ? (maskset.buffer[pos + 5] = "a", maskset.buffer[pos + 6] = "m") : (maskset.buffer[pos + 5] = "p", 
       
  1863                             maskset.buffer[pos + 6] = "m"), tmp -= 12, 10 > tmp ? (maskset.buffer[pos] = tmp.toString(), 
       
  1864                             maskset.buffer[pos - 1] = "0") : (maskset.buffer[pos] = tmp.toString().charAt(1), 
       
  1865                             maskset.buffer[pos - 1] = tmp.toString().charAt(0)), {
       
  1866                                 refreshFromBuffer: {
       
  1867                                     start: pos - 1,
       
  1868                                     end: pos + 6
       
  1869                                 },
       
  1870                                 c: maskset.buffer[pos]
       
  1871                             };
       
  1872                         }
       
  1873                         return isValid;
       
  1874                     },
       
  1875                     cardinality: 2,
       
  1876                     prevalidator: [ {
       
  1877                         validator: function(chrs, maskset, pos, strict, opts) {
       
  1878                             var isValid = opts.regex.hrspre.test(chrs);
       
  1879                             return strict || isValid || !(isValid = opts.regex.hrs.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", 
       
  1880                             pos++, {
       
  1881                                 pos: pos
       
  1882                             });
       
  1883                         },
       
  1884                         cardinality: 1
       
  1885                     } ]
       
  1886                 },
       
  1887                 s: {
       
  1888                     validator: "[0-5][0-9]",
       
  1889                     cardinality: 2,
       
  1890                     prevalidator: [ {
       
  1891                         validator: function(chrs, maskset, pos, strict, opts) {
       
  1892                             var isValid = opts.regex.mspre.test(chrs);
       
  1893                             return strict || isValid || !(isValid = opts.regex.ms.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", 
       
  1894                             pos++, {
       
  1895                                 pos: pos
       
  1896                             });
       
  1897                         },
       
  1898                         cardinality: 1
       
  1899                     } ]
       
  1900                 },
       
  1901                 t: {
       
  1902                     validator: function(chrs, maskset, pos, strict, opts) {
       
  1903                         return opts.regex.ampm.test(chrs + "m");
       
  1904                     },
       
  1905                     casing: "lower",
       
  1906                     cardinality: 1
       
  1907                 }
       
  1908             },
       
  1909             insertMode: !1,
       
  1910             autoUnmask: !1
       
  1911         },
       
  1912         datetime12: {
       
  1913             mask: "1/2/y h:s t\\m",
       
  1914             placeholder: "dd/mm/yyyy hh:mm xm",
       
  1915             alias: "datetime",
       
  1916             hourFormat: "12"
       
  1917         },
       
  1918         "mm/dd/yyyy hh:mm xm": {
       
  1919             mask: "1/2/y h:s t\\m",
       
  1920             placeholder: "mm/dd/yyyy hh:mm xm",
       
  1921             alias: "datetime12",
       
  1922             regex: {
       
  1923                 val2pre: function(separator) {
       
  1924                     var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
       
  1925                     return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
       
  1926                 },
       
  1927                 val2: function(separator) {
       
  1928                     var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
       
  1929                     return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
       
  1930                 },
       
  1931                 val1pre: new RegExp("[01]"),
       
  1932                 val1: new RegExp("0[1-9]|1[012]")
       
  1933             },
       
  1934             leapday: "02/29/",
       
  1935             onKeyDown: function(e, buffer, caretPos, opts) {
       
  1936                 var $input = $(this);
       
  1937                 if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
       
  1938                     var today = new Date();
       
  1939                     $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), 
       
  1940                     $input.trigger("setvalue");
       
  1941                 }
       
  1942             }
       
  1943         },
       
  1944         "hh:mm t": {
       
  1945             mask: "h:s t\\m",
       
  1946             placeholder: "hh:mm xm",
       
  1947             alias: "datetime",
       
  1948             hourFormat: "12"
       
  1949         },
       
  1950         "h:s t": {
       
  1951             mask: "h:s t\\m",
       
  1952             placeholder: "hh:mm xm",
       
  1953             alias: "datetime",
       
  1954             hourFormat: "12"
       
  1955         },
       
  1956         "hh:mm:ss": {
       
  1957             mask: "h:s:s",
       
  1958             placeholder: "hh:mm:ss",
       
  1959             alias: "datetime",
       
  1960             autoUnmask: !1
       
  1961         },
       
  1962         "hh:mm": {
       
  1963             mask: "h:s",
       
  1964             placeholder: "hh:mm",
       
  1965             alias: "datetime",
       
  1966             autoUnmask: !1
       
  1967         },
       
  1968         date: {
       
  1969             alias: "dd/mm/yyyy"
       
  1970         },
       
  1971         "mm/yyyy": {
       
  1972             mask: "1/y",
       
  1973             placeholder: "mm/yyyy",
       
  1974             leapday: "donotuse",
       
  1975             separator: "/",
       
  1976             alias: "mm/dd/yyyy"
       
  1977         },
       
  1978         shamsi: {
       
  1979             regex: {
       
  1980                 val2pre: function(separator) {
       
  1981                     var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
       
  1982                     return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "[0-3])");
       
  1983                 },
       
  1984                 val2: function(separator) {
       
  1985                     var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
       
  1986                     return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[1-9]|1[012])" + escapedSeparator + "30)|((0[1-6])" + escapedSeparator + "31)");
       
  1987                 },
       
  1988                 val1pre: new RegExp("[01]"),
       
  1989                 val1: new RegExp("0[1-9]|1[012]")
       
  1990             },
       
  1991             yearrange: {
       
  1992                 minyear: 1300,
       
  1993                 maxyear: 1499
       
  1994             },
       
  1995             mask: "y/1/2",
       
  1996             leapday: "/12/30",
       
  1997             placeholder: "yyyy/mm/dd",
       
  1998             alias: "mm/dd/yyyy",
       
  1999             clearIncomplete: !0
       
  2000         }
       
  2001     }), Inputmask;
       
  2002 }(jQuery, Inputmask), function($, Inputmask) {
       
  2003     return Inputmask.extendDefinitions({
       
  2004         A: {
       
  2005             validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
       
  2006             cardinality: 1,
       
  2007             casing: "upper"
       
  2008         },
       
  2009         "&": {
       
  2010             validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
       
  2011             cardinality: 1,
       
  2012             casing: "upper"
       
  2013         },
       
  2014         "#": {
       
  2015             validator: "[0-9A-Fa-f]",
       
  2016             cardinality: 1,
       
  2017             casing: "upper"
       
  2018         }
       
  2019     }), Inputmask.extendAliases({
       
  2020         url: {
       
  2021             definitions: {
       
  2022                 i: {
       
  2023                     validator: ".",
       
  2024                     cardinality: 1
       
  2025                 }
       
  2026             },
       
  2027             mask: "(\\http://)|(\\http\\s://)|(ftp://)|(ftp\\s://)i{+}",
       
  2028             insertMode: !1,
       
  2029             autoUnmask: !1
       
  2030         },
       
  2031         ip: {
       
  2032             mask: "i[i[i]].i[i[i]].i[i[i]].i[i[i]]",
       
  2033             definitions: {
       
  2034                 i: {
       
  2035                     validator: function(chrs, maskset, pos, strict, opts) {
       
  2036                         return pos - 1 > -1 && "." !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs, 
       
  2037                         chrs = pos - 2 > -1 && "." !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : "0" + chrs) : chrs = "00" + chrs, 
       
  2038                         new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(chrs);
       
  2039                     },
       
  2040                     cardinality: 1
       
  2041                 }
       
  2042             },
       
  2043             onUnMask: function(maskedValue, unmaskedValue, opts) {
       
  2044                 return maskedValue;
       
  2045             }
       
  2046         },
       
  2047         email: {
       
  2048             mask: "*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}[.-{1,63}][.-{1,63}][.-{1,63}]",
       
  2049             greedy: !1,
       
  2050             onBeforePaste: function(pastedValue, opts) {
       
  2051                 return pastedValue = pastedValue.toLowerCase(), pastedValue.replace("mailto:", "");
       
  2052             },
       
  2053             definitions: {
       
  2054                 "*": {
       
  2055                     validator: "[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]",
       
  2056                     cardinality: 1,
       
  2057                     casing: "lower"
       
  2058                 },
       
  2059                 "-": {
       
  2060                     validator: "[0-9A-Za-z-]",
       
  2061                     cardinality: 1,
       
  2062                     casing: "lower"
       
  2063                 }
       
  2064             },
       
  2065             onUnMask: function(maskedValue, unmaskedValue, opts) {
       
  2066                 return maskedValue;
       
  2067             }
       
  2068         },
       
  2069         mac: {
       
  2070             mask: "##:##:##:##:##:##"
       
  2071         },
       
  2072         vin: {
       
  2073             mask: "V{8}vV{4}9{4}",
       
  2074             definitions: {
       
  2075                 V: {
       
  2076                     validator: "[A-HJ-NPR-Za-hj-npr-z\\d]",
       
  2077                     cardinality: 1,
       
  2078                     casing: "upper"
       
  2079                 },
       
  2080                 v: {
       
  2081                     validator: "[Xx\\d]",
       
  2082                     cardinality: 1,
       
  2083                     casing: "upper"
       
  2084                 }
       
  2085             },
       
  2086             clearIncomplete: !0,
       
  2087             autoUnmask: !0
       
  2088         }
       
  2089     }), Inputmask;
       
  2090 }(jQuery, Inputmask), function($, Inputmask) {
       
  2091     return Inputmask.extendAliases({
       
  2092         numeric: {
       
  2093             mask: function(opts) {
       
  2094                 function autoEscape(txt) {
       
  2095                     for (var escapedTxt = "", i = 0; i < txt.length; i++) escapedTxt += opts.definitions[txt.charAt(i)] ? "\\" + txt.charAt(i) : txt.charAt(i);
       
  2096                     return escapedTxt;
       
  2097                 }
       
  2098                 if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat), 
       
  2099                 opts.repeat = 0, opts.groupSeparator === opts.radixPoint && ("." === opts.radixPoint ? opts.groupSeparator = "," : "," === opts.radixPoint ? opts.groupSeparator = "." : opts.groupSeparator = ""), 
       
  2100                 " " === opts.groupSeparator && (opts.skipOptionalPartCharacter = void 0), opts.autoGroup = opts.autoGroup && "" !== opts.groupSeparator, 
       
  2101                 opts.autoGroup && ("string" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)), 
       
  2102                 isFinite(opts.integerDigits))) {
       
  2103                     var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize;
       
  2104                     opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps), 
       
  2105                     opts.integerDigits < 1 && (opts.integerDigits = "*");
       
  2106                 }
       
  2107                 opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)), 
       
  2108                 opts.radixFocus = opts.radixFocus && "" !== opts.placeholder && opts.integerOptional === !0, 
       
  2109                 opts.definitions[";"] = opts.definitions["~"], opts.definitions[";"].definitionSymbol = "~", 
       
  2110                 1 == opts.numericInput && (opts.radixFocus = !1, opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), 
       
  2111                 opts.decimalProtect = !1);
       
  2112                 var mask = autoEscape(opts.prefix);
       
  2113                 return mask += "[+]", mask += opts.integerOptional === !0 ? "~{1," + opts.integerDigits + "}" : "~{" + opts.integerDigits + "}", 
       
  2114                 void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (opts.decimalProtect && (opts.radixPointDefinitionSymbol = ":"), 
       
  2115                 mask += opts.digitsOptional ? "[" + (opts.decimalProtect ? ":" : opts.radixPoint) + ";{1," + opts.digits + "}]" : (opts.decimalProtect ? ":" : opts.radixPoint) + ";{" + opts.digits + "}"), 
       
  2116                 "" !== opts.negationSymbol.back && (mask += "[-]"), mask += autoEscape(opts.suffix), 
       
  2117                 opts.greedy = !1, mask;
       
  2118             },
       
  2119             placeholder: "",
       
  2120             greedy: !1,
       
  2121             digits: "*",
       
  2122             digitsOptional: !0,
       
  2123             radixPoint: ".",
       
  2124             radixFocus: !0,
       
  2125             groupSize: 3,
       
  2126             groupSeparator: "",
       
  2127             autoGroup: !1,
       
  2128             allowPlus: !0,
       
  2129             allowMinus: !0,
       
  2130             negationSymbol: {
       
  2131                 front: "-",
       
  2132                 back: ""
       
  2133             },
       
  2134             integerDigits: "+",
       
  2135             integerOptional: !0,
       
  2136             prefix: "",
       
  2137             suffix: "",
       
  2138             rightAlign: !0,
       
  2139             decimalProtect: !0,
       
  2140             min: null,
       
  2141             max: null,
       
  2142             step: 1,
       
  2143             insertMode: !0,
       
  2144             autoUnmask: !1,
       
  2145             unmaskAsNumber: !1,
       
  2146             postFormat: function(buffer, pos, opts) {
       
  2147                 opts.numericInput === !0 && (buffer = buffer.reverse(), isFinite(pos) && (pos = buffer.join("").length - pos - 1));
       
  2148                 var i, l, suffixStripped = !1;
       
  2149                 buffer.length >= opts.suffix.length && buffer.join("").indexOf(opts.suffix) === buffer.length - opts.suffix.length && (buffer.length = buffer.length - opts.suffix.length, 
       
  2150                 suffixStripped = !0), pos = pos >= buffer.length ? buffer.length - 1 : pos < opts.prefix.length ? opts.prefix.length : pos;
       
  2151                 var needsRefresh = !1, charAtPos = buffer[pos], cbuf = buffer.slice();
       
  2152                 charAtPos === opts.groupSeparator && (cbuf.splice(pos--, 1), charAtPos = cbuf[pos]), 
       
  2153                 charAtPos !== opts.radixPoint && charAtPos !== opts.negationSymbol.front && charAtPos !== opts.negationSymbol.back && (cbuf[pos] = "?");
       
  2154                 var bufVal = cbuf.join(""), bufValOrigin = bufVal;
       
  2155                 if (bufVal.length > 0 && opts.autoGroup || -1 !== bufVal.indexOf(opts.groupSeparator)) {
       
  2156                     var escapedGroupSeparator = Inputmask.escapeRegex(opts.groupSeparator);
       
  2157                     needsRefresh = 0 === bufVal.indexOf(opts.groupSeparator), bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, "g"), "");
       
  2158                     var radixSplit = bufVal.split(opts.radixPoint);
       
  2159                     if (bufVal = "" === opts.radixPoint ? bufVal : radixSplit[0], bufVal !== opts.prefix + "?0" && bufVal.length >= opts.groupSize + opts.prefix.length) for (var reg = new RegExp("([-+]?[\\d?]+)([\\d?]{" + opts.groupSize + "})"); reg.test(bufVal) && "" !== opts.groupSeparator; ) bufVal = bufVal.replace(reg, "$1" + opts.groupSeparator + "$2"), 
       
  2160                     bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator);
       
  2161                     "" !== opts.radixPoint && radixSplit.length > 1 && (bufVal += opts.radixPoint + radixSplit[1]);
       
  2162                 }
       
  2163                 for (needsRefresh = bufValOrigin !== bufVal, buffer.length = bufVal.length, i = 0, 
       
  2164                 l = bufVal.length; l > i; i++) buffer[i] = bufVal.charAt(i);
       
  2165                 var newPos = $.inArray("?", buffer);
       
  2166                 if (-1 === newPos && (newPos = $.inArray(charAtPos, buffer)), buffer[newPos] = charAtPos, 
       
  2167                 !needsRefresh && suffixStripped) for (i = 0, l = opts.suffix.length; l > i; i++) buffer.push(opts.suffix.charAt(i));
       
  2168                 return newPos = opts.numericInput && isFinite(pos) ? buffer.join("").length - newPos - 1 : newPos, 
       
  2169                 opts.numericInput && (buffer = buffer.reverse(), $.inArray(opts.radixPoint, buffer) < newPos && buffer.join("").length - opts.suffix.length !== newPos && (newPos -= 1)), 
       
  2170                 {
       
  2171                     pos: newPos,
       
  2172                     refreshFromBuffer: needsRefresh,
       
  2173                     buffer: buffer
       
  2174                 };
       
  2175             },
       
  2176             onBeforeWrite: function(e, buffer, caretPos, opts) {
       
  2177                 var rslt;
       
  2178                 if (e && ("blur" === e.type || "checkval" === e.type || "keydown" === e.type)) {
       
  2179                     var maskedValue = opts.numericInput ? buffer.slice().reverse().join("") : buffer.join(""), processValue = maskedValue.replace(opts.prefix, ""), minmaxed = !1;
       
  2180                     processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), 
       
  2181                     "," === opts.radixPoint && (processValue = processValue.replace(opts.radixPoint, "."));
       
  2182                     var isNegative = processValue.match(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"));
       
  2183                     if (isNegative = null !== isNegative && 1 === isNegative.length, processValue = processValue.replace(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"), ""), 
       
  2184                     processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), ""), 
       
  2185                     processValue = processValue === opts.negationSymbol.front ? processValue + "0" : processValue, 
       
  2186                     isFinite(processValue)) {
       
  2187                         var floatValue = parseFloat(processValue), signedFloatValue = isNegative ? -1 * floatValue : floatValue;
       
  2188                         if (null !== opts.min && isFinite(opts.min) && signedFloatValue < parseFloat(opts.min) && (floatValue = Math.abs(opts.min), 
       
  2189                         isNegative = opts.min < 0, minmaxed = !0), !minmaxed && null !== opts.max && isFinite(opts.max) && signedFloatValue > parseFloat(opts.max) && (floatValue = Math.abs(opts.max), 
       
  2190                         isNegative = opts.max < 0, minmaxed = !0), processValue = floatValue.toString().replace(".", opts.radixPoint).split(""), 
       
  2191                         isFinite(opts.digits)) {
       
  2192                             var radixPosition = $.inArray(opts.radixPoint, processValue), rpb = $.inArray(opts.radixPoint, maskedValue);
       
  2193                             -1 === radixPosition && (processValue.push(opts.radixPoint), radixPosition = processValue.length - 1);
       
  2194                             for (var i = 1; i <= opts.digits; i++) opts.digitsOptional || void 0 !== processValue[radixPosition + i] && processValue[radixPosition + i] !== opts.placeholder.charAt(0) ? -1 !== rpb && void 0 !== maskedValue[rpb + i] && (processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i]) : processValue[radixPosition + i] = "0";
       
  2195                             processValue[processValue.length - 1] === opts.radixPoint && delete processValue[processValue.length - 1];
       
  2196                         }
       
  2197                         if (floatValue.toString() !== processValue && floatValue.toString() + "." !== processValue || isNegative) return !isNegative || 0 === floatValue && "blur" === e.type || (processValue.unshift(opts.negationSymbol.front), 
       
  2198                         processValue.push(opts.negationSymbol.back)), processValue = (opts.prefix + processValue.join("")).split(""), 
       
  2199                         opts.numericInput && (processValue = processValue.reverse()), rslt = opts.postFormat(processValue, opts.numericInput ? caretPos : caretPos - 1, opts), 
       
  2200                         rslt.buffer && (rslt.refreshFromBuffer = rslt.buffer.join("") !== buffer.join("")), 
       
  2201                         rslt;
       
  2202                     }
       
  2203                 }
       
  2204                 return opts.autoGroup ? (rslt = opts.postFormat(buffer, opts.numericInput ? caretPos : caretPos - 1, opts), 
       
  2205                 rslt.caret = caretPos <= opts.prefix.length ? rslt.pos : rslt.pos + 1, rslt) : void 0;
       
  2206             },
       
  2207             regex: {
       
  2208                 integerPart: function(opts) {
       
  2209                     return new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]?\\d+");
       
  2210                 },
       
  2211                 integerNPart: function(opts) {
       
  2212                     return new RegExp("[\\d" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + "]+");
       
  2213                 }
       
  2214             },
       
  2215             signHandler: function(chrs, maskset, pos, strict, opts) {
       
  2216                 if (!strict && opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) {
       
  2217                     var matchRslt = maskset.buffer.join("").match(opts.regex.integerPart(opts));
       
  2218                     if (matchRslt && matchRslt[0].length > 0) return maskset.buffer[matchRslt.index] === ("-" === chrs ? "+" : opts.negationSymbol.front) ? "-" === chrs ? "" !== opts.negationSymbol.back ? {
       
  2219                         pos: matchRslt.index,
       
  2220                         c: opts.negationSymbol.front,
       
  2221                         remove: matchRslt.index,
       
  2222                         caret: pos,
       
  2223                         insert: {
       
  2224                             pos: maskset.buffer.length - opts.suffix.length - 1,
       
  2225                             c: opts.negationSymbol.back
       
  2226                         }
       
  2227                     } : {
       
  2228                         pos: matchRslt.index,
       
  2229                         c: opts.negationSymbol.front,
       
  2230                         remove: matchRslt.index,
       
  2231                         caret: pos
       
  2232                     } : "" !== opts.negationSymbol.back ? {
       
  2233                         pos: matchRslt.index,
       
  2234                         c: "+",
       
  2235                         remove: [ matchRslt.index, maskset.buffer.length - opts.suffix.length - 1 ],
       
  2236                         caret: pos
       
  2237                     } : {
       
  2238                         pos: matchRslt.index,
       
  2239                         c: "+",
       
  2240                         remove: matchRslt.index,
       
  2241                         caret: pos
       
  2242                     } : maskset.buffer[matchRslt.index] === ("-" === chrs ? opts.negationSymbol.front : "+") ? "-" === chrs && "" !== opts.negationSymbol.back ? {
       
  2243                         remove: [ matchRslt.index, maskset.buffer.length - opts.suffix.length - 1 ],
       
  2244                         caret: pos - 1
       
  2245                     } : {
       
  2246                         remove: matchRslt.index,
       
  2247                         caret: pos - 1
       
  2248                     } : "-" === chrs ? "" !== opts.negationSymbol.back ? {
       
  2249                         pos: matchRslt.index,
       
  2250                         c: opts.negationSymbol.front,
       
  2251                         caret: pos + 1,
       
  2252                         insert: {
       
  2253                             pos: maskset.buffer.length - opts.suffix.length,
       
  2254                             c: opts.negationSymbol.back
       
  2255                         }
       
  2256                     } : {
       
  2257                         pos: matchRslt.index,
       
  2258                         c: opts.negationSymbol.front,
       
  2259                         caret: pos + 1
       
  2260                     } : {
       
  2261                         pos: matchRslt.index,
       
  2262                         c: chrs,
       
  2263                         caret: pos + 1
       
  2264                     };
       
  2265                 }
       
  2266                 return !1;
       
  2267             },
       
  2268             radixHandler: function(chrs, maskset, pos, strict, opts) {
       
  2269                 if (!strict && (-1 !== $.inArray(chrs, [ ",", "." ]) && (chrs = opts.radixPoint), 
       
  2270                 chrs === opts.radixPoint && void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0))) {
       
  2271                     var radixPos = $.inArray(opts.radixPoint, maskset.buffer), integerValue = maskset.buffer.join("").match(opts.regex.integerPart(opts));
       
  2272                     if (-1 !== radixPos && maskset.validPositions[radixPos]) return maskset.validPositions[radixPos - 1] ? {
       
  2273                         caret: radixPos + 1
       
  2274                     } : {
       
  2275                         pos: integerValue.index,
       
  2276                         c: integerValue[0],
       
  2277                         caret: radixPos + 1
       
  2278                     };
       
  2279                     if (!integerValue || "0" === integerValue[0] && integerValue.index + 1 !== pos) return maskset.buffer[integerValue ? integerValue.index : pos] = "0", 
       
  2280                     {
       
  2281                         pos: (integerValue ? integerValue.index : pos) + 1,
       
  2282                         c: opts.radixPoint
       
  2283                     };
       
  2284                 }
       
  2285                 return !1;
       
  2286             },
       
  2287             leadingZeroHandler: function(chrs, maskset, pos, strict, opts) {
       
  2288                 if (opts.numericInput === !0) {
       
  2289                     if ("0" === maskset.buffer[maskset.buffer.length - opts.prefix.length - 1]) return {
       
  2290                         pos: pos,
       
  2291                         remove: maskset.buffer.length - opts.prefix.length - 1
       
  2292                     };
       
  2293                 } else {
       
  2294                     var radixPosition = $.inArray(opts.radixPoint, maskset.buffer), matchRslt = maskset.buffer.slice(0, -1 !== radixPosition ? radixPosition : void 0).join("").match(opts.regex.integerNPart(opts));
       
  2295                     if (matchRslt && !strict && (-1 === radixPosition || radixPosition >= pos)) {
       
  2296                         if (0 === matchRslt[0].indexOf("" !== opts.placeholder ? opts.placeholder.charAt(0) : "0") && matchRslt.index + 1 === pos) return maskset.buffer.splice(matchRslt.index, 1), 
       
  2297                         pos = matchRslt.index, {
       
  2298                             pos: pos,
       
  2299                             remove: matchRslt.index
       
  2300                         };
       
  2301                         if ("0" === chrs && pos <= matchRslt.index && matchRslt[0] !== opts.groupSeparator) return !1;
       
  2302                     }
       
  2303                 }
       
  2304                 return !0;
       
  2305             },
       
  2306             definitions: {
       
  2307                 "~": {
       
  2308                     validator: function(chrs, maskset, pos, strict, opts) {
       
  2309                         var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
       
  2310                         if (!isValid && (isValid = opts.radixHandler(chrs, maskset, pos, strict, opts), 
       
  2311                         !isValid && (isValid = strict ? new RegExp("[0-9" + Inputmask.escapeRegex(opts.groupSeparator) + "]").test(chrs) : new RegExp("[0-9]").test(chrs), 
       
  2312                         isValid === !0 && (isValid = opts.leadingZeroHandler(chrs, maskset, pos, strict, opts), 
       
  2313                         isValid === !0)))) {
       
  2314                             var radixPosition = $.inArray(opts.radixPoint, maskset.buffer);
       
  2315                             isValid = -1 !== radixPosition && (opts.digitsOptional === !1 || maskset.validPositions[pos]) && opts.numericInput !== !0 && pos > radixPosition && !strict ? {
       
  2316                                 pos: pos,
       
  2317                                 remove: pos
       
  2318                             } : {
       
  2319                                 pos: pos
       
  2320                             };
       
  2321                         }
       
  2322                         return isValid;
       
  2323                     },
       
  2324                     cardinality: 1,
       
  2325                     prevalidator: null
       
  2326                 },
       
  2327                 "+": {
       
  2328                     validator: function(chrs, maskset, pos, strict, opts) {
       
  2329                         var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
       
  2330                         return !isValid && (strict && opts.allowMinus && chrs === opts.negationSymbol.front || opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) && (isValid = "-" === chrs ? "" !== opts.negationSymbol.back ? {
       
  2331                             pos: pos,
       
  2332                             c: "-" === chrs ? opts.negationSymbol.front : "+",
       
  2333                             caret: pos + 1,
       
  2334                             insert: {
       
  2335                                 pos: maskset.buffer.length,
       
  2336                                 c: opts.negationSymbol.back
       
  2337                             }
       
  2338                         } : {
       
  2339                             pos: pos,
       
  2340                             c: "-" === chrs ? opts.negationSymbol.front : "+",
       
  2341                             caret: pos + 1
       
  2342                         } : !0), isValid;
       
  2343                     },
       
  2344                     cardinality: 1,
       
  2345                     prevalidator: null,
       
  2346                     placeholder: ""
       
  2347                 },
       
  2348                 "-": {
       
  2349                     validator: function(chrs, maskset, pos, strict, opts) {
       
  2350                         var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
       
  2351                         return !isValid && strict && opts.allowMinus && chrs === opts.negationSymbol.back && (isValid = !0), 
       
  2352                         isValid;
       
  2353                     },
       
  2354                     cardinality: 1,
       
  2355                     prevalidator: null,
       
  2356                     placeholder: ""
       
  2357                 },
       
  2358                 ":": {
       
  2359                     validator: function(chrs, maskset, pos, strict, opts) {
       
  2360                         var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
       
  2361                         if (!isValid) {
       
  2362                             var radix = "[" + Inputmask.escapeRegex(opts.radixPoint) + ",\\.]";
       
  2363                             isValid = new RegExp(radix).test(chrs), isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (isValid = {
       
  2364                                 caret: pos + 1
       
  2365                             });
       
  2366                         }
       
  2367                         return isValid ? {
       
  2368                             c: opts.radixPoint
       
  2369                         } : isValid;
       
  2370                     },
       
  2371                     cardinality: 1,
       
  2372                     prevalidator: null,
       
  2373                     placeholder: function(opts) {
       
  2374                         return opts.radixPoint;
       
  2375                     }
       
  2376                 }
       
  2377             },
       
  2378             onUnMask: function(maskedValue, unmaskedValue, opts) {
       
  2379                 var processValue = maskedValue.replace(opts.prefix, "");
       
  2380                 return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), 
       
  2381                 opts.unmaskAsNumber ? ("" !== opts.radixPoint && -1 !== processValue.indexOf(opts.radixPoint) && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), ".")), 
       
  2382                 Number(processValue)) : processValue;
       
  2383             },
       
  2384             isComplete: function(buffer, opts) {
       
  2385                 var maskedValue = buffer.join(""), bufClone = buffer.slice();
       
  2386                 if (opts.postFormat(bufClone, 0, opts), bufClone.join("") !== maskedValue) return !1;
       
  2387                 var processValue = maskedValue.replace(opts.prefix, "");
       
  2388                 return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), 
       
  2389                 "," === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".")), 
       
  2390                 isFinite(processValue);
       
  2391             },
       
  2392             onBeforeMask: function(initialValue, opts) {
       
  2393                 if ("" !== opts.radixPoint && isFinite(initialValue)) initialValue = initialValue.toString().replace(".", opts.radixPoint); else {
       
  2394                     var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\./g);
       
  2395                     dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\./g, ""), 
       
  2396                     initialValue = initialValue.replace(",", opts.radixPoint)) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, ""), 
       
  2397                     initialValue = initialValue.replace(".", opts.radixPoint)) : initialValue = initialValue.indexOf(".") < initialValue.indexOf(",") ? initialValue.replace(/\./g, "") : initialValue = initialValue.replace(/,/g, "") : initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), "");
       
  2398                 }
       
  2399                 if (0 === opts.digits && (-1 !== initialValue.indexOf(".") ? initialValue = initialValue.substring(0, initialValue.indexOf(".")) : -1 !== initialValue.indexOf(",") && (initialValue = initialValue.substring(0, initialValue.indexOf(",")))), 
       
  2400                 "" !== opts.radixPoint && isFinite(opts.digits) && -1 !== initialValue.indexOf(opts.radixPoint)) {
       
  2401                     var valueParts = initialValue.split(opts.radixPoint), decPart = valueParts[1].match(new RegExp("\\d*"))[0];
       
  2402                     if (parseInt(opts.digits) < decPart.toString().length) {
       
  2403                         var digitsFactor = Math.pow(10, parseInt(opts.digits));
       
  2404                         initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), "."), 
       
  2405                         initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor, 
       
  2406                         initialValue = initialValue.toString().replace(".", opts.radixPoint);
       
  2407                     }
       
  2408                 }
       
  2409                 return initialValue.toString();
       
  2410             },
       
  2411             canClearPosition: function(maskset, position, lvp, strict, opts) {
       
  2412                 var positionInput = maskset.validPositions[position].input, canClear = positionInput !== opts.radixPoint || null !== maskset.validPositions[position].match.fn && opts.decimalProtect === !1 || isFinite(positionInput) || position === lvp || positionInput === opts.groupSeparator || positionInput === opts.negationSymbol.front || positionInput === opts.negationSymbol.back;
       
  2413                 return canClear;
       
  2414             },
       
  2415             onKeyDown: function(e, buffer, caretPos, opts) {
       
  2416                 var $input = $(this);
       
  2417                 if (e.ctrlKey) switch (e.keyCode) {
       
  2418                   case Inputmask.keyCode.UP:
       
  2419                     $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger("setvalue");
       
  2420                     break;
       
  2421 
       
  2422                   case Inputmask.keyCode.DOWN:
       
  2423                     $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger("setvalue");
       
  2424                 }
       
  2425             }
       
  2426         },
       
  2427         currency: {
       
  2428             prefix: "$ ",
       
  2429             groupSeparator: ",",
       
  2430             alias: "numeric",
       
  2431             placeholder: "0",
       
  2432             autoGroup: !0,
       
  2433             digits: 2,
       
  2434             digitsOptional: !1,
       
  2435             clearMaskOnLostFocus: !1
       
  2436         },
       
  2437         decimal: {
       
  2438             alias: "numeric"
       
  2439         },
       
  2440         integer: {
       
  2441             alias: "numeric",
       
  2442             digits: 0,
       
  2443             radixPoint: ""
       
  2444         },
       
  2445         percentage: {
       
  2446             alias: "numeric",
       
  2447             digits: 2,
       
  2448             radixPoint: ".",
       
  2449             placeholder: "0",
       
  2450             autoGroup: !1,
       
  2451             min: 0,
       
  2452             max: 100,
       
  2453             suffix: " %",
       
  2454             allowPlus: !1,
       
  2455             allowMinus: !1
       
  2456         }
       
  2457     }), Inputmask;
       
  2458 }(jQuery, Inputmask), function($, Inputmask) {
       
  2459     return Inputmask.extendAliases({
       
  2460         phone: {
       
  2461             url: "phone-codes/phone-codes.js",
       
  2462             countrycode: "",
       
  2463             phoneCodeCache: {},
       
  2464             mask: function(opts) {
       
  2465                 if (void 0 === opts.phoneCodeCache[opts.url]) {
       
  2466                     var maskList = [];
       
  2467                     opts.definitions["#"] = opts.definitions[9], $.ajax({
       
  2468                         url: opts.url,
       
  2469                         async: !1,
       
  2470                         type: "get",
       
  2471                         dataType: "json",
       
  2472                         success: function(response) {
       
  2473                             maskList = response;
       
  2474                         },
       
  2475                         error: function(xhr, ajaxOptions, thrownError) {
       
  2476                             alert(thrownError + " - " + opts.url);
       
  2477                         }
       
  2478                     }), opts.phoneCodeCache[opts.url] = maskList.sort(function(a, b) {
       
  2479                         return (a.mask || a) < (b.mask || b) ? -1 : 1;
       
  2480                     });
       
  2481                 }
       
  2482                 return opts.phoneCodeCache[opts.url];
       
  2483             },
       
  2484             keepStatic: !1,
       
  2485             nojumps: !0,
       
  2486             nojumpsThreshold: 1,
       
  2487             onBeforeMask: function(value, opts) {
       
  2488                 var processedValue = value.replace(/^0{1,2}/, "").replace(/[\s]/g, "");
       
  2489                 return (processedValue.indexOf(opts.countrycode) > 1 || -1 === processedValue.indexOf(opts.countrycode)) && (processedValue = "+" + opts.countrycode + processedValue), 
       
  2490                 processedValue;
       
  2491             }
       
  2492         },
       
  2493         phonebe: {
       
  2494             alias: "phone",
       
  2495             url: "phone-codes/phone-be.js",
       
  2496             countrycode: "32",
       
  2497             nojumpsThreshold: 4
       
  2498         }
       
  2499     }), Inputmask;
       
  2500 }(jQuery, Inputmask), function($, Inputmask) {
       
  2501     return Inputmask.extendAliases({
       
  2502         Regex: {
       
  2503             mask: "r",
       
  2504             greedy: !1,
       
  2505             repeat: "*",
       
  2506             regex: null,
       
  2507             regexTokens: null,
       
  2508             tokenizer: /\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,
       
  2509             quantifierFilter: /[0-9]+[^,]/,
       
  2510             isComplete: function(buffer, opts) {
       
  2511                 return new RegExp(opts.regex).test(buffer.join(""));
       
  2512             },
       
  2513             definitions: {
       
  2514                 r: {
       
  2515                     validator: function(chrs, maskset, pos, strict, opts) {
       
  2516                         function RegexToken(isGroup, isQuantifier) {
       
  2517                             this.matches = [], this.isGroup = isGroup || !1, this.isQuantifier = isQuantifier || !1, 
       
  2518                             this.quantifier = {
       
  2519                                 min: 1,
       
  2520                                 max: 1
       
  2521                             }, this.repeaterPart = void 0;
       
  2522                         }
       
  2523                         function analyseRegex() {
       
  2524                             var match, m, currentToken = new RegexToken(), opengroups = [];
       
  2525                             for (opts.regexTokens = []; match = opts.tokenizer.exec(opts.regex); ) switch (m = match[0], 
       
  2526                             m.charAt(0)) {
       
  2527                               case "(":
       
  2528                                 opengroups.push(new RegexToken(!0));
       
  2529                                 break;
       
  2530 
       
  2531                               case ")":
       
  2532                                 groupToken = opengroups.pop(), opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(groupToken) : currentToken.matches.push(groupToken);
       
  2533                                 break;
       
  2534 
       
  2535                               case "{":
       
  2536                               case "+":
       
  2537                               case "*":
       
  2538                                 var quantifierToken = new RegexToken(!1, !0);
       
  2539                                 m = m.replace(/[{}]/g, "");
       
  2540                                 var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
       
  2541                                 if (quantifierToken.quantifier = {
       
  2542                                     min: mq0,
       
  2543                                     max: mq1
       
  2544                                 }, opengroups.length > 0) {
       
  2545                                     var matches = opengroups[opengroups.length - 1].matches;
       
  2546                                     match = matches.pop(), match.isGroup || (groupToken = new RegexToken(!0), groupToken.matches.push(match), 
       
  2547                                     match = groupToken), matches.push(match), matches.push(quantifierToken);
       
  2548                                 } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new RegexToken(!0), 
       
  2549                                 groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), 
       
  2550                                 currentToken.matches.push(quantifierToken);
       
  2551                                 break;
       
  2552 
       
  2553                               default:
       
  2554                                 opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(m) : currentToken.matches.push(m);
       
  2555                             }
       
  2556                             currentToken.matches.length > 0 && opts.regexTokens.push(currentToken);
       
  2557                         }
       
  2558                         function validateRegexToken(token, fromGroup) {
       
  2559                             var isvalid = !1;
       
  2560                             fromGroup && (regexPart += "(", openGroupCount++);
       
  2561                             for (var mndx = 0; mndx < token.matches.length; mndx++) {
       
  2562                                 var matchToken = token.matches[mndx];
       
  2563                                 if (matchToken.isGroup === !0) isvalid = validateRegexToken(matchToken, !0); else if (matchToken.isQuantifier === !0) {
       
  2564                                     var crrntndx = $.inArray(matchToken, token.matches), matchGroup = token.matches[crrntndx - 1], regexPartBak = regexPart;
       
  2565                                     if (isNaN(matchToken.quantifier.max)) {
       
  2566                                         for (;matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length && !(isvalid = validateRegexToken(matchGroup, !0)); ) ;
       
  2567                                         isvalid = isvalid || validateRegexToken(matchGroup, !0), isvalid && (matchToken.repeaterPart = regexPart), 
       
  2568                                         regexPart = regexPartBak + matchToken.quantifier.max;
       
  2569                                     } else {
       
  2570                                         for (var i = 0, qm = matchToken.quantifier.max - 1; qm > i && !(isvalid = validateRegexToken(matchGroup, !0)); i++) ;
       
  2571                                         regexPart = regexPartBak + "{" + matchToken.quantifier.min + "," + matchToken.quantifier.max + "}";
       
  2572                                     }
       
  2573                                 } else if (void 0 !== matchToken.matches) for (var k = 0; k < matchToken.length && !(isvalid = validateRegexToken(matchToken[k], fromGroup)); k++) ; else {
       
  2574                                     var testExp;
       
  2575                                     if ("[" == matchToken.charAt(0)) {
       
  2576                                         testExp = regexPart, testExp += matchToken;
       
  2577                                         for (var j = 0; openGroupCount > j; j++) testExp += ")";
       
  2578                                         var exp = new RegExp("^(" + testExp + ")$");
       
  2579                                         isvalid = exp.test(bufferStr);
       
  2580                                     } else for (var l = 0, tl = matchToken.length; tl > l; l++) if ("\\" !== matchToken.charAt(l)) {
       
  2581                                         testExp = regexPart, testExp += matchToken.substr(0, l + 1), testExp = testExp.replace(/\|$/, "");
       
  2582                                         for (var j = 0; openGroupCount > j; j++) testExp += ")";
       
  2583                                         var exp = new RegExp("^(" + testExp + ")$");
       
  2584                                         if (isvalid = exp.test(bufferStr)) break;
       
  2585                                     }
       
  2586                                     regexPart += matchToken;
       
  2587                                 }
       
  2588                                 if (isvalid) break;
       
  2589                             }
       
  2590                             return fromGroup && (regexPart += ")", openGroupCount--), isvalid;
       
  2591                         }
       
  2592                         var bufferStr, groupToken, cbuffer = maskset.buffer.slice(), regexPart = "", isValid = !1, openGroupCount = 0;
       
  2593                         null === opts.regexTokens && analyseRegex(), cbuffer.splice(pos, 0, chrs), bufferStr = cbuffer.join("");
       
  2594                         for (var i = 0; i < opts.regexTokens.length; i++) {
       
  2595                             var regexToken = opts.regexTokens[i];
       
  2596                             if (isValid = validateRegexToken(regexToken, regexToken.isGroup)) break;
       
  2597                         }
       
  2598                         return isValid;
       
  2599                     },
       
  2600                     cardinality: 1
       
  2601                 }
       
  2602             }
       
  2603         }
       
  2604     }), Inputmask;
       
  2605 }(jQuery, Inputmask);