text: (function(factory){if(typeof define==="function"&&define.amd){define("inputmask",["inputmask.dependencyLib"],factory);}else if(typeof exports==="object"){module.exports=factory(require("./inputmask.dependencyLib"));}else{factory(window.dependencyLib||jQuery);}}
  (function($){var ua=navigator.userAgent,mobile=/mobile/i.test(ua),iemobile=/iemobile/i.test(ua),iphone=/iphone/i.test(ua)&&!iemobile,android=/android/i.test(ua)&&!iemobile;function Inputmask(alias,options){if(!(this instanceof Inputmask)){return new Inputmask(alias,options);}
  if($.isPlainObject(alias)){options=alias;}else{options=options||{};options.alias=alias;}
  this.el=undefined;this.opts=$.extend(true,{},this.defaults,options);this.maskset=undefined;this.noMasksCache=options&&options.definitions!==undefined;this.userOptions=options||{};this.events={};this.dataAttribute="data-inputmask";this.isRTL=this.opts.numericInput;resolveAlias(this.opts.alias,options,this.opts);}
  Inputmask.prototype={defaults:{placeholder:"_",optionalmarker:{start:"[",end:"]"},quantifiermarker:{start:"{",end:"}"},groupmarker:{start:"(",end:")"},alternatormarker:"|",escapeChar:"\\",mask:null,oncomplete:$.noop,onincomplete:$.noop,oncleared:$.noop,repeat:0,greedy:true,autoUnmask:false,removeMaskOnSubmit:false,clearMaskOnLostFocus:true,insertMode:true,clearIncomplete:false,aliases:{},alias:null,onKeyDown:$.noop,onBeforeMask:null,onBeforePaste:function(pastedValue,opts){return $.isFunction(opts.onBeforeMask)?opts.onBeforeMask(pastedValue,opts):pastedValue;},onBeforeWrite:null,onUnMask:null,showMaskOnFocus:true,showMaskOnHover:true,onKeyValidation:$.noop,skipOptionalPartCharacter:" ",showTooltip:false,tooltip:undefined,numericInput:false,rightAlign:false,undoOnEscape:true,radixPoint:"",radixPointDefinitionSymbol:undefined,groupSeparator:"",keepStatic:null,positionCaretOnTab:true,tabThrough:false,supportsInputType:["text","tel","password"],definitions:{"9":{validator:"[0-9]",cardinality:1,definitionSymbol:"*"},"a":{validator:"[A-Za-z\u0410-\u044F\u0401\u0451\u00C0-\u00FF\u00B5]",cardinality:1,definitionSymbol:"*"},"*":{validator:"[0-9A-Za-z\u0410-\u044F\u0401\u0451\u00C0-\u00FF\u00B5]",cardinality:1}},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],isComplete:null,canClearPosition:$.noop,postValidation:null,staticDefinitionSymbol:undefined,jitMasking:false,nullable:true,inputEventOnly:false,noValuePatching:false,positionCaretOnClick:"lvp",casing:null,inputmode:"verbatim",colorMask:false,androidHack:false},masksCache:{},mask:function(elems){var that=this;function importAttributeOptions(npt,opts,userOptions,dataAttribute){var attrOptions=npt.getAttribute(dataAttribute),option,dataoptions,optionData,p;function importOption(option,optionData){optionData=optionData!==undefined?optionData:npt.getAttribute(dataAttribute+"-"+option);if(optionData!==null){if(typeof optionData==="string"){if(option.indexOf("on")===0)optionData=window[optionData];else if(optionData==="false")optionData=false;else if(optionData==="true")optionData=true;}
  userOptions[option]=optionData;}}
  if(attrOptions&&attrOptions!==""){attrOptions=attrOptions.replace(new RegExp("'","g"),'"');dataoptions=JSON.parse("{"+attrOptions+"}");}
  if(dataoptions){optionData=undefined;for(p in dataoptions){if(p.toLowerCase()==="alias"){optionData=dataoptions[p];break;}}}
  importOption("alias",optionData);if(userOptions.alias){resolveAlias(userOptions.alias,userOptions,opts);}
  for(option in opts){if(dataoptions){optionData=undefined;for(p in dataoptions){if(p.toLowerCase()===option.toLowerCase()){optionData=dataoptions[p];break;}}}
  importOption(option,optionData);}
  $.extend(true,opts,userOptions);return opts;}
  if(typeof elems==="string"){elems=document.getElementById(elems)||document.querySelectorAll(elems);}
  elems=elems.nodeName?[elems]:elems;$.each(elems,function(ndx,el){var scopedOpts=$.extend(true,{},that.opts);importAttributeOptions(el,scopedOpts,$.extend(true,{},that.userOptions),that.dataAttribute);var maskset=generateMaskSet(scopedOpts,that.noMasksCache);if(maskset!==undefined){if(el.inputmask!==undefined){el.inputmask.remove();}
  el.inputmask=new Inputmask();el.inputmask.opts=scopedOpts;el.inputmask.noMasksCache=that.noMasksCache;el.inputmask.userOptions=$.extend(true,{},that.userOptions);el.inputmask.el=el;el.inputmask.maskset=maskset;$.data(el,"_inputmask_opts",scopedOpts);maskScope.call(el.inputmask,{"action":"mask"});}});return elems&&elems[0]?(elems[0].inputmask||this):this;},option:function(options,noremask){if(typeof options==="string"){return this.opts[options];}else if(typeof options==="object"){$.extend(this.userOptions,options);if(this.el&&noremask!==true){this.mask(this.el);}
  return this;}},unmaskedvalue:function(value){this.maskset=this.maskset||generateMaskSet(this.opts,this.noMasksCache);return maskScope.call(this,{"action":"unmaskedvalue","value":value});},remove:function(){return maskScope.call(this,{"action":"remove"});},getemptymask:function(){this.maskset=this.maskset||generateMaskSet(this.opts,this.noMasksCache);return maskScope.call(this,{"action":"getemptymask"});},hasMaskedValue:function(){return!this.opts.autoUnmask;},isComplete:function(){this.maskset=this.maskset||generateMaskSet(this.opts,this.noMasksCache);return maskScope.call(this,{"action":"isComplete"});},getmetadata:function(){this.maskset=this.maskset||generateMaskSet(this.opts,this.noMasksCache);return maskScope.call(this,{"action":"getmetadata"});},isValid:function(value){this.maskset=this.maskset||generateMaskSet(this.opts,this.noMasksCache);return maskScope.call(this,{"action":"isValid","value":value});},format:function(value,metadata){this.maskset=this.maskset||generateMaskSet(this.opts,this.noMasksCache);return maskScope.call(this,{"action":"format","value":value,"metadata":metadata});},analyseMask:function(mask,opts){var tokenizer=/(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g,escaped=false,currentToken=new MaskToken(),match,m,openenings=[],maskTokens=[],openingToken,currentOpeningToken,alternator,lastMatch,groupToken;function MaskToken(isGroup,isOptional,isQuantifier,isAlternator){this.matches=[];this.isGroup=isGroup||false;this.isOptional=isOptional||false;this.isQuantifier=isQuantifier||false;this.isAlternator=isAlternator||false;this.quantifier={min:1,max:1};}
  function insertTestDefinition(mtoken,element,position){var maskdef=opts.definitions[element];position=position!==undefined?position:mtoken.matches.length;var prevMatch=mtoken.matches[position-1];if(maskdef&&!escaped){maskdef.placeholder=$.isFunction(maskdef.placeholder)?maskdef.placeholder(opts):maskdef.placeholder;var prevalidators=maskdef.prevalidator,prevalidatorsL=prevalidators?prevalidators.length:0;for(var i=1;i<maskdef.cardinality;i++){var prevalidator=prevalidatorsL>=i?prevalidators[i-1]:[],validator=prevalidator.validator,cardinality=prevalidator.cardinality;mtoken.matches.splice(position++,0,{fn:validator?typeof validator==="string"?new RegExp(validator):new function(){this.test=validator;}:new RegExp("."),cardinality:cardinality?cardinality:1,optionality:mtoken.isOptional,newBlockMarker:prevMatch===undefined||prevMatch.def!==(maskdef.definitionSymbol||element),casing:maskdef.casing,def:maskdef.definitionSymbol||element,placeholder:maskdef.placeholder,nativeDef:element});prevMatch=mtoken.matches[position-1];}
  mtoken.matches.splice(position++,0,{fn:maskdef.validator?typeof maskdef.validator=="string"?new RegExp(maskdef.validator):new function(){this.test=maskdef.validator;}:new RegExp("."),cardinality:maskdef.cardinality,optionality:mtoken.isOptional,newBlockMarker:prevMatch===undefined||prevMatch.def!==(maskdef.definitionSymbol||element),casing:maskdef.casing,def:maskdef.definitionSymbol||element,placeholder:maskdef.placeholder,nativeDef:element});}else{mtoken.matches.splice(position++,0,{fn:null,cardinality:0,optionality:mtoken.isOptional,newBlockMarker:prevMatch===undefined||prevMatch.def!==element,casing:null,def:opts.staticDefinitionSymbol||element,placeholder:opts.staticDefinitionSymbol!==undefined?element:undefined,nativeDef:element});escaped=false;}}
  function verifyGroupMarker(lastMatch,isOpenGroup){if(lastMatch&&lastMatch.isGroup){lastMatch.isGroup=false;insertTestDefinition(lastMatch,opts.groupmarker.start,0);if(isOpenGroup!==true){insertTestDefinition(lastMatch,opts.groupmarker.end);}}}
  function maskCurrentToken(m,currentToken,lastMatch,extraCondition){if(currentToken.matches.length>0&&(extraCondition===undefined||extraCondition)){lastMatch=currentToken.matches[currentToken.matches.length-1];verifyGroupMarker(lastMatch);}
  insertTestDefinition(currentToken,m);}
  function defaultCase(){if(openenings.length>0){currentOpeningToken=openenings[openenings.length-1];maskCurrentToken(m,currentOpeningToken,lastMatch,!currentOpeningToken.isAlternator);if(currentOpeningToken.isAlternator){alternator=openenings.pop();for(var mndx=0;mndx<alternator.matches.length;mndx++){alternator.matches[mndx].isGroup=false;}
  if(openenings.length>0){currentOpeningToken=openenings[openenings.length-1];currentOpeningToken.matches.push(alternator);}else{currentToken.matches.push(alternator);}}}else{maskCurrentToken(m,currentToken,lastMatch);}}
  function reverseTokens(maskToken){function reverseStatic(st){if(st===opts.optionalmarker.start)st=opts.optionalmarker.end;else if(st===opts.optionalmarker.end)st=opts.optionalmarker.start;else if(st===opts.groupmarker.start)st=opts.groupmarker.end;else if(st===opts.groupmarker.end)st=opts.groupmarker.start;return st;}
  maskToken.matches=maskToken.matches.reverse();for(var match in maskToken.matches){var intMatch=parseInt(match);if(maskToken.matches[match].isQuantifier&&maskToken.matches[intMatch+1]&&maskToken.matches[intMatch+1].isGroup){var qt=maskToken.matches[match];maskToken.matches.splice(match,1);maskToken.matches.splice(intMatch+1,0,qt);}
  if(maskToken.matches[match].matches!==undefined){maskToken.matches[match]=reverseTokens(maskToken.matches[match]);}else{maskToken.matches[match]=reverseStatic(maskToken.matches[match]);}}
  return maskToken;}
  while(match=tokenizer.exec(mask)){m=match[0];if(escaped){defaultCase();continue;}
  switch(m.charAt(0)){case opts.escapeChar:escaped=true;break;case opts.optionalmarker.end:case opts.groupmarker.end:openingToken=openenings.pop();if(openingToken!==undefined){if(openenings.length>0){currentOpeningToken=openenings[openenings.length-1];currentOpeningToken.matches.push(openingToken);if(currentOpeningToken.isAlternator){alternator=openenings.pop();for(var mndx=0;mndx<alternator.matches.length;mndx++){alternator.matches[mndx].isGroup=false;}
  if(openenings.length>0){currentOpeningToken=openenings[openenings.length-1];currentOpeningToken.matches.push(alternator);}else{currentToken.matches.push(alternator);}}}else{currentToken.matches.push(openingToken);}}else defaultCase();break;case opts.optionalmarker.start:verifyGroupMarker(currentToken.matches[currentToken.matches.length-1]);openenings.push(new MaskToken(false,true));break;case opts.groupmarker.start:verifyGroupMarker(currentToken.matches[currentToken.matches.length-1]);openenings.push(new MaskToken(true));break;case opts.quantifiermarker.start:var quantifier=new MaskToken(false,false,true);m=m.replace(/[{}]/g,"");var mq=m.split(","),mq0=isNaN(mq[0])?mq[0]:parseInt(mq[0]),mq1=mq.length===1?mq0:(isNaN(mq[1])?mq[1]:parseInt(mq[1]));if(mq1==="*"||mq1==="+"){mq0=mq1==="*"?0:1;}
  quantifier.quantifier={min:mq0,max:mq1};if(openenings.length>0){var matches=openenings[openenings.length-1].matches;match=matches.pop();if(!match.isGroup){groupToken=new MaskToken(true);groupToken.matches.push(match);match=groupToken;}
  matches.push(match);matches.push(quantifier);}else{match=currentToken.matches.pop();if(!match.isGroup){groupToken=new MaskToken(true);groupToken.matches.push(match);match=groupToken;}
  currentToken.matches.push(match);currentToken.matches.push(quantifier);}
  break;case opts.alternatormarker:if(openenings.length>0){currentOpeningToken=openenings[openenings.length-1];lastMatch=currentOpeningToken.matches.pop();}else{lastMatch=currentToken.matches.pop();}
  if(lastMatch.isAlternator){openenings.push(lastMatch);}else{alternator=new MaskToken(false,false,false,true);alternator.matches.push(lastMatch);openenings.push(alternator);}
  break;default:defaultCase();}}
  while(openenings.length>0){openingToken=openenings.pop();verifyGroupMarker(openingToken,true);currentToken.matches.push(openingToken);}
  if(currentToken.matches.length>0){lastMatch=currentToken.matches[currentToken.matches.length-1];verifyGroupMarker(lastMatch);maskTokens.push(currentToken);}
  if(opts.numericInput){reverseTokens(maskTokens[0]);}
  return maskTokens;},};Inputmask.extendDefaults=function(options){$.extend(true,Inputmask.prototype.defaults,options);};Inputmask.extendDefinitions=function(definition){$.extend(true,Inputmask.prototype.defaults.definitions,definition);};Inputmask.extendAliases=function(alias){$.extend(true,Inputmask.prototype.defaults.aliases,alias);};Inputmask.format=function(value,options,metadata){return Inputmask(options).format(value,metadata);};Inputmask.unmask=function(value,options){return Inputmask(options).unmaskedvalue(value);};Inputmask.isValid=function(value,options){return Inputmask(options).isValid(value);};Inputmask.remove=function(elems){$.each(elems,function(ndx,el){if(el.inputmask)el.inputmask.remove();});};Inputmask.escapeRegex=function(str){var specials=["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^"];return str.replace(new RegExp("(\\"+specials.join("|\\")+")","gim"),"\\$1");};Inputmask.keyCode={ALT:18,BACKSPACE:8,BACKSPACE_SAFARI:127,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91,X:88};function resolveAlias(aliasStr,options,opts){var aliasDefinition=opts.aliases[aliasStr];if(aliasDefinition){if(aliasDefinition.alias)resolveAlias(aliasDefinition.alias,undefined,opts);$.extend(true,opts,aliasDefinition);$.extend(true,opts,options);return true;}else
  if(opts.mask===null){opts.mask=aliasStr;}
  return false;}
  function generateMaskSet(opts,nocache){function generateMask(mask,metadata,opts){if(mask===null||mask===""){return undefined;}else{if(mask.length===1&&opts.greedy===false&&opts.repeat!==0){opts.placeholder="";}
  if(opts.repeat>0||opts.repeat==="*"||opts.repeat==="+"){var repeatStart=opts.repeat==="*"?0:(opts.repeat==="+"?1:opts.repeat);mask=opts.groupmarker.start+mask+opts.groupmarker.end+opts.quantifiermarker.start+repeatStart+","+opts.repeat+opts.quantifiermarker.end;}
  var masksetDefinition;if(Inputmask.prototype.masksCache[mask]===undefined||nocache===true){masksetDefinition={"mask":mask,"maskToken":Inputmask.prototype.analyseMask(mask,opts),"validPositions":{},"_buffer":undefined,"buffer":undefined,"tests":{},"metadata":metadata,maskLength:undefined};if(nocache!==true){Inputmask.prototype.masksCache[opts.numericInput?mask.split("").reverse().join(""):mask]=masksetDefinition;masksetDefinition=$.extend(true,{},Inputmask.prototype.masksCache[opts.numericInput?mask.split("").reverse().join(""):mask]);}}else masksetDefinition=$.extend(true,{},Inputmask.prototype.masksCache[opts.numericInput?mask.split("").reverse().join(""):mask]);return masksetDefinition;}}
  var ms;if($.isFunction(opts.mask)){opts.mask=opts.mask(opts);}
  if($.isArray(opts.mask)){if(opts.mask.length>1){opts.keepStatic=opts.keepStatic===null?true:opts.keepStatic;var altMask=opts.groupmarker.start;$.each(opts.numericInput?opts.mask.reverse():opts.mask,function(ndx,msk){if(altMask.length>1){altMask+=opts.groupmarker.end+opts.alternatormarker+opts.groupmarker.start;}
  if(msk.mask!==undefined&&!$.isFunction(msk.mask)){altMask+=msk.mask;}else{altMask+=msk;}});altMask+=opts.groupmarker.end;return generateMask(altMask,opts.mask,opts);}else opts.mask=opts.mask.pop();}
  if(opts.mask){if(opts.mask.mask!==undefined&&!$.isFunction(opts.mask.mask)){ms=generateMask(opts.mask.mask,opts.mask,opts);}else{ms=generateMask(opts.mask,opts.mask,opts);}}
  return ms;};function maskScope(actionObj,maskset,opts){maskset=maskset||this.maskset;opts=opts||this.opts;var el=this.el,isRTL=this.isRTL,undoValue,$el,skipKeyPressEvent=false,skipInputEvent=false,composition=false,ignorable=false,maxLength,mouseEnter=false,colorMask;function getMaskTemplate(baseOnInput,minimalPos,includeMode){minimalPos=minimalPos||0;var maskTemplate=[],ndxIntlzr,pos=0,test,testPos,lvp=getLastValidPosition();maxLength=el!==undefined?el.maxLength:undefined;if(maxLength===-1)maxLength=undefined;do{if(baseOnInput===true&&getMaskSet().validPositions[pos]){testPos=getMaskSet().validPositions[pos];test=testPos.match;ndxIntlzr=testPos.locator.slice();maskTemplate.push(includeMode===true?testPos.input:includeMode===false?test.nativeDef:getPlaceholder(pos,test));}else{testPos=getTestTemplate(pos,ndxIntlzr,pos-1);test=testPos.match;ndxIntlzr=testPos.locator.slice();if(opts.jitMasking===false||pos<lvp||(Number.isFinite(opts.jitMasking)&&opts.jitMasking>pos)){maskTemplate.push(includeMode===false?test.nativeDef:getPlaceholder(pos,test));}}
  pos++;}while((maxLength===undefined||pos<maxLength)&&(test.fn!==null||test.def!=="")||minimalPos>pos);if(maskTemplate[maskTemplate.length-1]===""){maskTemplate.pop();}
  getMaskSet().maskLength=pos+1;return maskTemplate;}
  function getMaskSet(){return maskset;}
  function resetMaskSet(soft){var maskset=getMaskSet();maskset.buffer=undefined;if(soft!==true){maskset._buffer=undefined;maskset.validPositions={};maskset.p=0;}}
  function getLastValidPosition(closestTo,strict,validPositions){var before=-1,after=-1,valids=validPositions||getMaskSet().validPositions;if(closestTo===undefined)closestTo=-1;for(var posNdx in valids){var psNdx=parseInt(posNdx);if(valids[psNdx]&&(strict||valids[psNdx].match.fn!==null)){if(psNdx<=closestTo)before=psNdx;if(psNdx>=closestTo)after=psNdx;}}
  return(before!==-1&&(closestTo-before)>1)||after<closestTo?before:after;}
  function stripValidPositions(start,end,nocheck,strict){function IsEnclosedStatic(pos){var posMatch=getMaskSet().validPositions[pos];if(posMatch!==undefined&&posMatch.match.fn===null){var prevMatch=getMaskSet().validPositions[pos-1],nextMatch=getMaskSet().validPositions[pos+1];return prevMatch!==undefined&&nextMatch!==undefined;}
  return false;}
  var i,startPos=start,positionsClone=$.extend(true,{},getMaskSet().validPositions),needsValidation=false;getMaskSet().p=start;for(i=end-1;i>=startPos;i--){if(getMaskSet().validPositions[i]!==undefined){if(nocheck===true||((getMaskSet().validPositions[i].match.optionality||!IsEnclosedStatic(i))&&opts.canClearPosition(getMaskSet(),i,getLastValidPosition(),strict,opts)!==false)){delete getMaskSet().validPositions[i];}}}
  resetMaskSet(true);for(i=startPos+1;i<=getLastValidPosition();){while(getMaskSet().validPositions[startPos]!==undefined)startPos++;var s=getMaskSet().validPositions[startPos];if(i<startPos)i=startPos+1;if((getMaskSet().validPositions[i]!==undefined||!isMask(i))&&s===undefined){var t=getTestTemplate(i);if(needsValidation===false&&positionsClone[startPos]&&positionsClone[startPos].match.def===t.match.def){getMaskSet().validPositions[startPos]=$.extend(true,{},positionsClone[startPos]);getMaskSet().validPositions[startPos].input=t.input;delete getMaskSet().validPositions[i];i++;}else if(positionCanMatchDefinition(startPos,t.match.def)){if(isValid(startPos,t.input||getPlaceholder(i),true)!==false){delete getMaskSet().validPositions[i];i++;needsValidation=true;}}else if(!isMask(i)){i++;startPos--;}
  startPos++;}else i++;}
  resetMaskSet(true);}
  function determineTestTemplate(tests,guessNextBest){var testPos,testPositions=tests,lvp=getLastValidPosition(),lvTest=getMaskSet().validPositions[lvp]||getTests(0)[0],lvTestAltArr=(lvTest.alternation!==undefined)?lvTest.locator[lvTest.alternation].toString().split(","):[];for(var ndx=0;ndx<testPositions.length;ndx++){testPos=testPositions[ndx];if(testPos.match&&(((opts.greedy&&testPos.match.optionalQuantifier!==true)||(testPos.match.optionality===false||testPos.match.newBlockMarker===false)&&testPos.match.optionalQuantifier!==true)&&((lvTest.alternation===undefined||lvTest.alternation!==testPos.alternation)||(testPos.locator[lvTest.alternation]!==undefined&&checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","),lvTestAltArr))))){if(guessNextBest!==true||(testPos.match.fn===null&&!/[0-9a-bA-Z]/.test(testPos.match.def)))
  break;}}
  return testPos;}
  function getTestTemplate(pos,ndxIntlzr,tstPs){return getMaskSet().validPositions[pos]||determineTestTemplate(getTests(pos,ndxIntlzr?ndxIntlzr.slice():ndxIntlzr,tstPs));}
  function getTest(pos){if(getMaskSet().validPositions[pos]){return getMaskSet().validPositions[pos];}
  return getTests(pos)[0];}
  function positionCanMatchDefinition(pos,def){var valid=false,tests=getTests(pos);for(var tndx=0;tndx<tests.length;tndx++){if(tests[tndx].match&&tests[tndx].match.def===def){valid=true;break;}}
  return valid;}
  function getTests(pos,ndxIntlzr,tstPs){var maskTokens=getMaskSet().maskToken,testPos=ndxIntlzr?tstPs:0,ndxInitializer=ndxIntlzr?ndxIntlzr.slice():[0],matches=[],insertStop=false,latestMatch,cacheDependency=ndxIntlzr?ndxIntlzr.join(""):"";function resolveTestFromToken(maskToken,ndxInitializer,loopNdx,quantifierRecurse){function handleMatch(match,loopNdx,quantifierRecurse){function isFirstMatch(latestMatch,tokenGroup){var firstMatch=$.inArray(latestMatch,tokenGroup.matches)===0;if(!firstMatch){$.each(tokenGroup.matches,function(ndx,match){if(match.isQuantifier===true){firstMatch=isFirstMatch(latestMatch,tokenGroup.matches[ndx-1]);if(firstMatch)return false;}});}
  return firstMatch;}
  function resolveNdxInitializer(pos,alternateNdx,targetAlternation){var bestMatch,indexPos;if(getMaskSet().tests[pos]||getMaskSet().validPositions[pos]){$.each(getMaskSet().tests[pos]||[getMaskSet().validPositions[pos]],function(ndx,lmnt){var alternation=targetAlternation!==undefined?targetAlternation:lmnt.alternation,ndxPos=lmnt.locator[alternation]!==undefined?lmnt.locator[alternation].toString().indexOf(alternateNdx):-1;if((indexPos===undefined||ndxPos<indexPos)&&ndxPos!==-1){bestMatch=lmnt;indexPos=ndxPos;}});}
  return bestMatch?bestMatch.locator.slice((targetAlternation!==undefined?targetAlternation:bestMatch.alternation)+1):targetAlternation!==undefined?resolveNdxInitializer(pos,alternateNdx):undefined;}
  function staticCanMatchDefinition(source,target){if(source.match.fn===null&&target.match.fn!==null){return target.match.fn.test(source.match.def,getMaskSet(),pos,false,opts,false);}
  return false;}
  if(testPos>10000){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;}
  if(testPos===pos&&match.matches===undefined){matches.push({"match":match,"locator":loopNdx.reverse(),"cd":cacheDependency});return true;}else if(match.matches!==undefined){if(match.isGroup&&quantifierRecurse!==match){match=handleMatch(maskToken.matches[$.inArray(match,maskToken.matches)+1],loopNdx);if(match)return true;}else if(match.isOptional){var optionalToken=match;match=resolveTestFromToken(match,ndxInitializer,loopNdx,quantifierRecurse);if(match){latestMatch=matches[matches.length-1].match;if(isFirstMatch(latestMatch,optionalToken)){insertStop=true;testPos=pos;}else return true;}}else if(match.isAlternator){var alternateToken=match,malternateMatches=[],maltMatches,currentMatches=matches.slice(),loopNdxCnt=loopNdx.length;var altIndex=ndxInitializer.length>0?ndxInitializer.shift():-1;if(altIndex===-1||typeof altIndex==="string"){var currentPos=testPos,ndxInitializerClone=ndxInitializer.slice(),altIndexArr=[],amndx;if(typeof altIndex=="string"){altIndexArr=altIndex.split(",");}else{for(amndx=0;amndx<alternateToken.matches.length;amndx++){altIndexArr.push(amndx);}}
  for(var ndx=0;ndx<altIndexArr.length;ndx++){amndx=parseInt(altIndexArr[ndx]);matches=[];ndxInitializer=resolveNdxInitializer(testPos,amndx,loopNdxCnt)||ndxInitializerClone.slice();match=handleMatch(alternateToken.matches[amndx]||maskToken.matches[amndx],[amndx].concat(loopNdx),quantifierRecurse)||match;if(match!==true&&match!==undefined&&(altIndexArr[altIndexArr.length-1]<alternateToken.matches.length)){var ntndx=$.inArray(match,maskToken.matches)+1;if(maskToken.matches.length>ntndx){match=handleMatch(maskToken.matches[ntndx],[ntndx].concat(loopNdx.slice(1,loopNdx.length)),quantifierRecurse);if(match){altIndexArr.push(ntndx.toString());$.each(matches,function(ndx,lmnt){lmnt.alternation=loopNdx.length-1;});}}}
  maltMatches=matches.slice();testPos=currentPos;matches=[];for(var ndx1=0;ndx1<maltMatches.length;ndx1++){var altMatch=maltMatches[ndx1],hasMatch=false;altMatch.alternation=altMatch.alternation||loopNdxCnt;for(var ndx2=0;ndx2<malternateMatches.length;ndx2++){var altMatch2=malternateMatches[ndx2];if(typeof altIndex!=="string"||$.inArray(altMatch.locator[altMatch.alternation].toString(),altIndexArr)!==-1){if(altMatch.match.def===altMatch2.match.def||staticCanMatchDefinition(altMatch,altMatch2)){hasMatch=altMatch.match.nativeDef===altMatch2.match.nativeDef;if(altMatch.alternation==altMatch2.alternation&&altMatch2.locator[altMatch2.alternation].toString().indexOf(altMatch.locator[altMatch.alternation])===-1){altMatch2.locator[altMatch2.alternation]=altMatch2.locator[altMatch2.alternation]+","+altMatch.locator[altMatch.alternation];altMatch2.alternation=altMatch.alternation;if(altMatch.match.fn==null){altMatch2.na=altMatch2.na||altMatch.locator[altMatch.alternation].toString();if(altMatch2.na.indexOf(altMatch.locator[altMatch.alternation])===-1)
  altMatch2.na=altMatch2.na+","+altMatch.locator[altMatch.alternation];}}
  break;}}}
  if(!hasMatch){malternateMatches.push(altMatch);}}}
  if(typeof altIndex=="string"){malternateMatches=$.map(malternateMatches,function(lmnt,ndx){if(isFinite(ndx)){var mamatch,alternation=lmnt.alternation,altLocArr=lmnt.locator[alternation].toString().split(",");lmnt.locator[alternation]=undefined;lmnt.alternation=undefined;for(var alndx=0;alndx<altLocArr.length;alndx++){mamatch=$.inArray(altLocArr[alndx],altIndexArr)!==-1;if(mamatch){if(lmnt.locator[alternation]!==undefined){lmnt.locator[alternation]+=",";lmnt.locator[alternation]+=altLocArr[alndx];}else lmnt.locator[alternation]=parseInt(altLocArr[alndx]);lmnt.alternation=alternation;}}
  if(lmnt.locator[alternation]!==undefined)return lmnt;}});}
  matches=currentMatches.concat(malternateMatches);testPos=pos;insertStop=matches.length>0;ndxInitializer=ndxInitializerClone.slice();}else{match=handleMatch(alternateToken.matches[altIndex]||maskToken.matches[altIndex],[altIndex].concat(loopNdx),quantifierRecurse);}
  if(match)return true;}else if(match.isQuantifier&&quantifierRecurse!==maskToken.matches[$.inArray(match,maskToken.matches)-1]){var qt=match;for(var qndx=(ndxInitializer.length>0)?ndxInitializer.shift():0;(qndx<(isNaN(qt.quantifier.max)?qndx+1:qt.quantifier.max))&&testPos<=pos;qndx++){var tokenGroup=maskToken.matches[$.inArray(qt,maskToken.matches)-1];match=handleMatch(tokenGroup,[qndx].concat(loopNdx),tokenGroup);if(match){latestMatch=matches[matches.length-1].match;latestMatch.optionalQuantifier=qndx>(qt.quantifier.min-1);if(isFirstMatch(latestMatch,tokenGroup)){if(qndx>(qt.quantifier.min-1)){insertStop=true;testPos=pos;break;}else return true;}else{return true;}}}}else{match=resolveTestFromToken(match,ndxInitializer,loopNdx,quantifierRecurse);if(match)return true;}}
  else
  testPos++;}
  for(var tndx=(ndxInitializer.length>0?ndxInitializer.shift():0);tndx<maskToken.matches.length;tndx++){if(maskToken.matches[tndx].isQuantifier!==true){var match=handleMatch(maskToken.matches[tndx],[tndx].concat(loopNdx),quantifierRecurse);if(match&&testPos===pos){return match;}else if(testPos>pos){break;}}}}
  function mergeLocators(tests){var locator=[];if(!$.isArray(tests))tests=[tests];if(tests.length>0){if(tests[0].alternation===undefined){locator=determineTestTemplate(tests.slice()).locator.slice();if(locator.length===0)locator=tests[0].locator.slice();}
  else{$.each(tests,function(ndx,tst){if(tst.def!==""){if(locator.length===0)locator=tst.locator.slice();else{for(var i=0;i<locator.length;i++){if(tst.locator[i]&&locator[i].toString().indexOf(tst.locator[i])===-1){locator[i]+=","+tst.locator[i];}}}}});}}
  return locator;}
  function filterTests(tests){if(opts.keepStatic&&pos>0){if(tests.length>1+(tests[tests.length-1].match.def===""?1:0)){if(tests[0].match.optionality!==true&&tests[0].match.optionalQuantifier!==true&&tests[0].match.fn===null&&!/[0-9a-bA-Z]/.test(tests[0].match.def)){return[determineTestTemplate(tests)];}}}
  return tests;}
  if(pos>-1){if(ndxIntlzr===undefined){var previousPos=pos-1,test;while((test=getMaskSet().validPositions[previousPos]||getMaskSet().tests[previousPos])===undefined&&previousPos>-1){previousPos--;}
  if(test!==undefined&&previousPos>-1){ndxInitializer=mergeLocators(test);cacheDependency=ndxInitializer.join("");testPos=previousPos;}}
  if(getMaskSet().tests[pos]&&getMaskSet().tests[pos][0].cd===cacheDependency){return filterTests(getMaskSet().tests[pos]);}
  for(var mtndx=ndxInitializer.shift();mtndx<maskTokens.length;mtndx++){var match=resolveTestFromToken(maskTokens[mtndx],ndxInitializer,[mtndx]);if((match&&testPos===pos)||testPos>pos){break;}}}
  if(matches.length===0||insertStop){matches.push({match:{fn:null,cardinality:0,optionality:true,casing:null,def:"",placeholder:""},locator:[],cd:cacheDependency});}
  if(ndxIntlzr!==undefined&&getMaskSet().tests[pos]){return filterTests($.extend(true,[],matches));}
  getMaskSet().tests[pos]=$.extend(true,[],matches);return filterTests(getMaskSet().tests[pos]);}
  function getBufferTemplate(){if(getMaskSet()._buffer===undefined){getMaskSet()._buffer=getMaskTemplate(false,1);if(getMaskSet().buffer===undefined){getMaskSet()._buffer.slice();}}
  return getMaskSet()._buffer;}
  function getBuffer(noCache){if(getMaskSet().buffer===undefined||noCache===true){getMaskSet().buffer=getMaskTemplate(true,getLastValidPosition(),true);}
  return getMaskSet().buffer;}
  function refreshFromBuffer(start,end,buffer){var i;if(start===true){resetMaskSet();start=0;end=buffer.length;}else{for(i=start;i<end;i++){delete getMaskSet().validPositions[i];}}
  for(i=start;i<end;i++){resetMaskSet(true);if(buffer[i]!==opts.skipOptionalPartCharacter){isValid(i,buffer[i],true,true);}}}
  function casing(elem,test,pos){switch(opts.casing||test.casing){case "upper":elem=elem.toUpperCase();break;case "lower":elem=elem.toLowerCase();break;case "title":var posBefore=getMaskSet().validPositions[pos-1];if(pos===0||posBefore&&posBefore.input===String.fromCharCode(Inputmask.keyCode.SPACE)){elem=elem.toUpperCase();}else{elem=elem.toLowerCase();}
  break;}
  return elem;}
  function checkAlternationMatch(altArr1,altArr2){var altArrC=opts.greedy?altArr2:altArr2.slice(0,1),isMatch=false;for(var alndx=0;alndx<altArr1.length;alndx++){if($.inArray(altArr1[alndx],altArrC)!==-1){isMatch=true;break;}}
  return isMatch;}
  function isValid(pos,c,strict,fromSetValid,fromAlternate){function isSelection(posObj){var selection=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);return selection&&posObj.begin===0&&posObj.end===getMaskSet().maskLength?"full":selection;}
  strict=strict===true;var maskPos=pos;if(pos.begin!==undefined){maskPos=isRTL&&!isSelection(pos)?pos.end:pos.begin;}
  function _isValid(position,c,strict){var rslt=false;$.each(getTests(position),function(ndx,tst){var test=tst.match,loopend=c?1:0,chrs="";for(var i=test.cardinality;i>loopend;i--){chrs+=getBufferElement(position-(i-1));}
  if(c){chrs+=c;}
  getBuffer(true);rslt=test.fn!=null?test.fn.test(chrs,getMaskSet(),position,strict,opts,isSelection(pos)):(c===test.def||c===opts.skipOptionalPartCharacter)&&test.def!==""?{c:test.placeholder||test.def,pos:position}:false;if(rslt!==false){var elem=rslt.c!==undefined?rslt.c:c;elem=(elem===opts.skipOptionalPartCharacter&&test.fn===null)?(test.placeholder||test.def):elem;var validatedPos=position,possibleModifiedBuffer=getBuffer();if(rslt.remove!==undefined){if(!$.isArray(rslt.remove))rslt.remove=[rslt.remove];$.each(rslt.remove.sort(function(a,b){return b-a;}),function(ndx,lmnt){stripValidPositions(lmnt,lmnt+1,true);});}
  if(rslt.insert!==undefined){if(!$.isArray(rslt.insert))rslt.insert=[rslt.insert];$.each(rslt.insert.sort(function(a,b){return a-b;}),function(ndx,lmnt){isValid(lmnt.pos,lmnt.c,true,fromSetValid);});}
  if(rslt.refreshFromBuffer){var refresh=rslt.refreshFromBuffer;strict=true;refreshFromBuffer(refresh===true?refresh:refresh.start,refresh.end,possibleModifiedBuffer);if(rslt.pos===undefined&&rslt.c===undefined){rslt.pos=getLastValidPosition();return false;}
  validatedPos=rslt.pos!==undefined?rslt.pos:position;if(validatedPos!==position){rslt=$.extend(rslt,isValid(validatedPos,elem,true,fromSetValid));return false;}}else if(rslt!==true&&rslt.pos!==undefined&&rslt.pos!==position){validatedPos=rslt.pos;refreshFromBuffer(position,validatedPos,getBuffer().slice());if(validatedPos!==position){rslt=$.extend(rslt,isValid(validatedPos,elem,true));return false;}}
  if(rslt!==true&&rslt.pos===undefined&&rslt.c===undefined){return false;}
  if(ndx>0){resetMaskSet(true);}
  if(!setValidPosition(validatedPos,$.extend({},tst,{"input":casing(elem,test,validatedPos)}),fromSetValid,isSelection(pos))){rslt=false;}
  return false;}});return rslt;}
  function alternate(pos,c,strict){var validPsClone=$.extend(true,{},getMaskSet().validPositions),lastAlt,alternation,isValidRslt=false,altPos,prevAltPos,i,validPos,lAltPos=getLastValidPosition(),altNdxs,decisionPos;prevAltPos=getMaskSet().validPositions[lAltPos];for(;lAltPos>=0;lAltPos--){altPos=getMaskSet().validPositions[lAltPos];if(altPos&&altPos.alternation!==undefined){lastAlt=lAltPos;alternation=getMaskSet().validPositions[lastAlt].alternation;if(prevAltPos.locator[altPos.alternation]!==altPos.locator[altPos.alternation]){break;}
  prevAltPos=altPos;}}
  if(alternation!==undefined){decisionPos=parseInt(lastAlt);var decisionTaker=prevAltPos.locator[prevAltPos.alternation||alternation]!==undefined?prevAltPos.locator[prevAltPos.alternation||alternation]:altNdxs[0];if(decisionTaker.length>0){decisionTaker=decisionTaker.split(",")[0];}
  var possibilityPos=getMaskSet().validPositions[decisionPos],prevPos=getMaskSet().validPositions[decisionPos-1];$.each(getTests(decisionPos,prevPos?prevPos.locator:undefined,decisionPos-1),function(ndx,test){altNdxs=test.locator[alternation]?test.locator[alternation].toString().split(","):[];for(var mndx=0;mndx<altNdxs.length;mndx++){var validInputs=[],staticInputsBeforePos=0,staticInputsBeforePosAlternate=0,verifyValidInput=false;if(decisionTaker<altNdxs[mndx]&&(test.na===undefined||$.inArray(altNdxs[mndx],test.na.split(","))===-1)){getMaskSet().validPositions[decisionPos]=$.extend(true,{},test);var possibilities=getMaskSet().validPositions[decisionPos].locator;getMaskSet().validPositions[decisionPos].locator[alternation]=parseInt(altNdxs[mndx]);if(test.match.fn==null){if(possibilityPos.input!==test.match.def){verifyValidInput=true;if(possibilityPos.generatedInput!==true){validInputs.push(possibilityPos.input);}}
  staticInputsBeforePosAlternate++;getMaskSet().validPositions[decisionPos].generatedInput=!/[0-9a-bA-Z]/.test(test.match.def);getMaskSet().validPositions[decisionPos].input=test.match.def;}else{getMaskSet().validPositions[decisionPos].input=possibilityPos.input;}
  for(i=decisionPos+1;i<getLastValidPosition(undefined,true)+1;i++){validPos=getMaskSet().validPositions[i];if(validPos&&validPos.generatedInput!==true&&/[0-9a-bA-Z]/.test(validPos.input)){validInputs.push(validPos.input);}else if(i<pos)staticInputsBeforePos++;delete getMaskSet().validPositions[i];}
  if(verifyValidInput&&validInputs[0]===test.match.def){validInputs.shift();}
  resetMaskSet(true);isValidRslt=true;while(validInputs.length>0){var input=validInputs.shift();if(input!==opts.skipOptionalPartCharacter){if(!(isValidRslt=isValid(getLastValidPosition(undefined,true)+1,input,false,fromSetValid,true))){break;}}}
  if(isValidRslt){getMaskSet().validPositions[decisionPos].locator=possibilities;var targetLvp=getLastValidPosition(pos)+1;for(i=decisionPos+1;i<getLastValidPosition()+1;i++){validPos=getMaskSet().validPositions[i];if((validPos===undefined||validPos.match.fn==null)&&i<(pos+(staticInputsBeforePosAlternate-staticInputsBeforePos))){staticInputsBeforePosAlternate++;}}
  pos=pos+(staticInputsBeforePosAlternate-staticInputsBeforePos);isValidRslt=isValid(pos>targetLvp?targetLvp:pos,c,strict,fromSetValid,true);}
  if(!isValidRslt){resetMaskSet();getMaskSet().validPositions=$.extend(true,{},validPsClone);}else return false;}}});}
  return isValidRslt;}
  function trackbackAlternations(originalPos,newPos){var vp=getMaskSet().validPositions[newPos];if(vp){var targetLocator=vp.locator,tll=targetLocator.length;for(var ps=originalPos;ps<newPos;ps++){if(getMaskSet().validPositions[ps]===undefined&&!isMask(ps,true)){var tests=getTests(ps),bestMatch=tests[0],equality=-1;$.each(tests,function(ndx,tst){for(var i=0;i<tll;i++){if(tst.locator[i]!==undefined&&checkAlternationMatch(tst.locator[i].toString().split(","),targetLocator[i].toString().split(","))){if(equality<i){equality=i;bestMatch=tst;}}else break;}});setValidPosition(ps,$.extend({},bestMatch,{"input":bestMatch.match.placeholder||bestMatch.match.def}),true);}}}}
  function setValidPosition(pos,validTest,fromSetValid,isSelection){if(isSelection||(opts.insertMode&&getMaskSet().validPositions[pos]!==undefined&&fromSetValid===undefined)){var positionsClone=$.extend(true,{},getMaskSet().validPositions),lvp=getLastValidPosition(undefined,true),i;for(i=pos;i<=lvp;i++){delete getMaskSet().validPositions[i];}
  getMaskSet().validPositions[pos]=$.extend(true,{},validTest);var valid=true,j,vps=getMaskSet().validPositions,needsValidation=false,initialLength=getMaskSet().maskLength;for(i=(j=pos);i<=lvp;i++){var t=positionsClone[i];if(t!==undefined){var posMatch=j;while(posMatch<getMaskSet().maskLength&&((t.match.fn==null&&vps[i]&&(vps[i].match.optionalQuantifier===true||vps[i].match.optionality===true))||t.match.fn!=null)){posMatch++;if(needsValidation===false&&positionsClone[posMatch]&&positionsClone[posMatch].match.def===t.match.def){getMaskSet().validPositions[posMatch]=$.extend(true,{},positionsClone[posMatch]);getMaskSet().validPositions[posMatch].input=t.input;fillMissingNonMask(posMatch);j=posMatch;valid=true;}else if(positionCanMatchDefinition(posMatch,t.match.def)){var result=isValid(posMatch,t.input,true,true);valid=result!==false;j=(result.caret||result.insert)?getLastValidPosition():posMatch;needsValidation=true;}else{valid=t.generatedInput===true;}
  if(getMaskSet().maskLength<initialLength)getMaskSet().maskLength=initialLength;if(valid)break;}}
  if(!valid)break;}
  if(!valid){getMaskSet().validPositions=$.extend(true,{},positionsClone);resetMaskSet(true);return false;}}
  else
  getMaskSet().validPositions[pos]=$.extend(true,{},validTest);;resetMaskSet(true);return true;}
  function fillMissingNonMask(maskPos){for(var pndx=maskPos-1;pndx>-1;pndx--){if(getMaskSet().validPositions[pndx])break;}
  var testTemplate,testsFromPos;for(pndx++;pndx<maskPos;pndx++){if(getMaskSet().validPositions[pndx]===undefined&&(opts.jitMasking===false||opts.jitMasking>pndx)){testsFromPos=getTests(pndx,getTestTemplate(pndx-1).locator,pndx-1).slice();if(testsFromPos[testsFromPos.length-1].match.def==="")testsFromPos.pop();testTemplate=determineTestTemplate(testsFromPos);if(testTemplate&&(testTemplate.match.def===opts.radixPointDefinitionSymbol||!isMask(pndx,true)||($.inArray(opts.radixPoint,getBuffer())<pndx&&testTemplate.match.fn&&testTemplate.match.fn.test(getPlaceholder(pndx),getMaskSet(),pndx,false,opts)))){result=_isValid(pndx,testTemplate.match.placeholder||(testTemplate.match.fn==null?testTemplate.match.def:(getPlaceholder(pndx)!==""?getPlaceholder(pndx):getBuffer()[pndx])),true);if(result!==false){getMaskSet().validPositions[result.pos||pndx].generatedInput=true;}}}}}
  var result=false,positionsClone=$.extend(true,{},getMaskSet().validPositions);fillMissingNonMask(maskPos);if(isSelection(pos)){handleRemove(undefined,Inputmask.keyCode.DELETE,pos);maskPos=getMaskSet().p;}
  if(maskPos<getMaskSet().maskLength){result=_isValid(maskPos,c,strict);if((!strict||fromSetValid===true)&&result===false){var currentPosValid=getMaskSet().validPositions[maskPos];if(currentPosValid&&currentPosValid.match.fn===null&&(currentPosValid.match.def===c||c===opts.skipOptionalPartCharacter)){result={"caret":seekNext(maskPos)};}else if((opts.insertMode||getMaskSet().validPositions[seekNext(maskPos)]===undefined)&&!isMask(maskPos,true)){var testsFromPos=getTests(maskPos).slice();if(testsFromPos[testsFromPos.length-1].match.def==="")testsFromPos.pop();var staticChar=determineTestTemplate(testsFromPos,true);if(staticChar&&staticChar.match.fn===null){staticChar=staticChar.match.placeholder||staticChar.match.def;_isValid(maskPos,staticChar,strict);getMaskSet().validPositions[maskPos].generatedInput=true;}
  for(var nPos=maskPos+1,snPos=seekNext(maskPos);nPos<=snPos;nPos++){result=_isValid(nPos,c,strict);if(result!==false){trackbackAlternations(maskPos,result.pos!==undefined?result.pos:nPos);maskPos=nPos;break;}}}}}
  if(result===false&&opts.keepStatic&&!strict&&fromAlternate!==true){result=alternate(maskPos,c,strict);}
  if(result===true){result={"pos":maskPos};}
  if($.isFunction(opts.postValidation)&&result!==false&&!strict&&fromSetValid!==true){result=opts.postValidation(getBuffer(true),result,opts)?result:false;}
  if(result.pos===undefined){result.pos=maskPos;}
  if(result===false){resetMaskSet(true);getMaskSet().validPositions=$.extend(true,{},positionsClone);}
  return result;}
  function isMask(pos,strict){var test;if(strict){test=getTestTemplate(pos).match;if(test.def==="")test=getTest(pos).match;}else test=getTest(pos).match;if(test.fn!=null){return test.fn;}else if(strict!==true&&pos>-1){var tests=getTests(pos);return tests.length>1+(tests[tests.length-1].match.def===""?1:0);}
  return false;}
  function seekNext(pos,newBlock){var maskL=getMaskSet().maskLength;if(pos>=maskL)return maskL;var position=pos;while(++position<maskL&&((newBlock===true&&(getTest(position).match.newBlockMarker!==true||!isMask(position)))||(newBlock!==true&&!isMask(position)))){}
  return position;}
  function seekPrevious(pos,newBlock){var position=pos,tests;if(position<=0)return 0;while(--position>0&&((newBlock===true&&getTest(position).match.newBlockMarker!==true)||(newBlock!==true&&!isMask(position)&&(tests=getTests(position),tests.length<2||(tests.length===2&&tests[1].match.def===""))))){}
  return position;}
  function getBufferElement(position){return getMaskSet().validPositions[position]===undefined?getPlaceholder(position):getMaskSet().validPositions[position].input;}
  function writeBuffer(input,buffer,caretPos,event,triggerInputEvent){if(event&&$.isFunction(opts.onBeforeWrite)){var result=opts.onBeforeWrite(event,buffer,caretPos,opts);if(result){if(result.refreshFromBuffer){var refresh=result.refreshFromBuffer;refreshFromBuffer(refresh===true?refresh:refresh.start,refresh.end,result.buffer||buffer);buffer=getBuffer(true);}
  if(caretPos!==undefined)caretPos=result.caret!==undefined?result.caret:caretPos;}}
  input.inputmask._valueSet(buffer.join(""));if(caretPos!==undefined&&(event===undefined||event.type!=="blur")){caret(input,caretPos);}else renderColorMask(input,buffer,caretPos);if(triggerInputEvent===true){skipInputEvent=true;$(input).trigger("input");}}
  function getPlaceholder(pos,test){test=test||getTest(pos).match;if(test.placeholder!==undefined){return test.placeholder;}else if(test.fn===null){if(pos>-1&&getMaskSet().validPositions[pos]===undefined){var tests=getTests(pos),staticAlternations=[],prevTest;if(tests.length>1+(tests[tests.length-1].match.def===""?1:0)){for(var i=0;i<tests.length;i++){if(tests[i].match.optionality!==true&&tests[i].match.optionalQuantifier!==true&&(tests[i].match.fn===null||(prevTest===undefined||tests[i].match.fn.test(prevTest.match.def,getMaskSet(),pos,true,opts)!==false))){staticAlternations.push(tests[i]);if(tests[i].match.fn===null)prevTest=tests[i];if(staticAlternations.length>1){if(/[0-9a-bA-Z]/.test(staticAlternations[0].match.def)){return opts.placeholder.charAt(pos%opts.placeholder.length);}}}}}}
  return test.def;}
  return opts.placeholder.charAt(pos%opts.placeholder.length);}
  function checkVal(input,writeOut,strict,nptvl,initiatingEvent,stickyCaret){var inputValue=nptvl.slice(),charCodes="",initialNdx=0,result=undefined;function isTemplateMatch(){var isMatch=false;var charCodeNdx=getBufferTemplate().slice(initialNdx,seekNext(initialNdx)).join("").indexOf(charCodes);if(charCodeNdx!==-1&&!isMask(initialNdx)){isMatch=true;var bufferTemplateArr=getBufferTemplate().slice(initialNdx,initialNdx+charCodeNdx);for(var i=0;i<bufferTemplateArr.length;i++){if(bufferTemplateArr[i]!==" "){isMatch=false;break;}}}
  return isMatch;}
  resetMaskSet();getMaskSet().p=seekNext(-1);if(!strict){if(opts.autoUnmask!==true){var staticInput=getBufferTemplate().slice(0,seekNext(-1)).join(""),matches=inputValue.join("").match(new RegExp("^"+Inputmask.escapeRegex(staticInput),"g"));if(matches&&matches.length>0){inputValue.splice(0,matches.length*staticInput.length);initialNdx=seekNext(initialNdx);}}else{initialNdx=seekNext(initialNdx);}}
  $.each(inputValue,function(ndx,charCode){if(charCode!==undefined){var keypress=new $.Event("keypress");keypress.which=charCode.charCodeAt(0);charCodes+=charCode;var lvp=getLastValidPosition(undefined,true),lvTest=getMaskSet().validPositions[lvp],nextTest=getTestTemplate(lvp+1,lvTest?lvTest.locator.slice():undefined,lvp);if(!isTemplateMatch()||strict||opts.autoUnmask){var pos=strict?ndx:(nextTest.match.fn==null&&nextTest.match.optionality&&(lvp+1)<getMaskSet().p?lvp+1:getMaskSet().p);result=EventHandlers.keypressEvent.call(input,keypress,true,false,strict,pos);initialNdx=pos+1;charCodes="";}else{result=EventHandlers.keypressEvent.call(input,keypress,true,false,true,lvp+1);}
  if(!strict&&$.isFunction(opts.onBeforeWrite)){result=opts.onBeforeWrite(keypress,getBuffer(),result.forwardPosition,opts);if(result&&result.refreshFromBuffer){var refresh=result.refreshFromBuffer;refreshFromBuffer(refresh===true?refresh:refresh.start,refresh.end,result.buffer);resetMaskSet(true);if(result.caret){getMaskSet().p=result.caret;}}}}});if(writeOut){var caretPos=undefined,lvp=getLastValidPosition();if(document.activeElement===input&&(initiatingEvent||result)){caretPos=caret(input).begin;if(initiatingEvent&&result===false)caretPos=seekNext(getLastValidPosition(caretPos));if(result&&stickyCaret!==true&&(caretPos<lvp+1||lvp===-1))
  caretPos=(opts.numericInput&&result.caret===undefined)?seekPrevious(result.forwardPosition):result.forwardPosition;}
  writeBuffer(input,getBuffer(),caretPos,initiatingEvent||new $.Event("checkval"));}}
  function unmaskedvalue(input){if(input&&input.inputmask===undefined){return input.value;}
  var umValue=[],vps=getMaskSet().validPositions;for(var pndx in vps){if(vps[pndx].match&&vps[pndx].match.fn!=null){umValue.push(vps[pndx].input);}}
  var unmaskedValue=umValue.length===0?"":(isRTL?umValue.reverse():umValue).join("");if($.isFunction(opts.onUnMask)){var bufferValue=(isRTL?getBuffer().slice().reverse():getBuffer()).join("");unmaskedValue=(opts.onUnMask(bufferValue,unmaskedValue,opts)||unmaskedValue);}
  return unmaskedValue;}
  function caret(input,begin,end,notranslate){function translatePosition(pos){if(notranslate!==true&&isRTL&&typeof pos==="number"&&(!opts.greedy||opts.placeholder!=="")){var bffrLght=getBuffer().join("").length;pos=bffrLght-pos;}
  return pos;}
  var range;if(typeof begin==="number"){begin=translatePosition(begin);end=translatePosition(end);end=(typeof end=="number")?end:begin;var scrollCalc=parseInt(((input.ownerDocument.defaultView||window).getComputedStyle?(input.ownerDocument.defaultView||window).getComputedStyle(input,null):input.currentStyle).fontSize)*end;input.scrollLeft=scrollCalc>input.scrollWidth?scrollCalc:0;if(!mobile&&opts.insertMode===false&&begin===end)end++;if(input.setSelectionRange){input.selectionStart=begin;input.selectionEnd=end;}else if(window.getSelection){range=document.createRange();if(input.firstChild===undefined||input.firstChild===null){var textNode=document.createTextNode("");input.appendChild(textNode);}
  range.setStart(input.firstChild,begin<input.inputmask._valueGet().length?begin:input.inputmask._valueGet().length);range.setEnd(input.firstChild,end<input.inputmask._valueGet().length?end:input.inputmask._valueGet().length);range.collapse(true);var sel=window.getSelection();sel.removeAllRanges();sel.addRange(range);}else if(input.createTextRange){range=input.createTextRange();range.collapse(true);range.moveEnd("character",end);range.moveStart("character",begin);range.select();}
  renderColorMask(input,undefined,{begin:begin,end:end});}else{if(input.setSelectionRange){begin=input.selectionStart;end=input.selectionEnd;}else if(window.getSelection){range=window.getSelection().getRangeAt(0);if(range.commonAncestorContainer.parentNode===input||range.commonAncestorContainer===input){begin=range.startOffset;end=range.endOffset;}}else if(document.selection&&document.selection.createRange){range=document.selection.createRange();begin=0-range.duplicate().moveStart("character",-input.inputmask._valueGet().length);end=begin+range.text.length;}
  return{"begin":translatePosition(begin),"end":translatePosition(end)};}}
  function determineLastRequiredPosition(returnDefinition){var buffer=getBuffer(),bl=buffer.length,pos,lvp=getLastValidPosition(),positions={},lvTest=getMaskSet().validPositions[lvp],ndxIntlzr=lvTest!==undefined?lvTest.locator.slice():undefined,testPos;for(pos=lvp+1;pos<buffer.length;pos++){testPos=getTestTemplate(pos,ndxIntlzr,pos-1);ndxIntlzr=testPos.locator.slice();positions[pos]=$.extend(true,{},testPos);}
  var lvTestAlt=lvTest&&lvTest.alternation!==undefined?lvTest.locator[lvTest.alternation]:undefined;for(pos=bl-1;pos>lvp;pos--){testPos=positions[pos];if((testPos.match.optionality||testPos.match.optionalQuantifier||(lvTestAlt&&((lvTestAlt!==positions[pos].locator[lvTest.alternation]&&testPos.match.fn!=null)||(testPos.match.fn===null&&testPos.locator[lvTest.alternation]&&checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","),lvTestAlt.toString().split(","))&&getTests(pos)[0].def!==""))))&&buffer[pos]===getPlaceholder(pos,testPos.match)){bl--;}else break;}
  return returnDefinition?{"l":bl,"def":positions[bl]?positions[bl].match:undefined}:bl;}
  function clearOptionalTail(buffer){var rl=determineLastRequiredPosition(),lmib=buffer.length-1;for(;lmib>rl;lmib--){if(isMask(lmib))break;}
  buffer.splice(rl,lmib+1-rl);return buffer;}
  function isComplete(buffer){if($.isFunction(opts.isComplete))return opts.isComplete(buffer,opts);if(opts.repeat==="*")return undefined;var complete=false,lrp=determineLastRequiredPosition(true),aml=seekPrevious(lrp.l);if(lrp.def===undefined||lrp.def.newBlockMarker||lrp.def.optionality||lrp.def.optionalQuantifier){complete=true;for(var i=0;i<=aml;i++){var test=getTestTemplate(i).match;if((test.fn!==null&&getMaskSet().validPositions[i]===undefined&&test.optionality!==true&&test.optionalQuantifier!==true)||(test.fn===null&&buffer[i]!==getPlaceholder(i,test))){complete=false;break;}}}
  return complete;}
  function patchValueProperty(npt){var valueGet;var valueSet;function patchValhook(type){if($.valHooks&&($.valHooks[type]===undefined||$.valHooks[type].inputmaskpatch!==true)){var valhookGet=$.valHooks[type]&&$.valHooks[type].get?$.valHooks[type].get:function(elem){return elem.value;};var valhookSet=$.valHooks[type]&&$.valHooks[type].set?$.valHooks[type].set:function(elem,value){elem.value=value;return elem;};$.valHooks[type]={get:function(elem){if(elem.inputmask){if(elem.inputmask.opts.autoUnmask){return elem.inputmask.unmaskedvalue();}else{var result=valhookGet(elem);return getLastValidPosition(undefined,undefined,elem.inputmask.maskset.validPositions)!==-1||opts.nullable!==true?result:"";}}else return valhookGet(elem);},set:function(elem,value){var $elem=$(elem),result;result=valhookSet(elem,value);if(elem.inputmask){$elem.trigger("setvalue");}
  return result;},inputmaskpatch:true};}}
  function getter(){if(this.inputmask){return this.inputmask.opts.autoUnmask?this.inputmask.unmaskedvalue():(getLastValidPosition()!==-1||opts.nullable!==true?(document.activeElement===this&&opts.clearMaskOnLostFocus?(isRTL?clearOptionalTail(getBuffer().slice()).reverse():clearOptionalTail(getBuffer().slice())).join(""):valueGet.call(this)):"");}else return valueGet.call(this);}
  function setter(value){valueSet.call(this,value);if(this.inputmask){$(this).trigger("setvalue");}}
  function installNativeValueSetFallback(npt){EventRuler.on(npt,"mouseenter",function(event){var $input=$(this),input=this,value=input.inputmask._valueGet();if(value!==getBuffer().join("")){$input.trigger("setvalue");}});}
  if(!npt.inputmask.__valueGet){if(opts.noValuePatching!==true){if(Object.getOwnPropertyDescriptor){if(typeof Object.getPrototypeOf!=="function"){Object.getPrototypeOf=typeof "test".__proto__==="object"?function(object){return object.__proto__;}:function(object){return object.constructor.prototype;};}
  var valueProperty=Object.getPrototypeOf?Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt),"value"):undefined;if(valueProperty&&valueProperty.get&&valueProperty.set){valueGet=valueProperty.get;valueSet=valueProperty.set;Object.defineProperty(npt,"value",{get:getter,set:setter,configurable:true});}else if(npt.tagName!=="INPUT"){valueGet=function(){return this.textContent;};valueSet=function(value){this.textContent=value;};Object.defineProperty(npt,"value",{get:getter,set:setter,configurable:true});}}else if(document.__lookupGetter__&&npt.__lookupGetter__("value")){valueGet=npt.__lookupGetter__("value");valueSet=npt.__lookupSetter__("value");npt.__defineGetter__("value",getter);npt.__defineSetter__("value",setter);}
  npt.inputmask.__valueGet=valueGet;npt.inputmask.__valueSet=valueSet;}
  npt.inputmask._valueGet=function(overruleRTL){return isRTL&&overruleRTL!==true?valueGet.call(this.el).split("").reverse().join(""):valueGet.call(this.el);};npt.inputmask._valueSet=function(value,overruleRTL){valueSet.call(this.el,(value===null||value===undefined)?"":((overruleRTL!==true&&isRTL)?value.split("").reverse().join(""):value));};if(valueGet===undefined){valueGet=function(){return this.value;};valueSet=function(value){this.value=value;};patchValhook(npt.type);installNativeValueSetFallback(npt);}}}
  function handleRemove(input,k,pos,strict){function generalize(){if(opts.keepStatic){var validInputs=[],lastAlt=getLastValidPosition(-1,true),positionsClone=$.extend(true,{},getMaskSet().validPositions),prevAltPos=getMaskSet().validPositions[lastAlt];for(;lastAlt>=0;lastAlt--){var altPos=getMaskSet().validPositions[lastAlt];if(altPos){if(altPos.generatedInput!==true&&/[0-9a-bA-Z]/.test(altPos.input)){validInputs.push(altPos.input);}
  delete getMaskSet().validPositions[lastAlt];if(altPos.alternation!==undefined&&altPos.locator[altPos.alternation]!==prevAltPos.locator[altPos.alternation]){break;}
  prevAltPos=altPos;}}
  if(lastAlt>-1){getMaskSet().p=seekNext(getLastValidPosition(-1,true));while(validInputs.length>0){var keypress=new $.Event("keypress");keypress.which=validInputs.pop().charCodeAt(0);EventHandlers.keypressEvent.call(input,keypress,true,false,false,getMaskSet().p);}}else getMaskSet().validPositions=$.extend(true,{},positionsClone);}}
  if(opts.numericInput||isRTL){if(k===Inputmask.keyCode.BACKSPACE){k=Inputmask.keyCode.DELETE;}else if(k===Inputmask.keyCode.DELETE){k=Inputmask.keyCode.BACKSPACE;}
  if(isRTL){var pend=pos.end;pos.end=pos.begin;pos.begin=pend;}}
  if(k===Inputmask.keyCode.BACKSPACE&&(pos.end-pos.begin<1||opts.insertMode===false)){pos.begin=seekPrevious(pos.begin);if(getMaskSet().validPositions[pos.begin]!==undefined&&(getMaskSet().validPositions[pos.begin].input===opts.groupSeparator||getMaskSet().validPositions[pos.begin].input===opts.radixPoint)){pos.begin--;}}else if(k===Inputmask.keyCode.DELETE&&pos.begin===pos.end){pos.end=isMask(pos.end,true)?pos.end+1:seekNext(pos.end)+1;if(getMaskSet().validPositions[pos.begin]!==undefined&&(getMaskSet().validPositions[pos.begin].input===opts.groupSeparator||getMaskSet().validPositions[pos.begin].input===opts.radixPoint)){pos.end++;}}
  stripValidPositions(pos.begin,pos.end,false,strict);if(strict!==true){generalize();}
  var lvp=getLastValidPosition(pos.begin,true);if(lvp<pos.begin){getMaskSet().p=seekNext(lvp);}else if(strict!==true){getMaskSet().p=pos.begin;}}
  var EventRuler={on:function(input,eventName,eventHandler){var ev=function(e){if(this.inputmask===undefined&&this.nodeName!=="FORM"){var imOpts=$.data(this,"_inputmask_opts");if(imOpts)(new Inputmask(imOpts)).mask(this);else EventRuler.off(this);}else if(e.type!=="setvalue"&&(this.disabled||(this.readOnly&&!(e.type==="keydown"&&(e.ctrlKey&&e.keyCode===67)||(opts.tabThrough===false&&e.keyCode===Inputmask.keyCode.TAB))))){e.preventDefault();}else{switch(e.type){case "input":if(skipInputEvent===true){skipInputEvent=false;return e.preventDefault();}
  break;case "keydown":skipKeyPressEvent=false;skipInputEvent=false;break;case "keypress":if(skipKeyPressEvent===true){return e.preventDefault();}
  skipKeyPressEvent=true;break;case "click":if(iemobile||iphone){var that=this,args=arguments;setTimeout(function(){eventHandler.apply(that,args);},0);return false;}
  break;}
  var returnVal=eventHandler.apply(this,arguments);if(returnVal===false){e.preventDefault();e.stopPropagation();}
  return returnVal;}};input.inputmask.events[eventName]=input.inputmask.events[eventName]||[];input.inputmask.events[eventName].push(ev);if($.inArray(eventName,["submit","reset"])!==-1){if(input.form!=null)$(input.form).on(eventName,ev);}else{$(input).on(eventName,ev);}},off:function(input,event){if(input.inputmask&&input.inputmask.events){var events;if(event){events=[];events[event]=input.inputmask.events[event];}else{events=input.inputmask.events;}
  $.each(events,function(eventName,evArr){while(evArr.length>0){var ev=evArr.pop();if($.inArray(eventName,["submit","reset"])!==-1){if(input.form!=null)$(input.form).off(eventName,ev);}else{$(input).off(eventName,ev);}}
  delete input.inputmask.events[eventName];});}}};var EventHandlers={keydownEvent:function(e){function isInputEventSupported(eventName){var el=document.createElement("input"),evName="on"+eventName,isSupported=(evName in el);if(!isSupported){el.setAttribute(evName,"return;");isSupported=typeof el[evName]=="function";}
  el=null;return isSupported;}
  var input=this,$input=$(input),k=e.keyCode,pos=caret(input);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();handleRemove(input,k,pos);writeBuffer(input,getBuffer(true),getMaskSet().p,e,input.inputmask._valueGet()!==getBuffer().join(""));if(input.inputmask._valueGet()===getBufferTemplate().join("")){$input.trigger("cleared");}else if(isComplete(getBuffer())===true){$input.trigger("complete");}
  if(opts.showTooltip){input.title=opts.tooltip||getMaskSet().mask;}}else if(k===Inputmask.keyCode.END||k===Inputmask.keyCode.PAGE_DOWN){e.preventDefault();var caretPos=seekNext(getLastValidPosition());if(!opts.insertMode&&caretPos===getMaskSet().maskLength&&!e.shiftKey)caretPos--;caret(input,e.shiftKey?pos.begin:caretPos,caretPos,true);}else if((k===Inputmask.keyCode.HOME&&!e.shiftKey)||k===Inputmask.keyCode.PAGE_UP){e.preventDefault();caret(input,0,e.shiftKey?pos.begin:0,true);}else if(((opts.undoOnEscape&&k===Inputmask.keyCode.ESCAPE)||(k===90&&e.ctrlKey))&&e.altKey!==true){checkVal(input,true,false,undoValue.split(""));$input.trigger("click");}else if(k===Inputmask.keyCode.INSERT&&!(e.shiftKey||e.ctrlKey)){opts.insertMode=!opts.insertMode;caret(input,!opts.insertMode&&pos.begin===getMaskSet().maskLength?pos.begin-1:pos.begin);}else if(opts.tabThrough===true&&k===Inputmask.keyCode.TAB){if(e.shiftKey===true){if(getTest(pos.begin).match.fn===null){pos.begin=seekNext(pos.begin);}
  pos.end=seekPrevious(pos.begin,true);pos.begin=seekPrevious(pos.end,true);}else{pos.begin=seekNext(pos.begin,true);pos.end=seekNext(pos.begin,true);if(pos.end<getMaskSet().maskLength)pos.end--;}
  if(pos.begin<getMaskSet().maskLength){e.preventDefault();caret(input,pos.begin,pos.end);}}else if(!e.shiftKey){if(opts.insertMode===false){if(k===Inputmask.keyCode.RIGHT){setTimeout(function(){var caretPos=caret(input);caret(input,caretPos.begin);},0);}else if(k===Inputmask.keyCode.LEFT){setTimeout(function(){var caretPos=caret(input);caret(input,isRTL?caretPos.begin+1:caretPos.begin-1);},0);}}}
  opts.onKeyDown.call(this,e,getBuffer(),caret(input).begin,opts);ignorable=$.inArray(k,opts.ignorables)!==-1;},keypressEvent:function(e,checkval,writeOut,strict,ndx){var input=this,$input=$(input),k=e.which||e.charCode||e.keyCode;if(checkval!==true&&(!(e.ctrlKey&&e.altKey)&&(e.ctrlKey||e.metaKey||ignorable))){if(k===Inputmask.keyCode.ENTER&&undoValue!==getBuffer().join("")){undoValue=getBuffer().join("");setTimeout(function(){$input.trigger("change");},0);}
  return true;}else{if(k){if(k===46&&e.shiftKey===false&&opts.radixPoint===",")k=44;var pos=checkval?{begin:ndx,end:ndx}:caret(input),forwardPosition,c=String.fromCharCode(k);getMaskSet().writeOutBuffer=true;var valResult=isValid(pos,c,strict);if(valResult!==false){resetMaskSet(true);forwardPosition=valResult.caret!==undefined?valResult.caret:checkval?valResult.pos+1:seekNext(valResult.pos);getMaskSet().p=forwardPosition;}
  if(writeOut!==false){var self=this;setTimeout(function(){opts.onKeyValidation.call(self,k,valResult,opts);},0);if(getMaskSet().writeOutBuffer&&valResult!==false){var buffer=getBuffer();writeBuffer(input,buffer,(opts.numericInput&&valResult.caret===undefined)?seekPrevious(forwardPosition):forwardPosition,e,checkval!==true);if(checkval!==true){setTimeout(function(){if(isComplete(buffer)===true)$input.trigger("complete");},0);}}}
  if(opts.showTooltip){input.title=opts.tooltip||getMaskSet().mask;}
  e.preventDefault();if(checkval){valResult.forwardPosition=forwardPosition;return valResult;}}}},pasteEvent:function(e){var input=this,ev=e.originalEvent||e,$input=$(input),inputValue=input.inputmask._valueGet(true),caretPos=caret(input),tempValue;if(isRTL){tempValue=caretPos.end;caretPos.end=caretPos.begin;caretPos.begin=tempValue;}
  var valueBeforeCaret=inputValue.substr(0,caretPos.begin),valueAfterCaret=inputValue.substr(caretPos.end,inputValue.length);if(valueBeforeCaret===(isRTL?getBufferTemplate().reverse():getBufferTemplate()).slice(0,caretPos.begin).join(""))valueBeforeCaret="";if(valueAfterCaret===(isRTL?getBufferTemplate().reverse():getBufferTemplate()).slice(caretPos.end).join(""))valueAfterCaret="";if(isRTL){tempValue=valueBeforeCaret;valueBeforeCaret=valueAfterCaret;valueAfterCaret=tempValue;}
  if(window.clipboardData&&window.clipboardData.getData){inputValue=valueBeforeCaret+window.clipboardData.getData("Text")+valueAfterCaret;}else if(ev.clipboardData&&ev.clipboardData.getData){inputValue=valueBeforeCaret+ev.clipboardData.getData("text/plain")+valueAfterCaret;}else return true;var pasteValue=inputValue;if($.isFunction(opts.onBeforePaste)){pasteValue=opts.onBeforePaste(inputValue,opts);if(pasteValue===false){return e.preventDefault();}
  if(!pasteValue){pasteValue=inputValue;}}
  checkVal(input,false,false,isRTL?pasteValue.split("").reverse():pasteValue.toString().split(""));writeBuffer(input,getBuffer(),seekNext(getLastValidPosition()),e,undoValue!==getBuffer().join(""));if(isComplete(getBuffer())===true){$input.trigger("complete");}
  return e.preventDefault();},inputFallBackEvent:function(e){var input=this,inputValue=input.inputmask._valueGet();if(getBuffer().join("")!==inputValue){var caretPos=caret(input);inputValue=inputValue.replace(new RegExp("("+Inputmask.escapeRegex(getBufferTemplate().join(""))+")*"),"");if(iemobile){var inputChar=inputValue.replace(getBuffer().join(""),"");if(inputChar.length===1){var keypress=new $.Event("keypress");keypress.which=inputChar.charCodeAt(0);EventHandlers.keypressEvent.call(input,keypress,true,true,false,getMaskSet().validPositions[caretPos.begin-1]?caretPos.begin:caretPos.begin-1);return false;}}
  if(caretPos.begin>inputValue.length){caret(input,inputValue.length);caretPos=caret(input);}
  if((getBuffer().length-inputValue.length)===1&&inputValue.charAt(caretPos.begin)!==getBuffer()[caretPos.begin]&&inputValue.charAt(caretPos.begin+1)!==getBuffer()[caretPos.begin]&&!isMask(caretPos.begin)){e.keyCode=Inputmask.keyCode.BACKSPACE;EventHandlers.keydownEvent.call(input,e);}else{var lvp=getLastValidPosition()+1;var bufferTemplate=getBufferTemplate().join("");while(inputValue.match(Inputmask.escapeRegex(bufferTemplate)+"$")===null){bufferTemplate=bufferTemplate.slice(1);}
  inputValue=inputValue.replace(bufferTemplate,"");inputValue=inputValue.split("");checkVal(input,true,false,inputValue,e,caretPos.begin<lvp);if(isComplete(getBuffer())===true){$(input).trigger("complete");}}
  e.preventDefault();}},setValueEvent:function(e){var input=this,value=input.inputmask._valueGet();checkVal(input,true,false,($.isFunction(opts.onBeforeMask)?(opts.onBeforeMask(value,opts)||value):value).split(""));undoValue=getBuffer().join("");if((opts.clearMaskOnLostFocus||opts.clearIncomplete)&&input.inputmask._valueGet()===getBufferTemplate().join("")){input.inputmask._valueSet("");}},focusEvent:function(e){var input=this,nptValue=input.inputmask._valueGet();if(opts.showMaskOnFocus&&(!opts.showMaskOnHover||(opts.showMaskOnHover&&nptValue===""))){if(input.inputmask._valueGet()!==getBuffer().join("")){writeBuffer(input,getBuffer(),seekNext(getLastValidPosition()));}else if(mouseEnter===false){caret(input,seekNext(getLastValidPosition()));}}
  if(opts.positionCaretOnTab===true){setTimeout(function(){EventHandlers.clickEvent.apply(this,[e]);},0);}
  undoValue=getBuffer().join("");},mouseleaveEvent:function(e){var input=this;mouseEnter=false;if(opts.clearMaskOnLostFocus&&document.activeElement!==input){var buffer=getBuffer().slice(),nptValue=input.inputmask._valueGet();if(nptValue!==input.getAttribute("placeholder")&&nptValue!==""){if(getLastValidPosition()===-1&&nptValue===getBufferTemplate().join("")){buffer=[];}else{clearOptionalTail(buffer);}
  writeBuffer(input,buffer);}}},clickEvent:function(e){function doRadixFocus(clickPos){if(opts.radixPoint!==""){var vps=getMaskSet().validPositions;if(vps[clickPos]===undefined||(vps[clickPos].input===getPlaceholder(clickPos))){if(clickPos<seekNext(-1))return true;var radixPos=$.inArray(opts.radixPoint,getBuffer());if(radixPos!==-1){for(var vp in vps){if(radixPos<vp&&vps[vp].input!==getPlaceholder(vp)){return false;}}
  return true;}}}
  return false;}
  var input=this;setTimeout(function(){if(document.activeElement===input){var selectedCaret=caret(input);if(selectedCaret.begin===selectedCaret.end){switch(opts.positionCaretOnClick){case "none":break;case "radixFocus":if(doRadixFocus(selectedCaret.begin)){var radixPos=$.inArray(opts.radixPoint,getBuffer().join(""));caret(input,opts.numericInput?seekNext(radixPos):radixPos);break;}
  default:var clickPosition=selectedCaret.begin,lvclickPosition=getLastValidPosition(clickPosition,true),lastPosition=seekNext(lvclickPosition);if(clickPosition<lastPosition){caret(input,!isMask(clickPosition)&&!isMask(clickPosition-1)?seekNext(clickPosition):clickPosition);}else{var placeholder=getPlaceholder(lastPosition);if((placeholder!==""&&getBuffer()[lastPosition]!==placeholder&&getTest(lastPosition).match.optionalQuantifier!==true)||(!isMask(lastPosition)&&getTest(lastPosition).match.def===placeholder)){lastPosition=seekNext(lastPosition);}
  caret(input,lastPosition);}
  break;}}}},0);},dblclickEvent:function(e){var input=this;setTimeout(function(){caret(input,0,seekNext(getLastValidPosition()));},0);},cutEvent:function(e){var input=this,$input=$(input),pos=caret(input),ev=e.originalEvent||e;var clipboardData=window.clipboardData||ev.clipboardData,clipData=isRTL?getBuffer().slice(pos.end,pos.begin):getBuffer().slice(pos.begin,pos.end);clipboardData.setData("text",isRTL?clipData.reverse().join(""):clipData.join(""));if(document.execCommand)document.execCommand("copy");handleRemove(input,Inputmask.keyCode.DELETE,pos);writeBuffer(input,getBuffer(),getMaskSet().p,e,undoValue!==getBuffer().join(""));if(input.inputmask._valueGet()===getBufferTemplate().join("")){$input.trigger("cleared");}
  if(opts.showTooltip){input.title=opts.tooltip||getMaskSet().mask;}},blurEvent:function(e){var $input=$(this),input=this;if(input.inputmask){var nptValue=input.inputmask._valueGet(),buffer=getBuffer().slice();if(undoValue!==buffer.join("")){setTimeout(function(){$input.trigger("change");undoValue=buffer.join("");},0);}
  if(nptValue!==""){if(opts.clearMaskOnLostFocus){if(getLastValidPosition()===-1&&nptValue===getBufferTemplate().join("")){buffer=[];}else{clearOptionalTail(buffer);}}
  if(isComplete(buffer)===false){setTimeout(function(){$input.trigger("incomplete");},0);if(opts.clearIncomplete){resetMaskSet();if(opts.clearMaskOnLostFocus){buffer=[];}else{buffer=getBufferTemplate().slice();}}}
  writeBuffer(input,buffer,undefined,e);}}},mouseenterEvent:function(e){var input=this;mouseEnter=true;if(document.activeElement!==input&&opts.showMaskOnHover){if(input.inputmask._valueGet()!==getBuffer().join("")){writeBuffer(input,getBuffer());}}},submitEvent:function(e){if(undoValue!==getBuffer().join("")){$el.trigger("change");}
  if(opts.clearMaskOnLostFocus&&getLastValidPosition()===-1&&el.inputmask._valueGet&&el.inputmask._valueGet()===getBufferTemplate().join("")){el.inputmask._valueSet("");}
  if(opts.removeMaskOnSubmit){el.inputmask._valueSet(el.inputmask.unmaskedvalue(),true);setTimeout(function(){writeBuffer(el,getBuffer());},0);}},resetEvent:function(e){setTimeout(function(){$el.trigger("setvalue");},0);}};function initializeColorMask(input){function findCaretPos(clientx){var e=document.createElement('span'),caretPos;for(var style in computedStyle){if(isNaN(style)&&style.indexOf("font")!==-1){e.style[style]=computedStyle[style];}}
  e.style.textTransform=computedStyle.textTransform;e.style.letterSpacing=computedStyle.letterSpacing;e.style.position="absolute";e.style.height="auto";e.style.width="auto";e.style.visibility="hidden";e.style.whiteSpace="nowrap";document.body.appendChild(e);var inputText=input.inputmask._valueGet(),previousWidth=0,itl;for(caretPos=0,itl=inputText.length;caretPos<=itl;caretPos++){e.innerHTML+=inputText.charAt(caretPos)||"_";if(e.offsetWidth>=clientx){var offset1=(clientx-previousWidth);var offset2=e.offsetWidth-clientx;e.innerHTML=inputText.charAt(caretPos);offset1-=(e.offsetWidth/3);caretPos=offset1<offset2?caretPos-1:caretPos;break;}
  previousWidth=e.offsetWidth;}
  document.body.removeChild(e);return caretPos;}
  function position(){colorMask.style.position="absolute";colorMask.style.top=offset.top+"px";colorMask.style.left=offset.left+"px";colorMask.style.width=parseInt(input.offsetWidth)-parseInt(computedStyle.paddingLeft)-parseInt(computedStyle.paddingRight)-parseInt(computedStyle.borderLeftWidth)-parseInt(computedStyle.borderRightWidth)+"px";colorMask.style.height=parseInt(input.offsetHeight)-parseInt(computedStyle.paddingTop)-parseInt(computedStyle.paddingBottom)-parseInt(computedStyle.borderTopWidth)-parseInt(computedStyle.borderBottomWidth)+"px";colorMask.style.lineHeight=colorMask.style.height;colorMask.style.zIndex=isNaN(computedStyle.zIndex)?-1:computedStyle.zIndex-1;colorMask.style.webkitAppearance="textfield";colorMask.style.mozAppearance="textfield";colorMask.style.Appearance="textfield";}
  var offset=$(input).position(),computedStyle=(input.ownerDocument.defaultView||window).getComputedStyle(input,null),parentNode=input.parentNode;colorMask=document.createElement("div");document.body.appendChild(colorMask);for(var style in computedStyle){if(isNaN(style)&&style!=="cssText"&&style.indexOf("webkit")==-1){colorMask.style[style]=computedStyle[style];}}
  input.style.backgroundColor="transparent";input.style.color="transparent";input.style.webkitAppearance="caret";input.style.mozAppearance="caret";input.style.Appearance="caret";position();$(window).on("resize",function(e){offset=$(input).position();computedStyle=(input.ownerDocument.defaultView||window).getComputedStyle(input,null);position();});$(input).on("click",function(e){caret(input,findCaretPos(e.clientX));return EventHandlers.clickEvent.call(this,[e]);});$(input).on("keydown",function(e){if(!e.shiftKey&&opts.insertMode!==false){setTimeout(function(){renderColorMask(input);},0);}});}
  function renderColorMask(input,buffer,caretPos){function handleStatic(){if(!static&&(test.fn===null||testPos.input===undefined)){static=true;maskTemplate+="<span class='im-static''>"}else if(static&&(test.fn!==null&&testPos.input!==undefined)){static=false;maskTemplate+="</span>"}}
  if(colorMask!==undefined){buffer=buffer||getBuffer();if(caretPos===undefined){caretPos=caret(input);}else if(caretPos.begin===undefined){caretPos={begin:caretPos,end:caretPos};}
  var maskTemplate="",static=false;if(buffer!=""){var ndxIntlzr,pos=0,test,testPos,lvp=getLastValidPosition();do{if(pos===caretPos.begin&&document.activeElement===input){maskTemplate+="<span class='im-caret' style='border-right-width: 1px;border-right-style: solid;'></span>";}
  if(getMaskSet().validPositions[pos]){testPos=getMaskSet().validPositions[pos];test=testPos.match;ndxIntlzr=testPos.locator.slice();handleStatic();maskTemplate+=testPos.input;}else{testPos=getTestTemplate(pos,ndxIntlzr,pos-1);test=testPos.match;ndxIntlzr=testPos.locator.slice();if(opts.jitMasking===false||pos<lvp||(Number.isFinite(opts.jitMasking)&&opts.jitMasking>pos)){handleStatic();maskTemplate+=getPlaceholder(pos,test);}}
  pos++;}while((maxLength===undefined||pos<maxLength)&&(test.fn!==null||test.def!=="")||lvp>pos);}
  colorMask.innerHTML=maskTemplate;}}
  function mask(elem){function isElementTypeSupported(input,opts){var elementType=input.getAttribute("type");var isSupported=(input.tagName==="INPUT"&&$.inArray(elementType,opts.supportsInputType)!==-1)||input.isContentEditable||input.tagName==="TEXTAREA";if(!isSupported&&input.tagName==="INPUT"){var el=document.createElement("input");el.setAttribute("type",elementType);isSupported=el.type==="text";el=null;}
  return isSupported;}
  if(isElementTypeSupported(elem,opts)){el=elem;$el=$(el);if(opts.showTooltip){el.title=opts.tooltip||getMaskSet().mask;}
  if(el.dir==="rtl"||opts.rightAlign){el.style.textAlign="right";}
  if(el.dir==="rtl"||opts.numericInput){el.dir="ltr";el.removeAttribute("dir");el.inputmask.isRTL=true;isRTL=true;}
  if(opts.colorMask===true){initializeColorMask(el);}
  if(android){if(el.hasOwnProperty("inputmode")){el.inputmode=opts.inputmode;el.setAttribute("inputmode",opts.inputmode);}
  if(opts.androidHack==="rtfm"){if(opts.colorMask!==true){initializeColorMask(el);}
  el.type="password";}}
  EventRuler.off(el);patchValueProperty(el);EventRuler.on(el,"submit",EventHandlers.submitEvent);EventRuler.on(el,"reset",EventHandlers.resetEvent);EventRuler.on(el,"mouseenter",EventHandlers.mouseenterEvent);EventRuler.on(el,"blur",EventHandlers.blurEvent);EventRuler.on(el,"focus",EventHandlers.focusEvent);EventRuler.on(el,"mouseleave",EventHandlers.mouseleaveEvent);if(opts.colorMask!==true)
  EventRuler.on(el,"click",EventHandlers.clickEvent);EventRuler.on(el,"dblclick",EventHandlers.dblclickEvent);EventRuler.on(el,"paste",EventHandlers.pasteEvent);EventRuler.on(el,"dragdrop",EventHandlers.pasteEvent);EventRuler.on(el,"drop",EventHandlers.pasteEvent);EventRuler.on(el,"cut",EventHandlers.cutEvent);EventRuler.on(el,"complete",opts.oncomplete);EventRuler.on(el,"incomplete",opts.onincomplete);EventRuler.on(el,"cleared",opts.oncleared);if(opts.inputEventOnly!==true){EventRuler.on(el,"keydown",EventHandlers.keydownEvent);EventRuler.on(el,"keypress",EventHandlers.keypressEvent);}
  EventRuler.on(el,"compositionstart",$.noop);EventRuler.on(el,"compositionupdate",$.noop);EventRuler.on(el,"compositionend",$.noop);EventRuler.on(el,"keyup",$.noop);EventRuler.on(el,"input",EventHandlers.inputFallBackEvent);EventRuler.on(el,"setvalue",EventHandlers.setValueEvent);getBufferTemplate();if(el.inputmask._valueGet()!==""||opts.clearMaskOnLostFocus===false||document.activeElement===el){var initialValue=$.isFunction(opts.onBeforeMask)?(opts.onBeforeMask(el.inputmask._valueGet(),opts)||el.inputmask._valueGet()):el.inputmask._valueGet();checkVal(el,true,false,initialValue.split(""));var buffer=getBuffer().slice();undoValue=buffer.join("");if(isComplete(buffer)===false){if(opts.clearIncomplete){resetMaskSet();}}
  if(opts.clearMaskOnLostFocus&&document.activeElement!==el){if(getLastValidPosition()===-1){buffer=[];}else{clearOptionalTail(buffer);}}
  writeBuffer(el,buffer);if(document.activeElement===el){caret(el,seekNext(getLastValidPosition()));}}}}
  var valueBuffer;if(actionObj!==undefined){switch(actionObj.action){case "isComplete":el=actionObj.el;return isComplete(getBuffer());case "unmaskedvalue":if(el===undefined||actionObj.value!==undefined){valueBuffer=actionObj.value;valueBuffer=($.isFunction(opts.onBeforeMask)?(opts.onBeforeMask(valueBuffer,opts)||valueBuffer):valueBuffer).split("");checkVal(undefined,false,false,isRTL?valueBuffer.reverse():valueBuffer);if($.isFunction(opts.onBeforeWrite))opts.onBeforeWrite(undefined,getBuffer(),0,opts);}
  return unmaskedvalue(el);case "mask":mask(el);break;case "format":valueBuffer=($.isFunction(opts.onBeforeMask)?(opts.onBeforeMask(actionObj.value,opts)||actionObj.value):actionObj.value).split("");checkVal(undefined,false,false,isRTL?valueBuffer.reverse():valueBuffer);if($.isFunction(opts.onBeforeWrite))opts.onBeforeWrite(undefined,getBuffer(),0,opts);if(actionObj.metadata){return{value:isRTL?getBuffer().slice().reverse().join(""):getBuffer().join(""),metadata:maskScope.call(this,{"action":"getmetadata"},maskset,opts)};}
  return isRTL?getBuffer().slice().reverse().join(""):getBuffer().join("");case "isValid":if(actionObj.value){valueBuffer=actionObj.value.split("");checkVal(undefined,false,true,isRTL?valueBuffer.reverse():valueBuffer);}else{actionObj.value=getBuffer().join("");}
  var buffer=getBuffer();var rl=determineLastRequiredPosition(),lmib=buffer.length-1;for(;lmib>rl;lmib--){if(isMask(lmib))break;}
  buffer.splice(rl,lmib+1-rl);return isComplete(buffer)&&actionObj.value===getBuffer().join("");case "getemptymask":return getBufferTemplate().join("");case "remove":if(el){$el=$(el);el.inputmask._valueSet(unmaskedvalue(el));EventRuler.off(el);var valueProperty;if(Object.getOwnPropertyDescriptor&&Object.getPrototypeOf){valueProperty=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el),"value");if(valueProperty){if(el.inputmask.__valueGet){Object.defineProperty(el,"value",{get:el.inputmask.__valueGet,set:el.inputmask.__valueSet,configurable:true});}}}else if(document.__lookupGetter__&&el.__lookupGetter__("value")){if(el.inputmask.__valueGet){el.__defineGetter__("value",el.inputmask.__valueGet);el.__defineSetter__("value",el.inputmask.__valueSet);}}
  el.inputmask=undefined;}
  return el;break;case "getmetadata":if($.isArray(maskset.metadata)){var maskTarget=getMaskTemplate(true,0,false).join("");$.each(maskset.metadata,function(ndx,mtdt){if(mtdt.mask===maskTarget){maskTarget=mtdt;return false;}});return maskTarget;}
  return maskset.metadata;}}}
  window.Inputmask=Inputmask;return Inputmask;}));