/* Minification failed. Returning unminified contents.
(1618,78-85): run-time error JS1019: Can't have 'break' outside of loop: break a
 */
/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
;
/*!
 * jQuery Migrate - v3.3.2 - 2020-11-17T23:22Z
 * Copyright OpenJS Foundation and other contributors
 */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "jquery" ], function( jQuery ) {
			return factory( jQuery, window );
		} );
	} else if ( typeof module === "object" && module.exports ) {

		// Node/CommonJS
		// eslint-disable-next-line no-undef
		module.exports = factory( require( "jquery" ), window );
	} else {

		// Browser globals
		factory( jQuery, window );
	}
} )( function( jQuery, window ) {
"use strict";

jQuery.migrateVersion = "3.3.2";

// Returns 0 if v1 == v2, -1 if v1 < v2, 1 if v1 > v2
function compareVersions( v1, v2 ) {
	var i,
		rVersionParts = /^(\d+)\.(\d+)\.(\d+)/,
		v1p = rVersionParts.exec( v1 ) || [ ],
		v2p = rVersionParts.exec( v2 ) || [ ];

	for ( i = 1; i <= 3; i++ ) {
		if ( +v1p[ i ] > +v2p[ i ] ) {
			return 1;
		}
		if ( +v1p[ i ] < +v2p[ i ] ) {
			return -1;
		}
	}
	return 0;
}

function jQueryVersionSince( version ) {
	return compareVersions( jQuery.fn.jquery, version ) >= 0;
}

( function() {

	// Support: IE9 only
	// IE9 only creates console object when dev tools are first opened
	// IE9 console is a host object, callable but doesn't have .apply()
	if ( !window.console || !window.console.log ) {
		return;
	}

	// Need jQuery 3.0.0+ and no older Migrate loaded
	if ( !jQuery || !jQueryVersionSince( "3.0.0" ) ) {
		window.console.log( "JQMIGRATE: jQuery 3.0.0+ REQUIRED" );
	}
	if ( jQuery.migrateWarnings ) {
		window.console.log( "JQMIGRATE: Migrate plugin loaded multiple times" );
	}

	// Show a message on the console so devs know we're active
	window.console.log( "JQMIGRATE: Migrate is installed" +
		( jQuery.migrateMute ? "" : " with logging active" ) +
		", version " + jQuery.migrateVersion );

} )();

var warnedAbout = {};

// By default each warning is only reported once.
jQuery.migrateDeduplicateWarnings = true;

// List of warnings already given; public read only
jQuery.migrateWarnings = [];

// Set to false to disable traces that appear with warnings
if ( jQuery.migrateTrace === undefined ) {
	jQuery.migrateTrace = true;
}

// Forget any warnings we've already given; public
jQuery.migrateReset = function() {
	warnedAbout = {};
	jQuery.migrateWarnings.length = 0;
};

function migrateWarn( msg ) {
	var console = window.console;
	if ( !jQuery.migrateDeduplicateWarnings || !warnedAbout[ msg ] ) {
		warnedAbout[ msg ] = true;
		jQuery.migrateWarnings.push( msg );
		if ( console && console.warn && !jQuery.migrateMute ) {
			console.warn( "JQMIGRATE: " + msg );
			if ( jQuery.migrateTrace && console.trace ) {
				console.trace();
			}
		}
	}
}

function migrateWarnProp( obj, prop, value, msg ) {
	Object.defineProperty( obj, prop, {
		configurable: true,
		enumerable: true,
		get: function() {
			migrateWarn( msg );
			return value;
		},
		set: function( newValue ) {
			migrateWarn( msg );
			value = newValue;
		}
	} );
}

function migrateWarnFunc( obj, prop, newFunc, msg ) {
	obj[ prop ] = function() {
		migrateWarn( msg );
		return newFunc.apply( this, arguments );
	};
}

if ( window.document.compatMode === "BackCompat" ) {

	// JQuery has never supported or tested Quirks Mode
	migrateWarn( "jQuery is not compatible with Quirks Mode" );
}

var findProp,
	class2type = {},
	oldInit = jQuery.fn.init,
	oldFind = jQuery.find,

	rattrHashTest = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,
	rattrHashGlob = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,

	// Support: Android <=4.0 only
	// Make sure we trim BOM and NBSP
	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;

jQuery.fn.init = function( arg1 ) {
	var args = Array.prototype.slice.call( arguments );

	if ( typeof arg1 === "string" && arg1 === "#" ) {

		// JQuery( "#" ) is a bogus ID selector, but it returned an empty set before jQuery 3.0
		migrateWarn( "jQuery( '#' ) is not a valid selector" );
		args[ 0 ] = [];
	}

	return oldInit.apply( this, args );
};
jQuery.fn.init.prototype = jQuery.fn;

jQuery.find = function( selector ) {
	var args = Array.prototype.slice.call( arguments );

	// Support: PhantomJS 1.x
	// String#match fails to match when used with a //g RegExp, only on some strings
	if ( typeof selector === "string" && rattrHashTest.test( selector ) ) {

		// The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0
		// First see if qS thinks it's a valid selector, if so avoid a false positive
		try {
			window.document.querySelector( selector );
		} catch ( err1 ) {

			// Didn't *look* valid to qSA, warn and try quoting what we think is the value
			selector = selector.replace( rattrHashGlob, function( _, attr, op, value ) {
				return "[" + attr + op + "\"" + value + "\"]";
			} );

			// If the regexp *may* have created an invalid selector, don't update it
			// Note that there may be false alarms if selector uses jQuery extensions
			try {
				window.document.querySelector( selector );
				migrateWarn( "Attribute selector with '#' must be quoted: " + args[ 0 ] );
				args[ 0 ] = selector;
			} catch ( err2 ) {
				migrateWarn( "Attribute selector with '#' was not fixed: " + args[ 0 ] );
			}
		}
	}

	return oldFind.apply( this, args );
};

// Copy properties attached to original jQuery.find method (e.g. .attr, .isXML)
for ( findProp in oldFind ) {
	if ( Object.prototype.hasOwnProperty.call( oldFind, findProp ) ) {
		jQuery.find[ findProp ] = oldFind[ findProp ];
	}
}

// The number of elements contained in the matched element set
migrateWarnFunc( jQuery.fn, "size", function() {
	return this.length;
},
"jQuery.fn.size() is deprecated and removed; use the .length property" );

migrateWarnFunc( jQuery, "parseJSON", function() {
	return JSON.parse.apply( null, arguments );
},
"jQuery.parseJSON is deprecated; use JSON.parse" );

migrateWarnFunc( jQuery, "holdReady", jQuery.holdReady,
	"jQuery.holdReady is deprecated" );

migrateWarnFunc( jQuery, "unique", jQuery.uniqueSort,
	"jQuery.unique is deprecated; use jQuery.uniqueSort" );

// Now jQuery.expr.pseudos is the standard incantation
migrateWarnProp( jQuery.expr, "filters", jQuery.expr.pseudos,
	"jQuery.expr.filters is deprecated; use jQuery.expr.pseudos" );
migrateWarnProp( jQuery.expr, ":", jQuery.expr.pseudos,
	"jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos" );

// Prior to jQuery 3.1.1 there were internal refs so we don't warn there
if ( jQueryVersionSince( "3.1.1" ) ) {
	migrateWarnFunc( jQuery, "trim", function( text ) {
		return text == null ?
			"" :
			( text + "" ).replace( rtrim, "" );
	},
	"jQuery.trim is deprecated; use String.prototype.trim" );
}

// Prior to jQuery 3.2 there were internal refs so we don't warn there
if ( jQueryVersionSince( "3.2.0" ) ) {
	migrateWarnFunc( jQuery, "nodeName", function( elem, name ) {
		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
	},
	"jQuery.nodeName is deprecated" );

	migrateWarnFunc( jQuery, "isArray", Array.isArray,
		"jQuery.isArray is deprecated; use Array.isArray"
	);
}

if ( jQueryVersionSince( "3.3.0" ) ) {

	migrateWarnFunc( jQuery, "isNumeric", function( obj ) {

			// As of jQuery 3.0, isNumeric is limited to
			// strings and numbers (primitives or objects)
			// that can be coerced to finite numbers (gh-2662)
			var type = typeof obj;
			return ( type === "number" || type === "string" ) &&

				// parseFloat NaNs numeric-cast false positives ("")
				// ...but misinterprets leading-number strings, e.g. hex literals ("0x...")
				// subtraction forces infinities to NaN
				!isNaN( obj - parseFloat( obj ) );
		},
		"jQuery.isNumeric() is deprecated"
	);

	// Populate the class2type map
	jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".
		split( " " ),
	function( _, name ) {
		class2type[ "[object " + name + "]" ] = name.toLowerCase();
	} );

	migrateWarnFunc( jQuery, "type", function( obj ) {
		if ( obj == null ) {
			return obj + "";
		}

		// Support: Android <=2.3 only (functionish RegExp)
		return typeof obj === "object" || typeof obj === "function" ?
			class2type[ Object.prototype.toString.call( obj ) ] || "object" :
			typeof obj;
	},
	"jQuery.type is deprecated" );

	migrateWarnFunc( jQuery, "isFunction",
		function( obj ) {
			return typeof obj === "function";
		},
		"jQuery.isFunction() is deprecated" );

	migrateWarnFunc( jQuery, "isWindow",
		function( obj ) {
			return obj != null && obj === obj.window;
		},
		"jQuery.isWindow() is deprecated"
	);
}

// Support jQuery slim which excludes the ajax module
if ( jQuery.ajax ) {

var oldAjax = jQuery.ajax,
	rjsonp = /(=)\?(?=&|$)|\?\?/;

jQuery.ajax = function( ) {
	var jQXHR = oldAjax.apply( this, arguments );

	// Be sure we got a jQXHR (e.g., not sync)
	if ( jQXHR.promise ) {
		migrateWarnFunc( jQXHR, "success", jQXHR.done,
			"jQXHR.success is deprecated and removed" );
		migrateWarnFunc( jQXHR, "error", jQXHR.fail,
			"jQXHR.error is deprecated and removed" );
		migrateWarnFunc( jQXHR, "complete", jQXHR.always,
			"jQXHR.complete is deprecated and removed" );
	}

	return jQXHR;
};

// Only trigger the logic in jQuery <4 as the JSON-to-JSONP auto-promotion
// behavior is gone in jQuery 4.0 and as it has security implications, we don't
// want to restore the legacy behavior.
if ( !jQueryVersionSince( "4.0.0" ) ) {

	// Register this prefilter before the jQuery one. Otherwise, a promoted
	// request is transformed into one with the script dataType and we can't
	// catch it anymore.
	jQuery.ajaxPrefilter( "+json", function( s ) {

		// Warn if JSON-to-JSONP auto-promotion happens.
		if ( s.jsonp !== false && ( rjsonp.test( s.url ) ||
				typeof s.data === "string" &&
				( s.contentType || "" )
					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
				rjsonp.test( s.data )
		) ) {
			migrateWarn( "JSON-to-JSONP auto-promotion is deprecated" );
		}
	} );
}

}

var oldRemoveAttr = jQuery.fn.removeAttr,
	oldToggleClass = jQuery.fn.toggleClass,
	rmatchNonSpace = /\S+/g;

jQuery.fn.removeAttr = function( name ) {
	var self = this;

	jQuery.each( name.match( rmatchNonSpace ), function( _i, attr ) {
		if ( jQuery.expr.match.bool.test( attr ) ) {
			migrateWarn( "jQuery.fn.removeAttr no longer sets boolean properties: " + attr );
			self.prop( attr, false );
		}
	} );

	return oldRemoveAttr.apply( this, arguments );
};

jQuery.fn.toggleClass = function( state ) {

	// Only deprecating no-args or single boolean arg
	if ( state !== undefined && typeof state !== "boolean" ) {
		return oldToggleClass.apply( this, arguments );
	}

	migrateWarn( "jQuery.fn.toggleClass( boolean ) is deprecated" );

	// Toggle entire class name of each element
	return this.each( function() {
		var className = this.getAttribute && this.getAttribute( "class" ) || "";

		if ( className ) {
			jQuery.data( this, "__className__", className );
		}

		// If the element has a class name or if we're passed `false`,
		// then remove the whole classname (if there was one, the above saved it).
		// Otherwise bring back whatever was previously saved (if anything),
		// falling back to the empty string if nothing was stored.
		if ( this.setAttribute ) {
			this.setAttribute( "class",
				className || state === false ?
				"" :
				jQuery.data( this, "__className__" ) || ""
			);
		}
	} );
};

function camelCase( string ) {
	return string.replace( /-([a-z])/g, function( _, letter ) {
		return letter.toUpperCase();
	} );
}

var oldFnCss,
	internalSwapCall = false,
	ralphaStart = /^[a-z]/,

	// The regex visualized:
	//
	//                         /----------\
	//                        |            |    /-------\
	//                        |  / Top  \  |   |         |
	//         /--- Border ---+-| Right  |-+---+- Width -+---\
	//        |                 | Bottom |                    |
	//        |                  \ Left /                     |
	//        |                                               |
	//        |                              /----------\     |
	//        |          /-------------\    |            |    |- END
	//        |         |               |   |  / Top  \  |    |
	//        |         |  / Margin  \  |   | | Right  | |    |
	//        |---------+-|           |-+---+-| Bottom |-+----|
	//        |            \ Padding /         \ Left /       |
	// BEGIN -|                                               |
	//        |                /---------\                    |
	//        |               |           |                   |
	//        |               |  / Min \  |    / Width  \     |
	//         \--------------+-|       |-+---|          |---/
	//                           \ Max /       \ Height /
	rautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;

// If this version of jQuery has .swap(), don't false-alarm on internal uses
if ( jQuery.swap ) {
	jQuery.each( [ "height", "width", "reliableMarginRight" ], function( _, name ) {
		var oldHook = jQuery.cssHooks[ name ] && jQuery.cssHooks[ name ].get;

		if ( oldHook ) {
			jQuery.cssHooks[ name ].get = function() {
				var ret;

				internalSwapCall = true;
				ret = oldHook.apply( this, arguments );
				internalSwapCall = false;
				return ret;
			};
		}
	} );
}

jQuery.swap = function( elem, options, callback, args ) {
	var ret, name,
		old = {};

	if ( !internalSwapCall ) {
		migrateWarn( "jQuery.swap() is undocumented and deprecated" );
	}

	// Remember the old values, and insert the new ones
	for ( name in options ) {
		old[ name ] = elem.style[ name ];
		elem.style[ name ] = options[ name ];
	}

	ret = callback.apply( elem, args || [] );

	// Revert the old values
	for ( name in options ) {
		elem.style[ name ] = old[ name ];
	}

	return ret;
};

if ( jQueryVersionSince( "3.4.0" ) && typeof Proxy !== "undefined" ) {

	jQuery.cssProps = new Proxy( jQuery.cssProps || {}, {
		set: function() {
			migrateWarn( "JQMIGRATE: jQuery.cssProps is deprecated" );
			return Reflect.set.apply( this, arguments );
		}
	} );
}

// Create a dummy jQuery.cssNumber if missing. It won't be used by jQuery but
// it will prevent code adding new keys to it unconditionally from crashing.
if ( !jQuery.cssNumber ) {
	jQuery.cssNumber = {};
}

function isAutoPx( prop ) {

	// The first test is used to ensure that:
	// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).
	// 2. The prop is not empty.
	return ralphaStart.test( prop ) &&
		rautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );
}

oldFnCss = jQuery.fn.css;

jQuery.fn.css = function( name, value ) {
	var camelName,
		origThis = this;
	if ( name && typeof name === "object" && !Array.isArray( name ) ) {
		jQuery.each( name, function( n, v ) {
			jQuery.fn.css.call( origThis, n, v );
		} );
		return this;
	}
	if ( typeof value === "number" ) {
		camelName = camelCase( name );
		if ( !isAutoPx( camelName ) && !jQuery.cssNumber[ camelName ] ) {
			migrateWarn( "Number-typed values are deprecated for jQuery.fn.css( \"" +
				name + "\", value )" );
		}
	}

	return oldFnCss.apply( this, arguments );
};

var oldData = jQuery.data;

jQuery.data = function( elem, name, value ) {
	var curData, sameKeys, key;

	// Name can be an object, and each entry in the object is meant to be set as data
	if ( name && typeof name === "object" && arguments.length === 2 ) {
		curData = jQuery.hasData( elem ) && oldData.call( this, elem );
		sameKeys = {};
		for ( key in name ) {
			if ( key !== camelCase( key ) ) {
				migrateWarn( "jQuery.data() always sets/gets camelCased names: " + key );
				curData[ key ] = name[ key ];
			} else {
				sameKeys[ key ] = name[ key ];
			}
		}

		oldData.call( this, elem, sameKeys );

		return name;
	}

	// If the name is transformed, look for the un-transformed name in the data object
	if ( name && typeof name === "string" && name !== camelCase( name ) ) {
		curData = jQuery.hasData( elem ) && oldData.call( this, elem );
		if ( curData && name in curData ) {
			migrateWarn( "jQuery.data() always sets/gets camelCased names: " + name );
			if ( arguments.length > 2 ) {
				curData[ name ] = value;
			}
			return curData[ name ];
		}
	}

	return oldData.apply( this, arguments );
};

// Support jQuery slim which excludes the effects module
if ( jQuery.fx ) {

var intervalValue, intervalMsg,
	oldTweenRun = jQuery.Tween.prototype.run,
	linearEasing = function( pct ) {
		return pct;
	};

jQuery.Tween.prototype.run = function( ) {
	if ( jQuery.easing[ this.easing ].length > 1 ) {
		migrateWarn(
			"'jQuery.easing." + this.easing.toString() + "' should use only one argument"
		);

		jQuery.easing[ this.easing ] = linearEasing;
	}

	oldTweenRun.apply( this, arguments );
};

intervalValue = jQuery.fx.interval || 13;
intervalMsg = "jQuery.fx.interval is deprecated";

// Support: IE9, Android <=4.4
// Avoid false positives on browsers that lack rAF
// Don't warn if document is hidden, jQuery uses setTimeout (#292)
if ( window.requestAnimationFrame ) {
	Object.defineProperty( jQuery.fx, "interval", {
		configurable: true,
		enumerable: true,
		get: function() {
			if ( !window.document.hidden ) {
				migrateWarn( intervalMsg );
			}
			return intervalValue;
		},
		set: function( newValue ) {
			migrateWarn( intervalMsg );
			intervalValue = newValue;
		}
	} );
}

}

var oldLoad = jQuery.fn.load,
	oldEventAdd = jQuery.event.add,
	originalFix = jQuery.event.fix;

jQuery.event.props = [];
jQuery.event.fixHooks = {};

migrateWarnProp( jQuery.event.props, "concat", jQuery.event.props.concat,
	"jQuery.event.props.concat() is deprecated and removed" );

jQuery.event.fix = function( originalEvent ) {
	var event,
		type = originalEvent.type,
		fixHook = this.fixHooks[ type ],
		props = jQuery.event.props;

	if ( props.length ) {
		migrateWarn( "jQuery.event.props are deprecated and removed: " + props.join() );
		while ( props.length ) {
			jQuery.event.addProp( props.pop() );
		}
	}

	if ( fixHook && !fixHook._migrated_ ) {
		fixHook._migrated_ = true;
		migrateWarn( "jQuery.event.fixHooks are deprecated and removed: " + type );
		if ( ( props = fixHook.props ) && props.length ) {
			while ( props.length ) {
				jQuery.event.addProp( props.pop() );
			}
		}
	}

	event = originalFix.call( this, originalEvent );

	return fixHook && fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
};

jQuery.event.add = function( elem, types ) {

	// This misses the multiple-types case but that seems awfully rare
	if ( elem === window && types === "load" && window.document.readyState === "complete" ) {
		migrateWarn( "jQuery(window).on('load'...) called after load event occurred" );
	}
	return oldEventAdd.apply( this, arguments );
};

jQuery.each( [ "load", "unload", "error" ], function( _, name ) {

	jQuery.fn[ name ] = function() {
		var args = Array.prototype.slice.call( arguments, 0 );

		// If this is an ajax load() the first arg should be the string URL;
		// technically this could also be the "Anything" arg of the event .load()
		// which just goes to show why this dumb signature has been deprecated!
		// jQuery custom builds that exclude the Ajax module justifiably die here.
		if ( name === "load" && typeof args[ 0 ] === "string" ) {
			return oldLoad.apply( this, args );
		}

		migrateWarn( "jQuery.fn." + name + "() is deprecated" );

		args.splice( 0, 0, name );
		if ( arguments.length ) {
			return this.on.apply( this, args );
		}

		// Use .triggerHandler here because:
		// - load and unload events don't need to bubble, only applied to window or image
		// - error event should not bubble to window, although it does pre-1.7
		// See http://bugs.jquery.com/ticket/11820
		this.triggerHandler.apply( this, args );
		return this;
	};

} );

jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
	function( _i, name ) {

	// Handle event binding
	jQuery.fn[ name ] = function( data, fn ) {
		migrateWarn( "jQuery.fn." + name + "() event shorthand is deprecated" );
		return arguments.length > 0 ?
			this.on( name, null, data, fn ) :
			this.trigger( name );
	};
} );

// Trigger "ready" event only once, on document ready
jQuery( function() {
	jQuery( window.document ).triggerHandler( "ready" );
} );

jQuery.event.special.ready = {
	setup: function() {
		if ( this === window.document ) {
			migrateWarn( "'ready' event is deprecated" );
		}
	}
};

jQuery.fn.extend( {

	bind: function( types, data, fn ) {
		migrateWarn( "jQuery.fn.bind() is deprecated" );
		return this.on( types, null, data, fn );
	},
	unbind: function( types, fn ) {
		migrateWarn( "jQuery.fn.unbind() is deprecated" );
		return this.off( types, null, fn );
	},
	delegate: function( selector, types, data, fn ) {
		migrateWarn( "jQuery.fn.delegate() is deprecated" );
		return this.on( types, selector, data, fn );
	},
	undelegate: function( selector, types, fn ) {
		migrateWarn( "jQuery.fn.undelegate() is deprecated" );
		return arguments.length === 1 ?
			this.off( selector, "**" ) :
			this.off( types, selector || "**", fn );
	},
	hover: function( fnOver, fnOut ) {
		migrateWarn( "jQuery.fn.hover() is deprecated" );
		return this.on( "mouseenter", fnOver ).on( "mouseleave", fnOut || fnOver );
	}
} );

var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
	origHtmlPrefilter = jQuery.htmlPrefilter,
	makeMarkup = function( html ) {
		var doc = window.document.implementation.createHTMLDocument( "" );
		doc.body.innerHTML = html;
		return doc.body && doc.body.innerHTML;
	},
	warnIfChanged = function( html ) {
		var changed = html.replace( rxhtmlTag, "<$1></$2>" );
		if ( changed !== html && makeMarkup( html ) !== makeMarkup( changed ) ) {
			migrateWarn( "HTML tags must be properly nested and closed: " + html );
		}
	};

jQuery.UNSAFE_restoreLegacyHtmlPrefilter = function() {
	jQuery.htmlPrefilter = function( html ) {
		warnIfChanged( html );
		return html.replace( rxhtmlTag, "<$1></$2>" );
	};
};

jQuery.htmlPrefilter = function( html ) {
	warnIfChanged( html );
	return origHtmlPrefilter( html );
};

var oldOffset = jQuery.fn.offset;

jQuery.fn.offset = function() {
	var elem = this[ 0 ];

	if ( elem && ( !elem.nodeType || !elem.getBoundingClientRect ) ) {
		migrateWarn( "jQuery.fn.offset() requires a valid DOM element" );
		return arguments.length ? this : undefined;
	}

	return oldOffset.apply( this, arguments );
};

// Support jQuery slim which excludes the ajax module
// The jQuery.param patch is about respecting `jQuery.ajaxSettings.traditional`
// so it doesn't make sense for the slim build.
if ( jQuery.ajax ) {

var oldParam = jQuery.param;

jQuery.param = function( data, traditional ) {
	var ajaxTraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;

	if ( traditional === undefined && ajaxTraditional ) {

		migrateWarn( "jQuery.param() no longer uses jQuery.ajaxSettings.traditional" );
		traditional = ajaxTraditional;
	}

	return oldParam.call( this, data, traditional );
};

}

var oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;

jQuery.fn.andSelf = function() {
	migrateWarn( "jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()" );
	return oldSelf.apply( this, arguments );
};

// Support jQuery slim which excludes the deferred module in jQuery 4.0+
if ( jQuery.Deferred ) {

var oldDeferred = jQuery.Deferred,
	tuples = [

		// Action, add listener, callbacks, .then handlers, final state
		[ "resolve", "done", jQuery.Callbacks( "once memory" ),
			jQuery.Callbacks( "once memory" ), "resolved" ],
		[ "reject", "fail", jQuery.Callbacks( "once memory" ),
			jQuery.Callbacks( "once memory" ), "rejected" ],
		[ "notify", "progress", jQuery.Callbacks( "memory" ),
			jQuery.Callbacks( "memory" ) ]
	];

jQuery.Deferred = function( func ) {
	var deferred = oldDeferred(),
		promise = deferred.promise();

	deferred.pipe = promise.pipe = function( /* fnDone, fnFail, fnProgress */ ) {
		var fns = arguments;

		migrateWarn( "deferred.pipe() is deprecated" );

		return jQuery.Deferred( function( newDefer ) {
			jQuery.each( tuples, function( i, tuple ) {
				var fn = typeof fns[ i ] === "function" && fns[ i ];

				// Deferred.done(function() { bind to newDefer or newDefer.resolve })
				// deferred.fail(function() { bind to newDefer or newDefer.reject })
				// deferred.progress(function() { bind to newDefer or newDefer.notify })
				deferred[ tuple[ 1 ] ]( function() {
					var returned = fn && fn.apply( this, arguments );
					if ( returned && typeof returned.promise === "function" ) {
						returned.promise()
							.done( newDefer.resolve )
							.fail( newDefer.reject )
							.progress( newDefer.notify );
					} else {
						newDefer[ tuple[ 0 ] + "With" ](
							this === promise ? newDefer.promise() : this,
							fn ? [ returned ] : arguments
						);
					}
				} );
			} );
			fns = null;
		} ).promise();

	};

	if ( func ) {
		func.call( deferred, deferred );
	}

	return deferred;
};

// Preserve handler of uncaught exceptions in promise chains
jQuery.Deferred.exceptionHook = oldDeferred.exceptionHook;

}

return jQuery;
} );
;
/*
 AngularJS v1.8.3
 (c) 2010-2020 Google LLC. http://angularjs.org
 License: MIT
*/
(function (z) {
    'use strict'; function ve(a) { if (D(a)) w(a.objectMaxDepth) && (Xb.objectMaxDepth = Yb(a.objectMaxDepth) ? a.objectMaxDepth : NaN), w(a.urlErrorParamsEnabled) && Ga(a.urlErrorParamsEnabled) && (Xb.urlErrorParamsEnabled = a.urlErrorParamsEnabled); else return Xb } function Yb(a) { return X(a) && 0 < a } function F(a, b) {
        b = b || Error; return function () {
            var d = arguments[0], c; c = "[" + (a ? a + ":" : "") + d + "] http://errors.angularjs.org/1.8.3/" + (a ? a + "/" : "") + d; for (d = 1; d < arguments.length; d++) {
                c = c + (1 == d ? "?" : "&") + "p" + (d - 1) + "="; var e = encodeURIComponent,
                    f; f = arguments[d]; f = "function" == typeof f ? f.toString().replace(/ \{[\s\S]*$/, "") : "undefined" == typeof f ? "undefined" : "string" != typeof f ? JSON.stringify(f) : f; c += e(f)
            } return new b(c)
        }
    } function za(a) { if (null == a || $a(a)) return !1; if (H(a) || C(a) || x && a instanceof x) return !0; var b = "length" in Object(a) && a.length; return X(b) && (0 <= b && b - 1 in a || "function" === typeof a.item) } function r(a, b, d) {
        var c, e; if (a) if (B(a)) for (c in a) "prototype" !== c && "length" !== c && "name" !== c && a.hasOwnProperty(c) && b.call(d, a[c], c, a); else if (H(a) ||
            za(a)) { var f = "object" !== typeof a; c = 0; for (e = a.length; c < e; c++)(f || c in a) && b.call(d, a[c], c, a) } else if (a.forEach && a.forEach !== r) a.forEach(b, d, a); else if (Pc(a)) for (c in a) b.call(d, a[c], c, a); else if ("function" === typeof a.hasOwnProperty) for (c in a) a.hasOwnProperty(c) && b.call(d, a[c], c, a); else for (c in a) ta.call(a, c) && b.call(d, a[c], c, a); return a
    } function Qc(a, b, d) { for (var c = Object.keys(a).sort(), e = 0; e < c.length; e++)b.call(d, a[c[e]], c[e]); return c } function Zb(a) { return function (b, d) { a(d, b) } } function we() { return ++qb }
    function $b(a, b, d) { for (var c = a.$$hashKey, e = 0, f = b.length; e < f; ++e) { var g = b[e]; if (D(g) || B(g)) for (var k = Object.keys(g), h = 0, l = k.length; h < l; h++) { var m = k[h], p = g[m]; d && D(p) ? ha(p) ? a[m] = new Date(p.valueOf()) : ab(p) ? a[m] = new RegExp(p) : p.nodeName ? a[m] = p.cloneNode(!0) : ac(p) ? a[m] = p.clone() : "__proto__" !== m && (D(a[m]) || (a[m] = H(p) ? [] : {}), $b(a[m], [p], !0)) : a[m] = p } } c ? a.$$hashKey = c : delete a.$$hashKey; return a } function S(a) { return $b(a, Ha.call(arguments, 1), !1) } function xe(a) { return $b(a, Ha.call(arguments, 1), !0) } function fa(a) {
        return parseInt(a,
            10)
    } function bc(a, b) { return S(Object.create(a), b) } function E() { } function Ta(a) { return a } function ia(a) { return function () { return a } } function cc(a) { return B(a.toString) && a.toString !== la } function A(a) { return "undefined" === typeof a } function w(a) { return "undefined" !== typeof a } function D(a) { return null !== a && "object" === typeof a } function Pc(a) { return null !== a && "object" === typeof a && !Rc(a) } function C(a) { return "string" === typeof a } function X(a) { return "number" === typeof a } function ha(a) { return "[object Date]" === la.call(a) }
    function H(a) { return Array.isArray(a) || a instanceof Array } function dc(a) { switch (la.call(a)) { case "[object Error]": return !0; case "[object Exception]": return !0; case "[object DOMException]": return !0; default: return a instanceof Error } } function B(a) { return "function" === typeof a } function ab(a) { return "[object RegExp]" === la.call(a) } function $a(a) { return a && a.window === a } function bb(a) { return a && a.$evalAsync && a.$watch } function Ga(a) { return "boolean" === typeof a } function ye(a) { return a && X(a.length) && ze.test(la.call(a)) }
    function ac(a) { return !(!a || !(a.nodeName || a.prop && a.attr && a.find)) } function Ae(a) { var b = {}; a = a.split(","); var d; for (d = 0; d < a.length; d++)b[a[d]] = !0; return b } function ua(a) { return K(a.nodeName || a[0] && a[0].nodeName) } function cb(a, b) { var d = a.indexOf(b); 0 <= d && a.splice(d, 1); return d } function Ia(a, b, d) {
        function c(a, b, c) {
            c--; if (0 > c) return "..."; var d = b.$$hashKey, f; if (H(a)) { f = 0; for (var g = a.length; f < g; f++)b.push(e(a[f], c)) } else if (Pc(a)) for (f in a) b[f] = e(a[f], c); else if (a && "function" === typeof a.hasOwnProperty) for (f in a) a.hasOwnProperty(f) &&
                (b[f] = e(a[f], c)); else for (f in a) ta.call(a, f) && (b[f] = e(a[f], c)); d ? b.$$hashKey = d : delete b.$$hashKey; return b
        } function e(a, b) { if (!D(a)) return a; var d = g.indexOf(a); if (-1 !== d) return k[d]; if ($a(a) || bb(a)) throw oa("cpws"); var d = !1, e = f(a); void 0 === e && (e = H(a) ? [] : Object.create(Rc(a)), d = !0); g.push(a); k.push(e); return d ? c(a, e, b) : e } function f(a) {
            switch (la.call(a)) {
                case "[object Int8Array]": case "[object Int16Array]": case "[object Int32Array]": case "[object Float32Array]": case "[object Float64Array]": case "[object Uint8Array]": case "[object Uint8ClampedArray]": case "[object Uint16Array]": case "[object Uint32Array]": return new a.constructor(e(a.buffer),
                    a.byteOffset, a.length); case "[object ArrayBuffer]": if (!a.slice) { var b = new ArrayBuffer(a.byteLength); (new Uint8Array(b)).set(new Uint8Array(a)); return b } return a.slice(0); case "[object Boolean]": case "[object Number]": case "[object String]": case "[object Date]": return new a.constructor(a.valueOf()); case "[object RegExp]": return b = new RegExp(a.source, a.toString().match(/[^/]*$/)[0]), b.lastIndex = a.lastIndex, b; case "[object Blob]": return new a.constructor([a], { type: a.type })
            }if (B(a.cloneNode)) return a.cloneNode(!0)
        }
        var g = [], k = []; d = Yb(d) ? d : NaN; if (b) { if (ye(b) || "[object ArrayBuffer]" === la.call(b)) throw oa("cpta"); if (a === b) throw oa("cpi"); H(b) ? b.length = 0 : r(b, function (a, c) { "$$hashKey" !== c && delete b[c] }); g.push(a); k.push(b); return c(a, b, d) } return e(a, d)
    } function ec(a, b) { return a === b || a !== a && b !== b } function va(a, b) {
        if (a === b) return !0; if (null === a || null === b) return !1; if (a !== a && b !== b) return !0; var d = typeof a, c; if (d === typeof b && "object" === d) if (H(a)) {
            if (!H(b)) return !1; if ((d = a.length) === b.length) {
                for (c = 0; c < d; c++)if (!va(a[c],
                    b[c])) return !1; return !0
            }
        } else { if (ha(a)) return ha(b) ? ec(a.getTime(), b.getTime()) : !1; if (ab(a)) return ab(b) ? a.toString() === b.toString() : !1; if (bb(a) || bb(b) || $a(a) || $a(b) || H(b) || ha(b) || ab(b)) return !1; d = T(); for (c in a) if ("$" !== c.charAt(0) && !B(a[c])) { if (!va(a[c], b[c])) return !1; d[c] = !0 } for (c in b) if (!(c in d) && "$" !== c.charAt(0) && w(b[c]) && !B(b[c])) return !1; return !0 } return !1
    } function db(a, b, d) { return a.concat(Ha.call(b, d)) } function Va(a, b) {
        var d = 2 < arguments.length ? Ha.call(arguments, 2) : []; return !B(b) || b instanceof
            RegExp ? b : d.length ? function () { return arguments.length ? b.apply(a, db(d, arguments, 0)) : b.apply(a, d) } : function () { return arguments.length ? b.apply(a, arguments) : b.call(a) }
    } function Sc(a, b) { var d = b; "string" === typeof a && "$" === a.charAt(0) && "$" === a.charAt(1) ? d = void 0 : $a(b) ? d = "$WINDOW" : b && z.document === b ? d = "$DOCUMENT" : bb(b) && (d = "$SCOPE"); return d } function eb(a, b) { if (!A(a)) return X(b) || (b = b ? 2 : null), JSON.stringify(a, Sc, b) } function Tc(a) { return C(a) ? JSON.parse(a) : a } function fc(a, b) {
        a = a.replace(Be, ""); var d = Date.parse("Jan 01, 1970 00:00:00 " +
            a) / 6E4; return Y(d) ? b : d
    } function Uc(a, b) { a = new Date(a.getTime()); a.setMinutes(a.getMinutes() + b); return a } function gc(a, b, d) { d = d ? -1 : 1; var c = a.getTimezoneOffset(); b = fc(b, c); return Uc(a, d * (b - c)) } function Aa(a) { a = x(a).clone().empty(); var b = x("<div></div>").append(a).html(); try { return a[0].nodeType === Pa ? K(b) : b.match(/^(<[^>]+>)/)[1].replace(/^<([\w-]+)/, function (a, b) { return "<" + K(b) }) } catch (d) { return K(b) } } function Vc(a) { try { return decodeURIComponent(a) } catch (b) { } } function hc(a) {
        var b = {}; r((a || "").split("&"),
            function (a) { var c, e, f; a && (e = a = a.replace(/\+/g, "%20"), c = a.indexOf("="), -1 !== c && (e = a.substring(0, c), f = a.substring(c + 1)), e = Vc(e), w(e) && (f = w(f) ? Vc(f) : !0, ta.call(b, e) ? H(b[e]) ? b[e].push(f) : b[e] = [b[e], f] : b[e] = f)) }); return b
    } function Ce(a) { var b = []; r(a, function (a, c) { H(a) ? r(a, function (a) { b.push(ba(c, !0) + (!0 === a ? "" : "=" + ba(a, !0))) }) : b.push(ba(c, !0) + (!0 === a ? "" : "=" + ba(a, !0))) }); return b.length ? b.join("&") : "" } function ic(a) { return ba(a, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+") } function ba(a,
        b) { return encodeURIComponent(a).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%3B/gi, ";").replace(/%20/g, b ? "%20" : "+") } function De(a, b) { var d, c, e = Qa.length; for (c = 0; c < e; ++c)if (d = Qa[c] + b, C(d = a.getAttribute(d))) return d; return null } function Ee(a, b) {
            var d, c, e = {}; r(Qa, function (b) { b += "app"; !d && a.hasAttribute && a.hasAttribute(b) && (d = a, c = a.getAttribute(b)) }); r(Qa, function (b) { b += "app"; var e; !d && (e = a.querySelector("[" + b.replace(":", "\\:") + "]")) && (d = e, c = e.getAttribute(b)) });
            d && (Fe ? (e.strictDi = null !== De(d, "strict-di"), b(d, c ? [c] : [], e)) : z.console.error("AngularJS: disabling automatic bootstrap. <script> protocol indicates an extension, document.location.href does not match."))
        } function Wc(a, b, d) {
            D(d) || (d = {}); d = S({ strictDi: !1 }, d); var c = function () {
                a = x(a); if (a.injector()) { var c = a[0] === z.document ? "document" : Aa(a); throw oa("btstrpd", c.replace(/</, "&lt;").replace(/>/, "&gt;")); } b = b || []; b.unshift(["$provide", function (b) { b.value("$rootElement", a) }]); d.debugInfoEnabled && b.push(["$compileProvider",
                    function (a) { a.debugInfoEnabled(!0) }]); b.unshift("ng"); c = fb(b, d.strictDi); c.invoke(["$rootScope", "$rootElement", "$compile", "$injector", function (a, b, c, d) { a.$apply(function () { b.data("$injector", d); c(b)(a) }) }]); return c
            }, e = /^NG_ENABLE_DEBUG_INFO!/, f = /^NG_DEFER_BOOTSTRAP!/; z && e.test(z.name) && (d.debugInfoEnabled = !0, z.name = z.name.replace(e, "")); if (z && !f.test(z.name)) return c(); z.name = z.name.replace(f, ""); ca.resumeBootstrap = function (a) { r(a, function (a) { b.push(a) }); return c() }; B(ca.resumeDeferredBootstrap) &&
                ca.resumeDeferredBootstrap()
        } function Ge() { z.name = "NG_ENABLE_DEBUG_INFO!" + z.name; z.location.reload() } function He(a) { a = ca.element(a).injector(); if (!a) throw oa("test"); return a.get("$$testability") } function Xc(a, b) { b = b || "_"; return a.replace(Ie, function (a, c) { return (c ? b : "") + a.toLowerCase() }) } function Je() {
            var a; if (!Yc) {
                var b = rb(); (sb = A(b) ? z.jQuery : b ? z[b] : void 0) && sb.fn.on ? (x = sb, S(sb.fn, { scope: Wa.scope, isolateScope: Wa.isolateScope, controller: Wa.controller, injector: Wa.injector, inheritedData: Wa.inheritedData })) :
                    x = U; a = x.cleanData; x.cleanData = function (b) { for (var c, e = 0, f; null != (f = b[e]); e++)(c = (x._data(f) || {}).events) && c.$destroy && x(f).triggerHandler("$destroy"); a(b) }; ca.element = x; Yc = !0
            }
        } function Ke() { U.legacyXHTMLReplacement = !0 } function gb(a, b, d) { if (!a) throw oa("areq", b || "?", d || "required"); return a } function tb(a, b, d) { d && H(a) && (a = a[a.length - 1]); gb(B(a), b, "not a function, got " + (a && "object" === typeof a ? a.constructor.name || "Object" : typeof a)); return a } function Ja(a, b) {
            if ("hasOwnProperty" === a) throw oa("badname",
                b);
        } function Le(a, b, d) { if (!b) return a; b = b.split("."); for (var c, e = a, f = b.length, g = 0; g < f; g++)c = b[g], a && (a = (e = a)[c]); return !d && B(a) ? Va(e, a) : a } function ub(a) { for (var b = a[0], d = a[a.length - 1], c, e = 1; b !== d && (b = b.nextSibling); e++)if (c || a[e] !== b) c || (c = x(Ha.call(a, 0, e))), c.push(b); return c || a } function T() { return Object.create(null) } function jc(a) { if (null == a) return ""; switch (typeof a) { case "string": break; case "number": a = "" + a; break; default: a = !cc(a) || H(a) || ha(a) ? eb(a) : a.toString() }return a } function Me(a) {
            function b(a,
                b, c) { return a[b] || (a[b] = c()) } var d = F("$injector"), c = F("ng"); a = b(a, "angular", Object); a.$$minErr = a.$$minErr || F; return b(a, "module", function () {
                    var a = {}; return function (f, g, k) {
                        var h = {}; if ("hasOwnProperty" === f) throw c("badname", "module"); g && a.hasOwnProperty(f) && (a[f] = null); return b(a, f, function () {
                            function a(b, c, d, f) { f || (f = e); return function () { f[d || "push"]([b, c, arguments]); return t } } function b(a, c, d) { d || (d = e); return function (b, e) { e && B(e) && (e.$$moduleName = f); d.push([a, c, arguments]); return t } } if (!g) throw d("nomod",
                                f); var e = [], n = [], s = [], G = a("$injector", "invoke", "push", n), t = {
                                    _invokeQueue: e, _configBlocks: n, _runBlocks: s, info: function (a) { if (w(a)) { if (!D(a)) throw c("aobj", "value"); h = a; return this } return h }, requires: g, name: f, provider: b("$provide", "provider"), factory: b("$provide", "factory"), service: b("$provide", "service"), value: a("$provide", "value"), constant: a("$provide", "constant", "unshift"), decorator: b("$provide", "decorator", n), animation: b("$animateProvider", "register"), filter: b("$filterProvider", "register"), controller: b("$controllerProvider",
                                        "register"), directive: b("$compileProvider", "directive"), component: b("$compileProvider", "component"), config: G, run: function (a) { s.push(a); return this }
                                }; k && G(k); return t
                        })
                    }
                })
        } function ja(a, b) { if (H(a)) { b = b || []; for (var d = 0, c = a.length; d < c; d++)b[d] = a[d] } else if (D(a)) for (d in b = b || {}, a) if ("$" !== d.charAt(0) || "$" !== d.charAt(1)) b[d] = a[d]; return b || a } function Ne(a, b) { var d = []; Yb(b) && (a = ca.copy(a, null, b)); return JSON.stringify(a, function (a, b) { b = Sc(a, b); if (D(b)) { if (0 <= d.indexOf(b)) return "..."; d.push(b) } return b }) }
    function Oe(a) {
        S(a, { errorHandlingConfig: ve, bootstrap: Wc, copy: Ia, extend: S, merge: xe, equals: va, element: x, forEach: r, injector: fb, noop: E, bind: Va, toJson: eb, fromJson: Tc, identity: Ta, isUndefined: A, isDefined: w, isString: C, isFunction: B, isObject: D, isNumber: X, isElement: ac, isArray: H, version: Pe, isDate: ha, callbacks: { $$counter: 0 }, getTestability: He, reloadWithDebugInfo: Ge, UNSAFE_restoreLegacyJqLiteXHTMLReplacement: Ke, $$minErr: F, $$csp: Ba, $$encodeUriSegment: ic, $$encodeUriQuery: ba, $$lowercase: K, $$stringify: jc, $$uppercase: vb });
        lc = Me(z); lc("ng", ["ngLocale"], ["$provide", function (a) {
            a.provider({ $$sanitizeUri: Qe }); a.provider("$compile", Zc).directive({
                a: Re, input: $c, textarea: $c, form: Se, script: Te, select: Ue, option: Ve, ngBind: We, ngBindHtml: Xe, ngBindTemplate: Ye, ngClass: Ze, ngClassEven: $e, ngClassOdd: af, ngCloak: bf, ngController: cf, ngForm: df, ngHide: ef, ngIf: ff, ngInclude: gf, ngInit: hf, ngNonBindable: jf, ngPluralize: kf, ngRef: lf, ngRepeat: mf, ngShow: nf, ngStyle: of, ngSwitch: pf, ngSwitchWhen: qf, ngSwitchDefault: rf, ngOptions: sf, ngTransclude: tf, ngModel: uf,
                ngList: vf, ngChange: wf, pattern: ad, ngPattern: ad, required: bd, ngRequired: bd, minlength: cd, ngMinlength: cd, maxlength: dd, ngMaxlength: dd, ngValue: xf, ngModelOptions: yf
            }).directive({ ngInclude: zf, input: Af }).directive(wb).directive(ed); a.provider({
                $anchorScroll: Bf, $animate: Cf, $animateCss: Df, $$animateJs: Ef, $$animateQueue: Ff, $$AnimateRunner: Gf, $$animateAsyncRun: Hf, $browser: If, $cacheFactory: Jf, $controller: Kf, $document: Lf, $$isDocumentHidden: Mf, $exceptionHandler: Nf, $filter: fd, $$forceReflow: Of, $interpolate: Pf, $interval: Qf,
                $$intervalFactory: Rf, $http: Sf, $httpParamSerializer: Tf, $httpParamSerializerJQLike: Uf, $httpBackend: Vf, $xhrFactory: Wf, $jsonpCallbacks: Xf, $location: Yf, $log: Zf, $parse: $f, $rootScope: ag, $q: bg, $$q: cg, $sce: dg, $sceDelegate: eg, $sniffer: fg, $$taskTrackerFactory: gg, $templateCache: hg, $templateRequest: ig, $$testability: jg, $timeout: kg, $window: lg, $$rAF: mg, $$jqLite: ng, $$Map: og, $$cookieReader: pg
            })
        }]).info({ angularVersion: "1.8.3" })
    } function xb(a, b) { return b.toUpperCase() } function yb(a) { return a.replace(qg, xb) } function mc(a) {
        a =
        a.nodeType; return 1 === a || !a || 9 === a
    } function gd(a, b) {
        var d, c, e, f = b.createDocumentFragment(), g = [], k; if (nc.test(a)) { d = f.appendChild(b.createElement("div")); c = (rg.exec(a) || ["", ""])[1].toLowerCase(); e = U.legacyXHTMLReplacement ? a.replace(sg, "<$1></$2>") : a; if (10 > wa) for (c = hb[c] || hb._default, d.innerHTML = c[1] + e + c[2], k = c[0]; k--;)d = d.firstChild; else { c = qa[c] || []; for (k = c.length; -1 < --k;)d.appendChild(z.document.createElement(c[k])), d = d.firstChild; d.innerHTML = e } g = db(g, d.childNodes); d = f.firstChild; d.textContent = "" } else g.push(b.createTextNode(a));
        f.textContent = ""; f.innerHTML = ""; r(g, function (a) { f.appendChild(a) }); return f
    } function U(a) { if (a instanceof U) return a; var b; C(a) && (a = V(a), b = !0); if (!(this instanceof U)) { if (b && "<" !== a.charAt(0)) throw oc("nosel"); return new U(a) } if (b) { b = z.document; var d; a = (d = tg.exec(a)) ? [b.createElement(d[1])] : (d = gd(a, b)) ? d.childNodes : []; pc(this, a) } else B(a) ? hd(a) : pc(this, a) } function qc(a) { return a.cloneNode(!0) } function zb(a, b) { !b && mc(a) && x.cleanData([a]); a.querySelectorAll && x.cleanData(a.querySelectorAll("*")) } function id(a) {
        for (var b in a) return !1;
        return !0
    } function jd(a) { var b = a.ng339, d = b && Ka[b], c = d && d.events, d = d && d.data; d && !id(d) || c && !id(c) || (delete Ka[b], a.ng339 = void 0) } function kd(a, b, d, c) { if (w(c)) throw oc("offargs"); var e = (c = Ab(a)) && c.events, f = c && c.handle; if (f) { if (b) { var g = function (b) { var c = e[b]; w(d) && cb(c || [], d); w(d) && c && 0 < c.length || (a.removeEventListener(b, f), delete e[b]) }; r(b.split(" "), function (a) { g(a); Bb[a] && g(Bb[a]) }) } else for (b in e) "$destroy" !== b && a.removeEventListener(b, f), delete e[b]; jd(a) } } function rc(a, b) {
        var d = a.ng339; if (d =
            d && Ka[d]) b ? delete d.data[b] : d.data = {}, jd(a)
    } function Ab(a, b) { var d = a.ng339, d = d && Ka[d]; b && !d && (a.ng339 = d = ++ug, d = Ka[d] = { events: {}, data: {}, handle: void 0 }); return d } function sc(a, b, d) { if (mc(a)) { var c, e = w(d), f = !e && b && !D(b), g = !b; a = (a = Ab(a, !f)) && a.data; if (e) a[yb(b)] = d; else { if (g) return a; if (f) return a && a[yb(b)]; for (c in b) a[yb(c)] = b[c] } } } function Cb(a, b) { return a.getAttribute ? -1 < (" " + (a.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").indexOf(" " + b + " ") : !1 } function Db(a, b) {
        if (b && a.setAttribute) {
            var d =
                (" " + (a.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " "), c = d; r(b.split(" "), function (a) { a = V(a); c = c.replace(" " + a + " ", " ") }); c !== d && a.setAttribute("class", V(c))
        }
    } function Eb(a, b) { if (b && a.setAttribute) { var d = (" " + (a.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " "), c = d; r(b.split(" "), function (a) { a = V(a); -1 === c.indexOf(" " + a + " ") && (c += a + " ") }); c !== d && a.setAttribute("class", V(c)) } } function pc(a, b) {
        if (b) if (b.nodeType) a[a.length++] = b; else {
            var d = b.length; if ("number" === typeof d && b.window !== b) {
                if (d) for (var c =
                    0; c < d; c++)a[a.length++] = b[c]
            } else a[a.length++] = b
        }
    } function ld(a, b) { return Fb(a, "$" + (b || "ngController") + "Controller") } function Fb(a, b, d) { 9 === a.nodeType && (a = a.documentElement); for (b = H(b) ? b : [b]; a;) { for (var c = 0, e = b.length; c < e; c++)if (w(d = x.data(a, b[c]))) return d; a = a.parentNode || 11 === a.nodeType && a.host } } function md(a) { for (zb(a, !0); a.firstChild;)a.removeChild(a.firstChild) } function Gb(a, b) { b || zb(a); var d = a.parentNode; d && d.removeChild(a) } function vg(a, b) {
        b = b || z; if ("complete" === b.document.readyState) b.setTimeout(a);
        else x(b).on("load", a)
    } function hd(a) { function b() { z.document.removeEventListener("DOMContentLoaded", b); z.removeEventListener("load", b); a() } "complete" === z.document.readyState ? z.setTimeout(a) : (z.document.addEventListener("DOMContentLoaded", b), z.addEventListener("load", b)) } function nd(a, b) { var d = Hb[b.toLowerCase()]; return d && od[ua(a)] && d } function wg(a, b) {
        var d = function (c, d) {
            c.isDefaultPrevented = function () { return c.defaultPrevented }; var f = b[d || c.type], g = f ? f.length : 0; if (g) {
                if (A(c.immediatePropagationStopped)) {
                    var k =
                        c.stopImmediatePropagation; c.stopImmediatePropagation = function () { c.immediatePropagationStopped = !0; c.stopPropagation && c.stopPropagation(); k && k.call(c) }
                } c.isImmediatePropagationStopped = function () { return !0 === c.immediatePropagationStopped }; var h = f.specialHandlerWrapper || xg; 1 < g && (f = ja(f)); for (var l = 0; l < g; l++)c.isImmediatePropagationStopped() || h(a, c, f[l])
            }
        }; d.elem = a; return d
    } function xg(a, b, d) { d.call(a, b) } function yg(a, b, d) { var c = b.relatedTarget; c && (c === a || zg.call(a, c)) || d.call(a, b) } function ng() {
        this.$get =
        function () { return S(U, { hasClass: function (a, b) { a.attr && (a = a[0]); return Cb(a, b) }, addClass: function (a, b) { a.attr && (a = a[0]); return Eb(a, b) }, removeClass: function (a, b) { a.attr && (a = a[0]); return Db(a, b) } }) }
    } function La(a, b) { var d = a && a.$$hashKey; if (d) return "function" === typeof d && (d = a.$$hashKey()), d; d = typeof a; return d = "function" === d || "object" === d && null !== a ? a.$$hashKey = d + ":" + (b || we)() : d + ":" + a } function pd() { this._keys = []; this._values = []; this._lastKey = NaN; this._lastIndex = -1 } function qd(a) {
        a = Function.prototype.toString.call(a).replace(Ag,
            ""); return a.match(Bg) || a.match(Cg)
    } function Dg(a) { return (a = qd(a)) ? "function(" + (a[1] || "").replace(/[\s\r\n]+/, " ") + ")" : "fn" } function fb(a, b) {
        function d(a) { return function (b, c) { if (D(b)) r(b, Zb(a)); else return a(b, c) } } function c(a, b) { Ja(a, "service"); if (B(b) || H(b)) b = n.instantiate(b); if (!b.$get) throw Ca("pget", a); return p[a + "Provider"] = b } function e(a, b) { return function () { var c = t.invoke(b, this); if (A(c)) throw Ca("undef", a); return c } } function f(a, b, d) { return c(a, { $get: !1 !== d ? e(a, b) : b }) } function g(a) {
            gb(A(a) ||
                H(a), "modulesToLoad", "not an array"); var b = [], c; r(a, function (a) {
                    function d(a) { var b, c; b = 0; for (c = a.length; b < c; b++) { var e = a[b], f = n.get(e[0]); f[e[1]].apply(f, e[2]) } } if (!m.get(a)) {
                        m.set(a, !0); try { C(a) ? (c = lc(a), t.modules[a] = c, b = b.concat(g(c.requires)).concat(c._runBlocks), d(c._invokeQueue), d(c._configBlocks)) : B(a) ? b.push(n.invoke(a)) : H(a) ? b.push(n.invoke(a)) : tb(a, "module") } catch (e) {
                            throw H(a) && (a = a[a.length - 1]), e.message && e.stack && -1 === e.stack.indexOf(e.message) && (e = e.message + "\n" + e.stack), Ca("modulerr",
                                a, e.stack || e.message || e);
                        }
                    }
                }); return b
        } function k(a, c) {
            function d(b, e) { if (a.hasOwnProperty(b)) { if (a[b] === h) throw Ca("cdep", b + " <- " + l.join(" <- ")); return a[b] } try { return l.unshift(b), a[b] = h, a[b] = c(b, e), a[b] } catch (f) { throw a[b] === h && delete a[b], f; } finally { l.shift() } } function e(a, c, f) { var g = []; a = fb.$$annotate(a, b, f); for (var h = 0, k = a.length; h < k; h++) { var l = a[h]; if ("string" !== typeof l) throw Ca("itkn", l); g.push(c && c.hasOwnProperty(l) ? c[l] : d(l, f)) } return g } return {
                invoke: function (a, b, c, d) {
                    "string" === typeof c &&
                    (d = c, c = null); c = e(a, c, d); H(a) && (a = a[a.length - 1]); d = a; if (wa || "function" !== typeof d) d = !1; else { var f = d.$$ngIsClass; Ga(f) || (f = d.$$ngIsClass = /^class\b/.test(Function.prototype.toString.call(d))); d = f } return d ? (c.unshift(null), new (Function.prototype.bind.apply(a, c))) : a.apply(b, c)
                }, instantiate: function (a, b, c) { var d = H(a) ? a[a.length - 1] : a; a = e(a, b, c); a.unshift(null); return new (Function.prototype.bind.apply(d, a)) }, get: d, annotate: fb.$$annotate, has: function (b) { return p.hasOwnProperty(b + "Provider") || a.hasOwnProperty(b) }
            }
        }
        b = !0 === b; var h = {}, l = [], m = new Ib, p = { $provide: { provider: d(c), factory: d(f), service: d(function (a, b) { return f(a, ["$injector", function (a) { return a.instantiate(b) }]) }), value: d(function (a, b) { return f(a, ia(b), !1) }), constant: d(function (a, b) { Ja(a, "constant"); p[a] = b; s[a] = b }), decorator: function (a, b) { var c = n.get(a + "Provider"), d = c.$get; c.$get = function () { var a = t.invoke(d, c); return t.invoke(b, null, { $delegate: a }) } } } }, n = p.$injector = k(p, function (a, b) { ca.isString(b) && l.push(b); throw Ca("unpr", l.join(" <- ")); }), s = {},
            G = k(s, function (a, b) { var c = n.get(a + "Provider", b); return t.invoke(c.$get, c, void 0, a) }), t = G; p.$injectorProvider = { $get: ia(G) }; t.modules = n.modules = T(); var N = g(a), t = G.get("$injector"); t.strictDi = b; r(N, function (a) { a && t.invoke(a) }); t.loadNewModules = function (a) { r(g(a), function (a) { a && t.invoke(a) }) }; return t
    } function Bf() {
        var a = !0; this.disableAutoScrolling = function () { a = !1 }; this.$get = ["$window", "$location", "$rootScope", function (b, d, c) {
            function e(a) {
                var b = null; Array.prototype.some.call(a, function (a) {
                    if ("a" ===
                        ua(a)) return b = a, !0
                }); return b
            } function f(a) { if (a) { a.scrollIntoView(); var c; c = g.yOffset; B(c) ? c = c() : ac(c) ? (c = c[0], c = "fixed" !== b.getComputedStyle(c).position ? 0 : c.getBoundingClientRect().bottom) : X(c) || (c = 0); c && (a = a.getBoundingClientRect().top, b.scrollBy(0, a - c)) } else b.scrollTo(0, 0) } function g(a) { a = C(a) ? a : X(a) ? a.toString() : d.hash(); var b; a ? (b = k.getElementById(a)) ? f(b) : (b = e(k.getElementsByName(a))) ? f(b) : "top" === a && f(null) : f(null) } var k = b.document; a && c.$watch(function () { return d.hash() }, function (a, b) {
                a ===
                b && "" === a || vg(function () { c.$evalAsync(g) })
            }); return g
        }]
    } function ib(a, b) { if (!a && !b) return ""; if (!a) return b; if (!b) return a; H(a) && (a = a.join(" ")); H(b) && (b = b.join(" ")); return a + " " + b } function Eg(a) { C(a) && (a = a.split(" ")); var b = T(); r(a, function (a) { a.length && (b[a] = !0) }); return b } function ra(a) { return D(a) ? a : {} } function Fg(a, b, d, c, e) {
        function f() { pa = null; k() } function g() { t = y(); t = A(t) ? null : t; va(t, P) && (t = P); N = P = t } function k() { var a = N; g(); if (v !== h.url() || a !== t) v = h.url(), N = t, r(J, function (a) { a(h.url(), t) }) }
        var h = this, l = a.location, m = a.history, p = a.setTimeout, n = a.clearTimeout, s = {}, G = e(d); h.isMock = !1; h.$$completeOutstandingRequest = G.completeTask; h.$$incOutstandingRequestCount = G.incTaskCount; h.notifyWhenNoOutstandingRequests = G.notifyWhenNoPendingTasks; var t, N, v = l.href, kc = b.find("base"), pa = null, y = c.history ? function () { try { return m.state } catch (a) { } } : E; g(); h.url = function (b, d, e) {
            A(e) && (e = null); l !== a.location && (l = a.location); m !== a.history && (m = a.history); if (b) {
                var f = N === e; b = ga(b).href; if (v === b && (!c.history || f)) return h;
                var k = v && Da(v) === Da(b); v = b; N = e; !c.history || k && f ? (k || (pa = b), d ? l.replace(b) : k ? (d = l, e = b, f = e.indexOf("#"), e = -1 === f ? "" : e.substr(f), d.hash = e) : l.href = b, l.href !== b && (pa = b)) : (m[d ? "replaceState" : "pushState"](e, "", b), g()); pa && (pa = b); return h
            } return (pa || l.href).replace(/#$/, "")
        }; h.state = function () { return t }; var J = [], I = !1, P = null; h.onUrlChange = function (b) { if (!I) { if (c.history) x(a).on("popstate", f); x(a).on("hashchange", f); I = !0 } J.push(b); return b }; h.$$applicationDestroyed = function () {
            x(a).off("hashchange popstate",
                f)
        }; h.$$checkUrlChange = k; h.baseHref = function () { var a = kc.attr("href"); return a ? a.replace(/^(https?:)?\/\/[^/]*/, "") : "" }; h.defer = function (a, b, c) { var d; b = b || 0; c = c || G.DEFAULT_TASK_TYPE; G.incTaskCount(c); d = p(function () { delete s[d]; G.completeTask(a, c) }, b); s[d] = c; return d }; h.defer.cancel = function (a) { if (s.hasOwnProperty(a)) { var b = s[a]; delete s[a]; n(a); G.completeTask(E, b); return !0 } return !1 }
    } function If() {
        this.$get = ["$window", "$log", "$sniffer", "$document", "$$taskTrackerFactory", function (a, b, d, c, e) {
            return new Fg(a,
                c, b, d, e)
        }]
    } function Jf() {
        this.$get = function () {
            function a(a, c) {
                function e(a) { a !== p && (n ? n === a && (n = a.n) : n = a, f(a.n, a.p), f(a, p), p = a, p.n = null) } function f(a, b) { a !== b && (a && (a.p = b), b && (b.n = a)) } if (a in b) throw F("$cacheFactory")("iid", a); var g = 0, k = S({}, c, { id: a }), h = T(), l = c && c.capacity || Number.MAX_VALUE, m = T(), p = null, n = null; return b[a] = {
                    put: function (a, b) { if (!A(b)) { if (l < Number.MAX_VALUE) { var c = m[a] || (m[a] = { key: a }); e(c) } a in h || g++; h[a] = b; g > l && this.remove(n.key); return b } }, get: function (a) {
                        if (l < Number.MAX_VALUE) {
                            var b =
                                m[a]; if (!b) return; e(b)
                        } return h[a]
                    }, remove: function (a) { if (l < Number.MAX_VALUE) { var b = m[a]; if (!b) return; b === p && (p = b.p); b === n && (n = b.n); f(b.n, b.p); delete m[a] } a in h && (delete h[a], g--) }, removeAll: function () { h = T(); g = 0; m = T(); p = n = null }, destroy: function () { m = k = h = null; delete b[a] }, info: function () { return S({}, k, { size: g }) }
                }
            } var b = {}; a.info = function () { var a = {}; r(b, function (b, e) { a[e] = b.info() }); return a }; a.get = function (a) { return b[a] }; return a
        }
    } function hg() { this.$get = ["$cacheFactory", function (a) { return a("templates") }] }
    function Zc(a, b) {
        function d(a, b, c) { var d = /^([@&]|[=<](\*?))(\??)\s*([\w$]*)$/, e = T(); r(a, function (a, f) { a = a.trim(); if (a in p) e[f] = p[a]; else { var g = a.match(d); if (!g) throw $("iscp", b, f, a, c ? "controller bindings definition" : "isolate scope definition"); e[f] = { mode: g[1][0], collection: "*" === g[2], optional: "?" === g[3], attrName: g[4] || f }; g[4] && (p[a] = e[f]) } }); return e } function c(a) { var b = a.charAt(0); if (!b || b !== K(b)) throw $("baddir", a); if (a !== a.trim()) throw $("baddir", a); } function e(a) {
            var b = a.require || a.controller &&
                a.name; !H(b) && D(b) && r(b, function (a, c) { var d = a.match(l); a.substring(d[0].length) || (b[c] = d[0] + c) }); return b
        } var f = {}, g = /^\s*directive:\s*([\w-]+)\s+(.*)$/, k = /(([\w-]+)(?::([^;]+))?;?)/, h = Ae("ngSrc,ngSrcset,src,srcset"), l = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/, m = /^(on[a-z]+|formaction)$/, p = T(); this.directive = function pa(b, d) {
            gb(b, "name"); Ja(b, "directive"); C(b) ? (c(b), gb(d, "directiveFactory"), f.hasOwnProperty(b) || (f[b] = [], a.factory(b + "Directive", ["$injector", "$exceptionHandler", function (a, c) {
                var d = []; r(f[b], function (f,
                    g) { try { var h = a.invoke(f); B(h) ? h = { compile: ia(h) } : !h.compile && h.link && (h.compile = ia(h.link)); h.priority = h.priority || 0; h.index = g; h.name = h.name || b; h.require = e(h); var k = h, l = h.restrict; if (l && (!C(l) || !/[EACM]/.test(l))) throw $("badrestrict", l, b); k.restrict = l || "EA"; h.$$moduleName = f.$$moduleName; d.push(h) } catch (m) { c(m) } }); return d
            }])), f[b].push(d)) : r(b, Zb(pa)); return this
        }; this.component = function y(a, b) {
            function c(a) {
                function e(b) {
                    return B(b) || H(b) ? function (c, d) { return a.invoke(b, this, { $element: c, $attrs: d }) } :
                        b
                } var f = b.template || b.templateUrl ? b.template : "", g = { controller: d, controllerAs: Gg(b.controller) || b.controllerAs || "$ctrl", template: e(f), templateUrl: e(b.templateUrl), transclude: b.transclude, scope: {}, bindToController: b.bindings || {}, restrict: "E", require: b.require }; r(b, function (a, b) { "$" === b.charAt(0) && (g[b] = a) }); return g
            } if (!C(a)) return r(a, Zb(Va(this, y))), this; var d = b.controller || function () { }; r(b, function (a, b) { "$" === b.charAt(0) && (c[b] = a, B(d) && (d[b] = a)) }); c.$inject = ["$injector"]; return this.directive(a,
                c)
        }; this.aHrefSanitizationTrustedUrlList = function (a) { return w(a) ? (b.aHrefSanitizationTrustedUrlList(a), this) : b.aHrefSanitizationTrustedUrlList() }; Object.defineProperty(this, "aHrefSanitizationWhitelist", { get: function () { return this.aHrefSanitizationTrustedUrlList }, set: function (a) { this.aHrefSanitizationTrustedUrlList = a } }); this.imgSrcSanitizationTrustedUrlList = function (a) { return w(a) ? (b.imgSrcSanitizationTrustedUrlList(a), this) : b.imgSrcSanitizationTrustedUrlList() }; Object.defineProperty(this, "imgSrcSanitizationWhitelist",
            { get: function () { return this.imgSrcSanitizationTrustedUrlList }, set: function (a) { this.imgSrcSanitizationTrustedUrlList = a } }); var n = !0; this.debugInfoEnabled = function (a) { return w(a) ? (n = a, this) : n }; var s = !1; this.strictComponentBindingsEnabled = function (a) { return w(a) ? (s = a, this) : s }; var G = 10; this.onChangesTtl = function (a) { return arguments.length ? (G = a, this) : G }; var t = !0; this.commentDirectivesEnabled = function (a) { return arguments.length ? (t = a, this) : t }; var N = !0; this.cssClassDirectivesEnabled = function (a) {
                return arguments.length ?
                    (N = a, this) : N
            }; var v = T(); this.addPropertySecurityContext = function (a, b, c) { var d = a.toLowerCase() + "|" + b.toLowerCase(); if (d in v && v[d] !== c) throw $("ctxoverride", a, b, v[d], c); v[d] = c; return this }; (function () {
                function a(b, c) { r(c, function (a) { v[a.toLowerCase()] = b }) } a(W.HTML, ["iframe|srcdoc", "*|innerHTML", "*|outerHTML"]); a(W.CSS, ["*|style"]); a(W.URL, "area|href area|ping a|href a|ping blockquote|cite body|background del|cite input|src ins|cite q|cite".split(" ")); a(W.MEDIA_URL, "audio|src img|src img|srcset source|src source|srcset track|src video|src video|poster".split(" "));
                a(W.RESOURCE_URL, "*|formAction applet|code applet|codebase base|href embed|src frame|src form|action head|profile html|manifest iframe|src link|href media|src object|codebase object|data script|src".split(" "))
            })(); this.$get = ["$injector", "$interpolate", "$exceptionHandler", "$templateRequest", "$parse", "$controller", "$rootScope", "$sce", "$animate", function (a, b, c, e, p, M, L, u, R) {
                function q() {
                    try {
                        if (!--Ja) throw Ua = void 0, $("infchng", G); L.$apply(function () {
                            for (var a = 0, b = Ua.length; a < b; ++a)try { Ua[a]() } catch (d) { c(d) } Ua =
                                void 0
                        })
                    } finally { Ja++ }
                } function ma(a, b) { if (!a) return a; if (!C(a)) throw $("srcset", b, a.toString()); for (var c = "", d = V(a), e = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/, e = /\s/.test(d) ? e : /(,)/, d = d.split(e), e = Math.floor(d.length / 2), f = 0; f < e; f++)var g = 2 * f, c = c + u.getTrustedMediaUrl(V(d[g])), c = c + (" " + V(d[g + 1])); d = V(d[2 * f]).split(/\s/); c += u.getTrustedMediaUrl(V(d[0])); 2 === d.length && (c += " " + V(d[1])); return c } function w(a, b) {
                    if (b) { var c = Object.keys(b), d, e, f; d = 0; for (e = c.length; d < e; d++)f = c[d], this[f] = b[f] } else this.$attr =
                        {}; this.$$element = a
                } function O(a, b, c) { Fa.innerHTML = "<span " + b + ">"; b = Fa.firstChild.attributes; var d = b[0]; b.removeNamedItem(d.name); d.value = c; a.attributes.setNamedItem(d) } function sa(a, b) { try { a.addClass(b) } catch (c) { } } function da(a, b, c, d, e) {
                    a instanceof x || (a = x(a)); var f = Xa(a, b, a, c, d, e); da.$$addScopeClass(a); var g = null; return function (b, c, d) {
                        if (!a) throw $("multilink"); gb(b, "scope"); e && e.needsNewScope && (b = b.$parent.$new()); d = d || {}; var h = d.parentBoundTranscludeFn, k = d.transcludeControllers; d = d.futureParentElement;
                        h && h.$$boundTransclude && (h = h.$$boundTransclude); g || (g = (d = d && d[0]) ? "foreignobject" !== ua(d) && la.call(d).match(/SVG/) ? "svg" : "html" : "html"); d = "html" !== g ? x(ja(g, x("<div></div>").append(a).html())) : c ? Wa.clone.call(a) : a; if (k) for (var l in k) d.data("$" + l + "Controller", k[l].instance); da.$$addScopeInfo(d, b); c && c(d, b); f && f(b, d, d, h); c || (a = f = null); return d
                    }
                } function Xa(a, b, c, d, e, f) {
                    function g(a, c, d, e) {
                        var f, k, l, m, p, I, t; if (n) for (t = Array(c.length), m = 0; m < h.length; m += 3)f = h[m], t[f] = c[f]; else t = c; m = 0; for (p = h.length; m <
                            p;)k = t[h[m++]], c = h[m++], f = h[m++], c ? (c.scope ? (l = a.$new(), da.$$addScopeInfo(x(k), l)) : l = a, I = c.transcludeOnThisElement ? ka(a, c.transclude, e) : !c.templateOnThisElement && e ? e : !e && b ? ka(a, b) : null, c(f, l, k, d, I)) : f && f(a, k.childNodes, void 0, e)
                    } for (var h = [], k = H(a) || a instanceof x, l, m, p, I, n, t = 0; t < a.length; t++) {
                        l = new w; 11 === wa && jb(a, t, k); m = tc(a[t], [], l, 0 === t ? d : void 0, e); (f = m.length ? aa(m, a[t], l, b, c, null, [], [], f) : null) && f.scope && da.$$addScopeClass(l.$$element); l = f && f.terminal || !(p = a[t].childNodes) || !p.length ? null : Xa(p,
                            f ? (f.transcludeOnThisElement || !f.templateOnThisElement) && f.transclude : b); if (f || l) h.push(t, f, l), I = !0, n = n || f; f = null
                    } return I ? g : null
                } function jb(a, b, c) { var d = a[b], e = d.parentNode, f; if (d.nodeType === Pa) for (; ;) { f = e ? d.nextSibling : a[b + 1]; if (!f || f.nodeType !== Pa) break; d.nodeValue += f.nodeValue; f.parentNode && f.parentNode.removeChild(f); c && f === a[b + 1] && a.splice(b + 1, 1) } } function ka(a, b, c) {
                    function d(e, f, g, h, k) {
                        e || (e = a.$new(!1, k), e.$$transcluded = !0); return b(e, f, {
                            parentBoundTranscludeFn: c, transcludeControllers: g,
                            futureParentElement: h
                        })
                    } var e = d.$$slots = T(), f; for (f in b.$$slots) e[f] = b.$$slots[f] ? ka(a, b.$$slots[f], c) : null; return d
                } function tc(a, b, d, e, f) {
                    var g = d.$attr, h; switch (a.nodeType) {
                        case 1: h = ua(a); Y(b, xa(h), "E", e, f); for (var l, m, n, t, J, s = a.attributes, v = 0, G = s && s.length; v < G; v++) {
                            var P = !1, N = !1, r = !1, y = !1, u = !1, M; l = s[v]; m = l.name; t = l.value; n = xa(m.toLowerCase()); (J = n.match(Ra)) ? (r = "Attr" === J[1], y = "Prop" === J[1], u = "On" === J[1], m = m.replace(rd, "").toLowerCase().substr(4 + J[1].length).replace(/_(.)/g, function (a, b) { return b.toUpperCase() })) :
                                (M = n.match(Sa)) && ca(M[1]) && (P = m, N = m.substr(0, m.length - 5) + "end", m = m.substr(0, m.length - 6)); if (y || u) d[n] = t, g[n] = l.name, y ? Ea(a, b, n, m) : b.push(sd(p, L, c, n, m, !1)); else { n = xa(m.toLowerCase()); g[n] = m; if (r || !d.hasOwnProperty(n)) d[n] = t, nd(a, n) && (d[n] = !0); Ia(a, b, t, n, r); Y(b, n, "A", e, f, P, N) }
                        } "input" === h && "hidden" === a.getAttribute("type") && a.setAttribute("autocomplete", "off"); if (!Qa) break; g = a.className; D(g) && (g = g.animVal); if (C(g) && "" !== g) for (; a = k.exec(g);)n = xa(a[2]), Y(b, n, "C", e, f) && (d[n] = V(a[3])), g = g.substr(a.index +
                            a[0].length); break; case Pa: na(b, a.nodeValue); break; case 8: if (!Oa) break; F(a, b, d, e, f)
                    }b.sort(ia); return b
                } function F(a, b, c, d, e) { try { var f = g.exec(a.nodeValue); if (f) { var h = xa(f[1]); Y(b, h, "M", d, e) && (c[h] = V(f[2])) } } catch (k) { } } function U(a, b, c) { var d = [], e = 0; if (b && a.hasAttribute && a.hasAttribute(b)) { do { if (!a) throw $("uterdir", b, c); 1 === a.nodeType && (a.hasAttribute(b) && e++, a.hasAttribute(c) && e--); d.push(a); a = a.nextSibling } while (0 < e) } else d.push(a); return x(d) } function W(a, b, c) {
                    return function (d, e, f, g, h) {
                        e = U(e[0],
                            b, c); return a(d, e, f, g, h)
                    }
                } function Z(a, b, c, d, e, f) { var g; return a ? da(b, c, d, e, f) : function () { g || (g = da(b, c, d, e, f), b = c = f = null); return g.apply(this, arguments) } } function aa(a, b, d, e, f, g, h, k, l) {
                    function m(a, b, c, d) { if (a) { c && (a = W(a, c, d)); a.require = u.require; a.directiveName = Q; if (s === u || u.$$isolateScope) a = Ba(a, { isolateScope: !0 }); h.push(a) } if (b) { c && (b = W(b, c, d)); b.require = u.require; b.directiveName = Q; if (s === u || u.$$isolateScope) b = Ba(b, { isolateScope: !0 }); k.push(b) } } function p(a, e, f, g, l) {
                        function m(a, b, c, d) {
                            var e; bb(a) ||
                                (d = c, c = b, b = a, a = void 0); N && (e = P); c || (c = N ? Q.parent() : Q); if (d) { var f = l.$$slots[d]; if (f) return f(a, b, e, c, R); if (A(f)) throw $("noslot", d, Aa(Q)); } else return l(a, b, e, c, R)
                        } var n, u, L, y, G, P, M, Q; b === f ? (g = d, Q = d.$$element) : (Q = x(f), g = new w(Q, d)); G = e; s ? y = e.$new(!0) : t && (G = e.$parent); l && (M = m, M.$$boundTransclude = l, M.isSlotFilled = function (a) { return !!l.$$slots[a] }); J && (P = ea(Q, g, M, J, y, e, s)); s && (da.$$addScopeInfo(Q, y, !0, !(v && (v === s || v === s.$$originalDirective))), da.$$addScopeClass(Q, !0), y.$$isolateBindings = s.$$isolateBindings,
                            u = Da(e, g, y, y.$$isolateBindings, s), u.removeWatches && y.$on("$destroy", u.removeWatches)); for (n in P) { u = J[n]; L = P[n]; var Hg = u.$$bindings.bindToController; L.instance = L(); Q.data("$" + u.name + "Controller", L.instance); L.bindingInfo = Da(G, g, L.instance, Hg, u) } r(J, function (a, b) { var c = a.require; a.bindToController && !H(c) && D(c) && S(P[b].instance, X(b, c, Q, P)) }); r(P, function (a) {
                                var b = a.instance; if (B(b.$onChanges)) try { b.$onChanges(a.bindingInfo.initialChanges) } catch (d) { c(d) } if (B(b.$onInit)) try { b.$onInit() } catch (e) { c(e) } B(b.$doCheck) &&
                                    (G.$watch(function () { b.$doCheck() }), b.$doCheck()); B(b.$onDestroy) && G.$on("$destroy", function () { b.$onDestroy() })
                            }); n = 0; for (u = h.length; n < u; n++)L = h[n], Ca(L, L.isolateScope ? y : e, Q, g, L.require && X(L.directiveName, L.require, Q, P), M); var R = e; s && (s.template || null === s.templateUrl) && (R = y); a && a(R, f.childNodes, void 0, l); for (n = k.length - 1; 0 <= n; n--)L = k[n], Ca(L, L.isolateScope ? y : e, Q, g, L.require && X(L.directiveName, L.require, Q, P), M); r(P, function (a) { a = a.instance; B(a.$postLink) && a.$postLink() })
                    } l = l || {}; for (var n = -Number.MAX_VALUE,
                        t = l.newScopeDirective, J = l.controllerDirectives, s = l.newIsolateScopeDirective, v = l.templateDirective, L = l.nonTlbTranscludeDirective, G = !1, P = !1, N = l.hasElementTranscludeDirective, y = d.$$element = x(b), u, Q, M, R = e, q, ma = !1, Jb = !1, O, sa = 0, C = a.length; sa < C; sa++) {
                            u = a[sa]; var E = u.$$start, jb = u.$$end; E && (y = U(b, E, jb)); M = void 0; if (n > u.priority) break; if (O = u.scope) u.templateUrl || (D(O) ? (ba("new/isolated scope", s || t, u, y), s = u) : ba("new/isolated scope", s, u, y)), t = t || u; Q = u.name; if (!ma && (u.replace && (u.templateUrl || u.template) || u.transclude &&
                                !u.$$tlb)) { for (O = sa + 1; ma = a[O++];)if (ma.transclude && !ma.$$tlb || ma.replace && (ma.templateUrl || ma.template)) { Jb = !0; break } ma = !0 } !u.templateUrl && u.controller && (J = J || T(), ba("'" + Q + "' controller", J[Q], u, y), J[Q] = u); if (O = u.transclude) if (G = !0, u.$$tlb || (ba("transclusion", L, u, y), L = u), "element" === O) N = !0, n = u.priority, M = y, y = d.$$element = x(da.$$createComment(Q, d[Q])), b = y[0], oa(f, Ha.call(M, 0), b), R = Z(Jb, M, e, n, g && g.name, { nonTlbTranscludeDirective: L }); else {
                                    var ka = T(); if (D(O)) {
                                        M = z.document.createDocumentFragment(); var Xa =
                                            T(), F = T(); r(O, function (a, b) { var c = "?" === a.charAt(0); a = c ? a.substring(1) : a; Xa[a] = b; ka[b] = null; F[b] = c }); r(y.contents(), function (a) { var b = Xa[xa(ua(a))]; b ? (F[b] = !0, ka[b] = ka[b] || z.document.createDocumentFragment(), ka[b].appendChild(a)) : M.appendChild(a) }); r(F, function (a, b) { if (!a) throw $("reqslot", b); }); for (var K in ka) ka[K] && (R = x(ka[K].childNodes), ka[K] = Z(Jb, R, e)); M = x(M.childNodes)
                                    } else M = x(qc(b)).contents(); y.empty(); R = Z(Jb, M, e, void 0, void 0, { needsNewScope: u.$$isolateScope || u.$$newScope }); R.$$slots = ka
                                } if (u.template) if (P =
                                    !0, ba("template", v, u, y), v = u, O = B(u.template) ? u.template(y, d) : u.template, O = Na(O), u.replace) { g = u; M = nc.test(O) ? td(ja(u.templateNamespace, V(O))) : []; b = M[0]; if (1 !== M.length || 1 !== b.nodeType) throw $("tplrt", Q, ""); oa(f, y, b); C = { $attr: {} }; O = tc(b, [], C); var Ig = a.splice(sa + 1, a.length - (sa + 1)); (s || t) && fa(O, s, t); a = a.concat(O).concat(Ig); ga(d, C); C = a.length } else y.html(O); if (u.templateUrl) P = !0, ba("template", v, u, y), v = u, u.replace && (g = u), p = ha(a.splice(sa, a.length - sa), y, d, f, G && R, h, k, {
                                        controllerDirectives: J, newScopeDirective: t !==
                                            u && t, newIsolateScopeDirective: s, templateDirective: v, nonTlbTranscludeDirective: L
                                    }), C = a.length; else if (u.compile) try { q = u.compile(y, d, R); var Y = u.$$originalDirective || u; B(q) ? m(null, Va(Y, q), E, jb) : q && m(Va(Y, q.pre), Va(Y, q.post), E, jb) } catch (ca) { c(ca, Aa(y)) } u.terminal && (p.terminal = !0, n = Math.max(n, u.priority))
                    } p.scope = t && !0 === t.scope; p.transcludeOnThisElement = G; p.templateOnThisElement = P; p.transclude = R; l.hasElementTranscludeDirective = N; return p
                } function X(a, b, c, d) {
                    var e; if (C(b)) {
                        var f = b.match(l); b = b.substring(f[0].length);
                        var g = f[1] || f[3], f = "?" === f[2]; "^^" === g ? c = c.parent() : e = (e = d && d[b]) && e.instance; if (!e) { var h = "$" + b + "Controller"; e = "^^" === g && c[0] && 9 === c[0].nodeType ? null : g ? c.inheritedData(h) : c.data(h) } if (!e && !f) throw $("ctreq", b, a);
                    } else if (H(b)) for (e = [], g = 0, f = b.length; g < f; g++)e[g] = X(a, b[g], c, d); else D(b) && (e = {}, r(b, function (b, f) { e[f] = X(a, b, c, d) })); return e || null
                } function ea(a, b, c, d, e, f, g) {
                    var h = T(), k; for (k in d) {
                        var l = d[k], m = { $scope: l === g || l.$$isolateScope ? e : f, $element: a, $attrs: b, $transclude: c }, p = l.controller; "@" ===
                            p && (p = b[l.name]); m = M(p, m, !0, l.controllerAs); h[l.name] = m; a.data("$" + l.name + "Controller", m.instance)
                    } return h
                } function fa(a, b, c) { for (var d = 0, e = a.length; d < e; d++)a[d] = bc(a[d], { $$isolateScope: b, $$newScope: c }) } function Y(b, c, e, g, h, k, l) {
                    if (c === h) return null; var m = null; if (f.hasOwnProperty(c)) {
                        h = a.get(c + "Directive"); for (var p = 0, n = h.length; p < n; p++)if (c = h[p], (A(g) || g > c.priority) && -1 !== c.restrict.indexOf(e)) {
                            k && (c = bc(c, { $$start: k, $$end: l })); if (!c.$$bindings) {
                                var I = m = c, t = c.name, u = { isolateScope: null, bindToController: null };
                                D(I.scope) && (!0 === I.bindToController ? (u.bindToController = d(I.scope, t, !0), u.isolateScope = {}) : u.isolateScope = d(I.scope, t, !1)); D(I.bindToController) && (u.bindToController = d(I.bindToController, t, !0)); if (u.bindToController && !I.controller) throw $("noctrl", t); m = m.$$bindings = u; D(m.isolateScope) && (c.$$isolateBindings = m.isolateScope)
                            } b.push(c); m = c
                        }
                    } return m
                } function ca(b) { if (f.hasOwnProperty(b)) for (var c = a.get(b + "Directive"), d = 0, e = c.length; d < e; d++)if (b = c[d], b.multiElement) return !0; return !1 } function ga(a, b) {
                    var c =
                        b.$attr, d = a.$attr; r(a, function (d, e) { "$" !== e.charAt(0) && (b[e] && b[e] !== d && (d = d.length ? d + (("style" === e ? ";" : " ") + b[e]) : b[e]), a.$set(e, d, !0, c[e])) }); r(b, function (b, e) { a.hasOwnProperty(e) || "$" === e.charAt(0) || (a[e] = b, "class" !== e && "style" !== e && (d[e] = c[e])) })
                } function ha(a, b, d, f, g, h, k, l) {
                    var m = [], p, n, t = b[0], u = a.shift(), J = bc(u, { templateUrl: null, transclude: null, replace: null, $$originalDirective: u }), s = B(u.templateUrl) ? u.templateUrl(b, d) : u.templateUrl, L = u.templateNamespace; b.empty(); e(s).then(function (c) {
                        var e,
                        I; c = Na(c); if (u.replace) { c = nc.test(c) ? td(ja(L, V(c))) : []; e = c[0]; if (1 !== c.length || 1 !== e.nodeType) throw $("tplrt", u.name, s); c = { $attr: {} }; oa(f, b, e); var v = tc(e, [], c); D(u.scope) && fa(v, !0); a = v.concat(a); ga(d, c) } else e = t, b.html(c); a.unshift(J); p = aa(a, e, d, g, b, u, h, k, l); r(f, function (a, c) { a === e && (f[c] = b[0]) }); for (n = Xa(b[0].childNodes, g); m.length;) {
                            c = m.shift(); I = m.shift(); var y = m.shift(), P = m.shift(), v = b[0]; if (!c.$$destroyed) {
                                if (I !== t) {
                                    var G = I.className; l.hasElementTranscludeDirective && u.replace || (v = qc(e)); oa(y,
                                        x(I), v); sa(x(v), G)
                                } I = p.transcludeOnThisElement ? ka(c, p.transclude, P) : P; p(n, c, v, f, I)
                            }
                        } m = null
                    }).catch(function (a) { dc(a) && c(a) }); return function (a, b, c, d, e) { a = e; b.$$destroyed || (m ? m.push(b, c, d, a) : (p.transcludeOnThisElement && (a = ka(b, p.transclude, e)), p(n, b, c, d, a))) }
                } function ia(a, b) { var c = b.priority - a.priority; return 0 !== c ? c : a.name !== b.name ? a.name < b.name ? -1 : 1 : a.index - b.index } function ba(a, b, c, d) {
                    function e(a) { return a ? " (module: " + a + ")" : "" } if (b) throw $("multidir", b.name, e(b.$$moduleName), c.name, e(c.$$moduleName),
                        a, Aa(d));
                } function na(a, c) { var d = b(c, !0); d && a.push({ priority: 0, compile: function (a) { a = a.parent(); var b = !!a.length; b && da.$$addBindingClass(a); return function (a, c) { var e = c.parent(); b || da.$$addBindingClass(e); da.$$addBindingInfo(e, d.expressions); a.$watch(d, function (a) { c[0].nodeValue = a }) } } }) } function ja(a, b) { a = K(a || "html"); switch (a) { case "svg": case "math": var c = z.document.createElement("div"); c.innerHTML = "<" + a + ">" + b + "</" + a + ">"; return c.childNodes[0].childNodes; default: return b } } function qa(a, b) {
                    if ("srcdoc" ===
                        b) return u.HTML; if ("src" === b || "ngSrc" === b) return -1 === ["img", "video", "audio", "source", "track"].indexOf(a) ? u.RESOURCE_URL : u.MEDIA_URL; if ("xlinkHref" === b) return "image" === a ? u.MEDIA_URL : "a" === a ? u.URL : u.RESOURCE_URL; if ("form" === a && "action" === b || "base" === a && "href" === b || "link" === a && "href" === b) return u.RESOURCE_URL; if ("a" === a && ("href" === b || "ngHref" === b)) return u.URL
                } function ya(a, b) { var c = b.toLowerCase(); return v[a + "|" + c] || v["*|" + c] } function za(a) { return ma(u.valueOf(a), "ng-prop-srcset") } function Ea(a, b, c,
                    d) { if (m.test(d)) throw $("nodomevents"); a = ua(a); var e = ya(a, d), f = Ta; "srcset" !== d || "img" !== a && "source" !== a ? e && (f = u.getTrusted.bind(u, e)) : f = za; b.push({ priority: 100, compile: function (a, b) { var e = p(b[c]), g = p(b[c], function (a) { return u.valueOf(a) }); return { pre: function (a, b) { function c() { var g = e(a); b[0][d] = f(g) } c(); a.$watch(g, c) } } } }) } function Ia(a, c, d, e, f) {
                        var g = ua(a), k = qa(g, e), l = h[e] || f, p = b(d, !f, k, l); if (p) {
                            if ("multiple" === e && "select" === g) throw $("selmulti", Aa(a)); if (m.test(e)) throw $("nodomevents"); c.push({
                                priority: 100,
                                compile: function () { return { pre: function (a, c, f) { c = f.$$observers || (f.$$observers = T()); var g = f[e]; g !== d && (p = g && b(g, !0, k, l), d = g); p && (f[e] = p(a), (c[e] || (c[e] = [])).$$inter = !0, (f.$$observers && f.$$observers[e].$$scope || a).$watch(p, function (a, b) { "class" === e && a !== b ? f.$updateClass(a, b) : f.$set(e, a) })) } } }
                            })
                        }
                    } function oa(a, b, c) {
                        var d = b[0], e = b.length, f = d.parentNode, g, h; if (a) for (g = 0, h = a.length; g < h; g++)if (a[g] === d) {
                            a[g++] = c; h = g + e - 1; for (var k = a.length; g < k; g++, h++)h < k ? a[g] = a[h] : delete a[g]; a.length -= e - 1; a.context === d &&
                                (a.context = c); break
                        } f && f.replaceChild(c, d); a = z.document.createDocumentFragment(); for (g = 0; g < e; g++)a.appendChild(b[g]); x.hasData(d) && (x.data(c, x.data(d)), x(d).off("$destroy")); x.cleanData(a.querySelectorAll("*")); for (g = 1; g < e; g++)delete b[g]; b[0] = c; b.length = 1
                    } function Ba(a, b) { return S(function () { return a.apply(null, arguments) }, a, b) } function Ca(a, b, d, e, f, g) { try { a(b, d, e, f, g) } catch (h) { c(h, Aa(d)) } } function ra(a, b) { if (s) throw $("missingattr", a, b); } function Da(a, c, d, e, f) {
                        function g(b, c, e) {
                            B(d.$onChanges) &&
                            !ec(c, e) && (Ua || (a.$$postDigest(q), Ua = []), m || (m = {}, Ua.push(h)), m[b] && (e = m[b].previousValue), m[b] = new Kb(e, c))
                        } function h() { d.$onChanges(m); m = void 0 } var k = [], l = {}, m; r(e, function (e, h) {
                            var m = e.attrName, n = e.optional, I, t, u, s; switch (e.mode) {
                                case "@": n || ta.call(c, m) || (ra(m, f.name), d[h] = c[m] = void 0); n = c.$observe(m, function (a) { if (C(a) || Ga(a)) g(h, a, d[h]), d[h] = a }); c.$$observers[m].$$scope = a; I = c[m]; C(I) ? d[h] = b(I)(a) : Ga(I) && (d[h] = I); l[h] = new Kb(uc, d[h]); k.push(n); break; case "=": if (!ta.call(c, m)) {
                                    if (n) break; ra(m,
                                        f.name); c[m] = void 0
                                } if (n && !c[m]) break; t = p(c[m]); s = t.literal ? va : ec; u = t.assign || function () { I = d[h] = t(a); throw $("nonassign", c[m], m, f.name); }; I = d[h] = t(a); n = function (b) { s(b, d[h]) || (s(b, I) ? u(a, b = d[h]) : d[h] = b); return I = b }; n.$stateful = !0; n = e.collection ? a.$watchCollection(c[m], n) : a.$watch(p(c[m], n), null, t.literal); k.push(n); break; case "<": if (!ta.call(c, m)) { if (n) break; ra(m, f.name); c[m] = void 0 } if (n && !c[m]) break; t = p(c[m]); var v = t.literal, L = d[h] = t(a); l[h] = new Kb(uc, d[h]); n = a[e.collection ? "$watchCollection" : "$watch"](t,
                                    function (a, b) { if (b === a) { if (b === L || v && va(b, L)) return; b = L } g(h, a, b); d[h] = a }); k.push(n); break; case "&": n || ta.call(c, m) || ra(m, f.name); t = c.hasOwnProperty(m) ? p(c[m]) : E; if (t === E && n) break; d[h] = function (b) { return t(a, b) }
                            }
                        }); return { initialChanges: l, removeWatches: k.length && function () { for (var a = 0, b = k.length; a < b; ++a)k[a]() } }
                    } var Ma = /^\w/, Fa = z.document.createElement("div"), Oa = t, Qa = N, Ja = G, Ua; w.prototype = {
                        $normalize: xa, $addClass: function (a) { a && 0 < a.length && R.addClass(this.$$element, a) }, $removeClass: function (a) {
                            a &&
                            0 < a.length && R.removeClass(this.$$element, a)
                        }, $updateClass: function (a, b) { var c = ud(a, b); c && c.length && R.addClass(this.$$element, c); (c = ud(b, a)) && c.length && R.removeClass(this.$$element, c) }, $set: function (a, b, d, e) {
                            var f = nd(this.$$element[0], a), g = vd[a], h = a; f ? (this.$$element.prop(a, b), e = f) : g && (this[g] = b, h = g); this[a] = b; e ? this.$attr[a] = e : (e = this.$attr[a]) || (this.$attr[a] = e = Xc(a, "-")); "img" === ua(this.$$element) && "srcset" === a && (this[a] = b = ma(b, "$set('srcset', value)")); !1 !== d && (null === b || A(b) ? this.$$element.removeAttr(e) :
                                Ma.test(e) ? f && !1 === b ? this.$$element.removeAttr(e) : this.$$element.attr(e, b) : O(this.$$element[0], e, b)); (a = this.$$observers) && r(a[h], function (a) { try { a(b) } catch (d) { c(d) } })
                        }, $observe: function (a, b) { var c = this, d = c.$$observers || (c.$$observers = T()), e = d[a] || (d[a] = []); e.push(b); L.$evalAsync(function () { e.$$inter || !c.hasOwnProperty(a) || A(c[a]) || b(c[a]) }); return function () { cb(e, b) } }
                    }; var Ka = b.startSymbol(), La = b.endSymbol(), Na = "{{" === Ka && "}}" === La ? Ta : function (a) { return a.replace(/\{\{/g, Ka).replace(/}}/g, La) }, Ra =
                        /^ng(Attr|Prop|On)([A-Z].*)$/, Sa = /^(.+)Start$/; da.$$addBindingInfo = n ? function (a, b) { var c = a.data("$binding") || []; H(b) ? c = c.concat(b) : c.push(b); a.data("$binding", c) } : E; da.$$addBindingClass = n ? function (a) { sa(a, "ng-binding") } : E; da.$$addScopeInfo = n ? function (a, b, c, d) { a.data(c ? d ? "$isolateScopeNoTemplate" : "$isolateScope" : "$scope", b) } : E; da.$$addScopeClass = n ? function (a, b) { sa(a, b ? "ng-isolate-scope" : "ng-scope") } : E; da.$$createComment = function (a, b) { var c = ""; n && (c = " " + (a || "") + ": ", b && (c += b + " ")); return z.document.createComment(c) };
                return da
            }]
    } function Kb(a, b) { this.previousValue = a; this.currentValue = b } function xa(a) { return a.replace(rd, "").replace(Jg, function (a, d, c) { return c ? d.toUpperCase() : d }) } function ud(a, b) { var d = "", c = a.split(/\s+/), e = b.split(/\s+/), f = 0; a: for (; f < c.length; f++) { for (var g = c[f], k = 0; k < e.length; k++)if (g === e[k]) continue a; d += (0 < d.length ? " " : "") + g } return d } function td(a) { a = x(a); var b = a.length; if (1 >= b) return a; for (; b--;) { var d = a[b]; (8 === d.nodeType || d.nodeType === Pa && "" === d.nodeValue.trim()) && Kg.call(a, b, 1) } return a }
    function Gg(a, b) { if (b && C(b)) return b; if (C(a)) { var d = wd.exec(a); if (d) return d[3] } } function Kf() {
        var a = {}; this.has = function (b) { return a.hasOwnProperty(b) }; this.register = function (b, d) { Ja(b, "controller"); D(b) ? S(a, b) : a[b] = d }; this.$get = ["$injector", function (b) {
            function d(a, b, d, g) { if (!a || !D(a.$scope)) throw F("$controller")("noscp", g, b); a.$scope[b] = d } return function (c, e, f, g) {
                var k, h, l; f = !0 === f; g && C(g) && (l = g); if (C(c)) {
                    g = c.match(wd); if (!g) throw xd("ctrlfmt", c); h = g[1]; l = l || g[3]; c = a.hasOwnProperty(h) ? a[h] : Le(e.$scope,
                        h, !0); if (!c) throw xd("ctrlreg", h); tb(c, h, !0)
                } if (f) return f = (H(c) ? c[c.length - 1] : c).prototype, k = Object.create(f || null), l && d(e, l, k, h || c.name), S(function () { var a = b.invoke(c, k, e, h); a !== k && (D(a) || B(a)) && (k = a, l && d(e, l, k, h || c.name)); return k }, { instance: k, identifier: l }); k = b.instantiate(c, e, h); l && d(e, l, k, h || c.name); return k
            }
        }]
    } function Lf() { this.$get = ["$window", function (a) { return x(a.document) }] } function Mf() {
        this.$get = ["$document", "$rootScope", function (a, b) {
            function d() { e = c.hidden } var c = a[0], e = c && c.hidden;
            a.on("visibilitychange", d); b.$on("$destroy", function () { a.off("visibilitychange", d) }); return function () { return e }
        }]
    } function Nf() { this.$get = ["$log", function (a) { return function (b, d) { a.error.apply(a, arguments) } }] } function vc(a) { return D(a) ? ha(a) ? a.toISOString() : eb(a) : a } function Tf() { this.$get = function () { return function (a) { if (!a) return ""; var b = []; Qc(a, function (a, c) { null === a || A(a) || B(a) || (H(a) ? r(a, function (a) { b.push(ba(c) + "=" + ba(vc(a))) }) : b.push(ba(c) + "=" + ba(vc(a)))) }); return b.join("&") } } } function Uf() {
        this.$get =
        function () { return function (a) { function b(a, e, f) { H(a) ? r(a, function (a, c) { b(a, e + "[" + (D(a) ? c : "") + "]") }) : D(a) && !ha(a) ? Qc(a, function (a, c) { b(a, e + (f ? "" : "[") + c + (f ? "" : "]")) }) : (B(a) && (a = a()), d.push(ba(e) + "=" + (null == a ? "" : ba(vc(a))))) } if (!a) return ""; var d = []; b(a, "", !0); return d.join("&") } }
    } function wc(a, b) { if (C(a)) { var d = a.replace(Lg, "").trim(); if (d) { var c = b("Content-Type"), c = c && 0 === c.indexOf(yd), e; (e = c) || (e = (e = d.match(Mg)) && Ng[e[0]].test(d)); if (e) try { a = Tc(d) } catch (f) { if (!c) return a; throw Lb("baddata", a, f); } } } return a }
    function zd(a) { var b = T(), d; C(a) ? r(a.split("\n"), function (a) { d = a.indexOf(":"); var e = K(V(a.substr(0, d))); a = V(a.substr(d + 1)); e && (b[e] = b[e] ? b[e] + ", " + a : a) }) : D(a) && r(a, function (a, d) { var f = K(d), g = V(a); f && (b[f] = b[f] ? b[f] + ", " + g : g) }); return b } function Ad(a) { var b; return function (d) { b || (b = zd(a)); return d ? (d = b[K(d)], void 0 === d && (d = null), d) : b } } function Bd(a, b, d, c) { if (B(c)) return c(a, b, d); r(c, function (c) { a = c(a, b, d) }); return a } function Sf() {
        var a = this.defaults = {
            transformResponse: [wc], transformRequest: [function (a) {
                return D(a) &&
                    "[object File]" !== la.call(a) && "[object Blob]" !== la.call(a) && "[object FormData]" !== la.call(a) ? eb(a) : a
            }], headers: { common: { Accept: "application/json, text/plain, */*" }, post: ja(xc), put: ja(xc), patch: ja(xc) }, xsrfCookieName: "XSRF-TOKEN", xsrfHeaderName: "X-XSRF-TOKEN", paramSerializer: "$httpParamSerializer", jsonpCallbackParam: "callback"
        }, b = !1; this.useApplyAsync = function (a) { return w(a) ? (b = !!a, this) : b }; var d = this.interceptors = [], c = this.xsrfTrustedOrigins = []; Object.defineProperty(this, "xsrfWhitelistedOrigins",
            { get: function () { return this.xsrfTrustedOrigins }, set: function (a) { this.xsrfTrustedOrigins = a } }); this.$get = ["$browser", "$httpBackend", "$$cookieReader", "$cacheFactory", "$rootScope", "$q", "$injector", "$sce", function (e, f, g, k, h, l, m, p) {
                function n(b) {
                    function c(a, b) { for (var d = 0, e = b.length; d < e;) { var f = b[d++], g = b[d++]; a = a.then(f, g) } b.length = 0; return a } function d(a, b) { var c, e = {}; r(a, function (a, d) { B(a) ? (c = a(b), null != c && (e[d] = c)) : e[d] = a }); return e } function f(a) {
                        var b = S({}, a); b.data = Bd(a.data, a.headers, a.status, g.transformResponse);
                        a = a.status; return 200 <= a && 300 > a ? b : l.reject(b)
                    } if (!D(b)) throw F("$http")("badreq", b); if (!C(p.valueOf(b.url))) throw F("$http")("badreq", b.url); var g = S({ method: "get", transformRequest: a.transformRequest, transformResponse: a.transformResponse, paramSerializer: a.paramSerializer, jsonpCallbackParam: a.jsonpCallbackParam }, b); g.headers = function (b) { var c = a.headers, e = S({}, b.headers), f, g, h, c = S({}, c.common, c[K(b.method)]); a: for (f in c) { g = K(f); for (h in e) if (K(h) === g) continue a; e[f] = c[f] } return d(e, ja(b)) }(b); g.method =
                        vb(g.method); g.paramSerializer = C(g.paramSerializer) ? m.get(g.paramSerializer) : g.paramSerializer; e.$$incOutstandingRequestCount("$http"); var h = [], k = []; b = l.resolve(g); r(v, function (a) { (a.request || a.requestError) && h.unshift(a.request, a.requestError); (a.response || a.responseError) && k.push(a.response, a.responseError) }); b = c(b, h); b = b.then(function (b) {
                            var c = b.headers, d = Bd(b.data, Ad(c), void 0, b.transformRequest); A(d) && r(c, function (a, b) { "content-type" === K(b) && delete c[b] }); A(b.withCredentials) && !A(a.withCredentials) &&
                                (b.withCredentials = a.withCredentials); return s(b, d).then(f, f)
                        }); b = c(b, k); return b = b.finally(function () { e.$$completeOutstandingRequest(E, "$http") })
                } function s(c, d) {
                    function e(a) { if (a) { var c = {}; r(a, function (a, d) { c[d] = function (c) { function d() { a(c) } b ? h.$applyAsync(d) : h.$$phase ? d() : h.$apply(d) } }); return c } } function k(a, c, d, e, f) { function g() { m(c, a, d, e, f) } R && (200 <= a && 300 > a ? R.put(O, [a, c, zd(d), e, f]) : R.remove(O)); b ? h.$applyAsync(g) : (g(), h.$$phase || h.$apply()) } function m(a, b, d, e, f) {
                        b = -1 <= b ? b : 0; (200 <= b && 300 >
                            b ? L.resolve : L.reject)({ data: a, status: b, headers: Ad(d), config: c, statusText: e, xhrStatus: f })
                    } function s(a) { m(a.data, a.status, ja(a.headers()), a.statusText, a.xhrStatus) } function v() { var a = n.pendingRequests.indexOf(c); -1 !== a && n.pendingRequests.splice(a, 1) } var L = l.defer(), u = L.promise, R, q, ma = c.headers, x = "jsonp" === K(c.method), O = c.url; x ? O = p.getTrustedResourceUrl(O) : C(O) || (O = p.valueOf(O)); O = G(O, c.paramSerializer(c.params)); x && (O = t(O, c.jsonpCallbackParam)); n.pendingRequests.push(c); u.then(v, v); !c.cache && !a.cache ||
                        !1 === c.cache || "GET" !== c.method && "JSONP" !== c.method || (R = D(c.cache) ? c.cache : D(a.cache) ? a.cache : N); R && (q = R.get(O), w(q) ? q && B(q.then) ? q.then(s, s) : H(q) ? m(q[1], q[0], ja(q[2]), q[3], q[4]) : m(q, 200, {}, "OK", "complete") : R.put(O, u)); A(q) && ((q = kc(c.url) ? g()[c.xsrfCookieName || a.xsrfCookieName] : void 0) && (ma[c.xsrfHeaderName || a.xsrfHeaderName] = q), f(c.method, O, d, k, ma, c.timeout, c.withCredentials, c.responseType, e(c.eventHandlers), e(c.uploadEventHandlers))); return u
                } function G(a, b) {
                    0 < b.length && (a += (-1 === a.indexOf("?") ?
                        "?" : "&") + b); return a
                } function t(a, b) { var c = a.split("?"); if (2 < c.length) throw Lb("badjsonp", a); c = hc(c[1]); r(c, function (c, d) { if ("JSON_CALLBACK" === c) throw Lb("badjsonp", a); if (d === b) throw Lb("badjsonp", b, a); }); return a += (-1 === a.indexOf("?") ? "?" : "&") + b + "=JSON_CALLBACK" } var N = k("$http"); a.paramSerializer = C(a.paramSerializer) ? m.get(a.paramSerializer) : a.paramSerializer; var v = []; r(d, function (a) { v.unshift(C(a) ? m.get(a) : m.invoke(a)) }); var kc = Og(c); n.pendingRequests = []; (function (a) {
                    r(arguments, function (a) {
                        n[a] =
                        function (b, c) { return n(S({}, c || {}, { method: a, url: b })) }
                    })
                })("get", "delete", "head", "jsonp"); (function (a) { r(arguments, function (a) { n[a] = function (b, c, d) { return n(S({}, d || {}, { method: a, url: b, data: c })) } }) })("post", "put", "patch"); n.defaults = a; return n
            }]
    } function Wf() { this.$get = function () { return function () { return new z.XMLHttpRequest } } } function Vf() { this.$get = ["$browser", "$jsonpCallbacks", "$document", "$xhrFactory", function (a, b, d, c) { return Pg(a, c, a.defer, b, d[0]) }] } function Pg(a, b, d, c, e) {
        function f(a, b, d) {
            a = a.replace("JSON_CALLBACK",
                b); var f = e.createElement("script"), m = null; f.type = "text/javascript"; f.src = a; f.async = !0; m = function (a) { f.removeEventListener("load", m); f.removeEventListener("error", m); e.body.removeChild(f); f = null; var g = -1, s = "unknown"; a && ("load" !== a.type || c.wasCalled(b) || (a = { type: "error" }), s = a.type, g = "error" === a.type ? 404 : 200); d && d(g, s) }; f.addEventListener("load", m); f.addEventListener("error", m); e.body.appendChild(f); return m
        } return function (e, k, h, l, m, p, n, s, G, t) {
            function N(a) { J = "timeout" === a; pa && pa(); y && y.abort() } function v(a,
                b, c, e, f, g) { w(P) && d.cancel(P); pa = y = null; a(b, c, e, f, g) } k = k || a.url(); if ("jsonp" === K(e)) var q = c.createCallback(k), pa = f(k, q, function (a, b) { var d = 200 === a && c.getResponse(q); v(l, a, d, "", b, "complete"); c.removeCallback(q) }); else {
                    var y = b(e, k), J = !1; y.open(e, k, !0); r(m, function (a, b) { w(a) && y.setRequestHeader(b, a) }); y.onload = function () { var a = y.statusText || "", b = "response" in y ? y.response : y.responseText, c = 1223 === y.status ? 204 : y.status; 0 === c && (c = b ? 200 : "file" === ga(k).protocol ? 404 : 0); v(l, c, b, y.getAllResponseHeaders(), a, "complete") };
                    y.onerror = function () { v(l, -1, null, null, "", "error") }; y.ontimeout = function () { v(l, -1, null, null, "", "timeout") }; y.onabort = function () { v(l, -1, null, null, "", J ? "timeout" : "abort") }; r(G, function (a, b) { y.addEventListener(b, a) }); r(t, function (a, b) { y.upload.addEventListener(b, a) }); n && (y.withCredentials = !0); if (s) try { y.responseType = s } catch (I) { if ("json" !== s) throw I; } y.send(A(h) ? null : h)
                } if (0 < p) var P = d(function () { N("timeout") }, p); else p && B(p.then) && p.then(function () { N(w(p.$$timeoutId) ? "timeout" : "abort") })
        }
    } function Pf() {
        var a =
            "{{", b = "}}"; this.startSymbol = function (b) { return b ? (a = b, this) : a }; this.endSymbol = function (a) { return a ? (b = a, this) : b }; this.$get = ["$parse", "$exceptionHandler", "$sce", function (d, c, e) {
                function f(a) { return "\\\\\\" + a } function g(c) { return c.replace(p, a).replace(n, b) } function k(a, b, c, d) { var e = a.$watch(function (a) { e(); return d(a) }, b, c); return e } function h(f, h, n, p) {
                    function v(a) { try { return a = n && !r ? e.getTrusted(n, a) : e.valueOf(a), p && !w(a) ? a : jc(a) } catch (b) { c(Ma.interr(f, b)) } } var r = n === e.URL || n === e.MEDIA_URL; if (!f.length ||
                        -1 === f.indexOf(a)) { if (h) return; h = g(f); r && (h = e.getTrusted(n, h)); h = ia(h); h.exp = f; h.expressions = []; h.$$watchDelegate = k; return h } p = !!p; for (var q, y, J = 0, I = [], P, Q = f.length, M = [], L = [], u; J < Q;)if (-1 !== (q = f.indexOf(a, J)) && -1 !== (y = f.indexOf(b, q + l))) J !== q && M.push(g(f.substring(J, q))), J = f.substring(q + l, y), I.push(J), J = y + m, L.push(M.length), M.push(""); else { J !== Q && M.push(g(f.substring(J))); break } u = 1 === M.length && 1 === L.length; var R = r && u ? void 0 : v; P = I.map(function (a) { return d(a, R) }); if (!h || I.length) {
                            var x = function (a) {
                                for (var b =
                                    0, c = I.length; b < c; b++) { if (p && A(a[b])) return; M[L[b]] = a[b] } if (r) return e.getTrusted(n, u ? M[0] : M.join("")); n && 1 < M.length && Ma.throwNoconcat(f); return M.join("")
                            }; return S(function (a) { var b = 0, d = I.length, e = Array(d); try { for (; b < d; b++)e[b] = P[b](a); return x(e) } catch (g) { c(Ma.interr(f, g)) } }, { exp: f, expressions: I, $$watchDelegate: function (a, b) { var c; return a.$watchGroup(P, function (d, e) { var f = x(d); b.call(this, f, d !== e ? c : f, a); c = f }) } })
                        }
                } var l = a.length, m = b.length, p = new RegExp(a.replace(/./g, f), "g"), n = new RegExp(b.replace(/./g,
                    f), "g"); h.startSymbol = function () { return a }; h.endSymbol = function () { return b }; return h
            }]
    } function Qf() {
        this.$get = ["$$intervalFactory", "$window", function (a, b) {
            var d = {}, c = function (a) { b.clearInterval(a); delete d[a] }, e = a(function (a, c, e) { a = b.setInterval(a, c); d[a] = e; return a }, c); e.cancel = function (a) {
                if (!a) return !1; if (!a.hasOwnProperty("$$intervalId")) throw Qg("badprom"); if (!d.hasOwnProperty(a.$$intervalId)) return !1; a = a.$$intervalId; var b = d[a], e = b.promise; e.$$state && (e.$$state.pur = !0); b.reject("canceled");
                c(a); return !0
            }; return e
        }]
    } function Rf() { this.$get = ["$browser", "$q", "$$q", "$rootScope", function (a, b, d, c) { return function (e, f) { return function (g, k, h, l) { function m() { p ? g.apply(null, n) : g(s) } var p = 4 < arguments.length, n = p ? Ha.call(arguments, 4) : [], s = 0, G = w(l) && !l, t = (G ? d : b).defer(), r = t.promise; h = w(h) ? h : 0; r.$$intervalId = e(function () { G ? a.defer(m) : c.$evalAsync(m); t.notify(s++); 0 < h && s >= h && (t.resolve(s), f(r.$$intervalId)); G || c.$apply() }, k, t, G); return r } } }] } function Cd(a, b) {
        var d = ga(a); b.$$protocol = d.protocol; b.$$host =
            d.hostname; b.$$port = fa(d.port) || Rg[d.protocol] || null
    } function Dd(a, b, d) { if (Sg.test(a)) throw kb("badpath", a); var c = "/" !== a.charAt(0); c && (a = "/" + a); a = ga(a); for (var c = (c && "/" === a.pathname.charAt(0) ? a.pathname.substring(1) : a.pathname).split("/"), e = c.length; e--;)c[e] = decodeURIComponent(c[e]), d && (c[e] = c[e].replace(/\//g, "%2F")); d = c.join("/"); b.$$path = d; b.$$search = hc(a.search); b.$$hash = decodeURIComponent(a.hash); b.$$path && "/" !== b.$$path.charAt(0) && (b.$$path = "/" + b.$$path) } function yc(a, b) {
        return a.slice(0,
            b.length) === b
    } function ya(a, b) { if (yc(b, a)) return b.substr(a.length) } function Da(a) { var b = a.indexOf("#"); return -1 === b ? a : a.substr(0, b) } function zc(a, b, d) {
        this.$$html5 = !0; d = d || ""; Cd(a, this); this.$$parse = function (a) { var d = ya(b, a); if (!C(d)) throw kb("ipthprfx", a, b); Dd(d, this, !0); this.$$path || (this.$$path = "/"); this.$$compose() }; this.$$normalizeUrl = function (a) { return b + a.substr(1) }; this.$$parseLinkUrl = function (c, e) {
            if (e && "#" === e[0]) return this.hash(e.slice(1)), !0; var f, g; w(f = ya(a, c)) ? (g = f, g = d && w(f = ya(d, f)) ?
                b + (ya("/", f) || f) : a + g) : w(f = ya(b, c)) ? g = b + f : b === c + "/" && (g = b); g && this.$$parse(g); return !!g
        }
    } function Ac(a, b, d) {
        Cd(a, this); this.$$parse = function (c) { var e = ya(a, c) || ya(b, c), f; A(e) || "#" !== e.charAt(0) ? this.$$html5 ? f = e : (f = "", A(e) && (a = c, this.replace())) : (f = ya(d, e), A(f) && (f = e)); Dd(f, this, !1); c = this.$$path; var e = a, g = /^\/[A-Z]:(\/.*)/; yc(f, e) && (f = f.replace(e, "")); g.exec(f) || (c = (f = g.exec(c)) ? f[1] : c); this.$$path = c; this.$$compose() }; this.$$normalizeUrl = function (b) { return a + (b ? d + b : "") }; this.$$parseLinkUrl = function (b,
            d) { return Da(a) === Da(b) ? (this.$$parse(b), !0) : !1 }
    } function Ed(a, b, d) { this.$$html5 = !0; Ac.apply(this, arguments); this.$$parseLinkUrl = function (c, e) { if (e && "#" === e[0]) return this.hash(e.slice(1)), !0; var f, g; a === Da(c) ? f = c : (g = ya(b, c)) ? f = a + d + g : b === c + "/" && (f = b); f && this.$$parse(f); return !!f }; this.$$normalizeUrl = function (b) { return a + d + b } } function Mb(a) { return function () { return this[a] } } function Fd(a, b) { return function (d) { if (A(d)) return this[a]; this[a] = b(d); this.$$compose(); return this } } function Yf() {
        var a = "!",
        b = { enabled: !1, requireBase: !0, rewriteLinks: !0 }; this.hashPrefix = function (b) { return w(b) ? (a = b, this) : a }; this.html5Mode = function (a) { if (Ga(a)) return b.enabled = a, this; if (D(a)) { Ga(a.enabled) && (b.enabled = a.enabled); Ga(a.requireBase) && (b.requireBase = a.requireBase); if (Ga(a.rewriteLinks) || C(a.rewriteLinks)) b.rewriteLinks = a.rewriteLinks; return this } return b }; this.$get = ["$rootScope", "$browser", "$sniffer", "$rootElement", "$window", function (d, c, e, f, g) {
            function k(a, b) { return a === b || ga(a).href === ga(b).href } function h(a,
                b, d) { var e = m.url(), f = m.$$state; try { c.url(a, b, d), m.$$state = c.state() } catch (g) { throw m.url(e), m.$$state = f, g; } } function l(a, b) { d.$broadcast("$locationChangeSuccess", m.absUrl(), a, m.$$state, b) } var m, p; p = c.baseHref(); var n = c.url(), s; if (b.enabled) { if (!p && b.requireBase) throw kb("nobase"); s = n.substring(0, n.indexOf("/", n.indexOf("//") + 2)) + (p || "/"); p = e.history ? zc : Ed } else s = Da(n), p = Ac; var r = s.substr(0, Da(s).lastIndexOf("/") + 1); m = new p(s, r, "#" + a); m.$$parseLinkUrl(n, n); m.$$state = c.state(); var t = /^\s*(javascript|mailto):/i;
            f.on("click", function (a) { var e = b.rewriteLinks; if (e && !a.ctrlKey && !a.metaKey && !a.shiftKey && 2 !== a.which && 2 !== a.button) { for (var g = x(a.target); "a" !== ua(g[0]);)if (g[0] === f[0] || !(g = g.parent())[0]) return; if (!C(e) || !A(g.attr(e))) { var e = g.prop("href"), h = g.attr("href") || g.attr("xlink:href"); D(e) && "[object SVGAnimatedString]" === e.toString() && (e = ga(e.animVal).href); t.test(e) || !e || g.attr("target") || a.isDefaultPrevented() || !m.$$parseLinkUrl(e, h) || (a.preventDefault(), m.absUrl() !== c.url() && d.$apply()) } } }); m.absUrl() !==
                n && c.url(m.absUrl(), !0); var N = !0; c.onUrlChange(function (a, b) { yc(a, r) ? (d.$evalAsync(function () { var c = m.absUrl(), e = m.$$state, f; m.$$parse(a); m.$$state = b; f = d.$broadcast("$locationChangeStart", a, c, b, e).defaultPrevented; m.absUrl() === a && (f ? (m.$$parse(c), m.$$state = e, h(c, !1, e)) : (N = !1, l(c, e))) }), d.$$phase || d.$digest()) : g.location.href = a }); d.$watch(function () {
                    if (N || m.$$urlUpdatedByLocation) {
                        m.$$urlUpdatedByLocation = !1; var a = c.url(), b = m.absUrl(), f = c.state(), g = m.$$replace, n = !k(a, b) || m.$$html5 && e.history && f !==
                            m.$$state; if (N || n) N = !1, d.$evalAsync(function () { var b = m.absUrl(), c = d.$broadcast("$locationChangeStart", b, a, m.$$state, f).defaultPrevented; m.absUrl() === b && (c ? (m.$$parse(a), m.$$state = f) : (n && h(b, g, f === m.$$state ? null : m.$$state), l(a, f))) })
                    } m.$$replace = !1
                }); return m
        }]
    } function Zf() {
        var a = !0, b = this; this.debugEnabled = function (b) { return w(b) ? (a = b, this) : a }; this.$get = ["$window", function (d) {
            function c(a) {
                dc(a) && (a.stack && f ? a = a.message && -1 === a.stack.indexOf(a.message) ? "Error: " + a.message + "\n" + a.stack : a.stack : a.sourceURL &&
                    (a = a.message + "\n" + a.sourceURL + ":" + a.line)); return a
            } function e(a) { var b = d.console || {}, e = b[a] || b.log || E; return function () { var a = []; r(arguments, function (b) { a.push(c(b)) }); return Function.prototype.apply.call(e, b, a) } } var f = wa || /\bEdge\//.test(d.navigator && d.navigator.userAgent); return { log: e("log"), info: e("info"), warn: e("warn"), error: e("error"), debug: function () { var c = e("debug"); return function () { a && c.apply(b, arguments) } }() }
        }]
    } function Tg(a) { return a + "" } function Ug(a, b) {
        return "undefined" !== typeof a ? a :
            b
    } function Gd(a, b) { return "undefined" === typeof a ? b : "undefined" === typeof b ? a : a + b } function Vg(a, b) { switch (a.type) { case q.MemberExpression: if (a.computed) return !1; break; case q.UnaryExpression: return 1; case q.BinaryExpression: return "+" !== a.operator ? 1 : !1; case q.CallExpression: return !1 }return void 0 === b ? Hd : b } function Z(a, b, d) {
        var c, e, f = a.isPure = Vg(a, d); switch (a.type) {
            case q.Program: c = !0; r(a.body, function (a) { Z(a.expression, b, f); c = c && a.expression.constant }); a.constant = c; break; case q.Literal: a.constant = !0; a.toWatch =
                []; break; case q.UnaryExpression: Z(a.argument, b, f); a.constant = a.argument.constant; a.toWatch = a.argument.toWatch; break; case q.BinaryExpression: Z(a.left, b, f); Z(a.right, b, f); a.constant = a.left.constant && a.right.constant; a.toWatch = a.left.toWatch.concat(a.right.toWatch); break; case q.LogicalExpression: Z(a.left, b, f); Z(a.right, b, f); a.constant = a.left.constant && a.right.constant; a.toWatch = a.constant ? [] : [a]; break; case q.ConditionalExpression: Z(a.test, b, f); Z(a.alternate, b, f); Z(a.consequent, b, f); a.constant = a.test.constant &&
                    a.alternate.constant && a.consequent.constant; a.toWatch = a.constant ? [] : [a]; break; case q.Identifier: a.constant = !1; a.toWatch = [a]; break; case q.MemberExpression: Z(a.object, b, f); a.computed && Z(a.property, b, f); a.constant = a.object.constant && (!a.computed || a.property.constant); a.toWatch = a.constant ? [] : [a]; break; case q.CallExpression: c = d = a.filter ? !b(a.callee.name).$stateful : !1; e = []; r(a.arguments, function (a) { Z(a, b, f); c = c && a.constant; e.push.apply(e, a.toWatch) }); a.constant = c; a.toWatch = d ? e : [a]; break; case q.AssignmentExpression: Z(a.left,
                        b, f); Z(a.right, b, f); a.constant = a.left.constant && a.right.constant; a.toWatch = [a]; break; case q.ArrayExpression: c = !0; e = []; r(a.elements, function (a) { Z(a, b, f); c = c && a.constant; e.push.apply(e, a.toWatch) }); a.constant = c; a.toWatch = e; break; case q.ObjectExpression: c = !0; e = []; r(a.properties, function (a) { Z(a.value, b, f); c = c && a.value.constant; e.push.apply(e, a.value.toWatch); a.computed && (Z(a.key, b, !1), c = c && a.key.constant, e.push.apply(e, a.key.toWatch)) }); a.constant = c; a.toWatch = e; break; case q.ThisExpression: a.constant =
                            !1; a.toWatch = []; break; case q.LocalsExpression: a.constant = !1, a.toWatch = []
        }
    } function Id(a) { if (1 === a.length) { a = a[0].expression; var b = a.toWatch; return 1 !== b.length ? b : b[0] !== a ? b : void 0 } } function Jd(a) { return a.type === q.Identifier || a.type === q.MemberExpression } function Kd(a) { if (1 === a.body.length && Jd(a.body[0].expression)) return { type: q.AssignmentExpression, left: a.body[0].expression, right: { type: q.NGValueParameter }, operator: "=" } } function Ld(a) { this.$filter = a } function Md(a) { this.$filter = a } function Nb(a, b, d) {
        this.ast =
        new q(a, d); this.astCompiler = d.csp ? new Md(b) : new Ld(b)
    } function Bc(a) { return B(a.valueOf) ? a.valueOf() : Wg.call(a) } function $f() {
        var a = T(), b = { "true": !0, "false": !1, "null": null, undefined: void 0 }, d, c; this.addLiteral = function (a, c) { b[a] = c }; this.setIdentifierFns = function (a, b) { d = a; c = b; return this }; this.$get = ["$filter", function (e) {
            function f(b, c) {
                var d, f; switch (typeof b) {
                    case "string": return f = b = b.trim(), d = a[f], d || (d = new Ob(G), d = (new Nb(d, e, G)).parse(b), a[f] = p(d)), s(d, c); case "function": return s(b, c); default: return s(E,
                        c)
                }
            } function g(a, b, c) { return null == a || null == b ? a === b : "object" !== typeof a || (a = Bc(a), "object" !== typeof a || c) ? a === b || a !== a && b !== b : !1 } function k(a, b, c, d, e) {
                var f = d.inputs, h; if (1 === f.length) { var k = g, f = f[0]; return a.$watch(function (a) { var b = f(a); g(b, k, f.isPure) || (h = d(a, void 0, void 0, [b]), k = b && Bc(b)); return h }, b, c, e) } for (var l = [], m = [], n = 0, p = f.length; n < p; n++)l[n] = g, m[n] = null; return a.$watch(function (a) {
                    for (var b = !1, c = 0, e = f.length; c < e; c++) { var k = f[c](a); if (b || (b = !g(k, l[c], f[c].isPure))) m[c] = k, l[c] = k && Bc(k) } b &&
                        (h = d(a, void 0, void 0, m)); return h
                }, b, c, e)
            } function h(a, b, c, d, e) { function f() { h(m) && k() } function g(a, b, c, d) { m = u && d ? d[0] : n(a, b, c, d); h(m) && a.$$postDigest(f); return s(m) } var h = d.literal ? l : w, k, m, n = d.$$intercepted || d, s = d.$$interceptor || Ta, u = d.inputs && !n.inputs; g.literal = d.literal; g.constant = d.constant; g.inputs = d.inputs; p(g); return k = a.$watch(g, b, c, e) } function l(a) { var b = !0; r(a, function (a) { w(a) || (b = !1) }); return b } function m(a, b, c, d) { var e = a.$watch(function (a) { e(); return d(a) }, b, c); return e } function p(a) {
                a.constant ?
                a.$$watchDelegate = m : a.oneTime ? a.$$watchDelegate = h : a.inputs && (a.$$watchDelegate = k); return a
            } function n(a, b) { function c(d) { return b(a(d)) } c.$stateful = a.$stateful || b.$stateful; c.$$pure = a.$$pure && b.$$pure; return c } function s(a, b) {
                if (!b) return a; a.$$interceptor && (b = n(a.$$interceptor, b), a = a.$$intercepted); var c = !1, d = function (d, e, f, g) { d = c && g ? g[0] : a(d, e, f, g); return b(d) }; d.$$intercepted = a; d.$$interceptor = b; d.literal = a.literal; d.oneTime = a.oneTime; d.constant = a.constant; b.$stateful || (c = !a.inputs, d.inputs = a.inputs ?
                    a.inputs : [a], b.$$pure || (d.inputs = d.inputs.map(function (a) { return a.isPure === Hd ? function (b) { return a(b) } : a }))); return p(d)
            } var G = { csp: Ba().noUnsafeEval, literals: Ia(b), isIdentifierStart: B(d) && d, isIdentifierContinue: B(c) && c }; f.$$getAst = function (a) { var b = new Ob(G); return (new Nb(b, e, G)).getAst(a).ast }; return f
        }]
    } function bg() {
        var a = !0; this.$get = ["$rootScope", "$exceptionHandler", function (b, d) { return Nd(function (a) { b.$evalAsync(a) }, d, a) }]; this.errorOnUnhandledRejections = function (b) {
            return w(b) ? (a = b, this) :
                a
        }
    } function cg() { var a = !0; this.$get = ["$browser", "$exceptionHandler", function (b, d) { return Nd(function (a) { b.defer(a) }, d, a) }]; this.errorOnUnhandledRejections = function (b) { return w(b) ? (a = b, this) : a } } function Nd(a, b, d) {
        function c() { return new e } function e() { var a = this.promise = new f; this.resolve = function (b) { h(a, b) }; this.reject = function (b) { m(a, b) }; this.notify = function (b) { n(a, b) } } function f() { this.$$state = { status: 0 } } function g() {
            for (; !w && x.length;) {
                var a = x.shift(); if (!a.pur) {
                    a.pur = !0; var c = a.value, c = "Possibly unhandled rejection: " +
                        ("function" === typeof c ? c.toString().replace(/ \{[\s\S]*$/, "") : A(c) ? "undefined" : "string" !== typeof c ? Ne(c, void 0) : c); dc(a.value) ? b(a.value, c) : b(c)
                }
            }
        } function k(c) {
            !d || c.pending || 2 !== c.status || c.pur || (0 === w && 0 === x.length && a(g), x.push(c)); !c.processScheduled && c.pending && (c.processScheduled = !0, ++w, a(function () {
                var e, f, k; k = c.pending; c.processScheduled = !1; c.pending = void 0; try {
                    for (var l = 0, n = k.length; l < n; ++l) {
                        c.pur = !0; f = k[l][0]; e = k[l][c.status]; try { B(e) ? h(f, e(c.value)) : 1 === c.status ? h(f, c.value) : m(f, c.value) } catch (p) {
                            m(f,
                                p), p && !0 === p.$$passToExceptionHandler && b(p)
                        }
                    }
                } finally { --w, d && 0 === w && a(g) }
            }))
        } function h(a, b) { a.$$state.status || (b === a ? p(a, v("qcycle", b)) : l(a, b)) } function l(a, b) { function c(b) { g || (g = !0, l(a, b)) } function d(b) { g || (g = !0, p(a, b)) } function e(b) { n(a, b) } var f, g = !1; try { if (D(b) || B(b)) f = b.then; B(f) ? (a.$$state.status = -1, f.call(b, c, d, e)) : (a.$$state.value = b, a.$$state.status = 1, k(a.$$state)) } catch (h) { d(h) } } function m(a, b) { a.$$state.status || p(a, b) } function p(a, b) { a.$$state.value = b; a.$$state.status = 2; k(a.$$state) } function n(c,
            d) { var e = c.$$state.pending; 0 >= c.$$state.status && e && e.length && a(function () { for (var a, c, f = 0, g = e.length; f < g; f++) { c = e[f][0]; a = e[f][3]; try { n(c, B(a) ? a(d) : d) } catch (h) { b(h) } } }) } function s(a) { var b = new f; m(b, a); return b } function G(a, b, c) { var d = null; try { B(c) && (d = c()) } catch (e) { return s(e) } return d && B(d.then) ? d.then(function () { return b(a) }, s) : b(a) } function t(a, b, c, d) { var e = new f; h(e, a); return e.then(b, c, d) } function q(a) { if (!B(a)) throw v("norslvr", a); var b = new f; a(function (a) { h(b, a) }, function (a) { m(b, a) }); return b }
        var v = F("$q", TypeError), w = 0, x = []; S(f.prototype, { then: function (a, b, c) { if (A(a) && A(b) && A(c)) return this; var d = new f; this.$$state.pending = this.$$state.pending || []; this.$$state.pending.push([d, a, b, c]); 0 < this.$$state.status && k(this.$$state); return d }, "catch": function (a) { return this.then(null, a) }, "finally": function (a, b) { return this.then(function (b) { return G(b, y, a) }, function (b) { return G(b, s, a) }, b) } }); var y = t; q.prototype = f.prototype; q.defer = c; q.reject = s; q.when = t; q.resolve = y; q.all = function (a) {
            var b = new f, c =
                0, d = H(a) ? [] : {}; r(a, function (a, e) { c++; t(a).then(function (a) { d[e] = a; --c || h(b, d) }, function (a) { m(b, a) }) }); 0 === c && h(b, d); return b
        }; q.race = function (a) { var b = c(); r(a, function (a) { t(a).then(b.resolve, b.reject) }); return b.promise }; return q
    } function mg() {
        this.$get = ["$window", "$timeout", function (a, b) {
            var d = a.requestAnimationFrame || a.webkitRequestAnimationFrame, c = a.cancelAnimationFrame || a.webkitCancelAnimationFrame || a.webkitCancelRequestAnimationFrame, e = !!d, f = e ? function (a) { var b = d(a); return function () { c(b) } } :
                function (a) { var c = b(a, 16.66, !1); return function () { b.cancel(c) } }; f.supported = e; return f
        }]
    } function ag() {
        function a(a) { function b() { this.$$watchers = this.$$nextSibling = this.$$childHead = this.$$childTail = null; this.$$listeners = {}; this.$$listenerCount = {}; this.$$watchersCount = 0; this.$id = ++qb; this.$$ChildScope = null; this.$$suspended = !1 } b.prototype = a; return b } var b = 10, d = F("$rootScope"), c = null, e = null; this.digestTtl = function (a) { arguments.length && (b = a); return b }; this.$get = ["$exceptionHandler", "$parse", "$browser",
            function (f, g, k) {
                function h(a) { a.currentScope.$$destroyed = !0 } function l(a) { 9 === wa && (a.$$childHead && l(a.$$childHead), a.$$nextSibling && l(a.$$nextSibling)); a.$parent = a.$$nextSibling = a.$$prevSibling = a.$$childHead = a.$$childTail = a.$root = a.$$watchers = null } function m() {
                    this.$id = ++qb; this.$$phase = this.$parent = this.$$watchers = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null; this.$root = this; this.$$suspended = this.$$destroyed = !1; this.$$listeners = {}; this.$$listenerCount = {}; this.$$watchersCount =
                        0; this.$$isolateBindings = null
                } function p(a) { if (v.$$phase) throw d("inprog", v.$$phase); v.$$phase = a } function n(a, b) { do a.$$watchersCount += b; while (a = a.$parent) } function s(a, b, c) { do a.$$listenerCount[c] -= b, 0 === a.$$listenerCount[c] && delete a.$$listenerCount[c]; while (a = a.$parent) } function G() { } function t() { for (; y.length;)try { y.shift()() } catch (a) { f(a) } e = null } function q() { null === e && (e = k.defer(function () { v.$apply(t) }, null, "$applyAsync")) } m.prototype = {
                    constructor: m, $new: function (b, c) {
                        var d; c = c || this; b ? (d = new m,
                            d.$root = this.$root) : (this.$$ChildScope || (this.$$ChildScope = a(this)), d = new this.$$ChildScope); d.$parent = c; d.$$prevSibling = c.$$childTail; c.$$childHead ? (c.$$childTail.$$nextSibling = d, c.$$childTail = d) : c.$$childHead = c.$$childTail = d; (b || c !== this) && d.$on("$destroy", h); return d
                    }, $watch: function (a, b, d, e) {
                        var f = g(a); b = B(b) ? b : E; if (f.$$watchDelegate) return f.$$watchDelegate(this, b, d, f, a); var h = this, k = h.$$watchers, l = { fn: b, last: G, get: f, exp: e || a, eq: !!d }; c = null; k || (k = h.$$watchers = [], k.$$digestWatchIndex = -1); k.unshift(l);
                        k.$$digestWatchIndex++; n(this, 1); return function () { var a = cb(k, l); 0 <= a && (n(h, -1), a < k.$$digestWatchIndex && k.$$digestWatchIndex--); c = null }
                    }, $watchGroup: function (a, b) {
                        function c() { h = !1; try { k ? (k = !1, b(e, e, g)) : b(e, d, g) } finally { for (var f = 0; f < a.length; f++)d[f] = e[f] } } var d = Array(a.length), e = Array(a.length), f = [], g = this, h = !1, k = !0; if (!a.length) { var l = !0; g.$evalAsync(function () { l && b(e, e, g) }); return function () { l = !1 } } if (1 === a.length) return this.$watch(a[0], function (a, c, f) { e[0] = a; d[0] = c; b(e, a === c ? e : d, f) }); r(a, function (a,
                            b) { var d = g.$watch(a, function (a) { e[b] = a; h || (h = !0, g.$evalAsync(c)) }); f.push(d) }); return function () { for (; f.length;)f.shift()() }
                    }, $watchCollection: function (a, b) {
                        function c(a) {
                            e = a; var b, d, g, h; if (!A(e)) {
                                if (D(e)) if (za(e)) for (f !== n && (f = n, t = f.length = 0, l++), a = e.length, t !== a && (l++, f.length = t = a), b = 0; b < a; b++)h = f[b], g = e[b], d = h !== h && g !== g, d || h === g || (l++, f[b] = g); else {
                                    f !== p && (f = p = {}, t = 0, l++); a = 0; for (b in e) ta.call(e, b) && (a++, g = e[b], h = f[b], b in f ? (d = h !== h && g !== g, d || h === g || (l++, f[b] = g)) : (t++, f[b] = g, l++)); if (t > a) for (b in l++,
                                        f) ta.call(e, b) || (t--, delete f[b])
                                } else f !== e && (f = e, l++); return l
                            }
                        } c.$$pure = g(a).literal; c.$stateful = !c.$$pure; var d = this, e, f, h, k = 1 < b.length, l = 0, m = g(a, c), n = [], p = {}, s = !0, t = 0; return this.$watch(m, function () { s ? (s = !1, b(e, e, d)) : b(e, h, d); if (k) if (D(e)) if (za(e)) { h = Array(e.length); for (var a = 0; a < e.length; a++)h[a] = e[a] } else for (a in h = {}, e) ta.call(e, a) && (h[a] = e[a]); else h = e })
                    }, $digest: function () {
                        var a, g, h, l, m, n, s, r = b, q, y = w.length ? v : this, N = [], A, z; p("$digest"); k.$$checkUrlChange(); this === v && null !== e && (k.defer.cancel(e),
                            t()); c = null; do {
                                s = !1; q = y; for (n = 0; n < w.length; n++) { try { z = w[n], l = z.fn, l(z.scope, z.locals) } catch (C) { f(C) } c = null } w.length = 0; a: do {
                                    if (n = !q.$$suspended && q.$$watchers) for (n.$$digestWatchIndex = n.length; n.$$digestWatchIndex--;)try {
                                        if (a = n[n.$$digestWatchIndex]) if (m = a.get, (g = m(q)) !== (h = a.last) && !(a.eq ? va(g, h) : Y(g) && Y(h))) s = !0, c = a, a.last = a.eq ? Ia(g, null) : g, l = a.fn, l(g, h === G ? g : h, q), 5 > r && (A = 4 - r, N[A] || (N[A] = []), N[A].push({ msg: B(a.exp) ? "fn: " + (a.exp.name || a.exp.toString()) : a.exp, newVal: g, oldVal: h })); else if (a === c) {
                                            s =
                                            !1; break a
                                        }
                                    } catch (E) { f(E) } if (!(n = !q.$$suspended && q.$$watchersCount && q.$$childHead || q !== y && q.$$nextSibling)) for (; q !== y && !(n = q.$$nextSibling);)q = q.$parent
                                } while (q = n); if ((s || w.length) && !r--) throw v.$$phase = null, d("infdig", b, N);
                            } while (s || w.length); for (v.$$phase = null; J < x.length;)try { x[J++]() } catch (D) { f(D) } x.length = J = 0; k.$$checkUrlChange()
                    }, $suspend: function () { this.$$suspended = !0 }, $isSuspended: function () { return this.$$suspended }, $resume: function () { this.$$suspended = !1 }, $destroy: function () {
                        if (!this.$$destroyed) {
                            var a =
                                this.$parent; this.$broadcast("$destroy"); this.$$destroyed = !0; this === v && k.$$applicationDestroyed(); n(this, -this.$$watchersCount); for (var b in this.$$listenerCount) s(this, this.$$listenerCount[b], b); a && a.$$childHead === this && (a.$$childHead = this.$$nextSibling); a && a.$$childTail === this && (a.$$childTail = this.$$prevSibling); this.$$prevSibling && (this.$$prevSibling.$$nextSibling = this.$$nextSibling); this.$$nextSibling && (this.$$nextSibling.$$prevSibling = this.$$prevSibling); this.$destroy = this.$digest = this.$apply =
                                    this.$evalAsync = this.$applyAsync = E; this.$on = this.$watch = this.$watchGroup = function () { return E }; this.$$listeners = {}; this.$$nextSibling = null; l(this)
                        }
                    }, $eval: function (a, b) { return g(a)(this, b) }, $evalAsync: function (a, b) { v.$$phase || w.length || k.defer(function () { w.length && v.$digest() }, null, "$evalAsync"); w.push({ scope: this, fn: g(a), locals: b }) }, $$postDigest: function (a) { x.push(a) }, $apply: function (a) {
                        try { p("$apply"); try { return this.$eval(a) } finally { v.$$phase = null } } catch (b) { f(b) } finally {
                            try { v.$digest() } catch (c) {
                                throw f(c),
                                c;
                            }
                        }
                    }, $applyAsync: function (a) { function b() { c.$eval(a) } var c = this; a && y.push(b); a = g(a); q() }, $on: function (a, b) { var c = this.$$listeners[a]; c || (this.$$listeners[a] = c = []); c.push(b); var d = this; do d.$$listenerCount[a] || (d.$$listenerCount[a] = 0), d.$$listenerCount[a]++; while (d = d.$parent); var e = this; return function () { var d = c.indexOf(b); -1 !== d && (delete c[d], s(e, 1, a)) } }, $emit: function (a, b) {
                        var c = [], d, e = this, g = !1, h = {
                            name: a, targetScope: e, stopPropagation: function () { g = !0 }, preventDefault: function () {
                                h.defaultPrevented =
                                !0
                            }, defaultPrevented: !1
                        }, k = db([h], arguments, 1), l, m; do { d = e.$$listeners[a] || c; h.currentScope = e; l = 0; for (m = d.length; l < m; l++)if (d[l]) try { d[l].apply(null, k) } catch (n) { f(n) } else d.splice(l, 1), l--, m--; if (g) break; e = e.$parent } while (e); h.currentScope = null; return h
                    }, $broadcast: function (a, b) {
                        var c = this, d = this, e = { name: a, targetScope: this, preventDefault: function () { e.defaultPrevented = !0 }, defaultPrevented: !1 }; if (!this.$$listenerCount[a]) return e; for (var g = db([e], arguments, 1), h, k; c = d;) {
                            e.currentScope = c; d = c.$$listeners[a] ||
                                []; h = 0; for (k = d.length; h < k; h++)if (d[h]) try { d[h].apply(null, g) } catch (l) { f(l) } else d.splice(h, 1), h--, k--; if (!(d = c.$$listenerCount[a] && c.$$childHead || c !== this && c.$$nextSibling)) for (; c !== this && !(d = c.$$nextSibling);)c = c.$parent
                        } e.currentScope = null; return e
                    }
                }; var v = new m, w = v.$$asyncQueue = [], x = v.$$postDigestQueue = [], y = v.$$applyAsyncQueue = [], J = 0; return v
            }]
    } function Qe() {
        var a = /^\s*(https?|s?ftp|mailto|tel|file):/, b = /^\s*((https?|ftp|file|blob):|data:image\/)/; this.aHrefSanitizationTrustedUrlList = function (b) {
            return w(b) ?
                (a = b, this) : a
        }; this.imgSrcSanitizationTrustedUrlList = function (a) { return w(a) ? (b = a, this) : b }; this.$get = function () { return function (d, c) { var e = c ? b : a, f = ga(d && d.trim()).href; return "" === f || f.match(e) ? d : "unsafe:" + f } }
    } function Xg(a) { if ("self" === a) return a; if (C(a)) { if (-1 < a.indexOf("***")) throw Ea("iwcard", a); a = Od(a).replace(/\\\*\\\*/g, ".*").replace(/\\\*/g, "[^:/.?&;]*"); return new RegExp("^" + a + "$") } if (ab(a)) return new RegExp("^" + a.source + "$"); throw Ea("imatcher"); } function Pd(a) {
        var b = []; w(a) && r(a, function (a) { b.push(Xg(a)) });
        return b
    } function eg() {
        this.SCE_CONTEXTS = W; var a = ["self"], b = []; this.trustedResourceUrlList = function (b) { arguments.length && (a = Pd(b)); return a }; Object.defineProperty(this, "resourceUrlWhitelist", { get: function () { return this.trustedResourceUrlList }, set: function (a) { this.trustedResourceUrlList = a } }); this.bannedResourceUrlList = function (a) { arguments.length && (b = Pd(a)); return b }; Object.defineProperty(this, "resourceUrlBlacklist", {
            get: function () { return this.bannedResourceUrlList }, set: function (a) {
                this.bannedResourceUrlList =
                a
            }
        }); this.$get = ["$injector", "$$sanitizeUri", function (d, c) {
            function e(a, b) { var c; "self" === a ? (c = Cc(b, Qd)) || (z.document.baseURI ? c = z.document.baseURI : (Na || (Na = z.document.createElement("a"), Na.href = ".", Na = Na.cloneNode(!1)), c = Na.href), c = Cc(b, c)) : c = !!a.exec(b.href); return c } function f(a) {
                var b = function (a) { this.$$unwrapTrustedValue = function () { return a } }; a && (b.prototype = new a); b.prototype.valueOf = function () { return this.$$unwrapTrustedValue() }; b.prototype.toString = function () { return this.$$unwrapTrustedValue().toString() };
                return b
            } var g = function (a) { throw Ea("unsafe"); }; d.has("$sanitize") && (g = d.get("$sanitize")); var k = f(), h = {}; h[W.HTML] = f(k); h[W.CSS] = f(k); h[W.MEDIA_URL] = f(k); h[W.URL] = f(h[W.MEDIA_URL]); h[W.JS] = f(k); h[W.RESOURCE_URL] = f(h[W.URL]); return {
                trustAs: function (a, b) { var c = h.hasOwnProperty(a) ? h[a] : null; if (!c) throw Ea("icontext", a, b); if (null === b || A(b) || "" === b) return b; if ("string" !== typeof b) throw Ea("itype", a); return new c(b) }, getTrusted: function (d, f) {
                    if (null === f || A(f) || "" === f) return f; var k = h.hasOwnProperty(d) ?
                        h[d] : null; if (k && f instanceof k) return f.$$unwrapTrustedValue(); B(f.$$unwrapTrustedValue) && (f = f.$$unwrapTrustedValue()); if (d === W.MEDIA_URL || d === W.URL) return c(f.toString(), d === W.MEDIA_URL); if (d === W.RESOURCE_URL) { var k = ga(f.toString()), n, s, r = !1; n = 0; for (s = a.length; n < s; n++)if (e(a[n], k)) { r = !0; break } if (r) for (n = 0, s = b.length; n < s; n++)if (e(b[n], k)) { r = !1; break } if (r) return f; throw Ea("insecurl", f.toString()); } if (d === W.HTML) return g(f); throw Ea("unsafe");
                }, valueOf: function (a) {
                    return a instanceof k ? a.$$unwrapTrustedValue() :
                        a
                }
            }
        }]
    } function dg() {
        var a = !0; this.enabled = function (b) { arguments.length && (a = !!b); return a }; this.$get = ["$parse", "$sceDelegate", function (b, d) {
            if (a && 8 > wa) throw Ea("iequirks"); var c = ja(W); c.isEnabled = function () { return a }; c.trustAs = d.trustAs; c.getTrusted = d.getTrusted; c.valueOf = d.valueOf; a || (c.trustAs = c.getTrusted = function (a, b) { return b }, c.valueOf = Ta); c.parseAs = function (a, d) { var e = b(d); return e.literal && e.constant ? e : b(d, function (b) { return c.getTrusted(a, b) }) }; var e = c.parseAs, f = c.getTrusted, g = c.trustAs; r(W,
                function (a, b) { var d = K(b); c[("parse_as_" + d).replace(Dc, xb)] = function (b) { return e(a, b) }; c[("get_trusted_" + d).replace(Dc, xb)] = function (b) { return f(a, b) }; c[("trust_as_" + d).replace(Dc, xb)] = function (b) { return g(a, b) } }); return c
        }]
    } function fg() {
        this.$get = ["$window", "$document", function (a, b) {
            var d = {}, c = !((!a.nw || !a.nw.process) && a.chrome && (a.chrome.app && a.chrome.app.runtime || !a.chrome.app && a.chrome.runtime && a.chrome.runtime.id)) && a.history && a.history.pushState, e = fa((/android (\d+)/.exec(K((a.navigator || {}).userAgent)) ||
                [])[1]), f = /Boxee/i.test((a.navigator || {}).userAgent), g = b[0] || {}, k = g.body && g.body.style, h = !1, l = !1; k && (h = !!("transition" in k || "webkitTransition" in k), l = !!("animation" in k || "webkitAnimation" in k)); return { history: !(!c || 4 > e || f), hasEvent: function (a) { if ("input" === a && wa) return !1; if (A(d[a])) { var b = g.createElement("div"); d[a] = "on" + a in b } return d[a] }, csp: Ba(), transitions: h, animations: l, android: e }
        }]
    } function gg() { this.$get = ia(function (a) { return new Yg(a) }) } function Yg(a) {
        function b() {
            var a = e.pop(); return a &&
                a.cb
        } function d(a) { for (var b = e.length - 1; 0 <= b; --b) { var c = e[b]; if (c.type === a) return e.splice(b, 1), c.cb } } var c = {}, e = [], f = this.ALL_TASKS_TYPE = "$$all$$", g = this.DEFAULT_TASK_TYPE = "$$default$$"; this.completeTask = function (e, h) { h = h || g; try { e() } finally { var l; l = h || g; c[l] && (c[l]--, c[f]--); l = c[h]; var m = c[f]; if (!m || !l) for (l = m ? d : b; m = l(h);)try { m() } catch (p) { a.error(p) } } }; this.incTaskCount = function (a) { a = a || g; c[a] = (c[a] || 0) + 1; c[f] = (c[f] || 0) + 1 }; this.notifyWhenNoPendingTasks = function (a, b) {
            b = b || f; c[b] ? e.push({ type: b, cb: a }) :
                a()
        }
    } function ig() {
        var a; this.httpOptions = function (b) { return b ? (a = b, this) : a }; this.$get = ["$exceptionHandler", "$templateCache", "$http", "$q", "$sce", function (b, d, c, e, f) {
            function g(k, h) {
                g.totalPendingRequests++; if (!C(k) || A(d.get(k))) k = f.getTrustedResourceUrl(k); var l = c.defaults && c.defaults.transformResponse; H(l) ? l = l.filter(function (a) { return a !== wc }) : l === wc && (l = null); return c.get(k, S({ cache: d, transformResponse: l }, a)).finally(function () { g.totalPendingRequests-- }).then(function (a) { return d.put(k, a.data) },
                    function (a) { h || (a = Zg("tpload", k, a.status, a.statusText), b(a)); return e.reject(a) })
            } g.totalPendingRequests = 0; return g
        }]
    } function jg() {
        this.$get = ["$rootScope", "$browser", "$location", function (a, b, d) {
            return {
                findBindings: function (a, b, d) { a = a.getElementsByClassName("ng-binding"); var g = []; r(a, function (a) { var c = ca.element(a).data("$binding"); c && r(c, function (c) { d ? (new RegExp("(^|\\s)" + Od(b) + "(\\s|\\||$)")).test(c) && g.push(a) : -1 !== c.indexOf(b) && g.push(a) }) }); return g }, findModels: function (a, b, d) {
                    for (var g = ["ng-",
                        "data-ng-", "ng\\:"], k = 0; k < g.length; ++k) { var h = a.querySelectorAll("[" + g[k] + "model" + (d ? "=" : "*=") + '"' + b + '"]'); if (h.length) return h }
                }, getLocation: function () { return d.url() }, setLocation: function (b) { b !== d.url() && (d.url(b), a.$digest()) }, whenStable: function (a) { b.notifyWhenNoOutstandingRequests(a) }
            }
        }]
    } function kg() {
        this.$get = ["$rootScope", "$browser", "$q", "$$q", "$exceptionHandler", function (a, b, d, c, e) {
            function f(f, h, l) {
                B(f) || (l = h, h = f, f = E); var m = Ha.call(arguments, 3), p = w(l) && !l, n = (p ? c : d).defer(), s = n.promise, r;
                r = b.defer(function () { try { n.resolve(f.apply(null, m)) } catch (b) { n.reject(b), e(b) } finally { delete g[s.$$timeoutId] } p || a.$apply() }, h, "$timeout"); s.$$timeoutId = r; g[r] = n; return s
            } var g = {}; f.cancel = function (a) { if (!a) return !1; if (!a.hasOwnProperty("$$timeoutId")) throw $g("badprom"); if (!g.hasOwnProperty(a.$$timeoutId)) return !1; a = a.$$timeoutId; var c = g[a], d = c.promise; d.$$state && (d.$$state.pur = !0); c.reject("canceled"); delete g[a]; return b.defer.cancel(a) }; return f
        }]
    } function ga(a) {
        if (!C(a)) return a; wa && (aa.setAttribute("href",
            a), a = aa.href); aa.setAttribute("href", a); a = aa.hostname; !ah && -1 < a.indexOf(":") && (a = "[" + a + "]"); return { href: aa.href, protocol: aa.protocol ? aa.protocol.replace(/:$/, "") : "", host: aa.host, search: aa.search ? aa.search.replace(/^\?/, "") : "", hash: aa.hash ? aa.hash.replace(/^#/, "") : "", hostname: a, port: aa.port, pathname: "/" === aa.pathname.charAt(0) ? aa.pathname : "/" + aa.pathname }
    } function Og(a) { var b = [Qd].concat(a.map(ga)); return function (a) { a = ga(a); return b.some(Cc.bind(null, a)) } } function Cc(a, b) {
        a = ga(a); b = ga(b); return a.protocol ===
            b.protocol && a.host === b.host
    } function lg() { this.$get = ia(z) } function Rd(a) { function b(a) { try { return decodeURIComponent(a) } catch (b) { return a } } var d = a[0] || {}, c = {}, e = ""; return function () { var a, g, k, h, l; try { a = d.cookie || "" } catch (m) { a = "" } if (a !== e) for (e = a, a = e.split("; "), c = {}, k = 0; k < a.length; k++)g = a[k], h = g.indexOf("="), 0 < h && (l = b(g.substring(0, h)), A(c[l]) && (c[l] = b(g.substring(h + 1)))); return c } } function pg() { this.$get = Rd } function fd(a) {
        function b(d, c) {
            if (D(d)) { var e = {}; r(d, function (a, c) { e[c] = b(c, a) }); return e } return a.factory(d +
                "Filter", c)
        } this.register = b; this.$get = ["$injector", function (a) { return function (b) { return a.get(b + "Filter") } }]; b("currency", Sd); b("date", Td); b("filter", bh); b("json", ch); b("limitTo", dh); b("lowercase", eh); b("number", Ud); b("orderBy", Vd); b("uppercase", fh)
    } function bh() {
        return function (a, b, d, c) {
            if (!za(a)) { if (null == a) return a; throw F("filter")("notarray", a); } c = c || "$"; var e; switch (Ec(b)) { case "function": break; case "boolean": case "null": case "number": case "string": e = !0; case "object": b = gh(b, d, c, e); break; default: return a }return Array.prototype.filter.call(a,
                b)
        }
    } function gh(a, b, d, c) { var e = D(a) && d in a; !0 === b ? b = va : B(b) || (b = function (a, b) { if (A(a)) return !1; if (null === a || null === b) return a === b; if (D(b) || D(a) && !cc(a)) return !1; a = K("" + a); b = K("" + b); return -1 !== a.indexOf(b) }); return function (f) { return e && !D(f) ? Fa(f, a[d], b, d, !1) : Fa(f, a, b, d, c) } } function Fa(a, b, d, c, e, f) {
        var g = Ec(a), k = Ec(b); if ("string" === k && "!" === b.charAt(0)) return !Fa(a, b.substring(1), d, c, e); if (H(a)) return a.some(function (a) { return Fa(a, b, d, c, e) }); switch (g) {
            case "object": var h; if (e) {
                for (h in a) if (h.charAt &&
                    "$" !== h.charAt(0) && Fa(a[h], b, d, c, !0)) return !0; return f ? !1 : Fa(a, b, d, c, !1)
            } if ("object" === k) { for (h in b) if (f = b[h], !B(f) && !A(f) && (g = h === c, !Fa(g ? a : a[h], f, d, c, g, g))) return !1; return !0 } return d(a, b); case "function": return !1; default: return d(a, b)
        }
    } function Ec(a) { return null === a ? "null" : typeof a } function Sd(a) {
        var b = a.NUMBER_FORMATS; return function (a, c, e) {
            A(c) && (c = b.CURRENCY_SYM); A(e) && (e = b.PATTERNS[1].maxFrac); var f = c ? /\u00A4/g : /\s*\u00A4\s*/g; return null == a ? a : Wd(a, b.PATTERNS[1], b.GROUP_SEP, b.DECIMAL_SEP, e).replace(f,
                c)
        }
    } function Ud(a) { var b = a.NUMBER_FORMATS; return function (a, c) { return null == a ? a : Wd(a, b.PATTERNS[0], b.GROUP_SEP, b.DECIMAL_SEP, c) } } function hh(a) { var b = 0, d, c, e, f, g; -1 < (c = a.indexOf(Xd)) && (a = a.replace(Xd, "")); 0 < (e = a.search(/e/i)) ? (0 > c && (c = e), c += +a.slice(e + 1), a = a.substring(0, e)) : 0 > c && (c = a.length); for (e = 0; a.charAt(e) === Fc; e++); if (e === (g = a.length)) d = [0], c = 1; else { for (g--; a.charAt(g) === Fc;)g--; c -= e; d = []; for (f = 0; e <= g; e++, f++)d[f] = +a.charAt(e) } c > Yd && (d = d.splice(0, Yd - 1), b = c - 1, c = 1); return { d: d, e: b, i: c } } function ih(a,
        b, d, c) { var e = a.d, f = e.length - a.i; b = A(b) ? Math.min(Math.max(d, f), c) : +b; d = b + a.i; c = e[d]; if (0 < d) { e.splice(Math.max(a.i, d)); for (var g = d; g < e.length; g++)e[g] = 0 } else for (f = Math.max(0, f), a.i = 1, e.length = Math.max(1, d = b + 1), e[0] = 0, g = 1; g < d; g++)e[g] = 0; if (5 <= c) if (0 > d - 1) { for (c = 0; c > d; c--)e.unshift(0), a.i++; e.unshift(1); a.i++ } else e[d - 1]++; for (; f < Math.max(0, b); f++)e.push(0); if (b = e.reduceRight(function (a, b, c, d) { b += a; d[c] = b % 10; return Math.floor(b / 10) }, 0)) e.unshift(b), a.i++ } function Wd(a, b, d, c, e) {
            if (!C(a) && !X(a) || isNaN(a)) return "";
            var f = !isFinite(a), g = !1, k = Math.abs(a) + "", h = ""; if (f) h = "\u221e"; else { g = hh(k); ih(g, e, b.minFrac, b.maxFrac); h = g.d; k = g.i; e = g.e; f = []; for (g = h.reduce(function (a, b) { return a && !b }, !0); 0 > k;)h.unshift(0), k++; 0 < k ? f = h.splice(k, h.length) : (f = h, h = [0]); k = []; for (h.length >= b.lgSize && k.unshift(h.splice(-b.lgSize, h.length).join("")); h.length > b.gSize;)k.unshift(h.splice(-b.gSize, h.length).join("")); h.length && k.unshift(h.join("")); h = k.join(d); f.length && (h += c + f.join("")); e && (h += "e+" + e) } return 0 > a && !g ? b.negPre + h + b.negSuf : b.posPre +
                h + b.posSuf
        } function Pb(a, b, d, c) { var e = ""; if (0 > a || c && 0 >= a) c ? a = -a + 1 : (a = -a, e = "-"); for (a = "" + a; a.length < b;)a = Fc + a; d && (a = a.substr(a.length - b)); return e + a } function ea(a, b, d, c, e) { d = d || 0; return function (f) { f = f["get" + a](); if (0 < d || f > -d) f += d; 0 === f && -12 === d && (f = 12); return Pb(f, b, c, e) } } function lb(a, b, d) { return function (c, e) { var f = c["get" + a](), g = vb((d ? "STANDALONE" : "") + (b ? "SHORT" : "") + a); return e[g][f] } } function Zd(a) { var b = (new Date(a, 0, 1)).getDay(); return new Date(a, 0, (4 >= b ? 5 : 12) - b) } function $d(a) {
            return function (b) {
                var d =
                    Zd(b.getFullYear()); b = +new Date(b.getFullYear(), b.getMonth(), b.getDate() + (4 - b.getDay())) - +d; b = 1 + Math.round(b / 6048E5); return Pb(b, a)
            }
        } function Gc(a, b) { return 0 >= a.getFullYear() ? b.ERAS[0] : b.ERAS[1] } function Td(a) {
            function b(a) {
                var b; if (b = a.match(d)) {
                    a = new Date(0); var f = 0, g = 0, k = b[8] ? a.setUTCFullYear : a.setFullYear, h = b[8] ? a.setUTCHours : a.setHours; b[9] && (f = fa(b[9] + b[10]), g = fa(b[9] + b[11])); k.call(a, fa(b[1]), fa(b[2]) - 1, fa(b[3])); f = fa(b[4] || 0) - f; g = fa(b[5] || 0) - g; k = fa(b[6] || 0); b = Math.round(1E3 * parseFloat("0." +
                        (b[7] || 0))); h.call(a, f, g, k, b)
                } return a
            } var d = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; return function (c, d, f) {
                var g = "", k = [], h, l; d = d || "mediumDate"; d = a.DATETIME_FORMATS[d] || d; C(c) && (c = jh.test(c) ? fa(c) : b(c)); X(c) && (c = new Date(c)); if (!ha(c) || !isFinite(c.getTime())) return c; for (; d;)(l = kh.exec(d)) ? (k = db(k, l, 1), d = k.pop()) : (k.push(d), d = null); var m = c.getTimezoneOffset(); f && (m = fc(f, m), c = gc(c, f, !0)); r(k, function (b) {
                    h = lh[b]; g += h ? h(c, a.DATETIME_FORMATS,
                        m) : "''" === b ? "'" : b.replace(/(^'|'$)/g, "").replace(/''/g, "'")
                }); return g
            }
        } function ch() { return function (a, b) { A(b) && (b = 2); return eb(a, b) } } function dh() { return function (a, b, d) { b = Infinity === Math.abs(Number(b)) ? Number(b) : fa(b); if (Y(b)) return a; X(a) && (a = a.toString()); if (!za(a)) return a; d = !d || isNaN(d) ? 0 : fa(d); d = 0 > d ? Math.max(0, a.length + d) : d; return 0 <= b ? Hc(a, d, d + b) : 0 === d ? Hc(a, b, a.length) : Hc(a, Math.max(0, d + b), d) } } function Hc(a, b, d) { return C(a) ? a.slice(b, d) : Ha.call(a, b, d) } function Vd(a) {
            function b(b) {
                return b.map(function (b) {
                    var c =
                        1, d = Ta; if (B(b)) d = b; else if (C(b)) { if ("+" === b.charAt(0) || "-" === b.charAt(0)) c = "-" === b.charAt(0) ? -1 : 1, b = b.substring(1); if ("" !== b && (d = a(b), d.constant)) var e = d(), d = function (a) { return a[e] } } return { get: d, descending: c }
                })
            } function d(a) { switch (typeof a) { case "number": case "boolean": case "string": return !0; default: return !1 } } function c(a, b) {
                var c = 0, d = a.type, h = b.type; if (d === h) {
                    var h = a.value, l = b.value; "string" === d ? (h = h.toLowerCase(), l = l.toLowerCase()) : "object" === d && (D(h) && (h = a.index), D(l) && (l = b.index)); h !== l && (c =
                        h < l ? -1 : 1)
                } else c = "undefined" === d ? 1 : "undefined" === h ? -1 : "null" === d ? 1 : "null" === h ? -1 : d < h ? -1 : 1; return c
            } return function (a, f, g, k) {
                if (null == a) return a; if (!za(a)) throw F("orderBy")("notarray", a); H(f) || (f = [f]); 0 === f.length && (f = ["+"]); var h = b(f), l = g ? -1 : 1, m = B(k) ? k : c; a = Array.prototype.map.call(a, function (a, b) {
                    return {
                        value: a, tieBreaker: { value: b, type: "number", index: b }, predicateValues: h.map(function (c) {
                            var e = c.get(a); c = typeof e; if (null === e) c = "null"; else if ("object" === c) a: {
                                if (B(e.valueOf) && (e = e.valueOf(), d(e))) break a;
                                cc(e) && (e = e.toString(), d(e))
                            } return { value: e, type: c, index: b }
                        })
                    }
                }); a.sort(function (a, b) { for (var d = 0, e = h.length; d < e; d++) { var f = m(a.predicateValues[d], b.predicateValues[d]); if (f) return f * h[d].descending * l } return (m(a.tieBreaker, b.tieBreaker) || c(a.tieBreaker, b.tieBreaker)) * l }); return a = a.map(function (a) { return a.value })
            }
        } function Ra(a) { B(a) && (a = { link: a }); a.restrict = a.restrict || "AC"; return ia(a) } function Qb(a, b, d, c, e) {
            this.$$controls = []; this.$error = {}; this.$$success = {}; this.$pending = void 0; this.$name = e(b.name ||
                b.ngForm || "")(d); this.$dirty = !1; this.$valid = this.$pristine = !0; this.$submitted = this.$invalid = !1; this.$$parentForm = mb; this.$$element = a; this.$$animate = c; ae(this)
        } function ae(a) { a.$$classCache = {}; a.$$classCache[be] = !(a.$$classCache[nb] = a.$$element.hasClass(nb)) } function ce(a) {
            function b(a, b, c) { c && !a.$$classCache[b] ? (a.$$animate.addClass(a.$$element, b), a.$$classCache[b] = !0) : !c && a.$$classCache[b] && (a.$$animate.removeClass(a.$$element, b), a.$$classCache[b] = !1) } function d(a, c, d) {
                c = c ? "-" + Xc(c, "-") : ""; b(a, nb +
                    c, !0 === d); b(a, be + c, !1 === d)
            } var c = a.set, e = a.unset; a.clazz.prototype.$setValidity = function (a, g, k) {
                A(g) ? (this.$pending || (this.$pending = {}), c(this.$pending, a, k)) : (this.$pending && e(this.$pending, a, k), de(this.$pending) && (this.$pending = void 0)); Ga(g) ? g ? (e(this.$error, a, k), c(this.$$success, a, k)) : (c(this.$error, a, k), e(this.$$success, a, k)) : (e(this.$error, a, k), e(this.$$success, a, k)); this.$pending ? (b(this, "ng-pending", !0), this.$valid = this.$invalid = void 0, d(this, "", null)) : (b(this, "ng-pending", !1), this.$valid =
                    de(this.$error), this.$invalid = !this.$valid, d(this, "", this.$valid)); g = this.$pending && this.$pending[a] ? void 0 : this.$error[a] ? !1 : this.$$success[a] ? !0 : null; d(this, a, g); this.$$parentForm.$setValidity(a, g, this)
            }
        } function de(a) { if (a) for (var b in a) if (a.hasOwnProperty(b)) return !1; return !0 } function Ic(a) { a.$formatters.push(function (b) { return a.$isEmpty(b) ? b : b.toString() }) } function Sa(a, b, d, c, e, f) {
            var g = K(b[0].type); if (!e.android) {
                var k = !1; b.on("compositionstart", function () { k = !0 }); b.on("compositionupdate",
                    function (a) { if (A(a.data) || "" === a.data) k = !1 }); b.on("compositionend", function () { k = !1; l() })
            } var h, l = function (a) { h && (f.defer.cancel(h), h = null); if (!k) { var e = b.val(); a = a && a.type; "password" === g || d.ngTrim && "false" === d.ngTrim || (e = V(e)); (c.$viewValue !== e || "" === e && c.$$hasNativeValidators) && c.$setViewValue(e, a) } }; if (e.hasEvent("input")) b.on("input", l); else {
                var m = function (a, b, c) { h || (h = f.defer(function () { h = null; b && b.value === c || l(a) })) }; b.on("keydown", function (a) {
                    var b = a.keyCode; 91 === b || 15 < b && 19 > b || 37 <= b && 40 >= b ||
                        m(a, this, this.value)
                }); if (e.hasEvent("paste")) b.on("paste cut drop", m)
            } b.on("change", l); if (ee[g] && c.$$hasNativeValidators && g === d.type) b.on("keydown wheel mousedown", function (a) { if (!h) { var b = this.validity, c = b.badInput, d = b.typeMismatch; h = f.defer(function () { h = null; b.badInput === c && b.typeMismatch === d || l(a) }) } }); c.$render = function () { var a = c.$isEmpty(c.$viewValue) ? "" : c.$viewValue; b.val() !== a && b.val(a) }
        } function Rb(a, b) {
            return function (d, c) {
                var e, f; if (ha(d)) return d; if (C(d)) {
                    '"' === d.charAt(0) && '"' === d.charAt(d.length -
                        1) && (d = d.substring(1, d.length - 1)); if (mh.test(d)) return new Date(d); a.lastIndex = 0; if (e = a.exec(d)) return e.shift(), f = c ? { yyyy: c.getFullYear(), MM: c.getMonth() + 1, dd: c.getDate(), HH: c.getHours(), mm: c.getMinutes(), ss: c.getSeconds(), sss: c.getMilliseconds() / 1E3 } : { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 }, r(e, function (a, c) { c < b.length && (f[b[c]] = +a) }), e = new Date(f.yyyy, f.MM - 1, f.dd, f.HH, f.mm, f.ss || 0, 1E3 * f.sss || 0), 100 > f.yyyy && e.setFullYear(f.yyyy), e
                } return NaN
            }
        } function ob(a, b, d, c) {
            return function (e, f, g, k, h, l, m,
                p) {
                    function n(a) { return a && !(a.getTime && a.getTime() !== a.getTime()) } function s(a) { return w(a) && !ha(a) ? r(a) || void 0 : a } function r(a, b) { var c = k.$options.getOption("timezone"); v && v !== c && (b = Uc(b, fc(v))); var e = d(a, b); !isNaN(e) && c && (e = gc(e, c)); return e } Jc(e, f, g, k, a); Sa(e, f, g, k, h, l); var t = "time" === a || "datetimelocal" === a, q, v; k.$parsers.push(function (c) { if (k.$isEmpty(c)) return null; if (b.test(c)) return r(c, q); k.$$parserName = a }); k.$formatters.push(function (a) {
                        if (a && !ha(a)) throw pb("datefmt", a); if (n(a)) {
                            q = a; var b =
                                k.$options.getOption("timezone"); b && (v = b, q = gc(q, b, !0)); var d = c; t && C(k.$options.getOption("timeSecondsFormat")) && (d = c.replace("ss.sss", k.$options.getOption("timeSecondsFormat")).replace(/:$/, "")); a = m("date")(a, d, b); t && k.$options.getOption("timeStripZeroSeconds") && (a = a.replace(/(?::00)?(?:\.000)?$/, "")); return a
                        } v = q = null; return ""
                    }); if (w(g.min) || g.ngMin) { var x = g.min || p(g.ngMin)(e), z = s(x); k.$validators.min = function (a) { return !n(a) || A(z) || d(a) >= z }; g.$observe("min", function (a) { a !== x && (z = s(a), x = a, k.$validate()) }) } if (w(g.max) ||
                        g.ngMax) { var y = g.max || p(g.ngMax)(e), J = s(y); k.$validators.max = function (a) { return !n(a) || A(J) || d(a) <= J }; g.$observe("max", function (a) { a !== y && (J = s(a), y = a, k.$validate()) }) }
            }
        } function Jc(a, b, d, c, e) { (c.$$hasNativeValidators = D(b[0].validity)) && c.$parsers.push(function (a) { var d = b.prop("validity") || {}; if (d.badInput || d.typeMismatch) c.$$parserName = e; else return a }) } function fe(a) {
            a.$parsers.push(function (b) { if (a.$isEmpty(b)) return null; if (nh.test(b)) return parseFloat(b); a.$$parserName = "number" }); a.$formatters.push(function (b) {
                if (!a.$isEmpty(b)) {
                    if (!X(b)) throw pb("numfmt",
                        b); b = b.toString()
                } return b
            })
        } function na(a) { w(a) && !X(a) && (a = parseFloat(a)); return Y(a) ? void 0 : a } function Kc(a) { var b = a.toString(), d = b.indexOf("."); return -1 === d ? -1 < a && 1 > a && (a = /e-(\d+)$/.exec(b)) ? Number(a[1]) : 0 : b.length - d - 1 } function ge(a, b, d) { a = Number(a); var c = (a | 0) !== a, e = (b | 0) !== b, f = (d | 0) !== d; if (c || e || f) { var g = c ? Kc(a) : 0, k = e ? Kc(b) : 0, h = f ? Kc(d) : 0, g = Math.max(g, k, h), g = Math.pow(10, g); a *= g; b *= g; d *= g; c && (a = Math.round(a)); e && (b = Math.round(b)); f && (d = Math.round(d)) } return 0 === (a - b) % d } function he(a, b, d, c, e) {
            if (w(c)) {
                a =
                a(c); if (!a.constant) throw pb("constexpr", d, c); return a(b)
            } return e
        } function Lc(a, b) {
            function d(a, b) { if (!a || !a.length) return []; if (!b || !b.length) return a; var c = [], d = 0; a: for (; d < a.length; d++) { for (var e = a[d], m = 0; m < b.length; m++)if (e === b[m]) continue a; c.push(e) } return c } function c(a) { if (!a) return a; var b = a; H(a) ? b = a.map(c).join(" ") : D(a) ? b = Object.keys(a).filter(function (b) { return a[b] }).join(" ") : C(a) || (b = a + ""); return b } a = "ngClass" + a; var e; return ["$parse", function (f) {
                return {
                    restrict: "AC", link: function (g,
                        k, h) {
                            function l(a, b) { var c = []; r(a, function (a) { if (0 < b || p[a]) p[a] = (p[a] || 0) + b, p[a] === +(0 < b) && c.push(a) }); return c.join(" ") } function m(a) { if (a === b) { var c = s, c = l(c && c.split(" "), 1); h.$addClass(c) } else c = s, c = l(c && c.split(" "), -1), h.$removeClass(c); n = a } var p = k.data("$classCounts"), n = !0, s; p || (p = T(), k.data("$classCounts", p)); "ngClass" !== a && (e || (e = f("$index", function (a) { return a & 1 })), g.$watch(e, m)); g.$watch(f(h[a], c), function (a) {
                                if (n === b) {
                                    var c = s && s.split(" "), e = a && a.split(" "), f = d(c, e), c = d(e, c), f = l(f, -1),
                                    c = l(c, 1); h.$addClass(c); h.$removeClass(f)
                                } s = a
                            })
                    }
                }
            }]
        } function sd(a, b, d, c, e, f) { return { restrict: "A", compile: function (g, k) { var h = a(k[c]); return function (a, c) { c.on(e, function (c) { var e = function () { h(a, { $event: c }) }; if (b.$$phase) if (f) a.$evalAsync(e); else try { e() } catch (g) { d(g) } else a.$apply(e) }) } } } } function Sb(a, b, d, c, e, f, g, k, h) {
            this.$modelValue = this.$viewValue = Number.NaN; this.$$rawModelValue = void 0; this.$validators = {}; this.$asyncValidators = {}; this.$parsers = []; this.$formatters = []; this.$viewChangeListeners =
                []; this.$untouched = !0; this.$touched = !1; this.$pristine = !0; this.$dirty = !1; this.$valid = !0; this.$invalid = !1; this.$error = {}; this.$$success = {}; this.$pending = void 0; this.$name = h(d.name || "", !1)(a); this.$$parentForm = mb; this.$options = Tb; this.$$updateEvents = ""; this.$$updateEventHandler = this.$$updateEventHandler.bind(this); this.$$parsedNgModel = e(d.ngModel); this.$$parsedNgModelAssign = this.$$parsedNgModel.assign; this.$$ngModelGet = this.$$parsedNgModel; this.$$ngModelSet = this.$$parsedNgModelAssign; this.$$pendingDebounce =
                    null; this.$$parserValid = void 0; this.$$parserName = "parse"; this.$$currentValidationRunId = 0; this.$$scope = a; this.$$rootScope = a.$root; this.$$attr = d; this.$$element = c; this.$$animate = f; this.$$timeout = g; this.$$parse = e; this.$$q = k; this.$$exceptionHandler = b; ae(this); oh(this)
        } function oh(a) { a.$$scope.$watch(function (b) { b = a.$$ngModelGet(b); b === a.$modelValue || a.$modelValue !== a.$modelValue && b !== b || a.$$setModelValue(b); return b }) } function Mc(a) { this.$$options = a } function ie(a, b) { r(b, function (b, c) { w(a[c]) || (a[c] = b) }) }
    function Oa(a, b) { a.prop("selected", b); a.attr("selected", b) } function je(a, b, d) { if (a) { C(a) && (a = new RegExp("^" + a + "$")); if (!a.test) throw F("ngPattern")("noregexp", b, a, Aa(d)); return a } } function Ub(a) { a = fa(a); return Y(a) ? -1 : a } var Xb = { objectMaxDepth: 5, urlErrorParamsEnabled: !0 }, ke = /^\/(.+)\/([a-z]*)$/, ta = Object.prototype.hasOwnProperty, K = function (a) { return C(a) ? a.toLowerCase() : a }, vb = function (a) { return C(a) ? a.toUpperCase() : a }, wa, x, sb, Ha = [].slice, Kg = [].splice, ph = [].push, la = Object.prototype.toString, Rc = Object.getPrototypeOf,
        oa = F("ng"), ca = z.angular || (z.angular = {}), lc, qb = 0; wa = z.document.documentMode; var Y = Number.isNaN || function (a) { return a !== a }; E.$inject = []; Ta.$inject = []; var ze = /^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/, V = function (a) { return C(a) ? a.trim() : a }, Od = function (a) { return a.replace(/([-()[\]{}+?*.$^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08") }, Ba = function () {
            if (!w(Ba.rules)) {
                var a = z.document.querySelector("[ng-csp]") || z.document.querySelector("[data-ng-csp]"); if (a) {
                    var b =
                        a.getAttribute("ng-csp") || a.getAttribute("data-ng-csp"); Ba.rules = { noUnsafeEval: !b || -1 !== b.indexOf("no-unsafe-eval"), noInlineStyle: !b || -1 !== b.indexOf("no-inline-style") }
                } else { a = Ba; try { new Function(""), b = !1 } catch (d) { b = !0 } a.rules = { noUnsafeEval: b, noInlineStyle: !1 } }
            } return Ba.rules
        }, rb = function () { if (w(rb.name_)) return rb.name_; var a, b, d = Qa.length, c, e; for (b = 0; b < d; ++b)if (c = Qa[b], a = z.document.querySelector("[" + c.replace(":", "\\:") + "jq]")) { e = a.getAttribute(c + "jq"); break } return rb.name_ = e }, Be = /:/g, Qa = ["ng-",
            "data-ng-", "ng:", "x-ng-"], Fe = function (a) { var b = a.currentScript; if (!b) return !0; if (!(b instanceof z.HTMLScriptElement || b instanceof z.SVGScriptElement)) return !1; b = b.attributes; return [b.getNamedItem("src"), b.getNamedItem("href"), b.getNamedItem("xlink:href")].every(function (b) { if (!b) return !0; if (!b.value) return !1; var c = a.createElement("a"); c.href = b.value; if (a.location.origin === c.origin) return !0; switch (c.protocol) { case "http:": case "https:": case "ftp:": case "blob:": case "file:": case "data:": return !0; default: return !1 } }) }(z.document),
            Ie = /[A-Z]/g, Yc = !1, Pa = 3, Pe = { full: "1.8.3", major: 1, minor: 8, dot: 3, codeName: "ultimate-farewell" }; U.expando = "ng339"; var Ka = U.cache = {}, ug = 1; U._data = function (a) { return this.cache[a[this.expando]] || {} }; var qg = /-([a-z])/g, qh = /^-ms-/, Bb = { mouseleave: "mouseout", mouseenter: "mouseover" }, oc = F("jqLite"), tg = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/, nc = /<|&#?\w+;/, rg = /<([\w:-]+)/, sg = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, qa = {
                thead: ["table"], col: ["colgroup", "table"], tr: ["tbody", "table"], td: ["tr",
                    "tbody", "table"]
            }; qa.tbody = qa.tfoot = qa.colgroup = qa.caption = qa.thead; qa.th = qa.td; var hb = { option: [1, '<select multiple="multiple">', "</select>"], _default: [0, "", ""] }, Nc; for (Nc in qa) { var le = qa[Nc], me = le.slice().reverse(); hb[Nc] = [me.length, "<" + me.join("><") + ">", "</" + le.join("></") + ">"] } hb.optgroup = hb.option; var zg = z.Node.prototype.contains || function (a) { return !!(this.compareDocumentPosition(a) & 16) }, Wa = U.prototype = {
                ready: hd, toString: function () {
                    var a = []; r(this, function (b) { a.push("" + b) }); return "[" + a.join(", ") +
                        "]"
                }, eq: function (a) { return 0 <= a ? x(this[a]) : x(this[this.length + a]) }, length: 0, push: ph, sort: [].sort, splice: [].splice
            }, Hb = {}; r("multiple selected checked disabled readOnly required open".split(" "), function (a) { Hb[K(a)] = a }); var od = {}; r("input select option textarea button form details".split(" "), function (a) { od[a] = !0 }); var vd = { ngMinlength: "minlength", ngMaxlength: "maxlength", ngMin: "min", ngMax: "max", ngPattern: "pattern", ngStep: "step" }; r({
                data: sc, removeData: rc, hasData: function (a) {
                    for (var b in Ka[a.ng339]) return !0;
                    return !1
                }, cleanData: function (a) { for (var b = 0, d = a.length; b < d; b++)rc(a[b]), kd(a[b]) }
            }, function (a, b) { U[b] = a }); r({
                data: sc, inheritedData: Fb, scope: function (a) { return x.data(a, "$scope") || Fb(a.parentNode || a, ["$isolateScope", "$scope"]) }, isolateScope: function (a) { return x.data(a, "$isolateScope") || x.data(a, "$isolateScopeNoTemplate") }, controller: ld, injector: function (a) { return Fb(a, "$injector") }, removeAttr: function (a, b) { a.removeAttribute(b) }, hasClass: Cb, css: function (a, b, d) {
                    b = yb(b.replace(qh, "ms-")); if (w(d)) a.style[b] =
                        d; else return a.style[b]
                }, attr: function (a, b, d) { var c = a.nodeType; if (c !== Pa && 2 !== c && 8 !== c && a.getAttribute) { var c = K(b), e = Hb[c]; if (w(d)) null === d || !1 === d && e ? a.removeAttribute(b) : a.setAttribute(b, e ? c : d); else return a = a.getAttribute(b), e && null !== a && (a = c), null === a ? void 0 : a } }, prop: function (a, b, d) { if (w(d)) a[b] = d; else return a[b] }, text: function () { function a(a, d) { if (A(d)) { var c = a.nodeType; return 1 === c || c === Pa ? a.textContent : "" } a.textContent = d } a.$dv = ""; return a }(), val: function (a, b) {
                    if (A(b)) {
                        if (a.multiple && "select" ===
                            ua(a)) { var d = []; r(a.options, function (a) { a.selected && d.push(a.value || a.text) }); return d } return a.value
                    } a.value = b
                }, html: function (a, b) { if (A(b)) return a.innerHTML; zb(a, !0); a.innerHTML = b }, empty: md
            }, function (a, b) {
                U.prototype[b] = function (b, c) {
                    var e, f, g = this.length; if (a !== md && A(2 === a.length && a !== Cb && a !== ld ? b : c)) { if (D(b)) { for (e = 0; e < g; e++)if (a === sc) a(this[e], b); else for (f in b) a(this[e], f, b[f]); return this } e = a.$dv; g = A(e) ? Math.min(g, 1) : g; for (f = 0; f < g; f++) { var k = a(this[f], b, c); e = e ? e + k : k } return e } for (e = 0; e < g; e++)a(this[e],
                        b, c); return this
                }
            }); r({
                removeData: rc, on: function (a, b, d, c) { if (w(c)) throw oc("onargs"); if (mc(a)) { c = Ab(a, !0); var e = c.events, f = c.handle; f || (f = c.handle = wg(a, e)); c = 0 <= b.indexOf(" ") ? b.split(" ") : [b]; for (var g = c.length, k = function (b, c, g) { var k = e[b]; k || (k = e[b] = [], k.specialHandlerWrapper = c, "$destroy" === b || g || a.addEventListener(b, f)); k.push(d) }; g--;)b = c[g], Bb[b] ? (k(Bb[b], yg), k(b, void 0, !0)) : k(b) } }, off: kd, one: function (a, b, d) { a = x(a); a.on(b, function e() { a.off(b, d); a.off(b, e) }); a.on(b, d) }, replaceWith: function (a,
                    b) { var d, c = a.parentNode; zb(a); r(new U(b), function (b) { d ? c.insertBefore(b, d.nextSibling) : c.replaceChild(b, a); d = b }) }, children: function (a) { var b = []; r(a.childNodes, function (a) { 1 === a.nodeType && b.push(a) }); return b }, contents: function (a) { return a.contentDocument || a.childNodes || [] }, append: function (a, b) { var d = a.nodeType; if (1 === d || 11 === d) { b = new U(b); for (var d = 0, c = b.length; d < c; d++)a.appendChild(b[d]) } }, prepend: function (a, b) { if (1 === a.nodeType) { var d = a.firstChild; r(new U(b), function (b) { a.insertBefore(b, d) }) } },
                wrap: function (a, b) { var d = x(b).eq(0).clone()[0], c = a.parentNode; c && c.replaceChild(d, a); d.appendChild(a) }, remove: Gb, detach: function (a) { Gb(a, !0) }, after: function (a, b) { var d = a, c = a.parentNode; if (c) { b = new U(b); for (var e = 0, f = b.length; e < f; e++) { var g = b[e]; c.insertBefore(g, d.nextSibling); d = g } } }, addClass: Eb, removeClass: Db, toggleClass: function (a, b, d) { b && r(b.split(" "), function (b) { var e = d; A(e) && (e = !Cb(a, b)); (e ? Eb : Db)(a, b) }) }, parent: function (a) { return (a = a.parentNode) && 11 !== a.nodeType ? a : null }, next: function (a) { return a.nextElementSibling },
                find: function (a, b) { return a.getElementsByTagName ? a.getElementsByTagName(b) : [] }, clone: qc, triggerHandler: function (a, b, d) {
                    var c, e, f = b.type || b, g = Ab(a); if (g = (g = g && g.events) && g[f]) c = { preventDefault: function () { this.defaultPrevented = !0 }, isDefaultPrevented: function () { return !0 === this.defaultPrevented }, stopImmediatePropagation: function () { this.immediatePropagationStopped = !0 }, isImmediatePropagationStopped: function () { return !0 === this.immediatePropagationStopped }, stopPropagation: E, type: f, target: a }, b.type && (c = S(c,
                        b)), b = ja(g), e = d ? [c].concat(d) : [c], r(b, function (b) { c.isImmediatePropagationStopped() || b.apply(a, e) })
                }
            }, function (a, b) { U.prototype[b] = function (b, c, e) { for (var f, g = 0, k = this.length; g < k; g++)A(f) ? (f = a(this[g], b, c, e), w(f) && (f = x(f))) : pc(f, a(this[g], b, c, e)); return w(f) ? f : this } }); U.prototype.bind = U.prototype.on; U.prototype.unbind = U.prototype.off; var rh = Object.create(null); pd.prototype = {
                _idx: function (a) { a !== this._lastKey && (this._lastKey = a, this._lastIndex = this._keys.indexOf(a)); return this._lastIndex }, _transformKey: function (a) {
                    return Y(a) ?
                        rh : a
                }, get: function (a) { a = this._transformKey(a); a = this._idx(a); if (-1 !== a) return this._values[a] }, has: function (a) { a = this._transformKey(a); return -1 !== this._idx(a) }, set: function (a, b) { a = this._transformKey(a); var d = this._idx(a); -1 === d && (d = this._lastIndex = this._keys.length); this._keys[d] = a; this._values[d] = b }, delete: function (a) { a = this._transformKey(a); a = this._idx(a); if (-1 === a) return !1; this._keys.splice(a, 1); this._values.splice(a, 1); this._lastKey = NaN; this._lastIndex = -1; return !0 }
            }; var Ib = pd, og = [function () {
                this.$get =
                [function () { return Ib }]
            }], Bg = /^([^(]+?)=>/, Cg = /^[^(]*\(\s*([^)]*)\)/m, sh = /,/, th = /^\s*(_?)(\S+?)\1\s*$/, Ag = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg, Ca = F("$injector"); fb.$$annotate = function (a, b, d) { var c; if ("function" === typeof a) { if (!(c = a.$inject)) { c = []; if (a.length) { if (b) throw C(d) && d || (d = a.name || Dg(a)), Ca("strictdi", d); b = qd(a); r(b[1].split(sh), function (a) { a.replace(th, function (a, b, d) { c.push(d) }) }) } a.$inject = c } } else H(a) ? (b = a.length - 1, tb(a[b], "fn"), c = a.slice(0, b)) : tb(a, "fn", !0); return c }; var ne = F("$animate"),
                Ef = function () { this.$get = E }, Ff = function () {
                    var a = new Ib, b = []; this.$get = ["$$AnimateRunner", "$rootScope", function (d, c) {
                        function e(a, b, c) { var d = !1; b && (b = C(b) ? b.split(" ") : H(b) ? b : [], r(b, function (b) { b && (d = !0, a[b] = c) })); return d } function f() { r(b, function (b) { var c = a.get(b); if (c) { var d = Eg(b.attr("class")), e = "", f = ""; r(c, function (a, b) { a !== !!d[b] && (a ? e += (e.length ? " " : "") + b : f += (f.length ? " " : "") + b) }); r(b, function (a) { e && Eb(a, e); f && Db(a, f) }); a.delete(b) } }); b.length = 0 } return {
                            enabled: E, on: E, off: E, pin: E, push: function (g,
                                k, h, l) { l && l(); h = h || {}; h.from && g.css(h.from); h.to && g.css(h.to); if (h.addClass || h.removeClass) if (k = h.addClass, l = h.removeClass, h = a.get(g) || {}, k = e(h, k, !0), l = e(h, l, !1), k || l) a.set(g, h), b.push(g), 1 === b.length && c.$$postDigest(f); g = new d; g.complete(); return g }
                        }
                    }]
                }, Cf = ["$provide", function (a) {
                    var b = this, d = null, c = null; this.$$registeredAnimations = Object.create(null); this.register = function (c, d) {
                        if (c && "." !== c.charAt(0)) throw ne("notcsel", c); var g = c + "-animation"; b.$$registeredAnimations[c.substr(1)] = g; a.factory(g,
                            d)
                    }; this.customFilter = function (a) { 1 === arguments.length && (c = B(a) ? a : null); return c }; this.classNameFilter = function (a) { if (1 === arguments.length && (d = a instanceof RegExp ? a : null) && /[(\s|\/)]ng-animate[(\s|\/)]/.test(d.toString())) throw d = null, ne("nongcls", "ng-animate"); return d }; this.$get = ["$$animateQueue", function (a) {
                        function b(a, c, d) { if (d) { var e; a: { for (e = 0; e < d.length; e++) { var f = d[e]; if (1 === f.nodeType) { e = f; break a } } e = void 0 } !e || e.parentNode || e.previousElementSibling || (d = null) } d ? d.after(a) : c.prepend(a) } return {
                            on: a.on,
                            off: a.off, pin: a.pin, enabled: a.enabled, cancel: function (a) { a.cancel && a.cancel() }, enter: function (c, d, h, l) { d = d && x(d); h = h && x(h); d = d || h.parent(); b(c, d, h); return a.push(c, "enter", ra(l)) }, move: function (c, d, h, l) { d = d && x(d); h = h && x(h); d = d || h.parent(); b(c, d, h); return a.push(c, "move", ra(l)) }, leave: function (b, c) { return a.push(b, "leave", ra(c), function () { b.remove() }) }, addClass: function (b, c, d) { d = ra(d); d.addClass = ib(d.addclass, c); return a.push(b, "addClass", d) }, removeClass: function (b, c, d) {
                                d = ra(d); d.removeClass = ib(d.removeClass,
                                    c); return a.push(b, "removeClass", d)
                            }, setClass: function (b, c, d, f) { f = ra(f); f.addClass = ib(f.addClass, c); f.removeClass = ib(f.removeClass, d); return a.push(b, "setClass", f) }, animate: function (b, c, d, f, m) { m = ra(m); m.from = m.from ? S(m.from, c) : c; m.to = m.to ? S(m.to, d) : d; m.tempClasses = ib(m.tempClasses, f || "ng-inline-animate"); return a.push(b, "animate", m) }
                        }
                    }]
                }], Hf = function () {
                    this.$get = ["$$rAF", function (a) {
                        function b(b) { d.push(b); 1 < d.length || a(function () { for (var a = 0; a < d.length; a++)d[a](); d = [] }) } var d = []; return function () {
                            var a =
                                !1; b(function () { a = !0 }); return function (d) { a ? d() : b(d) }
                        }
                    }]
                }, Gf = function () {
                    this.$get = ["$q", "$sniffer", "$$animateAsyncRun", "$$isDocumentHidden", "$timeout", function (a, b, d, c, e) {
                        function f(a) { this.setHost(a); var b = d(); this._doneCallbacks = []; this._tick = function (a) { c() ? e(a, 0, !1) : b(a) }; this._state = 0 } f.chain = function (a, b) { function c() { if (d === a.length) b(!0); else a[d](function (a) { !1 === a ? b(!1) : (d++, c()) }) } var d = 0; c() }; f.all = function (a, b) { function c(f) { e = e && f; ++d === a.length && b(e) } var d = 0, e = !0; r(a, function (a) { a.done(c) }) };
                        f.prototype = {
                            setHost: function (a) { this.host = a || {} }, done: function (a) { 2 === this._state ? a() : this._doneCallbacks.push(a) }, progress: E, getPromise: function () { if (!this.promise) { var b = this; this.promise = a(function (a, c) { b.done(function (b) { !1 === b ? c() : a() }) }) } return this.promise }, then: function (a, b) { return this.getPromise().then(a, b) }, "catch": function (a) { return this.getPromise()["catch"](a) }, "finally": function (a) { return this.getPromise()["finally"](a) }, pause: function () { this.host.pause && this.host.pause() }, resume: function () {
                                this.host.resume &&
                                this.host.resume()
                            }, end: function () { this.host.end && this.host.end(); this._resolve(!0) }, cancel: function () { this.host.cancel && this.host.cancel(); this._resolve(!1) }, complete: function (a) { var b = this; 0 === b._state && (b._state = 1, b._tick(function () { b._resolve(a) })) }, _resolve: function (a) { 2 !== this._state && (r(this._doneCallbacks, function (b) { b(a) }), this._doneCallbacks.length = 0, this._state = 2) }
                        }; return f
                    }]
                }, Df = function () {
                    this.$get = ["$$rAF", "$q", "$$AnimateRunner", function (a, b, d) {
                        return function (b, e) {
                            function f() {
                                a(function () {
                                    g.addClass &&
                                    (b.addClass(g.addClass), g.addClass = null); g.removeClass && (b.removeClass(g.removeClass), g.removeClass = null); g.to && (b.css(g.to), g.to = null); k || h.complete(); k = !0
                                }); return h
                            } var g = e || {}; g.$$prepared || (g = Ia(g)); g.cleanupStyles && (g.from = g.to = null); g.from && (b.css(g.from), g.from = null); var k, h = new d; return { start: f, end: f }
                        }
                    }]
                }, $ = F("$compile"), uc = new function () { }; Zc.$inject = ["$provide", "$$sanitizeUriProvider"]; Kb.prototype.isFirstChange = function () { return this.previousValue === uc }; var rd = /^((?:x|data)[:\-_])/i, Jg =
                    /[:\-_]+(.)/g, xd = F("$controller"), wd = /^(\S+)(\s+as\s+([\w$]+))?$/, Of = function () { this.$get = ["$document", function (a) { return function (b) { b ? !b.nodeType && b instanceof x && (b = b[0]) : b = a[0].body; return b.offsetWidth + 1 } }] }, yd = "application/json", xc = { "Content-Type": yd + ";charset=utf-8" }, Mg = /^\[|^\{(?!\{)/, Ng = { "[": /]$/, "{": /}$/ }, Lg = /^\)]\}',?\n/, Lb = F("$http"), Ma = ca.$interpolateMinErr = F("$interpolate"); Ma.throwNoconcat = function (a) { throw Ma("noconcat", a); }; Ma.interr = function (a, b) { return Ma("interr", a, b.toString()) };
    var Qg = F("$interval"), Xf = function () { this.$get = function () { function a(a) { var b = function (a) { b.data = a; b.called = !0 }; b.id = a; return b } var b = ca.callbacks, d = {}; return { createCallback: function (c) { c = "_" + (b.$$counter++).toString(36); var e = "angular.callbacks." + c, f = a(c); d[e] = b[c] = f; return e }, wasCalled: function (a) { return d[a].called }, getResponse: function (a) { return d[a].data }, removeCallback: function (a) { delete b[d[a].id]; delete d[a] } } } }, uh = /^([^?#]*)(\?([^#]*))?(#(.*))?$/, Rg = { http: 80, https: 443, ftp: 21 }, kb = F("$location"),
        Sg = /^\s*[\\/]{2,}/, vh = {
            $$absUrl: "", $$html5: !1, $$replace: !1, $$compose: function () { for (var a = this.$$path, b = this.$$hash, d = Ce(this.$$search), b = b ? "#" + ic(b) : "", a = a.split("/"), c = a.length; c--;)a[c] = ic(a[c].replace(/%2F/g, "/")); this.$$url = a.join("/") + (d ? "?" + d : "") + b; this.$$absUrl = this.$$normalizeUrl(this.$$url); this.$$urlUpdatedByLocation = !0 }, absUrl: Mb("$$absUrl"), url: function (a) {
                if (A(a)) return this.$$url; var b = uh.exec(a); (b[1] || "" === a) && this.path(decodeURIComponent(b[1])); (b[2] || b[1] || "" === a) && this.search(b[3] ||
                    ""); this.hash(b[5] || ""); return this
            }, protocol: Mb("$$protocol"), host: Mb("$$host"), port: Mb("$$port"), path: Fd("$$path", function (a) { a = null !== a ? a.toString() : ""; return "/" === a.charAt(0) ? a : "/" + a }), search: function (a, b) {
                switch (arguments.length) { case 0: return this.$$search; case 1: if (C(a) || X(a)) a = a.toString(), this.$$search = hc(a); else if (D(a)) a = Ia(a, {}), r(a, function (b, c) { null == b && delete a[c] }), this.$$search = a; else throw kb("isrcharg"); break; default: A(b) || null === b ? delete this.$$search[a] : this.$$search[a] = b }this.$$compose();
                return this
            }, hash: Fd("$$hash", function (a) { return null !== a ? a.toString() : "" }), replace: function () { this.$$replace = !0; return this }
        }; r([Ed, Ac, zc], function (a) { a.prototype = Object.create(vh); a.prototype.state = function (b) { if (!arguments.length) return this.$$state; if (a !== zc || !this.$$html5) throw kb("nostate"); this.$$state = A(b) ? null : b; this.$$urlUpdatedByLocation = !0; return this } }); var Ya = F("$parse"), Wg = {}.constructor.prototype.valueOf, Vb = T(); r("+ - * / % === !== == != < > <= >= && || ! = |".split(" "), function (a) {
            Vb[a] =
            !0
        }); var wh = { n: "\n", f: "\f", r: "\r", t: "\t", v: "\v", "'": "'", '"': '"' }, Ob = function (a) { this.options = a }; Ob.prototype = {
            constructor: Ob, lex: function (a) {
                this.text = a; this.index = 0; for (this.tokens = []; this.index < this.text.length;)if (a = this.text.charAt(this.index), '"' === a || "'" === a) this.readString(a); else if (this.isNumber(a) || "." === a && this.isNumber(this.peek())) this.readNumber(); else if (this.isIdentifierStart(this.peekMultichar())) this.readIdent(); else if (this.is(a, "(){}[].,;:?")) this.tokens.push({
                    index: this.index,
                    text: a
                }), this.index++; else if (this.isWhitespace(a)) this.index++; else { var b = a + this.peek(), d = b + this.peek(2), c = Vb[b], e = Vb[d]; Vb[a] || c || e ? (a = e ? d : c ? b : a, this.tokens.push({ index: this.index, text: a, operator: !0 }), this.index += a.length) : this.throwError("Unexpected next character ", this.index, this.index + 1) } return this.tokens
            }, is: function (a, b) { return -1 !== b.indexOf(a) }, peek: function (a) { a = a || 1; return this.index + a < this.text.length ? this.text.charAt(this.index + a) : !1 }, isNumber: function (a) {
                return "0" <= a && "9" >= a && "string" ===
                    typeof a
            }, isWhitespace: function (a) { return " " === a || "\r" === a || "\t" === a || "\n" === a || "\v" === a || "\u00a0" === a }, isIdentifierStart: function (a) { return this.options.isIdentifierStart ? this.options.isIdentifierStart(a, this.codePointAt(a)) : this.isValidIdentifierStart(a) }, isValidIdentifierStart: function (a) { return "a" <= a && "z" >= a || "A" <= a && "Z" >= a || "_" === a || "$" === a }, isIdentifierContinue: function (a) { return this.options.isIdentifierContinue ? this.options.isIdentifierContinue(a, this.codePointAt(a)) : this.isValidIdentifierContinue(a) },
            isValidIdentifierContinue: function (a, b) { return this.isValidIdentifierStart(a, b) || this.isNumber(a) }, codePointAt: function (a) { return 1 === a.length ? a.charCodeAt(0) : (a.charCodeAt(0) << 10) + a.charCodeAt(1) - 56613888 }, peekMultichar: function () { var a = this.text.charAt(this.index), b = this.peek(); if (!b) return a; var d = a.charCodeAt(0), c = b.charCodeAt(0); return 55296 <= d && 56319 >= d && 56320 <= c && 57343 >= c ? a + b : a }, isExpOperator: function (a) { return "-" === a || "+" === a || this.isNumber(a) }, throwError: function (a, b, d) {
                d = d || this.index; b =
                    w(b) ? "s " + b + "-" + this.index + " [" + this.text.substring(b, d) + "]" : " " + d; throw Ya("lexerr", a, b, this.text);
            }, readNumber: function () {
                for (var a = "", b = this.index; this.index < this.text.length;) { var d = K(this.text.charAt(this.index)); if ("." === d || this.isNumber(d)) a += d; else { var c = this.peek(); if ("e" === d && this.isExpOperator(c)) a += d; else if (this.isExpOperator(d) && c && this.isNumber(c) && "e" === a.charAt(a.length - 1)) a += d; else if (!this.isExpOperator(d) || c && this.isNumber(c) || "e" !== a.charAt(a.length - 1)) break; else this.throwError("Invalid exponent") } this.index++ } this.tokens.push({
                    index: b,
                    text: a, constant: !0, value: Number(a)
                })
            }, readIdent: function () { var a = this.index; for (this.index += this.peekMultichar().length; this.index < this.text.length;) { var b = this.peekMultichar(); if (!this.isIdentifierContinue(b)) break; this.index += b.length } this.tokens.push({ index: a, text: this.text.slice(a, this.index), identifier: !0 }) }, readString: function (a) {
                var b = this.index; this.index++; for (var d = "", c = a, e = !1; this.index < this.text.length;) {
                    var f = this.text.charAt(this.index), c = c + f; if (e) "u" === f ? (e = this.text.substring(this.index +
                        1, this.index + 5), e.match(/[\da-f]{4}/i) || this.throwError("Invalid unicode escape [\\u" + e + "]"), this.index += 4, d += String.fromCharCode(parseInt(e, 16))) : d += wh[f] || f, e = !1; else if ("\\" === f) e = !0; else { if (f === a) { this.index++; this.tokens.push({ index: b, text: c, constant: !0, value: d }); return } d += f } this.index++
                } this.throwError("Unterminated quote", b)
            }
        }; var q = function (a, b) { this.lexer = a; this.options = b }; q.Program = "Program"; q.ExpressionStatement = "ExpressionStatement"; q.AssignmentExpression = "AssignmentExpression"; q.ConditionalExpression =
            "ConditionalExpression"; q.LogicalExpression = "LogicalExpression"; q.BinaryExpression = "BinaryExpression"; q.UnaryExpression = "UnaryExpression"; q.CallExpression = "CallExpression"; q.MemberExpression = "MemberExpression"; q.Identifier = "Identifier"; q.Literal = "Literal"; q.ArrayExpression = "ArrayExpression"; q.Property = "Property"; q.ObjectExpression = "ObjectExpression"; q.ThisExpression = "ThisExpression"; q.LocalsExpression = "LocalsExpression"; q.NGValueParameter = "NGValueParameter"; q.prototype = {
                ast: function (a) {
                    this.text =
                    a; this.tokens = this.lexer.lex(a); a = this.program(); 0 !== this.tokens.length && this.throwError("is an unexpected token", this.tokens[0]); return a
                }, program: function () { for (var a = []; ;)if (0 < this.tokens.length && !this.peek("}", ")", ";", "]") && a.push(this.expressionStatement()), !this.expect(";")) return { type: q.Program, body: a } }, expressionStatement: function () { return { type: q.ExpressionStatement, expression: this.filterChain() } }, filterChain: function () { for (var a = this.expression(); this.expect("|");)a = this.filter(a); return a },
                expression: function () { return this.assignment() }, assignment: function () { var a = this.ternary(); if (this.expect("=")) { if (!Jd(a)) throw Ya("lval"); a = { type: q.AssignmentExpression, left: a, right: this.assignment(), operator: "=" } } return a }, ternary: function () { var a = this.logicalOR(), b, d; return this.expect("?") && (b = this.expression(), this.consume(":")) ? (d = this.expression(), { type: q.ConditionalExpression, test: a, alternate: b, consequent: d }) : a }, logicalOR: function () {
                    for (var a = this.logicalAND(); this.expect("||");)a = {
                        type: q.LogicalExpression,
                        operator: "||", left: a, right: this.logicalAND()
                    }; return a
                }, logicalAND: function () { for (var a = this.equality(); this.expect("&&");)a = { type: q.LogicalExpression, operator: "&&", left: a, right: this.equality() }; return a }, equality: function () { for (var a = this.relational(), b; b = this.expect("==", "!=", "===", "!==");)a = { type: q.BinaryExpression, operator: b.text, left: a, right: this.relational() }; return a }, relational: function () {
                    for (var a = this.additive(), b; b = this.expect("<", ">", "<=", ">=");)a = {
                        type: q.BinaryExpression, operator: b.text,
                        left: a, right: this.additive()
                    }; return a
                }, additive: function () { for (var a = this.multiplicative(), b; b = this.expect("+", "-");)a = { type: q.BinaryExpression, operator: b.text, left: a, right: this.multiplicative() }; return a }, multiplicative: function () { for (var a = this.unary(), b; b = this.expect("*", "/", "%");)a = { type: q.BinaryExpression, operator: b.text, left: a, right: this.unary() }; return a }, unary: function () { var a; return (a = this.expect("+", "-", "!")) ? { type: q.UnaryExpression, operator: a.text, prefix: !0, argument: this.unary() } : this.primary() },
                primary: function () {
                    var a; this.expect("(") ? (a = this.filterChain(), this.consume(")")) : this.expect("[") ? a = this.arrayDeclaration() : this.expect("{") ? a = this.object() : this.selfReferential.hasOwnProperty(this.peek().text) ? a = Ia(this.selfReferential[this.consume().text]) : this.options.literals.hasOwnProperty(this.peek().text) ? a = { type: q.Literal, value: this.options.literals[this.consume().text] } : this.peek().identifier ? a = this.identifier() : this.peek().constant ? a = this.constant() : this.throwError("not a primary expression",
                        this.peek()); for (var b; b = this.expect("(", "[", ".");)"(" === b.text ? (a = { type: q.CallExpression, callee: a, arguments: this.parseArguments() }, this.consume(")")) : "[" === b.text ? (a = { type: q.MemberExpression, object: a, property: this.expression(), computed: !0 }, this.consume("]")) : "." === b.text ? a = { type: q.MemberExpression, object: a, property: this.identifier(), computed: !1 } : this.throwError("IMPOSSIBLE"); return a
                }, filter: function (a) {
                    a = [a]; for (var b = { type: q.CallExpression, callee: this.identifier(), arguments: a, filter: !0 }; this.expect(":");)a.push(this.expression());
                    return b
                }, parseArguments: function () { var a = []; if (")" !== this.peekToken().text) { do a.push(this.filterChain()); while (this.expect(",")) } return a }, identifier: function () { var a = this.consume(); a.identifier || this.throwError("is not a valid identifier", a); return { type: q.Identifier, name: a.text } }, constant: function () { return { type: q.Literal, value: this.consume().value } }, arrayDeclaration: function () {
                    var a = []; if ("]" !== this.peekToken().text) { do { if (this.peek("]")) break; a.push(this.expression()) } while (this.expect(",")) } this.consume("]");
                    return { type: q.ArrayExpression, elements: a }
                }, object: function () {
                    var a = [], b; if ("}" !== this.peekToken().text) {
                        do {
                            if (this.peek("}")) break; b = { type: q.Property, kind: "init" }; this.peek().constant ? (b.key = this.constant(), b.computed = !1, this.consume(":"), b.value = this.expression()) : this.peek().identifier ? (b.key = this.identifier(), b.computed = !1, this.peek(":") ? (this.consume(":"), b.value = this.expression()) : b.value = b.key) : this.peek("[") ? (this.consume("["), b.key = this.expression(), this.consume("]"), b.computed = !0, this.consume(":"),
                                b.value = this.expression()) : this.throwError("invalid key", this.peek()); a.push(b)
                        } while (this.expect(","))
                    } this.consume("}"); return { type: q.ObjectExpression, properties: a }
                }, throwError: function (a, b) { throw Ya("syntax", b.text, a, b.index + 1, this.text, this.text.substring(b.index)); }, consume: function (a) { if (0 === this.tokens.length) throw Ya("ueoe", this.text); var b = this.expect(a); b || this.throwError("is unexpected, expecting [" + a + "]", this.peek()); return b }, peekToken: function () {
                    if (0 === this.tokens.length) throw Ya("ueoe",
                        this.text); return this.tokens[0]
                }, peek: function (a, b, d, c) { return this.peekAhead(0, a, b, d, c) }, peekAhead: function (a, b, d, c, e) { if (this.tokens.length > a) { a = this.tokens[a]; var f = a.text; if (f === b || f === d || f === c || f === e || !(b || d || c || e)) return a } return !1 }, expect: function (a, b, d, c) { return (a = this.peek(a, b, d, c)) ? (this.tokens.shift(), a) : !1 }, selfReferential: { "this": { type: q.ThisExpression }, $locals: { type: q.LocalsExpression } }
            }; var Hd = 2; Ld.prototype = {
                compile: function (a) {
                    var b = this; this.state = {
                        nextId: 0, filters: {}, fn: {
                            vars: [],
                            body: [], own: {}
                        }, assign: { vars: [], body: [], own: {} }, inputs: []
                    }; Z(a, b.$filter); var d = "", c; this.stage = "assign"; if (c = Kd(a)) this.state.computing = "assign", d = this.nextId(), this.recurse(c, d), this.return_(d), d = "fn.assign=" + this.generateFunction("assign", "s,v,l"); c = Id(a.body); b.stage = "inputs"; r(c, function (a, c) { var d = "fn" + c; b.state[d] = { vars: [], body: [], own: {} }; b.state.computing = d; var k = b.nextId(); b.recurse(a, k); b.return_(k); b.state.inputs.push({ name: d, isPure: a.isPure }); a.watchId = c }); this.state.computing = "fn"; this.stage =
                        "main"; this.recurse(a); a = '"' + this.USE + " " + this.STRICT + '";\n' + this.filterPrefix() + "var fn=" + this.generateFunction("fn", "s,l,a,i") + d + this.watchFns() + "return fn;"; a = (new Function("$filter", "getStringValue", "ifDefined", "plus", a))(this.$filter, Tg, Ug, Gd); this.state = this.stage = void 0; return a
                }, USE: "use", STRICT: "strict", watchFns: function () {
                    var a = [], b = this.state.inputs, d = this; r(b, function (b) {
                        a.push("var " + b.name + "=" + d.generateFunction(b.name, "s")); b.isPure && a.push(b.name, ".isPure=" + JSON.stringify(b.isPure) +
                            ";")
                    }); b.length && a.push("fn.inputs=[" + b.map(function (a) { return a.name }).join(",") + "];"); return a.join("")
                }, generateFunction: function (a, b) { return "function(" + b + "){" + this.varsPrefix(a) + this.body(a) + "};" }, filterPrefix: function () { var a = [], b = this; r(this.state.filters, function (d, c) { a.push(d + "=$filter(" + b.escape(c) + ")") }); return a.length ? "var " + a.join(",") + ";" : "" }, varsPrefix: function (a) { return this.state[a].vars.length ? "var " + this.state[a].vars.join(",") + ";" : "" }, body: function (a) { return this.state[a].body.join("") },
                recurse: function (a, b, d, c, e, f) {
                    var g, k, h = this, l, m, p; c = c || E; if (!f && w(a.watchId)) b = b || this.nextId(), this.if_("i", this.lazyAssign(b, this.computedMember("i", a.watchId)), this.lazyRecurse(a, b, d, c, e, !0)); else switch (a.type) {
                        case q.Program: r(a.body, function (b, c) { h.recurse(b.expression, void 0, void 0, function (a) { k = a }); c !== a.body.length - 1 ? h.current().body.push(k, ";") : h.return_(k) }); break; case q.Literal: m = this.escape(a.value); this.assign(b, m); c(b || m); break; case q.UnaryExpression: this.recurse(a.argument, void 0,
                            void 0, function (a) { k = a }); m = a.operator + "(" + this.ifDefined(k, 0) + ")"; this.assign(b, m); c(m); break; case q.BinaryExpression: this.recurse(a.left, void 0, void 0, function (a) { g = a }); this.recurse(a.right, void 0, void 0, function (a) { k = a }); m = "+" === a.operator ? this.plus(g, k) : "-" === a.operator ? this.ifDefined(g, 0) + a.operator + this.ifDefined(k, 0) : "(" + g + ")" + a.operator + "(" + k + ")"; this.assign(b, m); c(m); break; case q.LogicalExpression: b = b || this.nextId(); h.recurse(a.left, b); h.if_("&&" === a.operator ? b : h.not(b), h.lazyRecurse(a.right,
                                b)); c(b); break; case q.ConditionalExpression: b = b || this.nextId(); h.recurse(a.test, b); h.if_(b, h.lazyRecurse(a.alternate, b), h.lazyRecurse(a.consequent, b)); c(b); break; case q.Identifier: b = b || this.nextId(); d && (d.context = "inputs" === h.stage ? "s" : this.assign(this.nextId(), this.getHasOwnProperty("l", a.name) + "?l:s"), d.computed = !1, d.name = a.name); h.if_("inputs" === h.stage || h.not(h.getHasOwnProperty("l", a.name)), function () {
                                    h.if_("inputs" === h.stage || "s", function () {
                                        e && 1 !== e && h.if_(h.isNull(h.nonComputedMember("s", a.name)),
                                            h.lazyAssign(h.nonComputedMember("s", a.name), "{}")); h.assign(b, h.nonComputedMember("s", a.name))
                                    })
                                }, b && h.lazyAssign(b, h.nonComputedMember("l", a.name))); c(b); break; case q.MemberExpression: g = d && (d.context = this.nextId()) || this.nextId(); b = b || this.nextId(); h.recurse(a.object, g, void 0, function () {
                                    h.if_(h.notNull(g), function () {
                                        a.computed ? (k = h.nextId(), h.recurse(a.property, k), h.getStringValue(k), e && 1 !== e && h.if_(h.not(h.computedMember(g, k)), h.lazyAssign(h.computedMember(g, k), "{}")), m = h.computedMember(g, k), h.assign(b,
                                            m), d && (d.computed = !0, d.name = k)) : (e && 1 !== e && h.if_(h.isNull(h.nonComputedMember(g, a.property.name)), h.lazyAssign(h.nonComputedMember(g, a.property.name), "{}")), m = h.nonComputedMember(g, a.property.name), h.assign(b, m), d && (d.computed = !1, d.name = a.property.name))
                                    }, function () { h.assign(b, "undefined") }); c(b)
                                }, !!e); break; case q.CallExpression: b = b || this.nextId(); a.filter ? (k = h.filter(a.callee.name), l = [], r(a.arguments, function (a) { var b = h.nextId(); h.recurse(a, b); l.push(b) }), m = k + "(" + l.join(",") + ")", h.assign(b, m), c(b)) :
                                    (k = h.nextId(), g = {}, l = [], h.recurse(a.callee, k, g, function () { h.if_(h.notNull(k), function () { r(a.arguments, function (b) { h.recurse(b, a.constant ? void 0 : h.nextId(), void 0, function (a) { l.push(a) }) }); m = g.name ? h.member(g.context, g.name, g.computed) + "(" + l.join(",") + ")" : k + "(" + l.join(",") + ")"; h.assign(b, m) }, function () { h.assign(b, "undefined") }); c(b) })); break; case q.AssignmentExpression: k = this.nextId(); g = {}; this.recurse(a.left, void 0, g, function () {
                                        h.if_(h.notNull(g.context), function () {
                                            h.recurse(a.right, k); m = h.member(g.context,
                                                g.name, g.computed) + a.operator + k; h.assign(b, m); c(b || m)
                                        })
                                    }, 1); break; case q.ArrayExpression: l = []; r(a.elements, function (b) { h.recurse(b, a.constant ? void 0 : h.nextId(), void 0, function (a) { l.push(a) }) }); m = "[" + l.join(",") + "]"; this.assign(b, m); c(b || m); break; case q.ObjectExpression: l = []; p = !1; r(a.properties, function (a) { a.computed && (p = !0) }); p ? (b = b || this.nextId(), this.assign(b, "{}"), r(a.properties, function (a) {
                                        a.computed ? (g = h.nextId(), h.recurse(a.key, g)) : g = a.key.type === q.Identifier ? a.key.name : "" + a.key.value; k = h.nextId();
                                        h.recurse(a.value, k); h.assign(h.member(b, g, a.computed), k)
                                    })) : (r(a.properties, function (b) { h.recurse(b.value, a.constant ? void 0 : h.nextId(), void 0, function (a) { l.push(h.escape(b.key.type === q.Identifier ? b.key.name : "" + b.key.value) + ":" + a) }) }), m = "{" + l.join(",") + "}", this.assign(b, m)); c(b || m); break; case q.ThisExpression: this.assign(b, "s"); c(b || "s"); break; case q.LocalsExpression: this.assign(b, "l"); c(b || "l"); break; case q.NGValueParameter: this.assign(b, "v"), c(b || "v")
                    }
                }, getHasOwnProperty: function (a, b) {
                    var d = a + "." +
                        b, c = this.current().own; c.hasOwnProperty(d) || (c[d] = this.nextId(!1, a + "&&(" + this.escape(b) + " in " + a + ")")); return c[d]
                }, assign: function (a, b) { if (a) return this.current().body.push(a, "=", b, ";"), a }, filter: function (a) { this.state.filters.hasOwnProperty(a) || (this.state.filters[a] = this.nextId(!0)); return this.state.filters[a] }, ifDefined: function (a, b) { return "ifDefined(" + a + "," + this.escape(b) + ")" }, plus: function (a, b) { return "plus(" + a + "," + b + ")" }, return_: function (a) { this.current().body.push("return ", a, ";") }, if_: function (a,
                    b, d) { if (!0 === a) b(); else { var c = this.current().body; c.push("if(", a, "){"); b(); c.push("}"); d && (c.push("else{"), d(), c.push("}")) } }, not: function (a) { return "!(" + a + ")" }, isNull: function (a) { return a + "==null" }, notNull: function (a) { return a + "!=null" }, nonComputedMember: function (a, b) { var d = /[^$_a-zA-Z0-9]/g; return /^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(b) ? a + "." + b : a + '["' + b.replace(d, this.stringEscapeFn) + '"]' }, computedMember: function (a, b) { return a + "[" + b + "]" }, member: function (a, b, d) {
                        return d ? this.computedMember(a, b) : this.nonComputedMember(a,
                            b)
                    }, getStringValue: function (a) { this.assign(a, "getStringValue(" + a + ")") }, lazyRecurse: function (a, b, d, c, e, f) { var g = this; return function () { g.recurse(a, b, d, c, e, f) } }, lazyAssign: function (a, b) { var d = this; return function () { d.assign(a, b) } }, stringEscapeRegex: /[^ a-zA-Z0-9]/g, stringEscapeFn: function (a) { return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4) }, escape: function (a) {
                        if (C(a)) return "'" + a.replace(this.stringEscapeRegex, this.stringEscapeFn) + "'"; if (X(a)) return a.toString(); if (!0 === a) return "true"; if (!1 ===
                            a) return "false"; if (null === a) return "null"; if ("undefined" === typeof a) return "undefined"; throw Ya("esc");
                    }, nextId: function (a, b) { var d = "v" + this.state.nextId++; a || this.current().vars.push(d + (b ? "=" + b : "")); return d }, current: function () { return this.state[this.state.computing] }
            }; Md.prototype = {
                compile: function (a) {
                    var b = this; Z(a, b.$filter); var d, c; if (d = Kd(a)) c = this.recurse(d); d = Id(a.body); var e; d && (e = [], r(d, function (a, c) { var d = b.recurse(a); d.isPure = a.isPure; a.input = d; e.push(d); a.watchId = c })); var f = []; r(a.body,
                        function (a) { f.push(b.recurse(a.expression)) }); a = 0 === a.body.length ? E : 1 === a.body.length ? f[0] : function (a, b) { var c; r(f, function (d) { c = d(a, b) }); return c }; c && (a.assign = function (a, b, d) { return c(a, d, b) }); e && (a.inputs = e); return a
                }, recurse: function (a, b, d) {
                    var c, e, f = this, g; if (a.input) return this.inputs(a.input, a.watchId); switch (a.type) {
                        case q.Literal: return this.value(a.value, b); case q.UnaryExpression: return e = this.recurse(a.argument), this["unary" + a.operator](e, b); case q.BinaryExpression: return c = this.recurse(a.left),
                            e = this.recurse(a.right), this["binary" + a.operator](c, e, b); case q.LogicalExpression: return c = this.recurse(a.left), e = this.recurse(a.right), this["binary" + a.operator](c, e, b); case q.ConditionalExpression: return this["ternary?:"](this.recurse(a.test), this.recurse(a.alternate), this.recurse(a.consequent), b); case q.Identifier: return f.identifier(a.name, b, d); case q.MemberExpression: return c = this.recurse(a.object, !1, !!d), a.computed || (e = a.property.name), a.computed && (e = this.recurse(a.property)), a.computed ? this.computedMember(c,
                                e, b, d) : this.nonComputedMember(c, e, b, d); case q.CallExpression: return g = [], r(a.arguments, function (a) { g.push(f.recurse(a)) }), a.filter && (e = this.$filter(a.callee.name)), a.filter || (e = this.recurse(a.callee, !0)), a.filter ? function (a, c, d, f) { for (var p = [], n = 0; n < g.length; ++n)p.push(g[n](a, c, d, f)); a = e.apply(void 0, p, f); return b ? { context: void 0, name: void 0, value: a } : a } : function (a, c, d, f) {
                                    var p = e(a, c, d, f), n; if (null != p.value) { n = []; for (var s = 0; s < g.length; ++s)n.push(g[s](a, c, d, f)); n = p.value.apply(p.context, n) } return b ?
                                        { value: n } : n
                                }; case q.AssignmentExpression: return c = this.recurse(a.left, !0, 1), e = this.recurse(a.right), function (a, d, f, g) { var p = c(a, d, f, g); a = e(a, d, f, g); p.context[p.name] = a; return b ? { value: a } : a }; case q.ArrayExpression: return g = [], r(a.elements, function (a) { g.push(f.recurse(a)) }), function (a, c, d, e) { for (var f = [], n = 0; n < g.length; ++n)f.push(g[n](a, c, d, e)); return b ? { value: f } : f }; case q.ObjectExpression: return g = [], r(a.properties, function (a) {
                                    a.computed ? g.push({ key: f.recurse(a.key), computed: !0, value: f.recurse(a.value) }) :
                                    g.push({ key: a.key.type === q.Identifier ? a.key.name : "" + a.key.value, computed: !1, value: f.recurse(a.value) })
                                }), function (a, c, d, e) { for (var f = {}, n = 0; n < g.length; ++n)g[n].computed ? f[g[n].key(a, c, d, e)] = g[n].value(a, c, d, e) : f[g[n].key] = g[n].value(a, c, d, e); return b ? { value: f } : f }; case q.ThisExpression: return function (a) { return b ? { value: a } : a }; case q.LocalsExpression: return function (a, c) { return b ? { value: c } : c }; case q.NGValueParameter: return function (a, c, d) { return b ? { value: d } : d }
                    }
                }, "unary+": function (a, b) {
                    return function (d,
                        c, e, f) { d = a(d, c, e, f); d = w(d) ? +d : 0; return b ? { value: d } : d }
                }, "unary-": function (a, b) { return function (d, c, e, f) { d = a(d, c, e, f); d = w(d) ? -d : -0; return b ? { value: d } : d } }, "unary!": function (a, b) { return function (d, c, e, f) { d = !a(d, c, e, f); return b ? { value: d } : d } }, "binary+": function (a, b, d) { return function (c, e, f, g) { var k = a(c, e, f, g); c = b(c, e, f, g); k = Gd(k, c); return d ? { value: k } : k } }, "binary-": function (a, b, d) { return function (c, e, f, g) { var k = a(c, e, f, g); c = b(c, e, f, g); k = (w(k) ? k : 0) - (w(c) ? c : 0); return d ? { value: k } : k } }, "binary*": function (a, b,
                    d) { return function (c, e, f, g) { c = a(c, e, f, g) * b(c, e, f, g); return d ? { value: c } : c } }, "binary/": function (a, b, d) { return function (c, e, f, g) { c = a(c, e, f, g) / b(c, e, f, g); return d ? { value: c } : c } }, "binary%": function (a, b, d) { return function (c, e, f, g) { c = a(c, e, f, g) % b(c, e, f, g); return d ? { value: c } : c } }, "binary===": function (a, b, d) { return function (c, e, f, g) { c = a(c, e, f, g) === b(c, e, f, g); return d ? { value: c } : c } }, "binary!==": function (a, b, d) { return function (c, e, f, g) { c = a(c, e, f, g) !== b(c, e, f, g); return d ? { value: c } : c } }, "binary==": function (a, b, d) {
                        return function (c,
                            e, f, g) { c = a(c, e, f, g) == b(c, e, f, g); return d ? { value: c } : c }
                    }, "binary!=": function (a, b, d) { return function (c, e, f, g) { c = a(c, e, f, g) != b(c, e, f, g); return d ? { value: c } : c } }, "binary<": function (a, b, d) { return function (c, e, f, g) { c = a(c, e, f, g) < b(c, e, f, g); return d ? { value: c } : c } }, "binary>": function (a, b, d) { return function (c, e, f, g) { c = a(c, e, f, g) > b(c, e, f, g); return d ? { value: c } : c } }, "binary<=": function (a, b, d) { return function (c, e, f, g) { c = a(c, e, f, g) <= b(c, e, f, g); return d ? { value: c } : c } }, "binary>=": function (a, b, d) {
                        return function (c, e, f, g) {
                            c =
                            a(c, e, f, g) >= b(c, e, f, g); return d ? { value: c } : c
                        }
                    }, "binary&&": function (a, b, d) { return function (c, e, f, g) { c = a(c, e, f, g) && b(c, e, f, g); return d ? { value: c } : c } }, "binary||": function (a, b, d) { return function (c, e, f, g) { c = a(c, e, f, g) || b(c, e, f, g); return d ? { value: c } : c } }, "ternary?:": function (a, b, d, c) { return function (e, f, g, k) { e = a(e, f, g, k) ? b(e, f, g, k) : d(e, f, g, k); return c ? { value: e } : e } }, value: function (a, b) { return function () { return b ? { context: void 0, name: void 0, value: a } : a } }, identifier: function (a, b, d) {
                        return function (c, e, f, g) {
                            c =
                            e && a in e ? e : c; d && 1 !== d && c && null == c[a] && (c[a] = {}); e = c ? c[a] : void 0; return b ? { context: c, name: a, value: e } : e
                        }
                    }, computedMember: function (a, b, d, c) { return function (e, f, g, k) { var h = a(e, f, g, k), l, m; null != h && (l = b(e, f, g, k), l += "", c && 1 !== c && h && !h[l] && (h[l] = {}), m = h[l]); return d ? { context: h, name: l, value: m } : m } }, nonComputedMember: function (a, b, d, c) { return function (e, f, g, k) { e = a(e, f, g, k); c && 1 !== c && e && null == e[b] && (e[b] = {}); f = null != e ? e[b] : void 0; return d ? { context: e, name: b, value: f } : f } }, inputs: function (a, b) {
                        return function (d,
                            c, e, f) { return f ? f[b] : a(d, c, e) }
                    }
            }; Nb.prototype = {
                constructor: Nb, parse: function (a) { a = this.getAst(a); var b = this.astCompiler.compile(a.ast), d = a.ast; b.literal = 0 === d.body.length || 1 === d.body.length && (d.body[0].expression.type === q.Literal || d.body[0].expression.type === q.ArrayExpression || d.body[0].expression.type === q.ObjectExpression); b.constant = a.ast.constant; b.oneTime = a.oneTime; return b }, getAst: function (a) {
                    var b = !1; a = a.trim(); ":" === a.charAt(0) && ":" === a.charAt(1) && (b = !0, a = a.substring(2)); return {
                        ast: this.ast.ast(a),
                        oneTime: b
                    }
                }
            }; var Ea = F("$sce"), W = { HTML: "html", CSS: "css", MEDIA_URL: "mediaUrl", URL: "url", RESOURCE_URL: "resourceUrl", JS: "js" }, Dc = /_([a-z])/g, Zg = F("$templateRequest"), $g = F("$timeout"), aa = z.document.createElement("a"), Qd = ga(z.location.href), Na; aa.href = "http://[::1]"; var ah = "[::1]" === aa.hostname; Rd.$inject = ["$document"]; fd.$inject = ["$provide"]; var Yd = 22, Xd = ".", Fc = "0"; Sd.$inject = ["$locale"]; Ud.$inject = ["$locale"]; var lh = {
                yyyy: ea("FullYear", 4, 0, !1, !0), yy: ea("FullYear", 2, 0, !0, !0), y: ea("FullYear", 1, 0, !1, !0),
                MMMM: lb("Month"), MMM: lb("Month", !0), MM: ea("Month", 2, 1), M: ea("Month", 1, 1), LLLL: lb("Month", !1, !0), dd: ea("Date", 2), d: ea("Date", 1), HH: ea("Hours", 2), H: ea("Hours", 1), hh: ea("Hours", 2, -12), h: ea("Hours", 1, -12), mm: ea("Minutes", 2), m: ea("Minutes", 1), ss: ea("Seconds", 2), s: ea("Seconds", 1), sss: ea("Milliseconds", 3), EEEE: lb("Day"), EEE: lb("Day", !0), a: function (a, b) { return 12 > a.getHours() ? b.AMPMS[0] : b.AMPMS[1] }, Z: function (a, b, d) { a = -1 * d; return a = (0 <= a ? "+" : "") + (Pb(Math[0 < a ? "floor" : "ceil"](a / 60), 2) + Pb(Math.abs(a % 60), 2)) },
                ww: $d(2), w: $d(1), G: Gc, GG: Gc, GGG: Gc, GGGG: function (a, b) { return 0 >= a.getFullYear() ? b.ERANAMES[0] : b.ERANAMES[1] }
            }, kh = /((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/, jh = /^-?\d+$/; Td.$inject = ["$locale"]; var eh = ia(K), fh = ia(vb); Vd.$inject = ["$parse"]; var Re = ia({
                restrict: "E", compile: function (a, b) {
                    if (!b.href && !b.xlinkHref) return function (a, b) {
                        if ("a" === b[0].nodeName.toLowerCase()) {
                            var e = "[object SVGAnimatedString]" === la.call(b.prop("href")) ? "xlink:href" : "href";
                            b.on("click", function (a) { b.attr(e) || a.preventDefault() })
                        }
                    }
                }
            }), wb = {}; r(Hb, function (a, b) { function d(a, d, e) { a.$watch(e[c], function (a) { e.$set(b, !!a) }) } if ("multiple" !== a) { var c = xa("ng-" + b), e = d; "checked" === a && (e = function (a, b, e) { e.ngModel !== e[c] && d(a, b, e) }); wb[c] = function () { return { restrict: "A", priority: 100, link: e } } } }); r(vd, function (a, b) {
                wb[b] = function () {
                    return {
                        priority: 100, link: function (a, c, e) {
                            if ("ngPattern" === b && "/" === e.ngPattern.charAt(0) && (c = e.ngPattern.match(ke))) {
                                e.$set("ngPattern", new RegExp(c[1],
                                    c[2])); return
                            } a.$watch(e[b], function (a) { e.$set(b, a) })
                        }
                    }
                }
            }); r(["src", "srcset", "href"], function (a) { var b = xa("ng-" + a); wb[b] = ["$sce", function (d) { return { priority: 99, link: function (c, e, f) { var g = a, k = a; "href" === a && "[object SVGAnimatedString]" === la.call(e.prop("href")) && (k = "xlinkHref", f.$attr[k] = "xlink:href", g = null); f.$set(b, d.getTrustedMediaUrl(f[b])); f.$observe(b, function (b) { b ? (f.$set(k, b), wa && g && e.prop(g, f[k])) : "href" === a && f.$set(k, null) }) } } }] }); var mb = {
                $addControl: E, $getControls: ia([]), $$renameControl: function (a,
                    b) { a.$name = b }, $removeControl: E, $setValidity: E, $setDirty: E, $setPristine: E, $setSubmitted: E, $$setSubmitted: E
            }; Qb.$inject = ["$element", "$attrs", "$scope", "$animate", "$interpolate"]; Qb.prototype = {
                $rollbackViewValue: function () { r(this.$$controls, function (a) { a.$rollbackViewValue() }) }, $commitViewValue: function () { r(this.$$controls, function (a) { a.$commitViewValue() }) }, $addControl: function (a) { Ja(a.$name, "input"); this.$$controls.push(a); a.$name && (this[a.$name] = a); a.$$parentForm = this }, $getControls: function () { return ja(this.$$controls) },
                $$renameControl: function (a, b) { var d = a.$name; this[d] === a && delete this[d]; this[b] = a; a.$name = b }, $removeControl: function (a) { a.$name && this[a.$name] === a && delete this[a.$name]; r(this.$pending, function (b, d) { this.$setValidity(d, null, a) }, this); r(this.$error, function (b, d) { this.$setValidity(d, null, a) }, this); r(this.$$success, function (b, d) { this.$setValidity(d, null, a) }, this); cb(this.$$controls, a); a.$$parentForm = mb }, $setDirty: function () {
                    this.$$animate.removeClass(this.$$element, Za); this.$$animate.addClass(this.$$element,
                        Wb); this.$dirty = !0; this.$pristine = !1; this.$$parentForm.$setDirty()
                }, $setPristine: function () { this.$$animate.setClass(this.$$element, Za, Wb + " ng-submitted"); this.$dirty = !1; this.$pristine = !0; this.$submitted = !1; r(this.$$controls, function (a) { a.$setPristine() }) }, $setUntouched: function () { r(this.$$controls, function (a) { a.$setUntouched() }) }, $setSubmitted: function () { for (var a = this; a.$$parentForm && a.$$parentForm !== mb;)a = a.$$parentForm; a.$$setSubmitted() }, $$setSubmitted: function () {
                    this.$$animate.addClass(this.$$element,
                        "ng-submitted"); this.$submitted = !0; r(this.$$controls, function (a) { a.$$setSubmitted && a.$$setSubmitted() })
                }
            }; ce({ clazz: Qb, set: function (a, b, d) { var c = a[b]; c ? -1 === c.indexOf(d) && c.push(d) : a[b] = [d] }, unset: function (a, b, d) { var c = a[b]; c && (cb(c, d), 0 === c.length && delete a[b]) } }); var oe = function (a) {
                return ["$timeout", "$parse", function (b, d) {
                    function c(a) { return "" === a ? d('this[""]').assign : d(a).assign || E } return {
                        name: "form", restrict: a ? "EAC" : "E", require: ["form", "^^?form"], controller: Qb, compile: function (d, f) {
                            d.addClass(Za).addClass(nb);
                            var g = f.name ? "name" : a && f.ngForm ? "ngForm" : !1; return {
                                pre: function (a, d, e, f) {
                                    var p = f[0]; if (!("action" in e)) { var n = function (b) { a.$apply(function () { p.$commitViewValue(); p.$setSubmitted() }); b.preventDefault() }; d[0].addEventListener("submit", n); d.on("$destroy", function () { b(function () { d[0].removeEventListener("submit", n) }, 0, !1) }) } (f[1] || p.$$parentForm).$addControl(p); var s = g ? c(p.$name) : E; g && (s(a, p), e.$observe(g, function (b) { p.$name !== b && (s(a, void 0), p.$$parentForm.$$renameControl(p, b), s = c(p.$name), s(a, p)) }));
                                    d.on("$destroy", function () { p.$$parentForm.$removeControl(p); s(a, void 0); S(p, mb) })
                                }
                            }
                        }
                    }
                }]
            }, Se = oe(), df = oe(!0), mh = /^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/, xh = /^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i, yh = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,
                nh = /^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/, pe = /^(\d{4,})-(\d{2})-(\d{2})$/, qe = /^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/, Oc = /^(\d{4,})-W(\d\d)$/, re = /^(\d{4,})-(\d\d)$/, se = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/, ee = T(); r(["date", "datetime-local", "month", "time", "week"], function (a) { ee[a] = !0 }); var te = {
                    text: function (a, b, d, c, e, f) { Sa(a, b, d, c, e, f); Ic(c) }, date: ob("date", pe, Rb(pe, ["yyyy", "MM", "dd"]), "yyyy-MM-dd"), "datetime-local": ob("datetimelocal", qe, Rb(qe, "yyyy MM dd HH mm ss sss".split(" ")),
                        "yyyy-MM-ddTHH:mm:ss.sss"), time: ob("time", se, Rb(se, ["HH", "mm", "ss", "sss"]), "HH:mm:ss.sss"), week: ob("week", Oc, function (a, b) { if (ha(a)) return a; if (C(a)) { Oc.lastIndex = 0; var d = Oc.exec(a); if (d) { var c = +d[1], e = +d[2], f = d = 0, g = 0, k = 0, h = Zd(c), e = 7 * (e - 1); b && (d = b.getHours(), f = b.getMinutes(), g = b.getSeconds(), k = b.getMilliseconds()); return new Date(c, 0, h.getDate() + e, d, f, g, k) } } return NaN }, "yyyy-Www"), month: ob("month", re, Rb(re, ["yyyy", "MM"]), "yyyy-MM"), number: function (a, b, d, c, e, f, g, k) {
                            Jc(a, b, d, c, "number"); fe(c); Sa(a,
                                b, d, c, e, f); var h; if (w(d.min) || d.ngMin) { var l = d.min || k(d.ngMin)(a); h = na(l); c.$validators.min = function (a, b) { return c.$isEmpty(b) || A(h) || b >= h }; d.$observe("min", function (a) { a !== l && (h = na(a), l = a, c.$validate()) }) } if (w(d.max) || d.ngMax) { var m = d.max || k(d.ngMax)(a), p = na(m); c.$validators.max = function (a, b) { return c.$isEmpty(b) || A(p) || b <= p }; d.$observe("max", function (a) { a !== m && (p = na(a), m = a, c.$validate()) }) } if (w(d.step) || d.ngStep) {
                                    var n = d.step || k(d.ngStep)(a), s = na(n); c.$validators.step = function (a, b) {
                                        return c.$isEmpty(b) ||
                                            A(s) || ge(b, h || 0, s)
                                    }; d.$observe("step", function (a) { a !== n && (s = na(a), n = a, c.$validate()) })
                                }
                        }, url: function (a, b, d, c, e, f) { Sa(a, b, d, c, e, f); Ic(c); c.$validators.url = function (a, b) { var d = a || b; return c.$isEmpty(d) || xh.test(d) } }, email: function (a, b, d, c, e, f) { Sa(a, b, d, c, e, f); Ic(c); c.$validators.email = function (a, b) { var d = a || b; return c.$isEmpty(d) || yh.test(d) } }, radio: function (a, b, d, c) {
                            var e = !d.ngTrim || "false" !== V(d.ngTrim); A(d.name) && b.attr("name", ++qb); b.on("change", function (a) {
                                var g; b[0].checked && (g = d.value, e && (g =
                                    V(g)), c.$setViewValue(g, a && a.type))
                            }); c.$render = function () { var a = d.value; e && (a = V(a)); b[0].checked = a === c.$viewValue }; d.$observe("value", c.$render)
                        }, range: function (a, b, d, c, e, f) {
                            function g(a, c) { b.attr(a, d[a]); var e = d[a]; d.$observe(a, function (a) { a !== e && (e = a, c(a)) }) } function k(a) { p = na(a); Y(c.$modelValue) || (m ? (a = b.val(), p > a && (a = p, b.val(a)), c.$setViewValue(a)) : c.$validate()) } function h(a) { n = na(a); Y(c.$modelValue) || (m ? (a = b.val(), n < a && (b.val(n), a = n < p ? p : n), c.$setViewValue(a)) : c.$validate()) } function l(a) {
                                s =
                                na(a); Y(c.$modelValue) || (m ? c.$viewValue !== b.val() && c.$setViewValue(b.val()) : c.$validate())
                            } Jc(a, b, d, c, "range"); fe(c); Sa(a, b, d, c, e, f); var m = c.$$hasNativeValidators && "range" === b[0].type, p = m ? 0 : void 0, n = m ? 100 : void 0, s = m ? 1 : void 0, r = b[0].validity; a = w(d.min); e = w(d.max); f = w(d.step); var q = c.$render; c.$render = m && w(r.rangeUnderflow) && w(r.rangeOverflow) ? function () { q(); c.$setViewValue(b.val()) } : q; a && (p = na(d.min), c.$validators.min = m ? function () { return !0 } : function (a, b) { return c.$isEmpty(b) || A(p) || b >= p }, g("min", k));
                            e && (n = na(d.max), c.$validators.max = m ? function () { return !0 } : function (a, b) { return c.$isEmpty(b) || A(n) || b <= n }, g("max", h)); f && (s = na(d.step), c.$validators.step = m ? function () { return !r.stepMismatch } : function (a, b) { return c.$isEmpty(b) || A(s) || ge(b, p || 0, s) }, g("step", l))
                        }, checkbox: function (a, b, d, c, e, f, g, k) {
                            var h = he(k, a, "ngTrueValue", d.ngTrueValue, !0), l = he(k, a, "ngFalseValue", d.ngFalseValue, !1); b.on("change", function (a) { c.$setViewValue(b[0].checked, a && a.type) }); c.$render = function () { b[0].checked = c.$viewValue }; c.$isEmpty =
                                function (a) { return !1 === a }; c.$formatters.push(function (a) { return va(a, h) }); c.$parsers.push(function (a) { return a ? h : l })
                        }, hidden: E, button: E, submit: E, reset: E, file: E
                }, $c = ["$browser", "$sniffer", "$filter", "$parse", function (a, b, d, c) { return { restrict: "E", require: ["?ngModel"], link: { pre: function (e, f, g, k) { k[0] && (te[K(g.type)] || te.text)(e, f, g, k[0], b, a, d, c) } } } }], Af = function () {
                    var a = { configurable: !0, enumerable: !1, get: function () { return this.getAttribute("value") || "" }, set: function (a) { this.setAttribute("value", a) } };
                    return { restrict: "E", priority: 200, compile: function (b, d) { if ("hidden" === K(d.type)) return { pre: function (b, d, f, g) { b = d[0]; b.parentNode && b.parentNode.insertBefore(b, b.nextSibling); Object.defineProperty && Object.defineProperty(b, "value", a) } } } }
                }, zh = /^(true|false|\d+)$/, xf = function () {
                    function a(a, d, c) { var e = w(c) ? c : 9 === wa ? "" : null; a.prop("value", e); d.$set("value", c) } return {
                        restrict: "A", priority: 100, compile: function (b, d) {
                            return zh.test(d.ngValue) ? function (b, d, f) { b = b.$eval(f.ngValue); a(d, f, b) } : function (b, d, f) {
                                b.$watch(f.ngValue,
                                    function (b) { a(d, f, b) })
                            }
                        }
                    }
                }, We = ["$compile", function (a) { return { restrict: "AC", compile: function (b) { a.$$addBindingClass(b); return function (b, c, e) { a.$$addBindingInfo(c, e.ngBind); c = c[0]; b.$watch(e.ngBind, function (a) { c.textContent = jc(a) }) } } } }], Ye = ["$interpolate", "$compile", function (a, b) { return { compile: function (d) { b.$$addBindingClass(d); return function (c, d, f) { c = a(d.attr(f.$attr.ngBindTemplate)); b.$$addBindingInfo(d, c.expressions); d = d[0]; f.$observe("ngBindTemplate", function (a) { d.textContent = A(a) ? "" : a }) } } } }],
                    Xe = ["$sce", "$parse", "$compile", function (a, b, d) { return { restrict: "A", compile: function (c, e) { var f = b(e.ngBindHtml), g = b(e.ngBindHtml, function (b) { return a.valueOf(b) }); d.$$addBindingClass(c); return function (b, c, e) { d.$$addBindingInfo(c, e.ngBindHtml); b.$watch(g, function () { var d = f(b); c.html(a.getTrustedHtml(d) || "") }) } } } }], wf = ia({ restrict: "A", require: "ngModel", link: function (a, b, d, c) { c.$viewChangeListeners.push(function () { a.$eval(d.ngChange) }) } }), Ze = Lc("", !0), af = Lc("Odd", 0), $e = Lc("Even", 1), bf = Ra({
                        compile: function (a,
                            b) { b.$set("ngCloak", void 0); a.removeClass("ng-cloak") }
                    }), cf = [function () { return { restrict: "A", scope: !0, controller: "@", priority: 500 } }], ed = {}, Ah = { blur: !0, focus: !0 }; r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), function (a) { var b = xa("ng-" + a); ed[b] = ["$parse", "$rootScope", "$exceptionHandler", function (d, c, e) { return sd(d, c, e, b, a, Ah[a]) }] }); var ff = ["$animate", "$compile", function (a, b) {
                        return {
                            multiElement: !0,
                            transclude: "element", priority: 600, terminal: !0, restrict: "A", $$tlb: !0, link: function (d, c, e, f, g) { var k, h, l; d.$watch(e.ngIf, function (d) { d ? h || g(function (d, f) { h = f; d[d.length++] = b.$$createComment("end ngIf", e.ngIf); k = { clone: d }; a.enter(d, c.parent(), c) }) : (l && (l.remove(), l = null), h && (h.$destroy(), h = null), k && (l = ub(k.clone), a.leave(l).done(function (a) { !1 !== a && (l = null) }), k = null)) }) }
                        }
                    }], gf = ["$templateRequest", "$anchorScroll", "$animate", function (a, b, d) {
                        return {
                            restrict: "ECA", priority: 400, terminal: !0, transclude: "element",
                            controller: ca.noop, compile: function (c, e) {
                                var f = e.ngInclude || e.src, g = e.onload || "", k = e.autoscroll; return function (c, e, m, p, n) {
                                    var r = 0, q, t, x, v = function () { t && (t.remove(), t = null); q && (q.$destroy(), q = null); x && (d.leave(x).done(function (a) { !1 !== a && (t = null) }), t = x, x = null) }; c.$watch(f, function (f) {
                                        var m = function (a) { !1 === a || !w(k) || k && !c.$eval(k) || b() }, t = ++r; f ? (a(f, !0).then(function (a) {
                                            if (!c.$$destroyed && t === r) {
                                                var b = c.$new(); p.template = a; a = n(b, function (a) { v(); d.enter(a, null, e).done(m) }); q = b; x = a; q.$emit("$includeContentLoaded",
                                                    f); c.$eval(g)
                                            }
                                        }, function () { c.$$destroyed || t !== r || (v(), c.$emit("$includeContentError", f)) }), c.$emit("$includeContentRequested", f)) : (v(), p.template = null)
                                    })
                                }
                            }
                        }
                    }], zf = ["$compile", function (a) { return { restrict: "ECA", priority: -400, require: "ngInclude", link: function (b, d, c, e) { la.call(d[0]).match(/SVG/) ? (d.empty(), a(gd(e.template, z.document).childNodes)(b, function (a) { d.append(a) }, { futureParentElement: d })) : (d.html(e.template), a(d.contents())(b)) } } }], hf = Ra({
                        priority: 450, compile: function () {
                            return {
                                pre: function (a,
                                    b, d) { a.$eval(d.ngInit) }
                            }
                        }
                    }), vf = function () { return { restrict: "A", priority: 100, require: "ngModel", link: function (a, b, d, c) { var e = d.ngList || ", ", f = "false" !== d.ngTrim, g = f ? V(e) : e; c.$parsers.push(function (a) { if (!A(a)) { var b = []; a && r(a.split(g), function (a) { a && b.push(f ? V(a) : a) }); return b } }); c.$formatters.push(function (a) { if (H(a)) return a.join(e) }); c.$isEmpty = function (a) { return !a || !a.length } } } }, nb = "ng-valid", be = "ng-invalid", Za = "ng-pristine", Wb = "ng-dirty", pb = F("ngModel"); Sb.$inject = "$scope $exceptionHandler $attrs $element $parse $animate $timeout $q $interpolate".split(" ");
    Sb.prototype = {
        $$initGetterSetters: function () { if (this.$options.getOption("getterSetter")) { var a = this.$$parse(this.$$attr.ngModel + "()"), b = this.$$parse(this.$$attr.ngModel + "($$$p)"); this.$$ngModelGet = function (b) { var c = this.$$parsedNgModel(b); B(c) && (c = a(b)); return c }; this.$$ngModelSet = function (a, c) { B(this.$$parsedNgModel(a)) ? b(a, { $$$p: c }) : this.$$parsedNgModelAssign(a, c) } } else if (!this.$$parsedNgModel.assign) throw pb("nonassign", this.$$attr.ngModel, Aa(this.$$element)); }, $render: E, $isEmpty: function (a) {
            return A(a) ||
                "" === a || null === a || a !== a
        }, $$updateEmptyClasses: function (a) { this.$isEmpty(a) ? (this.$$animate.removeClass(this.$$element, "ng-not-empty"), this.$$animate.addClass(this.$$element, "ng-empty")) : (this.$$animate.removeClass(this.$$element, "ng-empty"), this.$$animate.addClass(this.$$element, "ng-not-empty")) }, $setPristine: function () { this.$dirty = !1; this.$pristine = !0; this.$$animate.removeClass(this.$$element, Wb); this.$$animate.addClass(this.$$element, Za) }, $setDirty: function () {
            this.$dirty = !0; this.$pristine = !1; this.$$animate.removeClass(this.$$element,
                Za); this.$$animate.addClass(this.$$element, Wb); this.$$parentForm.$setDirty()
        }, $setUntouched: function () { this.$touched = !1; this.$untouched = !0; this.$$animate.setClass(this.$$element, "ng-untouched", "ng-touched") }, $setTouched: function () { this.$touched = !0; this.$untouched = !1; this.$$animate.setClass(this.$$element, "ng-touched", "ng-untouched") }, $rollbackViewValue: function () { this.$$timeout.cancel(this.$$pendingDebounce); this.$viewValue = this.$$lastCommittedViewValue; this.$render() }, $validate: function () {
            if (!Y(this.$modelValue)) {
                var a =
                    this.$$lastCommittedViewValue, b = this.$$rawModelValue, d = this.$valid, c = this.$modelValue, e = this.$options.getOption("allowInvalid"), f = this; this.$$runValidators(b, a, function (a) { e || d === a || (f.$modelValue = a ? b : void 0, f.$modelValue !== c && f.$$writeModelToScope()) })
            }
        }, $$runValidators: function (a, b, d) {
            function c() { var c = !0; r(h.$validators, function (d, e) { var g = Boolean(d(a, b)); c = c && g; f(e, g) }); return c ? !0 : (r(h.$asyncValidators, function (a, b) { f(b, null) }), !1) } function e() {
                var c = [], d = !0; r(h.$asyncValidators, function (e,
                    g) { var h = e(a, b); if (!h || !B(h.then)) throw pb("nopromise", h); f(g, void 0); c.push(h.then(function () { f(g, !0) }, function () { d = !1; f(g, !1) })) }); c.length ? h.$$q.all(c).then(function () { g(d) }, E) : g(!0)
            } function f(a, b) { k === h.$$currentValidationRunId && h.$setValidity(a, b) } function g(a) { k === h.$$currentValidationRunId && d(a) } this.$$currentValidationRunId++; var k = this.$$currentValidationRunId, h = this; (function () {
                var a = h.$$parserName; if (A(h.$$parserValid)) f(a, null); else return h.$$parserValid || (r(h.$validators, function (a,
                    b) { f(b, null) }), r(h.$asyncValidators, function (a, b) { f(b, null) })), f(a, h.$$parserValid), h.$$parserValid; return !0
            })() ? c() ? e() : g(!1) : g(!1)
        }, $commitViewValue: function () { var a = this.$viewValue; this.$$timeout.cancel(this.$$pendingDebounce); if (this.$$lastCommittedViewValue !== a || "" === a && this.$$hasNativeValidators) this.$$updateEmptyClasses(a), this.$$lastCommittedViewValue = a, this.$pristine && this.$setDirty(), this.$$parseAndValidate() }, $$parseAndValidate: function () {
            var a = this.$$lastCommittedViewValue, b = this; this.$$parserValid =
                A(a) ? void 0 : !0; this.$setValidity(this.$$parserName, null); this.$$parserName = "parse"; if (this.$$parserValid) for (var d = 0; d < this.$parsers.length; d++)if (a = this.$parsers[d](a), A(a)) { this.$$parserValid = !1; break } Y(this.$modelValue) && (this.$modelValue = this.$$ngModelGet(this.$$scope)); var c = this.$modelValue, e = this.$options.getOption("allowInvalid"); this.$$rawModelValue = a; e && (this.$modelValue = a, b.$modelValue !== c && b.$$writeModelToScope()); this.$$runValidators(a, this.$$lastCommittedViewValue, function (d) {
                    e || (b.$modelValue =
                        d ? a : void 0, b.$modelValue !== c && b.$$writeModelToScope())
                })
        }, $$writeModelToScope: function () { this.$$ngModelSet(this.$$scope, this.$modelValue); r(this.$viewChangeListeners, function (a) { try { a() } catch (b) { this.$$exceptionHandler(b) } }, this) }, $setViewValue: function (a, b) { this.$viewValue = a; this.$options.getOption("updateOnDefault") && this.$$debounceViewValueCommit(b) }, $$debounceViewValueCommit: function (a) {
            var b = this.$options.getOption("debounce"); X(b[a]) ? b = b[a] : X(b["default"]) && -1 === this.$options.getOption("updateOn").indexOf(a) ?
                b = b["default"] : X(b["*"]) && (b = b["*"]); this.$$timeout.cancel(this.$$pendingDebounce); var d = this; 0 < b ? this.$$pendingDebounce = this.$$timeout(function () { d.$commitViewValue() }, b) : this.$$rootScope.$$phase ? this.$commitViewValue() : this.$$scope.$apply(function () { d.$commitViewValue() })
        }, $overrideModelOptions: function (a) { this.$options = this.$options.createChild(a); this.$$setUpdateOnEvents() }, $processModelValue: function () {
            var a = this.$$format(); this.$viewValue !== a && (this.$$updateEmptyClasses(a), this.$viewValue = this.$$lastCommittedViewValue =
                a, this.$render(), this.$$runValidators(this.$modelValue, this.$viewValue, E))
        }, $$format: function () { for (var a = this.$formatters, b = a.length, d = this.$modelValue; b--;)d = a[b](d); return d }, $$setModelValue: function (a) { this.$modelValue = this.$$rawModelValue = a; this.$$parserValid = void 0; this.$processModelValue() }, $$setUpdateOnEvents: function () {
            this.$$updateEvents && this.$$element.off(this.$$updateEvents, this.$$updateEventHandler); if (this.$$updateEvents = this.$options.getOption("updateOn")) this.$$element.on(this.$$updateEvents,
                this.$$updateEventHandler)
        }, $$updateEventHandler: function (a) { this.$$debounceViewValueCommit(a && a.type) }
    }; ce({ clazz: Sb, set: function (a, b) { a[b] = !0 }, unset: function (a, b) { delete a[b] } }); var uf = ["$rootScope", function (a) {
        return {
            restrict: "A", require: ["ngModel", "^?form", "^?ngModelOptions"], controller: Sb, priority: 1, compile: function (b) {
                b.addClass(Za).addClass("ng-untouched").addClass(nb); return {
                    pre: function (a, b, e, f) {
                        var g = f[0]; b = f[1] || g.$$parentForm; if (f = f[2]) g.$options = f.$options; g.$$initGetterSetters(); b.$addControl(g);
                        e.$observe("name", function (a) { g.$name !== a && g.$$parentForm.$$renameControl(g, a) }); a.$on("$destroy", function () { g.$$parentForm.$removeControl(g) })
                    }, post: function (b, c, e, f) { function g() { k.$setTouched() } var k = f[0]; k.$$setUpdateOnEvents(); c.on("blur", function () { k.$touched || (a.$$phase ? b.$evalAsync(g) : b.$apply(g)) }) }
                }
            }
        }
    }], Tb, Bh = /(\s+|^)default(\s+|$)/; Mc.prototype = {
        getOption: function (a) { return this.$$options[a] }, createChild: function (a) {
            var b = !1; a = S({}, a); r(a, function (d, c) {
                "$inherit" === d ? "*" === c ? b = !0 : (a[c] =
                    this.$$options[c], "updateOn" === c && (a.updateOnDefault = this.$$options.updateOnDefault)) : "updateOn" === c && (a.updateOnDefault = !1, a[c] = V(d.replace(Bh, function () { a.updateOnDefault = !0; return " " })))
            }, this); b && (delete a["*"], ie(a, this.$$options)); ie(a, Tb.$$options); return new Mc(a)
        }
    }; Tb = new Mc({ updateOn: "", updateOnDefault: !0, debounce: 0, getterSetter: !1, allowInvalid: !1, timezone: null }); var yf = function () {
        function a(a, d) { this.$$attrs = a; this.$$scope = d } a.$inject = ["$attrs", "$scope"]; a.prototype = {
            $onInit: function () {
                var a =
                    this.parentCtrl ? this.parentCtrl.$options : Tb, d = this.$$scope.$eval(this.$$attrs.ngModelOptions); this.$options = a.createChild(d)
            }
        }; return { restrict: "A", priority: 10, require: { parentCtrl: "?^^ngModelOptions" }, bindToController: !0, controller: a }
    }, jf = Ra({ terminal: !0, priority: 1E3 }), Ch = F("ngOptions"), Dh = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([$\w][$\w]*)|(?:\(\s*([$\w][$\w]*)\s*,\s*([$\w][$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
        sf = ["$compile", "$document", "$parse", function (a, b, d) {
            function c(a, b, c) {
                function e(a, b, c, d, f) { this.selectValue = a; this.viewValue = b; this.label = c; this.group = d; this.disabled = f } function f(a) { var b; if (!r && za(a)) b = a; else { b = []; for (var c in a) a.hasOwnProperty(c) && "$" !== c.charAt(0) && b.push(c) } return b } var p = a.match(Dh); if (!p) throw Ch("iexp", a, Aa(b)); var n = p[5] || p[7], r = p[6]; a = / as /.test(p[0]) && p[1]; var q = p[9]; b = d(p[2] ? p[1] : n); var t = a && d(a) || b, w = q && d(q), v = q ? function (a, b) { return w(c, b) } : function (a) { return La(a) },
                    x = function (a, b) { return v(a, B(a, b)) }, A = d(p[2] || p[1]), y = d(p[3] || ""), J = d(p[4] || ""), I = d(p[8]), z = {}, B = r ? function (a, b) { z[r] = b; z[n] = a; return z } : function (a) { z[n] = a; return z }; return {
                        trackBy: q, getTrackByValue: x, getWatchables: d(I, function (a) { var b = []; a = a || []; for (var d = f(a), e = d.length, g = 0; g < e; g++) { var k = a === d ? g : d[g], l = a[k], k = B(l, k), l = v(l, k); b.push(l); if (p[2] || p[1]) l = A(c, k), b.push(l); p[4] && (k = J(c, k), b.push(k)) } return b }), getOptions: function () {
                            for (var a = [], b = {}, d = I(c) || [], g = f(d), k = g.length, n = 0; n < k; n++) {
                                var p = d ===
                                    g ? n : g[n], r = B(d[p], p), s = t(c, r), p = v(s, r), w = A(c, r), z = y(c, r), r = J(c, r), s = new e(p, s, w, z, r); a.push(s); b[p] = s
                            } return { items: a, selectValueMap: b, getOptionFromViewValue: function (a) { return b[x(a)] }, getViewValueFromOption: function (a) { return q ? Ia(a.viewValue) : a.viewValue } }
                        }
                    }
            } var e = z.document.createElement("option"), f = z.document.createElement("optgroup"); return {
                restrict: "A", terminal: !0, require: ["select", "ngModel"], link: {
                    pre: function (a, b, c, d) { d[0].registerOption = E }, post: function (d, k, h, l) {
                        function m(a) {
                            var b = (a = v.getOptionFromViewValue(a)) &&
                                a.element; b && !b.selected && (b.selected = !0); return a
                        } function p(a, b) { a.element = b; b.disabled = a.disabled; a.label !== b.label && (b.label = a.label, b.textContent = a.label); b.value = a.selectValue } var n = l[0], q = l[1], A = h.multiple; l = 0; for (var t = k.children(), z = t.length; l < z; l++)if ("" === t[l].value) { n.hasEmptyOption = !0; n.emptyOption = t.eq(l); break } k.empty(); l = !!n.emptyOption; x(e.cloneNode(!1)).val("?"); var v, B = c(h.ngOptions, k, d), C = b[0].createDocumentFragment(); n.generateUnknownOptionValue = function (a) { return "?" }; A ? (n.writeValue =
                            function (a) { if (v) { var b = a && a.map(m) || []; v.items.forEach(function (a) { a.element.selected && -1 === Array.prototype.indexOf.call(b, a) && (a.element.selected = !1) }) } }, n.readValue = function () { var a = k.val() || [], b = []; r(a, function (a) { (a = v.selectValueMap[a]) && !a.disabled && b.push(v.getViewValueFromOption(a)) }); return b }, B.trackBy && d.$watchCollection(function () { if (H(q.$viewValue)) return q.$viewValue.map(function (a) { return B.getTrackByValue(a) }) }, function () { q.$render() })) : (n.writeValue = function (a) {
                                if (v) {
                                    var b = k[0].options[k[0].selectedIndex],
                                    c = v.getOptionFromViewValue(a); b && b.removeAttribute("selected"); c ? (k[0].value !== c.selectValue && (n.removeUnknownOption(), k[0].value = c.selectValue, c.element.selected = !0), c.element.setAttribute("selected", "selected")) : n.selectUnknownOrEmptyOption(a)
                                }
                            }, n.readValue = function () { var a = v.selectValueMap[k.val()]; return a && !a.disabled ? (n.unselectEmptyOption(), n.removeUnknownOption(), v.getViewValueFromOption(a)) : null }, B.trackBy && d.$watch(function () { return B.getTrackByValue(q.$viewValue) }, function () { q.$render() }));
                        l && (a(n.emptyOption)(d), k.prepend(n.emptyOption), 8 === n.emptyOption[0].nodeType ? (n.hasEmptyOption = !1, n.registerOption = function (a, b) { "" === b.val() && (n.hasEmptyOption = !0, n.emptyOption = b, n.emptyOption.removeClass("ng-scope"), q.$render(), b.on("$destroy", function () { var a = n.$isEmptyOptionSelected(); n.hasEmptyOption = !1; n.emptyOption = void 0; a && q.$render() })) }) : n.emptyOption.removeClass("ng-scope")); d.$watchCollection(B.getWatchables, function () {
                            var a = v && n.readValue(); if (v) for (var b = v.items.length - 1; 0 <= b; b--) {
                                var c =
                                    v.items[b]; w(c.group) ? Gb(c.element.parentNode) : Gb(c.element)
                            } v = B.getOptions(); var d = {}; v.items.forEach(function (a) { var b; if (w(a.group)) { b = d[a.group]; b || (b = f.cloneNode(!1), C.appendChild(b), b.label = null === a.group ? "null" : a.group, d[a.group] = b); var c = e.cloneNode(!1); b.appendChild(c); p(a, c) } else b = e.cloneNode(!1), C.appendChild(b), p(a, b) }); k[0].appendChild(C); q.$render(); q.$isEmpty(a) || (b = n.readValue(), (B.trackBy || A ? va(a, b) : a === b) || (q.$setViewValue(b), q.$render()))
                        })
                    }
                }
            }
        }], kf = ["$locale", "$interpolate", "$log",
            function (a, b, d) {
                var c = /{}/g, e = /^when(Minus)?(.+)$/; return {
                    link: function (f, g, k) {
                        function h(a) { g.text(a || "") } var l = k.count, m = k.$attr.when && g.attr(k.$attr.when), p = k.offset || 0, n = f.$eval(m) || {}, q = {}, w = b.startSymbol(), t = b.endSymbol(), x = w + l + "-" + p + t, v = ca.noop, z; r(k, function (a, b) { var c = e.exec(b); c && (c = (c[1] ? "-" : "") + K(c[2]), n[c] = g.attr(k.$attr[b])) }); r(n, function (a, d) { q[d] = b(a.replace(c, x)) }); f.$watch(l, function (b) {
                            var c = parseFloat(b), e = Y(c); e || c in n || (c = a.pluralCat(c - p)); c === z || e && Y(z) || (v(), e = q[c], A(e) ?
                                (null != b && d.debug("ngPluralize: no rule defined for '" + c + "' in " + m), v = E, h()) : v = f.$watch(e, h), z = c)
                        })
                    }
                }
            }], ue = F("ngRef"), lf = ["$parse", function (a) {
                return {
                    priority: -1, restrict: "A", compile: function (b, d) {
                        var c = xa(ua(b)), e = a(d.ngRef), f = e.assign || function () { throw ue("nonassign", d.ngRef); }; return function (a, b, h) {
                            var l; if (h.hasOwnProperty("ngRefRead")) if ("$element" === h.ngRefRead) l = b; else { if (l = b.data("$" + h.ngRefRead + "Controller"), !l) throw ue("noctrl", h.ngRefRead, d.ngRef); } else l = b.data("$" + c + "Controller"); l =
                                l || b; f(a, l); b.on("$destroy", function () { e(a) === l && f(a, null) })
                        }
                    }
                }
            }], mf = ["$parse", "$animate", "$compile", function (a, b, d) {
                var c = F("ngRepeat"), e = function (a, b, c, d, e, f, g) { a[c] = d; e && (a[e] = f); a.$index = b; a.$first = 0 === b; a.$last = b === g - 1; a.$middle = !(a.$first || a.$last); a.$odd = !(a.$even = 0 === (b & 1)) }, f = function (a, b, c) { return La(c) }, g = function (a, b) { return b }; return {
                    restrict: "A", multiElement: !0, transclude: "element", priority: 1E3, terminal: !0, $$tlb: !0, compile: function (k, h) {
                        var l = h.ngRepeat, m = d.$$createComment("end ngRepeat",
                            l), p = l.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/); if (!p) throw c("iexp", l); var n = p[1], q = p[2], w = p[3], t = p[4], p = n.match(/^(?:(\s*[$\w]+)|\(\s*([$\w]+)\s*,\s*([$\w]+)\s*\))$/); if (!p) throw c("iidexp", n); var x = p[3] || p[1], v = p[2]; if (w && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(w) || /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(w))) throw c("badident", w); var A; if (t) {
                                var z = { $id: La }, y = a(t); A = function (a, b, c, d) {
                                    v &&
                                    (z[v] = b); z[x] = c; z.$index = d; return y(a, z)
                                }
                            } return function (a, d, h, k, n) {
                                var p = T(); a.$watchCollection(q, function (h) {
                                    var k, q, t = d[0], s, y = T(), B, C, E, D, H, F, K; w && (a[w] = h); if (za(h)) H = h, q = A || f; else for (K in q = A || g, H = [], h) ta.call(h, K) && "$" !== K.charAt(0) && H.push(K); B = H.length; K = Array(B); for (k = 0; k < B; k++)if (C = h === H ? k : H[k], E = h[C], D = q(a, C, E, k), p[D]) F = p[D], delete p[D], y[D] = F, K[k] = F; else { if (y[D]) throw r(K, function (a) { a && a.scope && (p[a.id] = a) }), c("dupes", l, D, E); K[k] = { id: D, scope: void 0, clone: void 0 }; y[D] = !0 } z && (z[x] = void 0);
                                    for (s in p) { F = p[s]; D = ub(F.clone); b.leave(D); if (D[0].parentNode) for (k = 0, q = D.length; k < q; k++)D[k].$$NG_REMOVED = !0; F.scope.$destroy() } for (k = 0; k < B; k++)if (C = h === H ? k : H[k], E = h[C], F = K[k], F.scope) { s = t; do s = s.nextSibling; while (s && s.$$NG_REMOVED); F.clone[0] !== s && b.move(ub(F.clone), null, t); t = F.clone[F.clone.length - 1]; e(F.scope, k, x, E, v, C, B) } else n(function (a, c) { F.scope = c; var d = m.cloneNode(!1); a[a.length++] = d; b.enter(a, null, t); t = d; F.clone = a; y[F.id] = F; e(F.scope, k, x, E, v, C, B) }); p = y
                                })
                            }
                    }
                }
            }], nf = ["$animate", function (a) {
                return {
                    restrict: "A",
                    multiElement: !0, link: function (b, d, c) { b.$watch(c.ngShow, function (b) { a[b ? "removeClass" : "addClass"](d, "ng-hide", { tempClasses: "ng-hide-animate" }) }) }
                }
            }], ef = ["$animate", function (a) { return { restrict: "A", multiElement: !0, link: function (b, d, c) { b.$watch(c.ngHide, function (b) { a[b ? "addClass" : "removeClass"](d, "ng-hide", { tempClasses: "ng-hide-animate" }) }) } } }], of = Ra(function (a, b, d) { a.$watchCollection(d.ngStyle, function (a, d) { d && a !== d && r(d, function (a, c) { b.css(c, "") }); a && b.css(a) }) }), pf = ["$animate", "$compile", function (a,
                b) {
                    return {
                        require: "ngSwitch", controller: ["$scope", function () { this.cases = {} }], link: function (d, c, e, f) {
                            var g = [], k = [], h = [], l = [], m = function (a, b) { return function (c) { !1 !== c && a.splice(b, 1) } }; d.$watch(e.ngSwitch || e.on, function (c) {
                                for (var d, e; h.length;)a.cancel(h.pop()); d = 0; for (e = l.length; d < e; ++d) { var q = ub(k[d].clone); l[d].$destroy(); (h[d] = a.leave(q)).done(m(h, d)) } k.length = 0; l.length = 0; (g = f.cases["!" + c] || f.cases["?"]) && r(g, function (c) {
                                    c.transclude(function (d, e) {
                                        l.push(e); var f = c.element; d[d.length++] = b.$$createComment("end ngSwitchWhen");
                                        k.push({ clone: d }); a.enter(d, f.parent(), f)
                                    })
                                })
                            })
                        }
                    }
            }], qf = Ra({ transclude: "element", priority: 1200, require: "^ngSwitch", multiElement: !0, link: function (a, b, d, c, e) { a = d.ngSwitchWhen.split(d.ngSwitchWhenSeparator).sort().filter(function (a, b, c) { return c[b - 1] !== a }); r(a, function (a) { c.cases["!" + a] = c.cases["!" + a] || []; c.cases["!" + a].push({ transclude: e, element: b }) }) } }), rf = Ra({
                transclude: "element", priority: 1200, require: "^ngSwitch", multiElement: !0, link: function (a, b, d, c, e) {
                    c.cases["?"] = c.cases["?"] || []; c.cases["?"].push({
                        transclude: e,
                        element: b
                    })
                }
            }), Eh = F("ngTransclude"), tf = ["$compile", function (a) {
                return {
                    restrict: "EAC", compile: function (b) {
                        var d = a(b.contents()); b.empty(); return function (a, b, f, g, k) {
                            function h() { d(a, function (a) { b.append(a) }) } if (!k) throw Eh("orphan", Aa(b)); f.ngTransclude === f.$attr.ngTransclude && (f.ngTransclude = ""); f = f.ngTransclude || f.ngTranscludeSlot; k(function (a, c) { var d; if (d = a.length) a: { d = 0; for (var f = a.length; d < f; d++) { var g = a[d]; if (g.nodeType !== Pa || g.nodeValue.trim()) { d = !0; break a } } d = void 0 } d ? b.append(a) : (h(), c.$destroy()) },
                                null, f); f && !k.isSlotFilled(f) && h()
                        }
                    }
                }
            }], Te = ["$templateCache", function (a) { return { restrict: "E", terminal: !0, compile: function (b, d) { "text/ng-template" === d.type && a.put(d.id, b[0].text) } } }], Fh = { $setViewValue: E, $render: E }, Gh = ["$element", "$scope", function (a, b) {
                function d() { g || (g = !0, b.$$postDigest(function () { g = !1; e.ngModelCtrl.$render() })) } function c(a) { k || (k = !0, b.$$postDigest(function () { b.$$destroyed || (k = !1, e.ngModelCtrl.$setViewValue(e.readValue()), a && e.ngModelCtrl.$render()) })) } var e = this, f = new Ib; e.selectValueMap =
                    {}; e.ngModelCtrl = Fh; e.multiple = !1; e.unknownOption = x(z.document.createElement("option")); e.hasEmptyOption = !1; e.emptyOption = void 0; e.renderUnknownOption = function (b) { b = e.generateUnknownOptionValue(b); e.unknownOption.val(b); a.prepend(e.unknownOption); Oa(e.unknownOption, !0); a.val(b) }; e.updateUnknownOption = function (b) { b = e.generateUnknownOptionValue(b); e.unknownOption.val(b); Oa(e.unknownOption, !0); a.val(b) }; e.generateUnknownOptionValue = function (a) { return "? " + La(a) + " ?" }; e.removeUnknownOption = function () {
                        e.unknownOption.parent() &&
                        e.unknownOption.remove()
                    }; e.selectEmptyOption = function () { e.emptyOption && (a.val(""), Oa(e.emptyOption, !0)) }; e.unselectEmptyOption = function () { e.hasEmptyOption && Oa(e.emptyOption, !1) }; b.$on("$destroy", function () { e.renderUnknownOption = E }); e.readValue = function () { var b = a.val(), b = b in e.selectValueMap ? e.selectValueMap[b] : b; return e.hasOption(b) ? b : null }; e.writeValue = function (b) {
                        var c = a[0].options[a[0].selectedIndex]; c && Oa(x(c), !1); e.hasOption(b) ? (e.removeUnknownOption(), c = La(b), a.val(c in e.selectValueMap ?
                            c : b), Oa(x(a[0].options[a[0].selectedIndex]), !0)) : e.selectUnknownOrEmptyOption(b)
                    }; e.addOption = function (a, b) { if (8 !== b[0].nodeType) { Ja(a, '"option value"'); "" === a && (e.hasEmptyOption = !0, e.emptyOption = b); var c = f.get(a) || 0; f.set(a, c + 1); d() } }; e.removeOption = function (a) { var b = f.get(a); b && (1 === b ? (f.delete(a), "" === a && (e.hasEmptyOption = !1, e.emptyOption = void 0)) : f.set(a, b - 1)) }; e.hasOption = function (a) { return !!f.get(a) }; e.$hasEmptyOption = function () { return e.hasEmptyOption }; e.$isUnknownOptionSelected = function () {
                        return a[0].options[0] ===
                            e.unknownOption[0]
                    }; e.$isEmptyOptionSelected = function () { return e.hasEmptyOption && a[0].options[a[0].selectedIndex] === e.emptyOption[0] }; e.selectUnknownOrEmptyOption = function (a) { null == a && e.emptyOption ? (e.removeUnknownOption(), e.selectEmptyOption()) : e.unknownOption.parent().length ? e.updateUnknownOption(a) : e.renderUnknownOption(a) }; var g = !1, k = !1; e.registerOption = function (a, b, f, g, k) {
                        if (f.$attr.ngValue) {
                            var q, r; f.$observe("value", function (a) {
                                var d, f = b.prop("selected"); w(r) && (e.removeOption(q), delete e.selectValueMap[r],
                                    d = !0); r = La(a); q = a; e.selectValueMap[r] = a; e.addOption(a, b); b.attr("value", r); d && f && c()
                            })
                        } else g ? f.$observe("value", function (a) { e.readValue(); var d, f = b.prop("selected"); w(q) && (e.removeOption(q), d = !0); q = a; e.addOption(a, b); d && f && c() }) : k ? a.$watch(k, function (a, d) { f.$set("value", a); var g = b.prop("selected"); d !== a && e.removeOption(d); e.addOption(a, b); d && g && c() }) : e.addOption(f.value, b); f.$observe("disabled", function (a) { if ("true" === a || a && b.prop("selected")) e.multiple ? c(!0) : (e.ngModelCtrl.$setViewValue(null), e.ngModelCtrl.$render()) });
                        b.on("$destroy", function () { var a = e.readValue(), b = f.value; e.removeOption(b); d(); (e.multiple && a && -1 !== a.indexOf(b) || a === b) && c(!0) })
                    }
            }], Ue = function () {
                return {
                    restrict: "E", require: ["select", "?ngModel"], controller: Gh, priority: 1, link: {
                        pre: function (a, b, d, c) {
                            var e = c[0], f = c[1]; if (f) {
                                if (e.ngModelCtrl = f, b.on("change", function () { e.removeUnknownOption(); a.$apply(function () { f.$setViewValue(e.readValue()) }) }), d.multiple) {
                                    e.multiple = !0; e.readValue = function () {
                                        var a = []; r(b.find("option"), function (b) {
                                            b.selected && !b.disabled &&
                                            (b = b.value, a.push(b in e.selectValueMap ? e.selectValueMap[b] : b))
                                        }); return a
                                    }; e.writeValue = function (a) { r(b.find("option"), function (b) { var c = !!a && (-1 !== Array.prototype.indexOf.call(a, b.value) || -1 !== Array.prototype.indexOf.call(a, e.selectValueMap[b.value])); c !== b.selected && Oa(x(b), c) }) }; var g, k = NaN; a.$watch(function () { k !== f.$viewValue || va(g, f.$viewValue) || (g = ja(f.$viewValue), f.$render()); k = f.$viewValue }); f.$isEmpty = function (a) { return !a || 0 === a.length }
                                }
                            } else e.registerOption = E
                        }, post: function (a, b, d, c) {
                            var e =
                                c[1]; if (e) { var f = c[0]; e.$render = function () { f.writeValue(e.$viewValue) } }
                        }
                    }
                }
            }, Ve = ["$interpolate", function (a) { return { restrict: "E", priority: 100, compile: function (b, d) { var c, e; w(d.ngValue) || (w(d.value) ? c = a(d.value, !0) : (e = a(b.text(), !0)) || d.$set("value", b.text())); return function (a, b, d) { var h = b.parent(); (h = h.data("$selectController") || h.parent().data("$selectController")) && h.registerOption(a, b, d, c, e) } } } }], bd = ["$parse", function (a) {
                return {
                    restrict: "A", require: "?ngModel", link: function (b, d, c, e) {
                        if (e) {
                            var f =
                                c.hasOwnProperty("required") || a(c.ngRequired)(b); c.ngRequired || (c.required = !0); e.$validators.required = function (a, b) { return !f || !e.$isEmpty(b) }; c.$observe("required", function (a) { f !== a && (f = a, e.$validate()) })
                        }
                    }
                }
            }], ad = ["$parse", function (a) {
                return {
                    restrict: "A", require: "?ngModel", compile: function (b, d) {
                        var c, e; d.ngPattern && (c = d.ngPattern, e = "/" === d.ngPattern.charAt(0) && ke.test(d.ngPattern) ? function () { return d.ngPattern } : a(d.ngPattern)); return function (a, b, d, h) {
                            if (h) {
                                var l = d.pattern; d.ngPattern ? l = e(a) : c = d.pattern;
                                var m = je(l, c, b); d.$observe("pattern", function (a) { var d = m; m = je(a, c, b); (d && d.toString()) !== (m && m.toString()) && h.$validate() }); h.$validators.pattern = function (a, b) { return h.$isEmpty(b) || A(m) || m.test(b) }
                            }
                        }
                    }
                }
            }], dd = ["$parse", function (a) { return { restrict: "A", require: "?ngModel", link: function (b, d, c, e) { if (e) { var f = c.maxlength || a(c.ngMaxlength)(b), g = Ub(f); c.$observe("maxlength", function (a) { f !== a && (g = Ub(a), f = a, e.$validate()) }); e.$validators.maxlength = function (a, b) { return 0 > g || e.$isEmpty(b) || b.length <= g } } } } }], cd =
            ["$parse", function (a) { return { restrict: "A", require: "?ngModel", link: function (b, d, c, e) { if (e) { var f = c.minlength || a(c.ngMinlength)(b), g = Ub(f) || -1; c.$observe("minlength", function (a) { f !== a && (g = Ub(a) || -1, f = a, e.$validate()) }); e.$validators.minlength = function (a, b) { return e.$isEmpty(b) || b.length >= g } } } } }]; z.angular.bootstrap ? z.console && console.log("WARNING: Tried to load AngularJS more than once.") : (Je(), Oe(ca), ca.module("ngLocale", [], ["$provide", function (a) {
                function b(a) {
                    a += ""; var b = a.indexOf("."); return -1 ==
                        b ? 0 : a.length - b - 1
                } a.value("$locale", {
                    DATETIME_FORMATS: {
                        AMPMS: ["AM", "PM"], DAY: "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), ERANAMES: ["Before Christ", "Anno Domini"], ERAS: ["BC", "AD"], FIRSTDAYOFWEEK: 6, MONTH: "January February March April May June July August September October November December".split(" "), SHORTDAY: "Sun Mon Tue Wed Thu Fri Sat".split(" "), SHORTMONTH: "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "), STANDALONEMONTH: "January February March April May June July August September October November December".split(" "),
                        WEEKENDRANGE: [5, 6], fullDate: "EEEE, MMMM d, y", longDate: "MMMM d, y", medium: "MMM d, y h:mm:ss a", mediumDate: "MMM d, y", mediumTime: "h:mm:ss a", "short": "M/d/yy h:mm a", shortDate: "M/d/yy", shortTime: "h:mm a"
                    }, NUMBER_FORMATS: { CURRENCY_SYM: "$", DECIMAL_SEP: ".", GROUP_SEP: ",", PATTERNS: [{ gSize: 3, lgSize: 3, maxFrac: 3, minFrac: 0, minInt: 1, negPre: "-", negSuf: "", posPre: "", posSuf: "" }, { gSize: 3, lgSize: 3, maxFrac: 2, minFrac: 2, minInt: 1, negPre: "-\u00a4", negSuf: "", posPre: "\u00a4", posSuf: "" }] }, id: "en-us", localeID: "en_US", pluralCat: function (a,
                        c) { var e = a | 0, f = c; void 0 === f && (f = Math.min(b(a), 3)); Math.pow(10, f); return 1 == e && 0 == f ? "one" : "other" }
                })
            }]), x(function () { Ee(z.document, Wc) }))
})(window); !window.angular.$$csp().noInlineStyle && window.angular.element(document.head).prepend(window.angular.element("<style>").text('@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}'));
//# sourceMappingURL=angular.min.js.map;
/*
 AngularJS v1.8.3
 (c) 2010-2020 Google LLC. http://angularjs.org
 License: MIT
*/
(function (Y, z) {
    'use strict'; function Fa(a, b, c) { if (!a) throw Pa("areq", b || "?", c || "required"); return a } function Ga(a, b) { if (!a && !b) return ""; if (!a) return b; if (!b) return a; Z(a) && (a = a.join(" ")); Z(b) && (b = b.join(" ")); return a + " " + b } function Qa(a) { var b = {}; a && (a.to || a.from) && (b.to = a.to, b.from = a.from); return b } function $(a, b, c) { var d = ""; a = Z(a) ? a : a && G(a) && a.length ? a.split(/\s+/) : []; s(a, function (a, k) { a && 0 < a.length && (d += 0 < k ? " " : "", d += c ? b + a : a + b) }); return d } function Ha(a) {
        if (a instanceof A) switch (a.length) {
            case 0: return a;
            case 1: if (1 === a[0].nodeType) return a; break; default: return A(va(a))
        }if (1 === a.nodeType) return A(a)
    } function va(a) { if (!a[0]) return a; for (var b = 0; b < a.length; b++) { var c = a[b]; if (1 === c.nodeType) return c } } function Ra(a, b, c) { s(b, function (b) { a.addClass(b, c) }) } function Sa(a, b, c) { s(b, function (b) { a.removeClass(b, c) }) } function aa(a) { return function (b, c) { c.addClass && (Ra(a, b, c.addClass), c.addClass = null); c.removeClass && (Sa(a, b, c.removeClass), c.removeClass = null) } } function pa(a) {
        a = a || {}; if (!a.$$prepared) {
            var b = a.domOperation ||
                N; a.domOperation = function () { a.$$domOperationFired = !0; b(); b = N }; a.$$prepared = !0
        } return a
    } function ha(a, b) { Ia(a, b); Ja(a, b) } function Ia(a, b) { b.from && (a.css(b.from), b.from = null) } function Ja(a, b) { b.to && (a.css(b.to), b.to = null) } function T(a, b, c) {
        var d = b.options || {}; c = c.options || {}; var f = (d.addClass || "") + " " + (c.addClass || ""), k = (d.removeClass || "") + " " + (c.removeClass || ""); a = Ta(a.attr("class"), f, k); c.preparationClasses && (d.preparationClasses = ba(c.preparationClasses, d.preparationClasses), delete c.preparationClasses);
        f = d.domOperation !== N ? d.domOperation : null; wa(d, c); f && (d.domOperation = f); d.addClass = a.addClass ? a.addClass : null; d.removeClass = a.removeClass ? a.removeClass : null; b.addClass = d.addClass; b.removeClass = d.removeClass; return d
    } function Ta(a, b, c) {
        function d(a) { G(a) && (a = a.split(" ")); var c = {}; s(a, function (a) { a.length && (c[a] = !0) }); return c } var f = {}; a = d(a); b = d(b); s(b, function (a, c) { f[c] = 1 }); c = d(c); s(c, function (a, c) { f[c] = 1 === f[c] ? null : -1 }); var k = { addClass: "", removeClass: "" }; s(f, function (c, b) {
            var d, f; 1 === c ? (d = "addClass",
                f = !a[b] || a[b + "-remove"]) : -1 === c && (d = "removeClass", f = a[b] || a[b + "-add"]); f && (k[d].length && (k[d] += " "), k[d] += b)
        }); return k
    } function K(a) { return a instanceof A ? a[0] : a } function Ua(a, b, c, d) { a = ""; c && (a = $(c, "ng-", !0)); d.addClass && (a = ba(a, $(d.addClass, "-add"))); d.removeClass && (a = ba(a, $(d.removeClass, "-remove"))); a.length && (d.preparationClasses = a, b.addClass(a)) } function xa(a, b) { var c = b ? "paused" : "", d = ca + "PlayState"; ma(a, [d, c]); return [d, c] } function ma(a, b) { a.style[b[0]] = b[1] } function ba(a, b) {
        return a ? b ? a + " " +
            b : a : b
    } function Ka(a, b, c) { var d = Object.create(null), f = a.getComputedStyle(b) || {}; s(c, function (a, c) { var b = f[a]; if (b) { var L = b.charAt(0); if ("-" === L || "+" === L || 0 <= L) b = Va(b); 0 === b && (b = null); d[c] = b } }); return d } function Va(a) { var b = 0; a = a.split(/\s*,\s*/); s(a, function (a) { "s" === a.charAt(a.length - 1) && (a = a.substring(0, a.length - 1)); a = parseFloat(a) || 0; b = b ? Math.max(a, b) : a }); return b } function ya(a) { return 0 === a || null != a } function La(a, b) { var c = M, d = a + "s"; b ? c += "Duration" : d += " linear all"; return [c, d] } function Ma(a, b, c) {
        s(c,
            function (c) { a[c] = za(a[c]) ? a[c] : b.style.getPropertyValue(c) })
    } var M, Aa, ca, Ba; void 0 === Y.ontransitionend && void 0 !== Y.onwebkittransitionend ? (M = "WebkitTransition", Aa = "webkitTransitionEnd transitionend") : (M = "transition", Aa = "transitionend"); void 0 === Y.onanimationend && void 0 !== Y.onwebkitanimationend ? (ca = "WebkitAnimation", Ba = "webkitAnimationEnd animationend") : (ca = "animation", Ba = "animationend"); var qa = ca + "Delay", Ca = ca + "Duration", na = M + "Delay", Na = M + "Duration", Pa = z.$$minErr("ng"), ra = {
        blockTransitions: function (a,
            b) { var c = b ? "-" + b + "s" : ""; ma(a, [na, c]); return [na, c] }
    }, Wa = { transitionDuration: Na, transitionDelay: na, transitionProperty: M + "Property", animationDuration: Ca, animationDelay: qa, animationIterationCount: ca + "IterationCount" }, Xa = { transitionDuration: Na, transitionDelay: na, animationDuration: Ca, animationDelay: qa }, Da, wa, s, Z, za, sa, Ea, ta, G, R, A, N; z.module("ngAnimate", [], function () {
        N = z.noop; Da = z.copy; wa = z.extend; A = z.element; s = z.forEach; Z = z.isArray; G = z.isString; ta = z.isObject; R = z.isUndefined; za = z.isDefined; Ea = z.isFunction;
        sa = z.isElement
    }).info({ angularVersion: "1.8.3" }).directive("ngAnimateSwap", ["$animate", function (a) { return { restrict: "A", transclude: "element", terminal: !0, priority: 550, link: function (b, c, d, f, k) { var e, Q; b.$watchCollection(d.ngAnimateSwap || d["for"], function (b) { e && a.leave(e); Q && (Q.$destroy(), Q = null); (b || 0 === b) && k(function (b, d) { e = b; Q = d; a.enter(b, null, c) }) }) } } }]).directive("ngAnimateChildren", ["$interpolate", function (a) {
        return {
            link: function (b, c, d) {
                function f(a) {
                    c.data("$$ngAnimateChildren", "on" === a || "true" ===
                        a)
                } var k = d.ngAnimateChildren; G(k) && 0 === k.length ? c.data("$$ngAnimateChildren", !0) : (f(a(k)(b)), d.$observe("ngAnimateChildren", f))
            }
        }
    }]).factory("$$rAFScheduler", ["$$rAF", function (a) { function b(a) { d = d.concat(a); c() } function c() { if (d.length) { for (var b = d.shift(), e = 0; e < b.length; e++)b[e](); f || a(function () { f || c() }) } } var d, f; d = b.queue = []; b.waitUntilQuiet = function (b) { f && f(); f = a(function () { f = null; b(); c() }) }; return b }]).provider("$$animateQueue", ["$animateProvider", function (a) {
        function b(a) {
            return {
                addClass: a.addClass,
                removeClass: a.removeClass, from: a.from, to: a.to
            }
        } function c(a) { if (!a) return null; a = a.split(" "); var b = Object.create(null); s(a, function (a) { b[a] = !0 }); return b } function d(a, b) { if (a && b) { var d = c(b); return a.split(" ").some(function (a) { return d[a] }) } } function f(a, b, c) { return e[a].some(function (a) { return a(b, c) }) } function k(a, b) { var c = 0 < (a.addClass || "").length, d = 0 < (a.removeClass || "").length; return b ? c && d : c || d } var e = this.rules = { skip: [], cancel: [], join: [] }; e.join.push(function (a, b) { return !a.structural && k(a) });
        e.skip.push(function (a, b) { return !a.structural && !k(a) }); e.skip.push(function (a, b) { return "leave" === b.event && a.structural }); e.skip.push(function (a, b) { return b.structural && 2 === b.state && !a.structural }); e.cancel.push(function (a, b) { return b.structural && a.structural }); e.cancel.push(function (a, b) { return 2 === b.state && a.structural }); e.cancel.push(function (a, b) { if (b.structural) return !1; var c = a.addClass, f = a.removeClass, k = b.addClass, e = b.removeClass; return R(c) && R(f) || R(k) && R(e) ? !1 : d(c, e) || d(f, k) }); this.$get = ["$$rAF",
            "$rootScope", "$rootElement", "$document", "$$Map", "$$animation", "$$AnimateRunner", "$templateRequest", "$$jqLite", "$$forceReflow", "$$isDocumentHidden", function (c, d, e, C, U, oa, H, u, t, I, da) {
                function ia(a) { O.delete(a.target) } function v() { var a = !1; return function (b) { a ? b() : d.$$postDigest(function () { a = !0; b() }) } } function ua(a, b, c) { var g = [], l = m[c]; l && s(l, function (l) { Oa.call(l.node, b) ? g.push(l.callback) : "leave" === c && Oa.call(l.node, a) && g.push(l.callback) }); return g } function h(a, b, c) {
                    var l = va(b); return a.filter(function (a) {
                        return !(a.node ===
                            l && (!c || a.callback === c))
                    })
                } function q(a, J, w) {
                    function e(a, b, l, g) { u(function () { var a = ua(ia, m, b); a.length ? c(function () { s(a, function (a) { a(h, l, g) }); "close" !== l || m.parentNode || D.off(m) }) : "close" !== l || m.parentNode || D.off(m) }); a.progress(b, l, g) } function I(a) { var b = h, c = n; c.preparationClasses && (b.removeClass(c.preparationClasses), c.preparationClasses = null); c.activeClasses && (b.removeClass(c.activeClasses), c.activeClasses = null); W(h, n); ha(h, n); n.domOperation(); q.complete(!a) } var n = Da(w), h = Ha(a), m = K(h), ia = m &&
                        m.parentNode, n = pa(n), q = new H, u = v(); Z(n.addClass) && (n.addClass = n.addClass.join(" ")); n.addClass && !G(n.addClass) && (n.addClass = null); Z(n.removeClass) && (n.removeClass = n.removeClass.join(" ")); n.removeClass && !G(n.removeClass) && (n.removeClass = null); n.from && !ta(n.from) && (n.from = null); n.to && !ta(n.to) && (n.to = null); if (!(B && m && fa(m, J, w) && Ya(m, n))) return I(), q; var x = 0 <= ["enter", "move", "leave"].indexOf(J), r = da(), P = r || O.get(m); w = !P && y.get(m) || {}; var p = !!w.state; P || p && 1 === w.state || (P = !E(m, ia, J)); if (P) return r &&
                            e(q, J, "start", b(n)), I(), r && e(q, J, "close", b(n)), q; x && F(m); r = { structural: x, element: h, event: J, addClass: n.addClass, removeClass: n.removeClass, close: I, options: n, runner: q }; if (p) { if (f("skip", r, w)) { if (2 === w.state) return I(), q; T(h, w, r); return w.runner } if (f("cancel", r, w)) if (2 === w.state) w.runner.end(); else if (w.structural) w.close(); else return T(h, w, r), w.runner; else if (f("join", r, w)) if (2 === w.state) T(h, r, {}); else return Ua(t, h, x ? J : null, n), J = r.event = w.event, n = T(h, w, r), w.runner } else T(h, r, {}); (p = r.structural) ||
                                (p = "animate" === r.event && 0 < Object.keys(r.options.to || {}).length || k(r)); if (!p) return I(), g(m), q; var C = (w.counter || 0) + 1; r.counter = C; l(m, 1, r); d.$$postDigest(function () {
                                    h = Ha(a); var c = y.get(m), d = !c, c = c || {}, t = 0 < (h.parent() || []).length && ("animate" === c.event || c.structural || k(c)); if (d || c.counter !== C || !t) { d && (W(h, n), ha(h, n)); if (d || x && c.event !== J) n.domOperation(), q.end(); t || g(m) } else J = !c.structural && k(c, !0) ? "setClass" : c.event, l(m, 2), c = oa(h, J, c.options), q.setHost(c), e(q, J, "start", b(n)), c.done(function (a) {
                                        I(!a);
                                        (a = y.get(m)) && a.counter === C && g(m); e(q, J, "close", b(n))
                                    })
                                }); return q
                } function F(a) { a = a.querySelectorAll("[data-ng-animate]"); s(a, function (a) { var b = parseInt(a.getAttribute("data-ng-animate"), 10), c = y.get(a); if (c) switch (b) { case 2: c.runner.end(); case 1: y.delete(a) } }) } function g(a) { a.removeAttribute("data-ng-animate"); y.delete(a) } function E(a, b, c) {
                    c = C[0].body; var l = K(e), g = a === c || "HTML" === a.nodeName, d = a === l, t = !1, m = O.get(a), h; for ((a = A.data(a, "$ngAnimatePin")) && (b = K(a)); b;) {
                        d || (d = b === l); if (1 !== b.nodeType) break;
                        a = y.get(b) || {}; if (!t) { var f = O.get(b); if (!0 === f && !1 !== m) { m = !0; break } else !1 === f && (m = !1); t = a.structural } if (R(h) || !0 === h) a = A.data(b, "$$ngAnimateChildren"), za(a) && (h = a); if (t && !1 === h) break; g || (g = b === c); if (g && d) break; if (!d && (a = A.data(b, "$ngAnimatePin"))) { b = K(a); continue } b = b.parentNode
                    } return (!t || h) && !0 !== m && d && g
                } function l(a, b, c) { c = c || {}; c.state = b; a.setAttribute("data-ng-animate", b); c = (b = y.get(a)) ? wa(b, c) : c; y.set(a, c) } var y = new U, O = new U, B = null, P = d.$watch(function () { return 0 === u.totalPendingRequests }, function (a) {
                    a &&
                    (P(), d.$$postDigest(function () { d.$$postDigest(function () { null === B && (B = !0) }) }))
                }), m = Object.create(null); U = a.customFilter(); var la = a.classNameFilter(); I = function () { return !0 }; var fa = U || I, Ya = la ? function (a, b) { var c = [a.getAttribute("class"), b.addClass, b.removeClass].join(" "); return la.test(c) } : I, W = aa(t), Oa = Y.Node.prototype.contains || function (a) { return this === a || !!(this.compareDocumentPosition(a) & 16) }, D = {
                    on: function (a, b, c) {
                        var l = va(b); m[a] = m[a] || []; m[a].push({ node: l, callback: c }); A(b).on("$destroy", function () {
                            y.get(l) ||
                            D.off(a, b, c)
                        })
                    }, off: function (a, b, c) { if (1 !== arguments.length || G(arguments[0])) { var l = m[a]; l && (m[a] = 1 === arguments.length ? null : h(l, b, c)) } else for (l in b = arguments[0], m) m[l] = h(m[l], b) }, pin: function (a, b) { Fa(sa(a), "element", "not an element"); Fa(sa(b), "parentElement", "not an element"); a.data("$ngAnimatePin", b) }, push: function (a, b, c, l) { c = c || {}; c.domOperation = l; return q(a, b, c) }, enabled: function (a, b) {
                        var c = arguments.length; if (0 === c) b = !!B; else if (sa(a)) {
                            var l = K(a); if (1 === c) b = !O.get(l); else {
                                if (!O.has(l)) A(a).on("$destroy",
                                    ia); O.set(l, !b)
                            }
                        } else b = B = !!a; return b
                    }
                }; return D
            }]
    }]).provider("$$animateCache", function () {
        var a = 0, b = Object.create(null); this.$get = [function () {
            return {
                cacheKey: function (b, d, f, k) { var e = b.parentNode; b = [e.$$ngAnimateParentKey || (e.$$ngAnimateParentKey = ++a), d, b.getAttribute("class")]; f && b.push(f); k && b.push(k); return b.join(" ") }, containsCachedAnimationWithoutDuration: function (a) { return (a = b[a]) && !a.isValid || !1 }, flush: function () { b = Object.create(null) }, count: function (a) { return (a = b[a]) ? a.total : 0 }, get: function (a) {
                    return (a =
                        b[a]) && a.value
                }, put: function (a, d, f) { b[a] ? (b[a].total++, b[a].value = d) : b[a] = { total: 1, value: d, isValid: f } }
            }
        }]
    }).provider("$$animation", ["$animateProvider", function (a) {
        var b = this.drivers = []; this.$get = ["$$jqLite", "$rootScope", "$injector", "$$AnimateRunner", "$$Map", "$$rAFScheduler", "$$animateCache", function (a, d, f, k, e, Q, L) {
            function x(a) {
                function b(a) {
                    if (a.processed) return a; a.processed = !0; var d = a.domNode, t = d.parentNode; f.set(d, a); for (var h; t;) { if (h = f.get(t)) { h.processed || (h = b(h)); break } t = t.parentNode } (h ||
                        c).children.push(a); return a
                } var c = { children: [] }, d, f = new e; for (d = 0; d < a.length; d++) { var da = a[d]; f.set(da.domNode, a[d] = { domNode: da.domNode, element: da.element, fn: da.fn, children: [] }) } for (d = 0; d < a.length; d++)b(a[d]); return function (a) { var b = [], c = [], d; for (d = 0; d < a.children.length; d++)c.push(a.children[d]); a = c.length; var t = 0, f = []; for (d = 0; d < c.length; d++) { var g = c[d]; 0 >= a && (a = t, t = 0, b.push(f), f = []); f.push(g); g.children.forEach(function (a) { t++; c.push(a) }); a-- } f.length && b.push(f); return b }(c)
            } var C = [], U = aa(a); return function (e,
                H, u) {
                    function t(a) { a = a.hasAttribute("ng-animate-ref") ? [a] : a.querySelectorAll("[ng-animate-ref]"); var b = []; s(a, function (a) { var c = a.getAttribute("ng-animate-ref"); c && c.length && b.push(a) }); return b } function I(a) {
                        var b = [], c = {}; s(a, function (a, d) { var l = K(a.element), g = 0 <= ["enter", "move"].indexOf(a.event), l = a.structural ? t(l) : []; if (l.length) { var f = g ? "to" : "from"; s(l, function (a) { var b = a.getAttribute("ng-animate-ref"); c[b] = c[b] || {}; c[b][f] = { animationID: d, element: A(a) } }) } else b.push(a) }); var d = {}, g = {}; s(c, function (c,
                            t) { var f = c.from, e = c.to; if (f && e) { var h = a[f.animationID], k = a[e.animationID], E = f.animationID.toString(); if (!g[E]) { var I = g[E] = { structural: !0, beforeStart: function () { h.beforeStart(); k.beforeStart() }, close: function () { h.close(); k.close() }, classes: da(h.classes, k.classes), from: h, to: k, anchors: [] }; I.classes.length ? b.push(I) : (b.push(h), b.push(k)) } g[E].anchors.push({ out: f.element, "in": e.element }) } else f = f ? f.animationID : e.animationID, e = f.toString(), d[e] || (d[e] = !0, b.push(a[f])) }); return b
                    } function da(a, b) {
                        a = a.split(" ");
                        b = b.split(" "); for (var c = [], d = 0; d < a.length; d++) { var g = a[d]; if ("ng-" !== g.substring(0, 3)) for (var t = 0; t < b.length; t++)if (g === b[t]) { c.push(g); break } } return c.join(" ")
                    } function ia(a) { for (var c = b.length - 1; 0 <= c; c--) { var d = f.get(b[c])(a); if (d) return d } } function v(a, b) { function c(a) { (a = a.data("$$animationRunner")) && a.setHost(b) } a.from && a.to ? (c(a.from.element), c(a.to.element)) : c(a.element) } function ua() { var a = e.data("$$animationRunner"); !a || "leave" === H && u.$$domOperationFired || a.end() } function h(b) {
                        e.off("$destroy",
                            ua); e.removeData("$$animationRunner"); U(e, u); ha(e, u); u.domOperation(); E && a.removeClass(e, E); F.complete(!b)
                    } u = pa(u); var q = 0 <= ["enter", "move", "leave"].indexOf(H), F = new k({ end: function () { h() }, cancel: function () { h(!0) } }); if (!b.length) return h(), F; var g = Ga(e.attr("class"), Ga(u.addClass, u.removeClass)), E = u.tempClasses; E && (g += " " + E, u.tempClasses = null); q && e.data("$$animatePrepareClasses", "ng-" + H + "-prepare"); e.data("$$animationRunner", F); C.push({
                        element: e, classes: g, event: H, structural: q, options: u, beforeStart: function () {
                            E =
                            (E ? E + " " : "") + "ng-animate"; a.addClass(e, E); var b = e.data("$$animatePrepareClasses"); b && a.removeClass(e, b)
                        }, close: h
                    }); e.on("$destroy", ua); if (1 < C.length) return F; d.$$postDigest(function () {
                        var b = []; s(C, function (a) { a.element.data("$$animationRunner") ? b.push(a) : a.close() }); C.length = 0; var d = I(b), g = []; s(d, function (a) {
                            var b = a.from ? a.from.element : a.element, c = u.addClass, d = L.cacheKey(b[0], a.event, (c ? c + " " : "") + "ng-animate", u.removeClass); g.push({
                                element: b, domNode: K(b), fn: function () {
                                    var b, c = a.close; if (L.containsCachedAnimationWithoutDuration(d)) c();
                                    else { a.beforeStart(); if ((a.anchors ? a.from.element || a.to.element : a.element).data("$$animationRunner")) { var g = ia(a); g && (b = g.start) } b ? (b = b(), b.done(function (a) { c(!a) }), v(a, b)) : c() }
                                }
                            })
                        }); for (var d = x(g), t = 0; t < d.length; t++)for (var f = d[t], e = 0; e < f.length; e++) { var h = f[e], k = h.element; d[t][e] = h.fn; 0 === t ? k.removeData("$$animatePrepareClasses") : (h = k.data("$$animatePrepareClasses")) && a.addClass(k, h) } Q(d)
                    }); return F
            }
        }]
    }]).provider("$animateCss", ["$animateProvider", function (a) {
        this.$get = ["$window", "$$jqLite", "$$AnimateRunner",
            "$timeout", "$$animateCache", "$$forceReflow", "$sniffer", "$$rAFScheduler", "$$animateQueue", function (a, c, d, f, k, e, Q, L, x) {
                function C(d, f, e, x) { var v, s = "stagger-" + e; 0 < k.count(e) && (v = k.get(s), v || (f = $(f, "-stagger"), c.addClass(d, f), v = Ka(a, d, x), v.animationDuration = Math.max(v.animationDuration, 0), v.transitionDuration = Math.max(v.transitionDuration, 0), c.removeClass(d, f), k.put(s, v, !0))); return v || {} } function U(a) { u.push(a); L.waitUntilQuiet(function () { k.flush(); for (var a = e(), b = 0; b < u.length; b++)u[b](a); u.length = 0 }) }
                function z(c, d, f, e) { d = k.get(f); d || (d = Ka(a, c, Wa), "infinite" === d.animationIterationCount && (d.animationIterationCount = 1)); k.put(f, d, e || 0 < d.transitionDuration || 0 < d.animationDuration); c = d; f = c.animationDelay; e = c.transitionDelay; c.maxDelay = f && e ? Math.max(f, e) : f || e; c.maxDuration = Math.max(c.animationDuration * c.animationIterationCount, c.transitionDuration); return c } var H = aa(c), u = []; return function (a, b) {
                    function e() { v() } function L() { v(!0) } function v(b) {
                        if (!(P || la && m)) {
                            P = !0; m = !1; V && !g.$$skipPreparationClasses &&
                                c.removeClass(a, V); ba && c.removeClass(a, ba); xa(l, !1); ra.blockTransitions(l, !1); s(y, function (a) { l.style[a[0]] = "" }); H(a, g); ha(a, g); Object.keys(E).length && s(E, function (a, b) { a ? l.style.setProperty(b, a) : l.style.removeProperty(b) }); if (g.onDone) g.onDone(); w && w.length && a.off(w.join(" "), q); var d = a.data("$$animateCss"); d && (f.cancel(d[0].timer), a.removeData("$$animateCss")); fa && fa.complete(!b)
                        }
                    } function u(a) { p.blockTransition && ra.blockTransitions(l, a); p.blockKeyframeAnimation && xa(l, !!a) } function h() {
                        fa = new d({
                            end: e,
                            cancel: L
                        }); U(N); v(); return { $$willAnimate: !1, start: function () { return fa }, end: e }
                    } function q(a) { a.stopPropagation(); var b = a.originalEvent || a; b.target === l && (a = b.$manualTimeStamp || Date.now(), b = parseFloat(b.elapsedTime.toFixed(3)), Math.max(a - J, 0) >= G && b >= D && (la = !0, v())) } function F() {
                        function b() {
                            if (!P) {
                                u(!1); s(y, function (a) { l.style[a[0]] = a[1] }); H(a, g); c.addClass(a, ba); if (p.recalculateTimingStyles) {
                                    T = l.getAttribute("class") + " " + V; ka = k.cacheKey(l, ja, g.addClass, g.removeClass); r = z(l, T, ka, !1); ga = r.maxDelay; W =
                                        Math.max(ga, 0); D = r.maxDuration; if (0 === D) { v(); return } p.hasTransitions = 0 < r.transitionDuration; p.hasAnimations = 0 < r.animationDuration
                                } p.applyAnimationDelay && (ga = "boolean" !== typeof g.delay && ya(g.delay) ? parseFloat(g.delay) : ga, W = Math.max(ga, 0), r.animationDelay = ga, ea = [qa, ga + "s"], y.push(ea), l.style[ea[0]] = ea[1]); G = 1E3 * W; R = 1E3 * D; if (g.easing) { var e, h = g.easing; p.hasTransitions && (e = M + "TimingFunction", y.push([e, h]), l.style[e] = h); p.hasAnimations && (e = ca + "TimingFunction", y.push([e, h]), l.style[e] = h) } r.transitionDuration &&
                                    w.push(Aa); r.animationDuration && w.push(Ba); J = Date.now(); var m = G + 1.5 * R; e = J + m; var h = a.data("$$animateCss") || [], F = !0; if (h.length) { var n = h[0]; (F = e > n.expectedEndTime) ? f.cancel(n.timer) : h.push(v) } F && (m = f(d, m, !1), h[0] = { timer: m, expectedEndTime: e }, h.push(v), a.data("$$animateCss", h)); if (w.length) a.on(w.join(" "), q); g.to && (g.cleanupStyles && Ma(E, l, Object.keys(g.to)), Ja(a, g))
                            }
                        } function d() { var b = a.data("$$animateCss"); if (b) { for (var c = 1; c < b.length; c++)b[c](); a.removeData("$$animateCss") } } if (!P) if (l.parentNode) {
                            var e =
                                function (a) { if (la) m && a && (m = !1, v()); else if (m = !a, r.animationDuration) if (a = xa(l, m), m) y.push(a); else { var b = y, c = b.indexOf(a); 0 <= a && b.splice(c, 1) } }, h = 0 < aa && (r.transitionDuration && 0 === X.transitionDuration || r.animationDuration && 0 === X.animationDuration) && Math.max(X.animationDelay, X.transitionDelay); h ? f(b, Math.floor(h * aa * 1E3), !1) : b(); A.resume = function () { e(!0) }; A.pause = function () { e(!1) }
                        } else v()
                    } var g = b || {}; g.$$prepared || (g = pa(Da(g))); var E = {}, l = K(a); if (!l || !l.parentNode || !x.enabled()) return h(); var y = [], O =
                        a.attr("class"), B = Qa(g), P, m, la, fa, A, W, G, D, R, J, w = []; if (0 === g.duration || !Q.animations && !Q.transitions) return h(); var ja = g.event && Z(g.event) ? g.event.join(" ") : g.event, Y = ja && g.structural, n = "", S = ""; Y ? n = $(ja, "ng-", !0) : ja && (n = ja); g.addClass && (S += $(g.addClass, "-add")); g.removeClass && (S.length && (S += " "), S += $(g.removeClass, "-remove")); g.applyClassesEarly && S.length && H(a, g); var V = [n, S].join(" ").trim(), T = O + " " + V, O = B.to && 0 < Object.keys(B.to).length; if (!(0 < (g.keyframeStyle || "").length || O || V)) return h(); var X, ka =
                            k.cacheKey(l, ja, g.addClass, g.removeClass); if (k.containsCachedAnimationWithoutDuration(ka)) return V = null, h(); 0 < g.stagger ? (B = parseFloat(g.stagger), X = { transitionDelay: B, animationDelay: B, transitionDuration: 0, animationDuration: 0 }) : X = C(l, V, ka, Xa); g.$$skipPreparationClasses || c.addClass(a, V); g.transitionStyle && (B = [M, g.transitionStyle], ma(l, B), y.push(B)); 0 <= g.duration && (B = 0 < l.style[M].length, B = La(g.duration, B), ma(l, B), y.push(B)); g.keyframeStyle && (B = [ca, g.keyframeStyle], ma(l, B), y.push(B)); var aa = X ? 0 <= g.staggerIndex ?
                                g.staggerIndex : k.count(ka) : 0; (n = 0 === aa) && !g.skipBlocking && ra.blockTransitions(l, 9999); var r = z(l, T, ka, !Y), ga = r.maxDelay; W = Math.max(ga, 0); D = r.maxDuration; var p = {}; p.hasTransitions = 0 < r.transitionDuration; p.hasAnimations = 0 < r.animationDuration; p.hasTransitionAll = p.hasTransitions && "all" === r.transitionProperty; p.applyTransitionDuration = O && (p.hasTransitions && !p.hasTransitionAll || p.hasAnimations && !p.hasTransitions); p.applyAnimationDuration = g.duration && p.hasAnimations; p.applyTransitionDelay = ya(g.delay) && (p.applyTransitionDuration ||
                                    p.hasTransitions); p.applyAnimationDelay = ya(g.delay) && p.hasAnimations; p.recalculateTimingStyles = 0 < S.length; if (p.applyTransitionDuration || p.applyAnimationDuration) D = g.duration ? parseFloat(g.duration) : D, p.applyTransitionDuration && (p.hasTransitions = !0, r.transitionDuration = D, B = 0 < l.style[M + "Property"].length, y.push(La(D, B))), p.applyAnimationDuration && (p.hasAnimations = !0, r.animationDuration = D, y.push([Ca, D + "s"])); if (0 === D && !p.recalculateTimingStyles) return h(); var ba = $(V, "-active"); if (null != g.delay) {
                                        var ea;
                                        "boolean" !== typeof g.delay && (ea = parseFloat(g.delay), W = Math.max(ea, 0)); p.applyTransitionDelay && y.push([na, ea + "s"]); p.applyAnimationDelay && y.push([qa, ea + "s"])
                                    } null == g.duration && 0 < r.transitionDuration && (p.recalculateTimingStyles = p.recalculateTimingStyles || n); G = 1E3 * W; R = 1E3 * D; g.skipBlocking || (p.blockTransition = 0 < r.transitionDuration, p.blockKeyframeAnimation = 0 < r.animationDuration && 0 < X.animationDelay && 0 === X.animationDuration); g.from && (g.cleanupStyles && Ma(E, l, Object.keys(g.from)), Ia(a, g)); p.blockTransition ||
                                        p.blockKeyframeAnimation ? u(D) : g.skipBlocking || ra.blockTransitions(l, !1); return { $$willAnimate: !0, end: e, start: function () { if (!P) return A = { end: e, cancel: L, resume: null, pause: null }, fa = new d(A), U(F), fa } }
                }
            }]
    }]).provider("$$animateCssDriver", ["$$animationProvider", function (a) {
        a.drivers.push("$$animateCssDriver"); this.$get = ["$animateCss", "$rootScope", "$$AnimateRunner", "$rootElement", "$sniffer", "$$jqLite", "$document", function (a, c, d, f, k, e, Q) {
            function L(a) { return a.replace(/\bng-\S+\b/g, "") } function x(a, b) {
                G(a) &&
                (a = a.split(" ")); G(b) && (b = b.split(" ")); return a.filter(function (a) { return -1 === b.indexOf(a) }).join(" ")
            } function C(c, e, f) {
                function k(a) { var b = {}, c = K(a).getBoundingClientRect(); s(["width", "height", "top", "left"], function (a) { var d = c[a]; switch (a) { case "top": d += H.scrollTop; break; case "left": d += H.scrollLeft }b[a] = Math.floor(d) + "px" }); return b } function v() {
                    var c = L(f.attr("class") || ""), d = x(c, q), c = x(q, c), d = a(h, { to: k(f), addClass: "ng-anchor-in " + d, removeClass: "ng-anchor-out " + c, delay: !0 }); return d.$$willAnimate ?
                        d : null
                } function C() { h.remove(); e.removeClass("ng-animate-shim"); f.removeClass("ng-animate-shim") } var h = A(K(e).cloneNode(!0)), q = L(h.attr("class") || ""); e.addClass("ng-animate-shim"); f.addClass("ng-animate-shim"); h.addClass("ng-anchor"); u.append(h); var F; c = function () { var c = a(h, { addClass: "ng-anchor-out", delay: !0, from: k(e) }); return c.$$willAnimate ? c : null }(); if (!c && (F = v(), !F)) return C(); var g = c || F; return {
                    start: function () {
                        function a() { c && c.end() } var b, c = g.start(); c.done(function () {
                            c = null; if (!F && (F = v())) return c =
                                F.start(), c.done(function () { c = null; C(); b.complete() }), c; C(); b.complete()
                        }); return b = new d({ end: a, cancel: a })
                    }
                }
            } function z(a, b, c, e) { var f = oa(a, N), k = oa(b, N), h = []; s(e, function (a) { (a = C(c, a.out, a["in"])) && h.push(a) }); if (f || k || 0 !== h.length) return { start: function () { function a() { s(b, function (a) { a.end() }) } var b = []; f && b.push(f.start()); k && b.push(k.start()); s(h, function (a) { b.push(a.start()) }); var c = new d({ end: a, cancel: a }); d.all(b, function (a) { c.complete(a) }); return c } } } function oa(c) {
                var d = c.element, e = c.options ||
                    {}; c.structural && (e.event = c.event, e.structural = !0, e.applyClassesEarly = !0, "leave" === c.event && (e.onDone = e.domOperation)); e.preparationClasses && (e.event = ba(e.event, e.preparationClasses)); c = a(d, e); return c.$$willAnimate ? c : null
            } if (!k.animations && !k.transitions) return N; var H = Q[0].body; c = K(f); var u = A(c.parentNode && 11 === c.parentNode.nodeType || H.contains(c) ? c : H); return function (a) { return a.from && a.to ? z(a.from, a.to, a.classes, a.anchors) : oa(a) }
        }]
    }]).provider("$$animateJs", ["$animateProvider", function (a) {
        this.$get =
        ["$injector", "$$AnimateRunner", "$$jqLite", function (b, c, d) {
            function f(c) { c = Z(c) ? c : c.split(" "); for (var d = [], f = {}, k = 0; k < c.length; k++) { var s = c[k], z = a.$$registeredAnimations[s]; z && !f[s] && (d.push(b.get(z)), f[s] = !0) } return d } var k = aa(d); return function (a, b, d, x) {
                function C() { x.domOperation(); k(a, x) } function z(a, b, d, f, e) {
                    switch (d) { case "animate": b = [b, f.from, f.to, e]; break; case "setClass": b = [b, t, I, e]; break; case "addClass": b = [b, t, e]; break; case "removeClass": b = [b, I, e]; break; default: b = [b, e] }b.push(f); if (a = a.apply(a,
                        b)) if (Ea(a.start) && (a = a.start()), a instanceof c) a.done(e); else if (Ea(a)) return a; return N
                } function A(a, b, d, e, f) { var h = []; s(e, function (e) { var l = e[f]; l && h.push(function () { var e, f, h = !1, k = function (a) { h || (h = !0, (f || N)(a), e.complete(!a)) }; e = new c({ end: function () { k() }, cancel: function () { k(!0) } }); f = z(l, a, b, d, function (a) { k(!1 === a) }); return e }) }); return h } function H(a, b, d, e, f) {
                    var h = A(a, b, d, e, f); if (0 === h.length) {
                        var k, q; "beforeSetClass" === f ? (k = A(a, "removeClass", d, e, "beforeRemoveClass"), q = A(a, "addClass", d, e, "beforeAddClass")) :
                            "setClass" === f && (k = A(a, "removeClass", d, e, "removeClass"), q = A(a, "addClass", d, e, "addClass")); k && (h = h.concat(k)); q && (h = h.concat(q))
                    } if (0 !== h.length) return function (a) { var b = []; h.length && s(h, function (a) { b.push(a()) }); b.length ? c.all(b, a) : a(); return function (a) { s(b, function (b) { a ? b.cancel() : b.end() }) } }
                } var u = !1; 3 === arguments.length && ta(d) && (x = d, d = null); x = pa(x); d || (d = a.attr("class") || "", x.addClass && (d += " " + x.addClass), x.removeClass && (d += " " + x.removeClass)); var t = x.addClass, I = x.removeClass, G = f(d), K, v; if (G.length) {
                    var M,
                    h; "leave" === b ? (h = "leave", M = "afterLeave") : (h = "before" + b.charAt(0).toUpperCase() + b.substr(1), M = b); "enter" !== b && "move" !== b && (K = H(a, b, x, G, h)); v = H(a, b, x, G, M)
                } if (K || v) {
                    var q; return {
                        $$willAnimate: !0, end: function () { q ? q.end() : (u = !0, C(), ha(a, x), q = new c, q.complete(!0)); return q }, start: function () {
                            function b(c) { u = !0; C(); ha(a, x); q.complete(c) } if (q) return q; q = new c; var d, f = []; K && f.push(function (a) { d = K(a) }); f.length ? f.push(function (a) { C(); a(!0) }) : C(); v && f.push(function (a) { d = v(a) }); q.setHost({
                                end: function () {
                                    u || ((d ||
                                        N)(void 0), b(void 0))
                                }, cancel: function () { u || ((d || N)(!0), b(!0)) }
                            }); c.chain(f, b); return q
                        }
                    }
                }
            }
        }]
    }]).provider("$$animateJsDriver", ["$$animationProvider", function (a) {
        a.drivers.push("$$animateJsDriver"); this.$get = ["$$animateJs", "$$AnimateRunner", function (a, c) {
            function d(c) { return a(c.element, c.event, c.classes, c.options) } return function (a) {
                if (a.from && a.to) {
                    var b = d(a.from), e = d(a.to); if (b || e) return {
                        start: function () {
                            function a() { return function () { s(d, function (a) { a.end() }) } } var d = []; b && d.push(b.start()); e &&
                                d.push(e.start()); c.all(d, function (a) { f.complete(a) }); var f = new c({ end: a(), cancel: a() }); return f
                        }
                    }
                } else return d(a)
            }
        }]
    }])
})(window, window.angular);
//# sourceMappingURL=angular-animate.min.js.map;
/**
 * @license AngularJS v1.8.2
 * (c) 2010-2020 Google LLC. http://angularjs.org
 * License: MIT
 */
(function(window, angular) {

'use strict';

/* global routeToRegExp: true */

/**
 * @param {string} path - The path to parse. (It is assumed to have query and hash stripped off.)
 * @param {Object} opts - Options.
 * @return {Object} - An object containing an array of path parameter names (`keys`) and a regular
 *     expression (`regexp`) that can be used to identify a matching URL and extract the path
 *     parameter values.
 *
 * @description
 * Parses the given path, extracting path parameter names and a regular expression to match URLs.
 *
 * Originally inspired by `pathRexp` in `visionmedia/express/lib/utils.js`.
 */
function routeToRegExp(path, opts) {
  var keys = [];

  var pattern = path
    .replace(/([().])/g, '\\$1')
    .replace(/(\/)?:(\w+)(\*\?|[?*])?/g, function(_, slash, key, option) {
      var optional = option === '?' || option === '*?';
      var star = option === '*' || option === '*?';
      keys.push({name: key, optional: optional});
      slash = slash || '';
      return (
        (optional ? '(?:' + slash : slash + '(?:') +
        (star ? '(.+?)' : '([^/]+)') +
        (optional ? '?)?' : ')')
      );
    })
    .replace(/([/$*])/g, '\\$1');

  if (opts.ignoreTrailingSlashes) {
    pattern = pattern.replace(/\/+$/, '') + '/*';
  }

  return {
    keys: keys,
    regexp: new RegExp(
      '^' + pattern + '(?:[?#]|$)',
      opts.caseInsensitiveMatch ? 'i' : ''
    )
  };
}

'use strict';

/* global routeToRegExp: false */

/**
 * @ngdoc object
 * @name angular.mock
 * @description
 *
 * Namespace from 'angular-mocks.js' which contains testing related code.
 *
 */
angular.mock = {};

/**
 * ! This is a private undocumented service !
 *
 * @name $browser
 *
 * @description
 * This service is a mock implementation of {@link ng.$browser}. It provides fake
 * implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr,
 * cookies, etc.
 *
 * The api of this service is the same as that of the real {@link ng.$browser $browser}, except
 * that there are several helper methods available which can be used in tests.
 */
angular.mock.$BrowserProvider = function() {
  this.$get = [
    '$log', '$$taskTrackerFactory',
    function($log, $$taskTrackerFactory) {
      return new angular.mock.$Browser($log, $$taskTrackerFactory);
    }
  ];
};

angular.mock.$Browser = function($log, $$taskTrackerFactory) {
  var self = this;
  var taskTracker = $$taskTrackerFactory($log);

  this.isMock = true;
  self.$$url = 'http://server/';
  self.$$lastUrl = self.$$url; // used by url polling fn
  self.pollFns = [];

  // Task-tracking API
  self.$$completeOutstandingRequest = taskTracker.completeTask;
  self.$$incOutstandingRequestCount = taskTracker.incTaskCount;
  self.notifyWhenNoOutstandingRequests = taskTracker.notifyWhenNoPendingTasks;

  // register url polling fn

  self.onUrlChange = function(listener) {
    self.pollFns.push(
      function() {
        if (self.$$lastUrl !== self.$$url || self.$$state !== self.$$lastState) {
          self.$$lastUrl = self.$$url;
          self.$$lastState = self.$$state;
          listener(self.$$url, self.$$state);
        }
      }
    );

    return listener;
  };

  self.$$applicationDestroyed = angular.noop;
  self.$$checkUrlChange = angular.noop;

  self.deferredFns = [];
  self.deferredNextId = 0;

  self.defer = function(fn, delay, taskType) {
    var timeoutId = self.deferredNextId++;

    delay = delay || 0;
    taskType = taskType || taskTracker.DEFAULT_TASK_TYPE;

    taskTracker.incTaskCount(taskType);
    self.deferredFns.push({
      id: timeoutId,
      type: taskType,
      time: (self.defer.now + delay),
      fn: fn
    });
    self.deferredFns.sort(function(a, b) { return a.time - b.time; });

    return timeoutId;
  };


  /**
   * @name $browser#defer.now
   *
   * @description
   * Current milliseconds mock time.
   */
  self.defer.now = 0;


  self.defer.cancel = function(deferId) {
    var taskIndex;

    angular.forEach(self.deferredFns, function(task, index) {
      if (task.id === deferId) taskIndex = index;
    });

    if (angular.isDefined(taskIndex)) {
      var task = self.deferredFns.splice(taskIndex, 1)[0];
      taskTracker.completeTask(angular.noop, task.type);
      return true;
    }

    return false;
  };


  /**
   * @name $browser#defer.flush
   *
   * @description
   * Flushes all pending requests and executes the defer callbacks.
   *
   * See {@link ngMock.$flushPendingsTasks} for more info.
   *
   * @param {number=} number of milliseconds to flush. See {@link #defer.now}
   */
  self.defer.flush = function(delay) {
    var nextTime;

    if (angular.isDefined(delay)) {
      // A delay was passed so compute the next time
      nextTime = self.defer.now + delay;
    } else if (self.deferredFns.length) {
      // No delay was passed so set the next time so that it clears the deferred queue
      nextTime = self.deferredFns[self.deferredFns.length - 1].time;
    } else {
      // No delay passed, but there are no deferred tasks so flush - indicates an error!
      throw new Error('No deferred tasks to be flushed');
    }

    while (self.deferredFns.length && self.deferredFns[0].time <= nextTime) {
      // Increment the time and call the next deferred function
      self.defer.now = self.deferredFns[0].time;
      var task = self.deferredFns.shift();
      taskTracker.completeTask(task.fn, task.type);
    }

    // Ensure that the current time is correct
    self.defer.now = nextTime;
  };

  /**
   * @name $browser#defer.getPendingTasks
   *
   * @description
   * Returns the currently pending tasks that need to be flushed.
   * You can request a specific type of tasks only, by specifying a `taskType`.
   *
   * @param {string=} taskType - The type tasks to return.
   */
  self.defer.getPendingTasks = function(taskType) {
    return !taskType
        ? self.deferredFns
        : self.deferredFns.filter(function(task) { return task.type === taskType; });
  };

  /**
   * @name $browser#defer.formatPendingTasks
   *
   * @description
   * Formats each task in a list of pending tasks as a string, suitable for use in error messages.
   *
   * @param {Array<Object>} pendingTasks - A list of task objects.
   * @return {Array<string>} A list of stringified tasks.
   */
  self.defer.formatPendingTasks = function(pendingTasks) {
    return pendingTasks.map(function(task) {
      return '{id: ' + task.id + ', type: ' + task.type + ', time: ' + task.time + '}';
    });
  };

  /**
   * @name $browser#defer.verifyNoPendingTasks
   *
   * @description
   * Verifies that there are no pending tasks that need to be flushed.
   * You can check for a specific type of tasks only, by specifying a `taskType`.
   *
   * See {@link $verifyNoPendingTasks} for more info.
   *
   * @param {string=} taskType - The type tasks to check for.
   */
  self.defer.verifyNoPendingTasks = function(taskType) {
    var pendingTasks = self.defer.getPendingTasks(taskType);

    if (pendingTasks.length) {
      var formattedTasks = self.defer.formatPendingTasks(pendingTasks).join('\n  ');
      throw new Error('Deferred tasks to flush (' + pendingTasks.length + '):\n  ' +
          formattedTasks);
    }
  };

  self.$$baseHref = '/';
  self.baseHref = function() {
    return this.$$baseHref;
  };
};
angular.mock.$Browser.prototype = {

  /**
   * @name $browser#poll
   *
   * @description
   * run all fns in pollFns
   */
  poll: function poll() {
    angular.forEach(this.pollFns, function(pollFn) {
      pollFn();
    });
  },

  url: function(url, replace, state) {
    if (angular.isUndefined(state)) {
      state = null;
    }
    if (url) {
      // The `$browser` service trims empty hashes; simulate it.
      this.$$url = url.replace(/#$/, '');
      // Native pushState serializes & copies the object; simulate it.
      this.$$state = angular.copy(state);
      return this;
    }

    return this.$$url;
  },

  state: function() {
    return this.$$state;
  }
};

/**
 * @ngdoc service
 * @name $flushPendingTasks
 *
 * @description
 * Flushes all currently pending tasks and executes the corresponding callbacks.
 *
 * Optionally, you can also pass a `delay` argument to only flush tasks that are scheduled to be
 * executed within `delay` milliseconds. Currently, `delay` only applies to timeouts, since all
 * other tasks have a delay of 0 (i.e. they are scheduled to be executed as soon as possible, but
 * still asynchronously).
 *
 * If no delay is specified, it uses a delay such that all currently pending tasks are flushed.
 *
 * The types of tasks that are flushed include:
 *
 * - Pending timeouts (via {@link $timeout}).
 * - Pending tasks scheduled via {@link ng.$rootScope.Scope#$applyAsync $applyAsync}.
 * - Pending tasks scheduled via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}.
 *   These include tasks scheduled via `$evalAsync()` indirectly (such as {@link $q} promises).
 *
 * <div class="alert alert-info">
 *   Periodic tasks scheduled via {@link $interval} use a different queue and are not flushed by
 *   `$flushPendingTasks()`. Use {@link ngMock.$interval#flush $interval.flush(millis)} instead.
 * </div>
 *
 * @param {number=} delay - The number of milliseconds to flush.
 */
angular.mock.$FlushPendingTasksProvider = function() {
  this.$get = [
    '$browser',
    function($browser) {
      return function $flushPendingTasks(delay) {
        return $browser.defer.flush(delay);
      };
    }
  ];
};

/**
 * @ngdoc service
 * @name $verifyNoPendingTasks
 *
 * @description
 * Verifies that there are no pending tasks that need to be flushed. It throws an error if there are
 * still pending tasks.
 *
 * You can check for a specific type of tasks only, by specifying a `taskType`.
 *
 * Available task types:
 *
 * - `$timeout`: Pending timeouts (via {@link $timeout}).
 * - `$http`: Pending HTTP requests (via {@link $http}).
 * - `$route`: In-progress route transitions (via {@link $route}).
 * - `$applyAsync`: Pending tasks scheduled via {@link ng.$rootScope.Scope#$applyAsync $applyAsync}.
 * - `$evalAsync`: Pending tasks scheduled via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}.
 *   These include tasks scheduled via `$evalAsync()` indirectly (such as {@link $q} promises).
 *
 * <div class="alert alert-info">
 *   Periodic tasks scheduled via {@link $interval} use a different queue and are not taken into
 *   account by `$verifyNoPendingTasks()`. There is currently no way to verify that there are no
 *   pending {@link $interval} tasks.
 * </div>
 *
 * @param {string=} taskType - The type of tasks to check for.
 */
angular.mock.$VerifyNoPendingTasksProvider = function() {
  this.$get = [
    '$browser',
    function($browser) {
      return function $verifyNoPendingTasks(taskType) {
        return $browser.defer.verifyNoPendingTasks(taskType);
      };
    }
  ];
};

/**
 * @ngdoc provider
 * @name $exceptionHandlerProvider
 *
 * @description
 * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors
 * passed to the `$exceptionHandler`.
 */

/**
 * @ngdoc service
 * @name $exceptionHandler
 *
 * @description
 * Mock implementation of {@link ng.$exceptionHandler} that rethrows or logs errors passed
 * to it. See {@link ngMock.$exceptionHandlerProvider $exceptionHandlerProvider} for configuration
 * information.
 *
 *
 * ```js
 *   describe('$exceptionHandlerProvider', function() {
 *
 *     it('should capture log messages and exceptions', function() {
 *
 *       module(function($exceptionHandlerProvider) {
 *         $exceptionHandlerProvider.mode('log');
 *       });
 *
 *       inject(function($log, $exceptionHandler, $timeout) {
 *         $timeout(function() { $log.log(1); });
 *         $timeout(function() { $log.log(2); throw 'banana peel'; });
 *         $timeout(function() { $log.log(3); });
 *         expect($exceptionHandler.errors).toEqual([]);
 *         expect($log.assertEmpty());
 *         $timeout.flush();
 *         expect($exceptionHandler.errors).toEqual(['banana peel']);
 *         expect($log.log.logs).toEqual([[1], [2], [3]]);
 *       });
 *     });
 *   });
 * ```
 */

angular.mock.$ExceptionHandlerProvider = function() {
  var handler;

  /**
   * @ngdoc method
   * @name $exceptionHandlerProvider#mode
   *
   * @description
   * Sets the logging mode.
   *
   * @param {string} mode Mode of operation, defaults to `rethrow`.
   *
   *   - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log`
   *     mode stores an array of errors in `$exceptionHandler.errors`, to allow later assertion of
   *     them. See {@link ngMock.$log#assertEmpty assertEmpty()} and
   *     {@link ngMock.$log#reset reset()}.
   *   - `rethrow`: If any errors are passed to the handler in tests, it typically means that there
   *     is a bug in the application or test, so this mock will make these tests fail. For any
   *     implementations that expect exceptions to be thrown, the `rethrow` mode will also maintain
   *     a log of thrown errors in `$exceptionHandler.errors`.
   */
  this.mode = function(mode) {

    switch (mode) {
      case 'log':
      case 'rethrow':
        var errors = [];
        handler = function(e) {
          if (arguments.length === 1) {
            errors.push(e);
          } else {
            errors.push([].slice.call(arguments, 0));
          }
          if (mode === 'rethrow') {
            throw e;
          }
        };
        handler.errors = errors;
        break;
      default:
        throw new Error('Unknown mode \'' + mode + '\', only \'log\'/\'rethrow\' modes are allowed!');
    }
  };

  this.$get = function() {
    return handler;
  };

  this.mode('rethrow');
};


/**
 * @ngdoc service
 * @name $log
 *
 * @description
 * Mock implementation of {@link ng.$log} that gathers all logged messages in arrays
 * (one array per logging level). These arrays are exposed as `logs` property of each of the
 * level-specific log function, e.g. for level `error` the array is exposed as `$log.error.logs`.
 *
 */
angular.mock.$LogProvider = function() {
  var debug = true;

  function concat(array1, array2, index) {
    return array1.concat(Array.prototype.slice.call(array2, index));
  }

  this.debugEnabled = function(flag) {
    if (angular.isDefined(flag)) {
      debug = flag;
      return this;
    } else {
      return debug;
    }
  };

  this.$get = function() {
    var $log = {
      log: function() { $log.log.logs.push(concat([], arguments, 0)); },
      warn: function() { $log.warn.logs.push(concat([], arguments, 0)); },
      info: function() { $log.info.logs.push(concat([], arguments, 0)); },
      error: function() { $log.error.logs.push(concat([], arguments, 0)); },
      debug: function() {
        if (debug) {
          $log.debug.logs.push(concat([], arguments, 0));
        }
      }
    };

    /**
     * @ngdoc method
     * @name $log#reset
     *
     * @description
     * Reset all of the logging arrays to empty.
     */
    $log.reset = function() {
      /**
       * @ngdoc property
       * @name $log#log.logs
       *
       * @description
       * Array of messages logged using {@link ng.$log#log `log()`}.
       *
       * @example
       * ```js
       * $log.log('Some Log');
       * var first = $log.log.logs.unshift();
       * ```
       */
      $log.log.logs = [];
      /**
       * @ngdoc property
       * @name $log#info.logs
       *
       * @description
       * Array of messages logged using {@link ng.$log#info `info()`}.
       *
       * @example
       * ```js
       * $log.info('Some Info');
       * var first = $log.info.logs.unshift();
       * ```
       */
      $log.info.logs = [];
      /**
       * @ngdoc property
       * @name $log#warn.logs
       *
       * @description
       * Array of messages logged using {@link ng.$log#warn `warn()`}.
       *
       * @example
       * ```js
       * $log.warn('Some Warning');
       * var first = $log.warn.logs.unshift();
       * ```
       */
      $log.warn.logs = [];
      /**
       * @ngdoc property
       * @name $log#error.logs
       *
       * @description
       * Array of messages logged using {@link ng.$log#error `error()`}.
       *
       * @example
       * ```js
       * $log.error('Some Error');
       * var first = $log.error.logs.unshift();
       * ```
       */
      $log.error.logs = [];
        /**
       * @ngdoc property
       * @name $log#debug.logs
       *
       * @description
       * Array of messages logged using {@link ng.$log#debug `debug()`}.
       *
       * @example
       * ```js
       * $log.debug('Some Error');
       * var first = $log.debug.logs.unshift();
       * ```
       */
      $log.debug.logs = [];
    };

    /**
     * @ngdoc method
     * @name $log#assertEmpty
     *
     * @description
     * Assert that all of the logging methods have no logged messages. If any messages are present,
     * an exception is thrown.
     */
    $log.assertEmpty = function() {
      var errors = [];
      angular.forEach(['error', 'warn', 'info', 'log', 'debug'], function(logLevel) {
        angular.forEach($log[logLevel].logs, function(log) {
          angular.forEach(log, function(logItem) {
            errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' +
                        (logItem.stack || ''));
          });
        });
      });
      if (errors.length) {
        errors.unshift('Expected $log to be empty! Either a message was logged unexpectedly, or ' +
          'an expected log message was not checked and removed:');
        errors.push('');
        throw new Error(errors.join('\n---------\n'));
      }
    };

    $log.reset();
    return $log;
  };
};


/**
 * @ngdoc service
 * @name $interval
 *
 * @description
 * Mock implementation of the $interval service.
 *
 * Use {@link ngMock.$interval#flush `$interval.flush(millis)`} to
 * move forward by `millis` milliseconds and trigger any functions scheduled to run in that
 * time.
 *
 * @param {function()} fn A function that should be called repeatedly.
 * @param {number} delay Number of milliseconds between each function call.
 * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat
 *   indefinitely.
 * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
 *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
 * @param {...*=} Pass additional parameters to the executed function.
 * @returns {promise} A promise which will be notified on each iteration.
 */
angular.mock.$IntervalProvider = function() {
  this.$get = ['$browser', '$$intervalFactory',
       function($browser,   $$intervalFactory) {
    var repeatFns = [],
        nextRepeatId = 0,
        now = 0,
        setIntervalFn = function(tick, delay, deferred, skipApply) {
          var id = nextRepeatId++;
          var fn = !skipApply ? tick : function() {
            tick();
            $browser.defer.flush();
          };

          repeatFns.push({
            nextTime: (now + (delay || 0)),
            delay: delay || 1,
            fn: fn,
            id: id,
            deferred: deferred
          });
          repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime; });

          return id;
        },
        clearIntervalFn = function(id) {
          for (var fnIndex = repeatFns.length - 1; fnIndex >= 0; fnIndex--) {
            if (repeatFns[fnIndex].id === id) {
              repeatFns.splice(fnIndex, 1);
              break;
            }
          }
        };

    var $interval = $$intervalFactory(setIntervalFn, clearIntervalFn);

    /**
     * @ngdoc method
     * @name $interval#cancel
     *
     * @description
     * Cancels a task associated with the `promise`.
     *
     * @param {promise} promise A promise from calling the `$interval` function.
     * @returns {boolean} Returns `true` if the task was successfully cancelled.
     */
    $interval.cancel = function(promise) {
      if (!promise) return false;

      for (var fnIndex = repeatFns.length - 1; fnIndex >= 0; fnIndex--) {
        if (repeatFns[fnIndex].id === promise.$$intervalId) {
          var deferred = repeatFns[fnIndex].deferred;
          deferred.promise.then(undefined, function() {});
          deferred.reject('canceled');
          repeatFns.splice(fnIndex, 1);
          return true;
        }
      }

      return false;
    };

    /**
     * @ngdoc method
     * @name $interval#flush
     * @description
     *
     * Runs interval tasks scheduled to be run in the next `millis` milliseconds.
     *
     * @param {number} millis maximum timeout amount to flush up until.
     *
     * @return {number} The amount of time moved forward.
     */
    $interval.flush = function(millis) {
      var before = now;
      now += millis;
      while (repeatFns.length && repeatFns[0].nextTime <= now) {
        var task = repeatFns[0];
        task.fn();
        if (task.nextTime === before) {
          // this can only happen the first time
          // a zero-delay interval gets triggered
          task.nextTime++;
        }
        task.nextTime += task.delay;
        repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;});
      }
      return millis;
    };

    return $interval;
  }];
};


function jsonStringToDate(string) {
  // The R_ISO8061_STR regex is never going to fit into the 100 char limit!
  // eslit-disable-next-line max-len
  var R_ISO8061_STR = /^(-?\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/;

  var match;
  if ((match = string.match(R_ISO8061_STR))) {
    var date = new Date(0),
        tzHour = 0,
        tzMin  = 0;
    if (match[9]) {
      tzHour = toInt(match[9] + match[10]);
      tzMin = toInt(match[9] + match[11]);
    }
    date.setUTCFullYear(toInt(match[1]), toInt(match[2]) - 1, toInt(match[3]));
    date.setUTCHours(toInt(match[4] || 0) - tzHour,
                     toInt(match[5] || 0) - tzMin,
                     toInt(match[6] || 0),
                     toInt(match[7] || 0));
    return date;
  }
  return string;
}

function toInt(str) {
  return parseInt(str, 10);
}

function padNumberInMock(num, digits, trim) {
  var neg = '';
  if (num < 0) {
    neg =  '-';
    num = -num;
  }
  num = '' + num;
  while (num.length < digits) num = '0' + num;
  if (trim) {
    num = num.substr(num.length - digits);
  }
  return neg + num;
}


/**
 * @ngdoc type
 * @name angular.mock.TzDate
 * @description
 *
 * *NOTE*: this is not an injectable instance, just a globally available mock class of `Date`.
 *
 * Mock of the Date type which has its timezone specified via constructor arg.
 *
 * The main purpose is to create Date-like instances with timezone fixed to the specified timezone
 * offset, so that we can test code that depends on local timezone settings without dependency on
 * the time zone settings of the machine where the code is running.
 *
 * @param {number} offset Offset of the *desired* timezone in hours (fractions will be honored)
 * @param {(number|string)} timestamp Timestamp representing the desired time in *UTC*
 *
 * @example
 * !!!! WARNING !!!!!
 * This is not a complete Date object so only methods that were implemented can be called safely.
 * To make matters worse, TzDate instances inherit stuff from Date via a prototype.
 *
 * We do our best to intercept calls to "unimplemented" methods, but since the list of methods is
 * incomplete we might be missing some non-standard methods. This can result in errors like:
 * "Date.prototype.foo called on incompatible Object".
 *
 * ```js
 * var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00Z');
 * newYearInBratislava.getTimezoneOffset() => -60;
 * newYearInBratislava.getFullYear() => 2010;
 * newYearInBratislava.getMonth() => 0;
 * newYearInBratislava.getDate() => 1;
 * newYearInBratislava.getHours() => 0;
 * newYearInBratislava.getMinutes() => 0;
 * newYearInBratislava.getSeconds() => 0;
 * ```
 *
 */
angular.mock.TzDate = function(offset, timestamp) {
  var self = new Date(0);
  if (angular.isString(timestamp)) {
    var tsStr = timestamp;

    self.origDate = jsonStringToDate(timestamp);

    timestamp = self.origDate.getTime();
    if (isNaN(timestamp)) {
      // eslint-disable-next-line no-throw-literal
      throw {
        name: 'Illegal Argument',
        message: 'Arg \'' + tsStr + '\' passed into TzDate constructor is not a valid date string'
      };
    }
  } else {
    self.origDate = new Date(timestamp);
  }

  var localOffset = new Date(timestamp).getTimezoneOffset();
  self.offsetDiff = localOffset * 60 * 1000 - offset * 1000 * 60 * 60;
  self.date = new Date(timestamp + self.offsetDiff);

  self.getTime = function() {
    return self.date.getTime() - self.offsetDiff;
  };

  self.toLocaleDateString = function() {
    return self.date.toLocaleDateString();
  };

  self.getFullYear = function() {
    return self.date.getFullYear();
  };

  self.getMonth = function() {
    return self.date.getMonth();
  };

  self.getDate = function() {
    return self.date.getDate();
  };

  self.getHours = function() {
    return self.date.getHours();
  };

  self.getMinutes = function() {
    return self.date.getMinutes();
  };

  self.getSeconds = function() {
    return self.date.getSeconds();
  };

  self.getMilliseconds = function() {
    return self.date.getMilliseconds();
  };

  self.getTimezoneOffset = function() {
    return offset * 60;
  };

  self.getUTCFullYear = function() {
    return self.origDate.getUTCFullYear();
  };

  self.getUTCMonth = function() {
    return self.origDate.getUTCMonth();
  };

  self.getUTCDate = function() {
    return self.origDate.getUTCDate();
  };

  self.getUTCHours = function() {
    return self.origDate.getUTCHours();
  };

  self.getUTCMinutes = function() {
    return self.origDate.getUTCMinutes();
  };

  self.getUTCSeconds = function() {
    return self.origDate.getUTCSeconds();
  };

  self.getUTCMilliseconds = function() {
    return self.origDate.getUTCMilliseconds();
  };

  self.getDay = function() {
    return self.date.getDay();
  };

  // provide this method only on browsers that already have it
  if (self.toISOString) {
    self.toISOString = function() {
      return padNumberInMock(self.origDate.getUTCFullYear(), 4) + '-' +
            padNumberInMock(self.origDate.getUTCMonth() + 1, 2) + '-' +
            padNumberInMock(self.origDate.getUTCDate(), 2) + 'T' +
            padNumberInMock(self.origDate.getUTCHours(), 2) + ':' +
            padNumberInMock(self.origDate.getUTCMinutes(), 2) + ':' +
            padNumberInMock(self.origDate.getUTCSeconds(), 2) + '.' +
            padNumberInMock(self.origDate.getUTCMilliseconds(), 3) + 'Z';
    };
  }

  //hide all methods not implemented in this mock that the Date prototype exposes
  var unimplementedMethods = ['getUTCDay',
      'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds',
      'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear',
      'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds',
      'setYear', 'toDateString', 'toGMTString', 'toJSON', 'toLocaleFormat', 'toLocaleString',
      'toLocaleTimeString', 'toSource', 'toString', 'toTimeString', 'toUTCString', 'valueOf'];

  angular.forEach(unimplementedMethods, function(methodName) {
    self[methodName] = function() {
      throw new Error('Method \'' + methodName + '\' is not implemented in the TzDate mock');
    };
  });

  return self;
};

//make "tzDateInstance instanceof Date" return true
angular.mock.TzDate.prototype = Date.prototype;


/**
 * @ngdoc service
 * @name $animate
 *
 * @description
 * Mock implementation of the {@link ng.$animate `$animate`} service. Exposes two additional methods
 * for testing animations.
 *
 * You need to require the `ngAnimateMock` module in your test suite for instance `beforeEach(module('ngAnimateMock'))`
 */
angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
  .info({ angularVersion: '1.8.2' })

  .config(['$provide', function($provide) {

    $provide.factory('$$forceReflow', function() {
      function reflowFn() {
        reflowFn.totalReflows++;
      }
      reflowFn.totalReflows = 0;
      return reflowFn;
    });

    $provide.factory('$$animateAsyncRun', function() {
      var queue = [];
      var queueFn = function() {
        return function(fn) {
          queue.push(fn);
        };
      };
      queueFn.flush = function() {
        if (queue.length === 0) return false;

        for (var i = 0; i < queue.length; i++) {
          queue[i]();
        }
        queue = [];

        return true;
      };
      return queueFn;
    });

    $provide.decorator('$$animateJs', ['$delegate', function($delegate) {
      var runners = [];

      var animateJsConstructor = function() {
        var animator = $delegate.apply($delegate, arguments);
        // If no javascript animation is found, animator is undefined
        if (animator) {
          runners.push(animator);
        }
        return animator;
      };

      animateJsConstructor.$closeAndFlush = function() {
        runners.forEach(function(runner) {
          runner.end();
        });
        runners = [];
      };

      return animateJsConstructor;
    }]);

    $provide.decorator('$animateCss', ['$delegate', function($delegate) {
      var runners = [];

      var animateCssConstructor = function(element, options) {
        var animator = $delegate(element, options);
        runners.push(animator);
        return animator;
      };

      animateCssConstructor.$closeAndFlush = function() {
        runners.forEach(function(runner) {
          runner.end();
        });
        runners = [];
      };

      return animateCssConstructor;
    }]);

    $provide.decorator('$animate', ['$delegate', '$timeout', '$browser', '$$rAF', '$animateCss', '$$animateJs',
                                    '$$forceReflow', '$$animateAsyncRun', '$rootScope',
                            function($delegate,   $timeout,   $browser,   $$rAF,   $animateCss,   $$animateJs,
                                     $$forceReflow,   $$animateAsyncRun,  $rootScope) {
      var animate = {
        queue: [],
        cancel: $delegate.cancel,
        on: $delegate.on,
        off: $delegate.off,
        pin: $delegate.pin,
        get reflows() {
          return $$forceReflow.totalReflows;
        },
        enabled: $delegate.enabled,
        /**
         * @ngdoc method
         * @name $animate#closeAndFlush
         * @description
         *
         * This method will close all pending animations (both {@link ngAnimate#javascript-based-animations Javascript}
         * and {@link ngAnimate.$animateCss CSS}) and it will also flush any remaining animation frames and/or callbacks.
         */
        closeAndFlush: function() {
          // we allow the flush command to swallow the errors
          // because depending on whether CSS or JS animations are
          // used, there may not be a RAF flush. The primary flush
          // at the end of this function must throw an exception
          // because it will track if there were pending animations
          this.flush(true);
          $animateCss.$closeAndFlush();
          $$animateJs.$closeAndFlush();
          this.flush();
        },
        /**
         * @ngdoc method
         * @name $animate#flush
         * @description
         *
         * This method is used to flush the pending callbacks and animation frames to either start
         * an animation or conclude an animation. Note that this will not actually close an
         * actively running animation (see {@link ngMock.$animate#closeAndFlush `closeAndFlush()`} for that).
         */
        flush: function(hideErrors) {
          $rootScope.$digest();

          var doNextRun, somethingFlushed = false;
          do {
            doNextRun = false;

            if ($$rAF.queue.length) {
              $$rAF.flush();
              doNextRun = somethingFlushed = true;
            }

            if ($$animateAsyncRun.flush()) {
              doNextRun = somethingFlushed = true;
            }
          } while (doNextRun);

          if (!somethingFlushed && !hideErrors) {
            throw new Error('No pending animations ready to be closed or flushed');
          }

          $rootScope.$digest();
        }
      };

      angular.forEach(
        ['animate','enter','leave','move','addClass','removeClass','setClass'], function(method) {
        animate[method] = function() {
          animate.queue.push({
            event: method,
            element: arguments[0],
            options: arguments[arguments.length - 1],
            args: arguments
          });
          return $delegate[method].apply($delegate, arguments);
        };
      });

      return animate;
    }]);

  }]);


/**
 * @ngdoc function
 * @name angular.mock.dump
 * @description
 *
 * *NOTE*: This is not an injectable instance, just a globally available function.
 *
 * Method for serializing common AngularJS objects (scope, elements, etc..) into strings.
 * It is useful for logging objects to the console when debugging.
 *
 * @param {*} object - any object to turn into string.
 * @return {string} a serialized string of the argument
 */
angular.mock.dump = function(object) {
  return serialize(object);

  function serialize(object) {
    var out;

    if (angular.isElement(object)) {
      object = angular.element(object);
      out = angular.element('<div></div>');
      angular.forEach(object, function(element) {
        out.append(angular.element(element).clone());
      });
      out = out.html();
    } else if (angular.isArray(object)) {
      out = [];
      angular.forEach(object, function(o) {
        out.push(serialize(o));
      });
      out = '[ ' + out.join(', ') + ' ]';
    } else if (angular.isObject(object)) {
      if (angular.isFunction(object.$eval) && angular.isFunction(object.$apply)) {
        out = serializeScope(object);
      } else if (object instanceof Error) {
        out = object.stack || ('' + object.name + ': ' + object.message);
      } else {
        // TODO(i): this prevents methods being logged,
        // we should have a better way to serialize objects
        out = angular.toJson(object, true);
      }
    } else {
      out = String(object);
    }

    return out;
  }

  function serializeScope(scope, offset) {
    offset = offset ||  '  ';
    var log = [offset + 'Scope(' + scope.$id + '): {'];
    for (var key in scope) {
      if (Object.prototype.hasOwnProperty.call(scope, key) && !key.match(/^(\$|this)/)) {
        log.push('  ' + key + ': ' + angular.toJson(scope[key]));
      }
    }
    var child = scope.$$childHead;
    while (child) {
      log.push(serializeScope(child, offset + '  '));
      child = child.$$nextSibling;
    }
    log.push('}');
    return log.join('\n' + offset);
  }
};

/**
 * @ngdoc service
 * @name $httpBackend
 * @description
 * Fake HTTP backend implementation suitable for unit testing applications that use the
 * {@link ng.$http $http service}.
 *
 * <div class="alert alert-info">
 * **Note**: For fake HTTP backend implementation suitable for end-to-end testing or backend-less
 * development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}.
 * </div>
 *
 * During unit testing, we want our unit tests to run quickly and have no external dependencies so
 * we don’t want to send [XHR](https://developer.mozilla.org/en/xmlhttprequest) or
 * [JSONP](http://en.wikipedia.org/wiki/JSONP) requests to a real server. All we really need is
 * to verify whether a certain request has been sent or not, or alternatively just let the
 * application make requests, respond with pre-trained responses and assert that the end result is
 * what we expect it to be.
 *
 * This mock implementation can be used to respond with static or dynamic responses via the
 * `expect` and `when` apis and their shortcuts (`expectGET`, `whenPOST`, etc).
 *
 * When an AngularJS application needs some data from a server, it calls the $http service, which
 * sends the request to a real server using $httpBackend service. With dependency injection, it is
 * easy to inject $httpBackend mock (which has the same API as $httpBackend) and use it to verify
 * the requests and respond with some testing data without sending a request to a real server.
 *
 * There are two ways to specify what test data should be returned as http responses by the mock
 * backend when the code under test makes http requests:
 *
 * - `$httpBackend.expect` - specifies a request expectation
 * - `$httpBackend.when` - specifies a backend definition
 *
 *
 * ## Request Expectations vs Backend Definitions
 *
 * Request expectations provide a way to make assertions about requests made by the application and
 * to define responses for those requests. The test will fail if the expected requests are not made
 * or they are made in the wrong order.
 *
 * Backend definitions allow you to define a fake backend for your application which doesn't assert
 * if a particular request was made or not, it just returns a trained response if a request is made.
 * The test will pass whether or not the request gets made during testing.
 *
 *
 * <table class="table">
 *   <tr><th width="220px"></th><th>Request expectations</th><th>Backend definitions</th></tr>
 *   <tr>
 *     <th>Syntax</th>
 *     <td>.expect(...).respond(...)</td>
 *     <td>.when(...).respond(...)</td>
 *   </tr>
 *   <tr>
 *     <th>Typical usage</th>
 *     <td>strict unit tests</td>
 *     <td>loose (black-box) unit testing</td>
 *   </tr>
 *   <tr>
 *     <th>Fulfills multiple requests</th>
 *     <td>NO</td>
 *     <td>YES</td>
 *   </tr>
 *   <tr>
 *     <th>Order of requests matters</th>
 *     <td>YES</td>
 *     <td>NO</td>
 *   </tr>
 *   <tr>
 *     <th>Request required</th>
 *     <td>YES</td>
 *     <td>NO</td>
 *   </tr>
 *   <tr>
 *     <th>Response required</th>
 *     <td>optional (see below)</td>
 *     <td>YES</td>
 *   </tr>
 * </table>
 *
 * In cases where both backend definitions and request expectations are specified during unit
 * testing, the request expectations are evaluated first.
 *
 * If a request expectation has no response specified, the algorithm will search your backend
 * definitions for an appropriate response.
 *
 * If a request didn't match any expectation or if the expectation doesn't have the response
 * defined, the backend definitions are evaluated in sequential order to see if any of them match
 * the request. The response from the first matched definition is returned.
 *
 *
 * ## Flushing HTTP requests
 *
 * The $httpBackend used in production always responds to requests asynchronously. If we preserved
 * this behavior in unit testing, we'd have to create async unit tests, which are hard to write,
 * to follow and to maintain. But neither can the testing mock respond synchronously; that would
 * change the execution of the code under test. For this reason, the mock $httpBackend has a
 * `flush()` method, which allows the test to explicitly flush pending requests. This preserves
 * the async api of the backend, while allowing the test to execute synchronously.
 *
 *
 * ## Unit testing with mock $httpBackend
 * The following code shows how to setup and use the mock backend when unit testing a controller.
 * First we create the controller under test:
 *
  ```js
  // The module code
  angular
    .module('MyApp', [])
    .controller('MyController', MyController);

  // The controller code
  function MyController($scope, $http) {
    var authToken;

    $http.get('/auth.py').then(function(response) {
      authToken = response.headers('A-Token');
      $scope.user = response.data;
    }).catch(function() {
      $scope.status = 'Failed...';
    });

    $scope.saveMessage = function(message) {
      var headers = { 'Authorization': authToken };
      $scope.status = 'Saving...';

      $http.post('/add-msg.py', message, { headers: headers } ).then(function(response) {
        $scope.status = '';
      }).catch(function() {
        $scope.status = 'Failed...';
      });
    };
  }
  ```
 *
 * Now we setup the mock backend and create the test specs:
 *
  ```js
    // testing controller
    describe('MyController', function() {
       var $httpBackend, $rootScope, createController, authRequestHandler;

       // Set up the module
       beforeEach(module('MyApp'));

       beforeEach(inject(function($injector) {
         // Set up the mock http service responses
         $httpBackend = $injector.get('$httpBackend');
         // backend definition common for all tests
         authRequestHandler = $httpBackend.when('GET', '/auth.py')
                                .respond({userId: 'userX'}, {'A-Token': 'xxx'});

         // Get hold of a scope (i.e. the root scope)
         $rootScope = $injector.get('$rootScope');
         // The $controller service is used to create instances of controllers
         var $controller = $injector.get('$controller');

         createController = function() {
           return $controller('MyController', {'$scope' : $rootScope });
         };
       }));


       afterEach(function() {
         $httpBackend.verifyNoOutstandingExpectation();
         $httpBackend.verifyNoOutstandingRequest();
       });


       it('should fetch authentication token', function() {
         $httpBackend.expectGET('/auth.py');
         var controller = createController();
         $httpBackend.flush();
       });


       it('should fail authentication', function() {

         // Notice how you can change the response even after it was set
         authRequestHandler.respond(401, '');

         $httpBackend.expectGET('/auth.py');
         var controller = createController();
         $httpBackend.flush();
         expect($rootScope.status).toBe('Failed...');
       });


       it('should send msg to server', function() {
         var controller = createController();
         $httpBackend.flush();

         // now you don’t care about the authentication, but
         // the controller will still send the request and
         // $httpBackend will respond without you having to
         // specify the expectation and response for this request

         $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, '');
         $rootScope.saveMessage('message content');
         expect($rootScope.status).toBe('Saving...');
         $httpBackend.flush();
         expect($rootScope.status).toBe('');
       });


       it('should send auth header', function() {
         var controller = createController();
         $httpBackend.flush();

         $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) {
           // check if the header was sent, if it wasn't the expectation won't
           // match the request and the test will fail
           return headers['Authorization'] === 'xxx';
         }).respond(201, '');

         $rootScope.saveMessage('whatever');
         $httpBackend.flush();
       });
    });
  ```
 *
 * ## Dynamic responses
 *
 * You define a response to a request by chaining a call to `respond()` onto a definition or expectation.
 * If you provide a **callback** as the first parameter to `respond(callback)` then you can dynamically generate
 * a response based on the properties of the request.
 *
 * The `callback` function should be of the form `function(method, url, data, headers, params)`.
 *
 * ### Query parameters
 *
 * By default, query parameters on request URLs are parsed into the `params` object. So a request URL
 * of `/list?q=searchstr&orderby=-name` would set `params` to be `{q: 'searchstr', orderby: '-name'}`.
 *
 * ### Regex parameter matching
 *
 * If an expectation or definition uses a **regex** to match the URL, you can provide an array of **keys** via a
 * `params` argument. The index of each **key** in the array will match the index of a **group** in the
 * **regex**.
 *
 * The `params` object in the **callback** will now have properties with these keys, which hold the value of the
 * corresponding **group** in the **regex**.
 *
 * This also applies to the `when` and `expect` shortcut methods.
 *
 *
 * ```js
 *   $httpBackend.expect('GET', /\/user\/(.+)/, undefined, undefined, ['id'])
 *     .respond(function(method, url, data, headers, params) {
 *       // for requested url of '/user/1234' params is {id: '1234'}
 *     });
 *
 *   $httpBackend.whenPATCH(/\/user\/(.+)\/article\/(.+)/, undefined, undefined, ['user', 'article'])
 *     .respond(function(method, url, data, headers, params) {
 *       // for url of '/user/1234/article/567' params is {user: '1234', article: '567'}
 *     });
 * ```
 *
 * ## Matching route requests
 *
 * For extra convenience, `whenRoute` and `expectRoute` shortcuts are available. These methods offer colon
 * delimited matching of the url path, ignoring the query string and trailing slashes. This allows declarations
 * similar to how application routes are configured with `$routeProvider`. Because these methods convert
 * the definition url to regex, declaration order is important. Combined with query parameter parsing,
 * the following is possible:
 *
  ```js
    $httpBackend.whenRoute('GET', '/users/:id')
      .respond(function(method, url, data, headers, params) {
        return [200, MockUserList[Number(params.id)]];
      });

    $httpBackend.whenRoute('GET', '/users')
      .respond(function(method, url, data, headers, params) {
        var userList = angular.copy(MockUserList),
          defaultSort = 'lastName',
          count, pages, isPrevious, isNext;

        // paged api response '/v1/users?page=2'
        params.page = Number(params.page) || 1;

        // query for last names '/v1/users?q=Archer'
        if (params.q) {
          userList = $filter('filter')({lastName: params.q});
        }

        pages = Math.ceil(userList.length / pagingLength);
        isPrevious = params.page > 1;
        isNext = params.page < pages;

        return [200, {
          count:    userList.length,
          previous: isPrevious,
          next:     isNext,
          // sort field -> '/v1/users?sortBy=firstName'
          results:  $filter('orderBy')(userList, params.sortBy || defaultSort)
                      .splice((params.page - 1) * pagingLength, pagingLength)
        }];
      });
  ```
 */
angular.mock.$httpBackendDecorator =
  ['$rootScope', '$timeout', '$delegate', createHttpBackendMock];

/**
 * General factory function for $httpBackend mock.
 * Returns instance for unit testing (when no arguments specified):
 *   - passing through is disabled
 *   - auto flushing is disabled
 *
 * Returns instance for e2e testing (when `$delegate` and `$browser` specified):
 *   - passing through (delegating request to real backend) is enabled
 *   - auto flushing is enabled
 *
 * @param {Object=} $delegate Real $httpBackend instance (allow passing through if specified)
 * @param {Object=} $browser Auto-flushing enabled if specified
 * @return {Object} Instance of $httpBackend mock
 */
function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
  var definitions = [],
      expectations = [],
      matchLatestDefinition = false,
      responses = [],
      responsesPush = angular.bind(responses, responses.push),
      copy = angular.copy,
      // We cache the original backend so that if both ngMock and ngMockE2E override the
      // service the ngMockE2E version can pass through to the real backend
      originalHttpBackend = $delegate.$$originalHttpBackend || $delegate;

  function createResponse(status, data, headers, statusText) {
    if (angular.isFunction(status)) return status;

    return function() {
      return angular.isNumber(status)
          ? [status, data, headers, statusText, 'complete']
          : [200, status, data, headers, 'complete'];
    };
  }

  // TODO(vojta): change params to: method, url, data, headers, callback
  function $httpBackend(method, url, data, callback, headers, timeout, withCredentials, responseType, eventHandlers, uploadEventHandlers) {

    var xhr = new MockXhr(),
        expectation = expectations[0],
        wasExpected = false;

    xhr.$$events = eventHandlers;
    xhr.upload.$$events = uploadEventHandlers;

    function prettyPrint(data) {
      return (angular.isString(data) || angular.isFunction(data) || data instanceof RegExp)
          ? data
          : angular.toJson(data);
    }

    function wrapResponse(wrapped) {
      if (!$browser && timeout) {
        if (timeout.then) {
          timeout.then(function() {
            handlePrematureEnd(angular.isDefined(timeout.$$timeoutId) ? 'timeout' : 'abort');
          });
        } else {
          $timeout(function() {
            handlePrematureEnd('timeout');
          }, timeout);
        }
      }

      handleResponse.description = method + ' ' + url;
      return handleResponse;

      function handleResponse() {
        var response = wrapped.response(method, url, data, headers, wrapped.params(url));
        xhr.$$respHeaders = response[2];
        callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders(),
                 copy(response[3] || ''), copy(response[4]));
      }

      function handlePrematureEnd(reason) {
        for (var i = 0, ii = responses.length; i < ii; i++) {
          if (responses[i] === handleResponse) {
            responses.splice(i, 1);
            callback(-1, undefined, '', undefined, reason);
            break;
          }
        }
      }
    }

    function createFatalError(message) {
      var error = new Error(message);
      // In addition to being converted to a rejection, these errors also need to be passed to
      // the $exceptionHandler and be rethrown (so that the test fails).
      error.$$passToExceptionHandler = true;
      return error;
    }

    if (expectation && expectation.match(method, url)) {
      if (!expectation.matchData(data)) {
        throw createFatalError('Expected ' + expectation + ' with different data\n' +
          'EXPECTED: ' + prettyPrint(expectation.data) + '\n' +
          'GOT:      ' + data);
      }

      if (!expectation.matchHeaders(headers)) {
        throw createFatalError('Expected ' + expectation + ' with different headers\n' +
          'EXPECTED: ' + prettyPrint(expectation.headers) + '\n' +
          'GOT:      ' + prettyPrint(headers));
      }

      expectations.shift();

      if (expectation.response) {
        responses.push(wrapResponse(expectation));
        return;
      }
      wasExpected = true;
    }

    var i = matchLatestDefinition ? definitions.length : -1, definition;

    while ((definition = definitions[matchLatestDefinition ? --i : ++i])) {
      if (definition.match(method, url, data, headers || {})) {
        if (definition.response) {
          // if $browser specified, we do auto flush all requests
          ($browser ? $browser.defer : responsesPush)(wrapResponse(definition));
        } else if (definition.passThrough) {
          originalHttpBackend(method, url, data, callback, headers, timeout, withCredentials, responseType, eventHandlers, uploadEventHandlers);
        } else throw createFatalError('No response defined !');
        return;
      }
    }

    if (wasExpected) {
      throw createFatalError('No response defined !');
    }

    throw createFatalError('Unexpected request: ' + method + ' ' + url + '\n' +
      (expectation ? 'Expected ' + expectation : 'No more request expected'));
  }

  /**
   * @ngdoc method
   * @name $httpBackend#when
   * @description
   * Creates a new backend definition.
   *
   * @param {string} method HTTP method.
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current definition.
   * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
   *   data string and returns true if the data is as expected.
   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
   *   object and returns true if the headers match the current definition.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   *   request is handled. You can save this object for later use and invoke `respond` again in
   *   order to change how a matched request is handled.
   *
   *  - respond –
   *      ```js
   *      {function([status,] data[, headers, statusText])
   *      | function(function(method, url, data, headers, params)}
   *      ```
   *    – The respond method takes a set of static data to be returned or a function that can
   *    return an array containing response status (number), response data (Array|Object|string),
   *    response headers (Object), HTTP status text (string), and XMLHttpRequest status (string:
   *    `complete`, `error`, `timeout` or `abort`). The respond method returns the `requestHandler`
   *    object for possible overrides.
   */
  $httpBackend.when = function(method, url, data, headers, keys) {

    assertArgDefined(arguments, 1, 'url');

    var definition = new MockHttpExpectation(method, url, data, headers, keys),
        chain = {
          respond: function(status, data, headers, statusText) {
            definition.passThrough = undefined;
            definition.response = createResponse(status, data, headers, statusText);
            return chain;
          }
        };

    if ($browser) {
      chain.passThrough = function() {
        definition.response = undefined;
        definition.passThrough = true;
        return chain;
      };
    }

    definitions.push(definition);
    return chain;
  };

  /**
   * @ngdoc method
   * @name  $httpBackend#matchLatestDefinitionEnabled
   * @description
   * This method can be used to change which mocked responses `$httpBackend` returns, when defining
   * them with {@link ngMock.$httpBackend#when $httpBackend.when()} (and shortcut methods).
   * By default, `$httpBackend` returns the first definition that matches. When setting
   * `$http.matchLatestDefinitionEnabled(true)`, it will use the last response that matches, i.e. the
   * one that was added last.
   *
   * ```js
   * hb.when('GET', '/url1').respond(200, 'content', {});
   * hb.when('GET', '/url1').respond(201, 'another', {});
   * hb('GET', '/url1'); // receives "content"
   *
   * $http.matchLatestDefinitionEnabled(true)
   * hb('GET', '/url1'); // receives "another"
   *
   * hb.when('GET', '/url1').respond(201, 'onemore', {});
   * hb('GET', '/url1'); // receives "onemore"
   * ```
   *
   * This is useful if a you have a default response that is overriden inside specific tests.
   *
   * Note that different from config methods on providers, `matchLatestDefinitionEnabled()` can be changed
   * even when the application is already running.
   *
   * @param  {Boolean=} value value to set, either `true` or `false`. Default is `false`.
   *                          If omitted, it will return the current value.
   * @return {$httpBackend|Boolean} self when used as a setter, and the current value when used
   *                                as a getter
   */
  $httpBackend.matchLatestDefinitionEnabled = function(value) {
    if (angular.isDefined(value)) {
      matchLatestDefinition = value;
      return this;
    } else {
      return matchLatestDefinition;
    }
  };

  /**
   * @ngdoc method
   * @name $httpBackend#whenGET
   * @description
   * Creates a new backend definition for GET requests. For more info see `when()`.
   *
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current definition.
   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
   *   object and returns true if the headers match the current definition.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   * request is handled. You can save this object for later use and invoke `respond` again in
   * order to change how a matched request is handled.
   */

  /**
   * @ngdoc method
   * @name $httpBackend#whenHEAD
   * @description
   * Creates a new backend definition for HEAD requests. For more info see `when()`.
   *
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current definition.
   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
   *   object and returns true if the headers match the current definition.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   * request is handled. You can save this object for later use and invoke `respond` again in
   * order to change how a matched request is handled.
   */

  /**
   * @ngdoc method
   * @name $httpBackend#whenDELETE
   * @description
   * Creates a new backend definition for DELETE requests. For more info see `when()`.
   *
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current definition.
   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
   *   object and returns true if the headers match the current definition.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   * request is handled. You can save this object for later use and invoke `respond` again in
   * order to change how a matched request is handled.
   */

  /**
   * @ngdoc method
   * @name $httpBackend#whenPOST
   * @description
   * Creates a new backend definition for POST requests. For more info see `when()`.
   *
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current definition.
   * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
   *   data string and returns true if the data is as expected.
   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
   *   object and returns true if the headers match the current definition.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   * request is handled. You can save this object for later use and invoke `respond` again in
   * order to change how a matched request is handled.
   */

  /**
   * @ngdoc method
   * @name $httpBackend#whenPUT
   * @description
   * Creates a new backend definition for PUT requests.  For more info see `when()`.
   *
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current definition.
   * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
   *   data string and returns true if the data is as expected.
   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
   *   object and returns true if the headers match the current definition.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   * request is handled. You can save this object for later use and invoke `respond` again in
   * order to change how a matched request is handled.
   */

  /**
   * @ngdoc method
   * @name $httpBackend#whenJSONP
   * @description
   * Creates a new backend definition for JSONP requests. For more info see `when()`.
   *
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current definition.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   * request is handled. You can save this object for later use and invoke `respond` again in
   * order to change how a matched request is handled.
   */
  createShortMethods('when');

  /**
   * @ngdoc method
   * @name $httpBackend#whenRoute
   * @description
   * Creates a new backend definition that compares only with the requested route.
   *
   * @param {string} method HTTP method.
   * @param {string} url HTTP url string that supports colon param matching.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   * request is handled. You can save this object for later use and invoke `respond` again in
   * order to change how a matched request is handled.
   * See {@link ngMock.$httpBackend#when `when`} for more info.
   */
  $httpBackend.whenRoute = function(method, url) {
    var parsed = parseRouteUrl(url);
    return $httpBackend.when(method, parsed.regexp, undefined, undefined, parsed.keys);
  };

  /**
   * @ngdoc method
   * @name $httpBackend#expect
   * @description
   * Creates a new request expectation.
   *
   * @param {string} method HTTP method.
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current definition.
   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
   *  receives data string and returns true if the data is as expected, or Object if request body
   *  is in JSON format.
   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
   *   object and returns true if the headers match the current expectation.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   *  request is handled. You can save this object for later use and invoke `respond` again in
   *  order to change how a matched request is handled.
   *
   *  - respond –
   *      ```js
   *      {function([status,] data[, headers, statusText])
   *      | function(function(method, url, data, headers, params)}
   *      ```
   *    – The respond method takes a set of static data to be returned or a function that can
   *    return an array containing response status (number), response data (Array|Object|string),
   *    response headers (Object), HTTP status text (string), and XMLHttpRequest status (string:
   *    `complete`, `error`, `timeout` or `abort`). The respond method returns the `requestHandler`
   *    object for possible overrides.
   */
  $httpBackend.expect = function(method, url, data, headers, keys) {

    assertArgDefined(arguments, 1, 'url');

    var expectation = new MockHttpExpectation(method, url, data, headers, keys),
        chain = {
          respond: function(status, data, headers, statusText) {
            expectation.response = createResponse(status, data, headers, statusText);
            return chain;
          }
        };

    expectations.push(expectation);
    return chain;
  };

  /**
   * @ngdoc method
   * @name $httpBackend#expectGET
   * @description
   * Creates a new request expectation for GET requests. For more info see `expect()`.
   *
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current expectation.
   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
   *   object and returns true if the headers match the current expectation.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   * request is handled. You can save this object for later use and invoke `respond` again in
   * order to change how a matched request is handled. See #expect for more info.
   */

  /**
   * @ngdoc method
   * @name $httpBackend#expectHEAD
   * @description
   * Creates a new request expectation for HEAD requests. For more info see `expect()`.
   *
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current expectation.
   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
   *   object and returns true if the headers match the current expectation.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   *   request is handled. You can save this object for later use and invoke `respond` again in
   *   order to change how a matched request is handled.
   */

  /**
   * @ngdoc method
   * @name $httpBackend#expectDELETE
   * @description
   * Creates a new request expectation for DELETE requests. For more info see `expect()`.
   *
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current expectation.
   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
   *   object and returns true if the headers match the current expectation.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   *   request is handled. You can save this object for later use and invoke `respond` again in
   *   order to change how a matched request is handled.
   */

  /**
   * @ngdoc method
   * @name $httpBackend#expectPOST
   * @description
   * Creates a new request expectation for POST requests. For more info see `expect()`.
   *
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current expectation.
   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
   *  receives data string and returns true if the data is as expected, or Object if request body
   *  is in JSON format.
   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
   *   object and returns true if the headers match the current expectation.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   *   request is handled. You can save this object for later use and invoke `respond` again in
   *   order to change how a matched request is handled.
   */

  /**
   * @ngdoc method
   * @name $httpBackend#expectPUT
   * @description
   * Creates a new request expectation for PUT requests. For more info see `expect()`.
   *
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current expectation.
   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
   *  receives data string and returns true if the data is as expected, or Object if request body
   *  is in JSON format.
   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
   *   object and returns true if the headers match the current expectation.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   *   request is handled. You can save this object for later use and invoke `respond` again in
   *   order to change how a matched request is handled.
   */

  /**
   * @ngdoc method
   * @name $httpBackend#expectPATCH
   * @description
   * Creates a new request expectation for PATCH requests. For more info see `expect()`.
   *
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
   *   and returns true if the url matches the current expectation.
   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
   *  receives data string and returns true if the data is as expected, or Object if request body
   *  is in JSON format.
   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
   *   object and returns true if the headers match the current expectation.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   *   request is handled. You can save this object for later use and invoke `respond` again in
   *   order to change how a matched request is handled.
   */

  /**
   * @ngdoc method
   * @name $httpBackend#expectJSONP
   * @description
   * Creates a new request expectation for JSONP requests. For more info see `expect()`.
   *
   * @param {string|RegExp|function(string)=} url HTTP url or function that receives an url
   *   and returns true if the url matches the current expectation.
   * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   *   request is handled. You can save this object for later use and invoke `respond` again in
   *   order to change how a matched request is handled.
   */
  createShortMethods('expect');

  /**
   * @ngdoc method
   * @name $httpBackend#expectRoute
   * @description
   * Creates a new request expectation that compares only with the requested route.
   *
   * @param {string} method HTTP method.
   * @param {string} url HTTP url string that supports colon param matching.
   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
   * request is handled. You can save this object for later use and invoke `respond` again in
   * order to change how a matched request is handled.
   * See {@link ngMock.$httpBackend#expect `expect`} for more info.
   */
  $httpBackend.expectRoute = function(method, url) {
    var parsed = parseRouteUrl(url);
    return $httpBackend.expect(method, parsed.regexp, undefined, undefined, parsed.keys);
  };


  /**
   * @ngdoc method
   * @name $httpBackend#flush
   * @description
   * Flushes pending requests using the trained responses. Requests are flushed in the order they
   * were made, but it is also possible to skip one or more requests (for example to have them
   * flushed later). This is useful for simulating scenarios where responses arrive from the server
   * in any order.
   *
   * If there are no pending requests to flush when the method is called, an exception is thrown (as
   * this is typically a sign of programming error).
   *
   * @param {number=} count - Number of responses to flush. If undefined/null, all pending requests
   *     (starting after `skip`) will be flushed.
   * @param {number=} [skip=0] - Number of pending requests to skip. For example, a value of `5`
   *     would skip the first 5 pending requests and start flushing from the 6th onwards.
   */
  $httpBackend.flush = function(count, skip, digest) {
    if (digest !== false) $rootScope.$digest();

    skip = skip || 0;
    if (skip >= responses.length) throw new Error('No pending request to flush !');

    if (angular.isDefined(count) && count !== null) {
      while (count--) {
        var part = responses.splice(skip, 1);
        if (!part.length) throw new Error('No more pending request to flush !');
        part[0]();
      }
    } else {
      while (responses.length > skip) {
        responses.splice(skip, 1)[0]();
      }
    }
    $httpBackend.verifyNoOutstandingExpectation(digest);
  };


  /**
   * @ngdoc method
   * @name $httpBackend#verifyNoOutstandingExpectation
   * @description
   * Verifies that all of the requests defined via the `expect` api were made. If any of the
   * requests were not made, verifyNoOutstandingExpectation throws an exception.
   *
   * Typically, you would call this method following each test case that asserts requests using an
   * "afterEach" clause.
   *
   * ```js
   *   afterEach($httpBackend.verifyNoOutstandingExpectation);
   * ```
   */
  $httpBackend.verifyNoOutstandingExpectation = function(digest) {
    if (digest !== false) $rootScope.$digest();
    if (expectations.length) {
      throw new Error('Unsatisfied requests: ' + expectations.join(', '));
    }
  };


  /**
   * @ngdoc method
   * @name $httpBackend#verifyNoOutstandingRequest
   * @description
   * Verifies that there are no outstanding requests that need to be flushed.
   *
   * Typically, you would call this method following each test case that asserts requests using an
   * "afterEach" clause.
   *
   * ```js
   *   afterEach($httpBackend.verifyNoOutstandingRequest);
   * ```
   */
  $httpBackend.verifyNoOutstandingRequest = function(digest) {
    if (digest !== false) $rootScope.$digest();
    if (responses.length) {
      var unflushedDescriptions = responses.map(function(res) { return res.description; });
      throw new Error('Unflushed requests: ' + responses.length + '\n  ' +
                      unflushedDescriptions.join('\n  '));
    }
  };


  /**
   * @ngdoc method
   * @name $httpBackend#resetExpectations
   * @description
   * Resets all request expectations, but preserves all backend definitions. Typically, you would
   * call resetExpectations during a multiple-phase test when you want to reuse the same instance of
   * $httpBackend mock.
   */
  $httpBackend.resetExpectations = function() {
    expectations.length = 0;
    responses.length = 0;
  };

  $httpBackend.$$originalHttpBackend = originalHttpBackend;

  return $httpBackend;


  function createShortMethods(prefix) {
    angular.forEach(['GET', 'DELETE', 'JSONP', 'HEAD'], function(method) {
     $httpBackend[prefix + method] = function(url, headers, keys) {
        assertArgDefined(arguments, 0, 'url');

        // Change url to `null` if `undefined` to stop it throwing an exception further down
        if (angular.isUndefined(url)) url = null;

       return $httpBackend[prefix](method, url, undefined, headers, keys);
     };
    });

    angular.forEach(['PUT', 'POST', 'PATCH'], function(method) {
      $httpBackend[prefix + method] = function(url, data, headers, keys) {
        assertArgDefined(arguments, 0, 'url');

        // Change url to `null` if `undefined` to stop it throwing an exception further down
        if (angular.isUndefined(url)) url = null;

        return $httpBackend[prefix](method, url, data, headers, keys);
      };
    });
  }

  function parseRouteUrl(url) {
    var strippedUrl = stripQueryAndHash(url);
    var parseOptions = {caseInsensitiveMatch: true, ignoreTrailingSlashes: true};
    return routeToRegExp(strippedUrl, parseOptions);
  }
}

function assertArgDefined(args, index, name) {
  if (args.length > index && angular.isUndefined(args[index])) {
    throw new Error('Undefined argument `' + name + '`; the argument is provided but not defined');
  }
}

function stripQueryAndHash(url) {
  return url.replace(/[?#].*$/, '');
}

function MockHttpExpectation(expectedMethod, expectedUrl, expectedData, expectedHeaders,
                             expectedKeys) {

  this.data = expectedData;
  this.headers = expectedHeaders;

  this.match = function(method, url, data, headers) {
    if (expectedMethod !== method) return false;
    if (!this.matchUrl(url)) return false;
    if (angular.isDefined(data) && !this.matchData(data)) return false;
    if (angular.isDefined(headers) && !this.matchHeaders(headers)) return false;
    return true;
  };

  this.matchUrl = function(url) {
    if (!expectedUrl) return true;
    if (angular.isFunction(expectedUrl.test)) return expectedUrl.test(url);
    if (angular.isFunction(expectedUrl)) return expectedUrl(url);
    return (expectedUrl === url || compareUrlWithQuery(url));
  };

  this.matchHeaders = function(headers) {
    if (angular.isUndefined(expectedHeaders)) return true;
    if (angular.isFunction(expectedHeaders)) return expectedHeaders(headers);
    return angular.equals(expectedHeaders, headers);
  };

  this.matchData = function(data) {
    if (angular.isUndefined(expectedData)) return true;
    if (expectedData && angular.isFunction(expectedData.test)) return expectedData.test(data);
    if (expectedData && angular.isFunction(expectedData)) return expectedData(data);
    if (expectedData && !angular.isString(expectedData)) {
      return angular.equals(angular.fromJson(angular.toJson(expectedData)), angular.fromJson(data));
    }
    // eslint-disable-next-line eqeqeq
    return expectedData == data;
  };

  this.toString = function() {
    return expectedMethod + ' ' + expectedUrl;
  };

  this.params = function(url) {
    var queryStr = url.indexOf('?') === -1 ? '' : url.substring(url.indexOf('?') + 1);
    var strippedUrl = stripQueryAndHash(url);

    return angular.extend(extractParamsFromQuery(queryStr), extractParamsFromPath(strippedUrl));
  };

  function compareUrlWithQuery(url) {
    var urlWithQueryRe = /^([^?]*)\?(.*)$/;

    var expectedMatch = urlWithQueryRe.exec(expectedUrl);
    var actualMatch = urlWithQueryRe.exec(url);

    return !!(expectedMatch && actualMatch) &&
      (expectedMatch[1] === actualMatch[1]) &&
      (normalizeQuery(expectedMatch[2]) === normalizeQuery(actualMatch[2]));
  }

  function normalizeQuery(queryStr) {
    return queryStr.split('&').sort().join('&');
  }

  function extractParamsFromPath(strippedUrl) {
    var keyObj = {};

    if (!expectedUrl || !angular.isFunction(expectedUrl.test) ||
        !expectedKeys || !expectedKeys.length) return keyObj;

    var match = expectedUrl.exec(strippedUrl);
    if (!match) return keyObj;

    for (var i = 1, len = match.length; i < len; ++i) {
      var key = expectedKeys[i - 1];
      var val = match[i];
      if (key && val) {
        keyObj[key.name || key] = val;
      }
    }

    return keyObj;
  }

  function extractParamsFromQuery(queryStr) {
    var obj = {},
        keyValuePairs = queryStr.split('&').
            filter(angular.identity).  // Ignore empty segments.
            map(function(keyValue) { return keyValue.replace(/\+/g, '%20').split('='); });

    angular.forEach(keyValuePairs, function(pair) {
      var key = tryDecodeURIComponent(pair[0]);
      if (angular.isDefined(key)) {
        var val = angular.isDefined(pair[1]) ? tryDecodeURIComponent(pair[1]) : true;
        if (!hasOwnProperty.call(obj, key)) {
          obj[key] = val;
        } else if (angular.isArray(obj[key])) {
          obj[key].push(val);
        } else {
          obj[key] = [obj[key], val];
        }
      }
    });

    return obj;
  }

  function tryDecodeURIComponent(value) {
    try {
      return decodeURIComponent(value);
    } catch (e) {
      // Ignore any invalid uri component
    }
  }
}

function createMockXhr() {
  return new MockXhr();
}

function MockXhr() {

  // hack for testing $http, $httpBackend
  MockXhr.$$lastInstance = this;

  this.open = function(method, url, async) {
    this.$$method = method;
    this.$$url = url;
    this.$$async = async;
    this.$$reqHeaders = {};
    this.$$respHeaders = {};
  };

  this.send = function(data) {
    this.$$data = data;
  };

  this.setRequestHeader = function(key, value) {
    this.$$reqHeaders[key] = value;
  };

  this.getResponseHeader = function(name) {
    // the lookup must be case insensitive,
    // that's why we try two quick lookups first and full scan last
    var header = this.$$respHeaders[name];
    if (header) return header;

    name = angular.$$lowercase(name);
    header = this.$$respHeaders[name];
    if (header) return header;

    header = undefined;
    angular.forEach(this.$$respHeaders, function(headerVal, headerName) {
      if (!header && angular.$$lowercase(headerName) === name) header = headerVal;
    });
    return header;
  };

  this.getAllResponseHeaders = function() {
    var lines = [];

    angular.forEach(this.$$respHeaders, function(value, key) {
      lines.push(key + ': ' + value);
    });
    return lines.join('\n');
  };

  this.abort = function() {
    if (isFunction(this.onabort)) {
      this.onabort();
    }
  };

  // This section simulates the events on a real XHR object (and the upload object)
  // When we are testing $httpBackend (inside the AngularJS project) we make partial use of this
  // but store the events directly ourselves on `$$events`, instead of going through the `addEventListener`
  this.$$events = {};
  this.addEventListener = function(name, listener) {
    if (angular.isUndefined(this.$$events[name])) this.$$events[name] = [];
    this.$$events[name].push(listener);
  };

  this.upload = {
    $$events: {},
    addEventListener: this.addEventListener
  };
}


/**
 * @ngdoc service
 * @name $timeout
 * @description
 *
 * This service is just a simple decorator for {@link ng.$timeout $timeout} service
 * that adds a "flush" and "verifyNoPendingTasks" methods.
 */

angular.mock.$TimeoutDecorator = ['$delegate', '$browser', function($delegate, $browser) {

  /**
   * @ngdoc method
   * @name $timeout#flush
   *
   * @deprecated
   * sinceVersion="1.7.3"
   *
   * This method flushes all types of tasks (not only timeouts), which is unintuitive.
   * It is recommended to use {@link ngMock.$flushPendingTasks} instead.
   *
   * @description
   *
   * Flushes the queue of pending tasks.
   *
   * _This method is essentially an alias of {@link ngMock.$flushPendingTasks}._
   *
   * <div class="alert alert-warning">
   *   For historical reasons, this method will also flush non-`$timeout` pending tasks, such as
   *   {@link $q} promises and tasks scheduled via
   *   {@link ng.$rootScope.Scope#$applyAsync $applyAsync} and
   *   {@link ng.$rootScope.Scope#$evalAsync $evalAsync}.
   * </div>
   *
   * @param {number=} delay maximum timeout amount to flush up until
   */
  $delegate.flush = function(delay) {
    // For historical reasons, `$timeout.flush()` flushes all types of pending tasks.
    // Keep the same behavior for backwards compatibility (and because it doesn't make sense to
    // selectively flush scheduled events out of order).
    $browser.defer.flush(delay);
  };

  /**
   * @ngdoc method
   * @name $timeout#verifyNoPendingTasks
   *
   * @deprecated
   * sinceVersion="1.7.3"
   *
   * This method takes all types of tasks (not only timeouts) into account, which is unintuitive.
   * It is recommended to use {@link ngMock.$verifyNoPendingTasks} instead, which additionally
   * allows checking for timeouts only (with `$verifyNoPendingTasks('$timeout')`).
   *
   * @description
   *
   * Verifies that there are no pending tasks that need to be flushed. It throws an error if there
   * are still pending tasks.
   *
   * _This method is essentially an alias of {@link ngMock.$verifyNoPendingTasks} (called with no
   * arguments)._
   *
   * <div class="alert alert-warning">
   *   <p>
   *     For historical reasons, this method will also verify non-`$timeout` pending tasks, such as
   *     pending {@link $http} requests, in-progress {@link $route} transitions, unresolved
   *     {@link $q} promises and tasks scheduled via
   *     {@link ng.$rootScope.Scope#$applyAsync $applyAsync} and
   *     {@link ng.$rootScope.Scope#$evalAsync $evalAsync}.
   *   </p>
   *   <p>
   *     It is recommended to use {@link ngMock.$verifyNoPendingTasks} instead, which additionally
   *     supports verifying a specific type of tasks. For example, you can verify there are no
   *     pending timeouts with `$verifyNoPendingTasks('$timeout')`.
   *   </p>
   * </div>
   */
  $delegate.verifyNoPendingTasks = function() {
    // For historical reasons, `$timeout.verifyNoPendingTasks()` takes all types of pending tasks
    // into account. Keep the same behavior for backwards compatibility.
    var pendingTasks = $browser.defer.getPendingTasks();

    if (pendingTasks.length) {
      var formattedTasks = $browser.defer.formatPendingTasks(pendingTasks).join('\n  ');
      var hasPendingTimeout = pendingTasks.some(function(task) { return task.type === '$timeout'; });
      var extraMessage = hasPendingTimeout ? '' : '\n\nNone of the pending tasks are timeouts. ' +
          'If you only want to verify pending timeouts, use ' +
          '`$verifyNoPendingTasks(\'$timeout\')` instead.';

      throw new Error('Deferred tasks to flush (' + pendingTasks.length + '):\n  ' +
          formattedTasks + extraMessage);
    }
  };

  return $delegate;
}];

angular.mock.$RAFDecorator = ['$delegate', function($delegate) {
  var rafFn = function(fn) {
    var index = rafFn.queue.length;
    rafFn.queue.push(fn);
    return function() {
      rafFn.queue.splice(index, 1);
    };
  };

  rafFn.queue = [];
  rafFn.supported = $delegate.supported;

  rafFn.flush = function() {
    if (rafFn.queue.length === 0) {
      throw new Error('No rAF callbacks present');
    }

    var length = rafFn.queue.length;
    for (var i = 0; i < length; i++) {
      rafFn.queue[i]();
    }

    rafFn.queue = rafFn.queue.slice(i);
  };

  return rafFn;
}];

/**
 *
 */
var originalRootElement;
angular.mock.$RootElementProvider = function() {
  this.$get = ['$injector', function($injector) {
    originalRootElement = angular.element('<div ng-app></div>').data('$injector', $injector);
    return originalRootElement;
  }];
};

/**
 * @ngdoc service
 * @name $controller
 * @description
 * A decorator for {@link ng.$controller} with additional `bindings` parameter, useful when testing
 * controllers of directives that use {@link $compile#-bindtocontroller- `bindToController`}.
 *
 * ## Example
 *
 * ```js
 *
 * // Directive definition ...
 *
 * myMod.directive('myDirective', {
 *   controller: 'MyDirectiveController',
 *   bindToController: {
 *     name: '@'
 *   }
 * });
 *
 *
 * // Controller definition ...
 *
 * myMod.controller('MyDirectiveController', ['$log', function($log) {
 *   this.log = function() {
 *     $log.info(this.name);
 *   };
 * }]);
 *
 *
 * // In a test ...
 *
 * describe('myDirectiveController', function() {
 *   describe('log()', function() {
 *     it('should write the bound name to the log', inject(function($controller, $log) {
 *       var ctrl = $controller('MyDirectiveController', { /* no locals &#42;/ }, { name: 'Clark Kent' });
 *       ctrl.log();
 *
 *       expect(ctrl.name).toEqual('Clark Kent');
 *       expect($log.info.logs).toEqual(['Clark Kent']);
 *     }));
 *   });
 * });
 *
 * ```
 *
 * @param {Function|string} constructor If called with a function then it's considered to be the
 *    controller constructor function. Otherwise it's considered to be a string which is used
 *    to retrieve the controller constructor using the following steps:
 *
 *    * check if a controller with given name is registered via `$controllerProvider`
 *    * check if evaluating the string on the current scope returns a constructor
 *
 *    The string can use the `controller as property` syntax, where the controller instance is published
 *    as the specified property on the `scope`; the `scope` must be injected into `locals` param for this
 *    to work correctly.
 *
 * @param {Object} locals Injection locals for Controller.
 * @param {Object=} bindings Properties to add to the controller instance. This is used to simulate
 *                           the `bindToController` feature and simplify certain kinds of tests.
 * @return {Object} Instance of given controller.
 */
function createControllerDecorator() {
  angular.mock.$ControllerDecorator = ['$delegate', function($delegate) {
    return function(expression, locals, later, ident) {
      if (later && typeof later === 'object') {
        var instantiate = $delegate(expression, locals, true, ident);
        var instance = instantiate();
        angular.extend(instance, later);
        return instance;
      }
      return $delegate(expression, locals, later, ident);
    };
  }];

  return angular.mock.$ControllerDecorator;
}

/**
 * @ngdoc service
 * @name $componentController
 * @description
 * A service that can be used to create instances of component controllers. Useful for unit-testing.
 *
 * Be aware that the controller will be instantiated and attached to the scope as specified in
 * the component definition object. If you do not provide a `$scope` object in the `locals` param
 * then the helper will create a new isolated scope as a child of `$rootScope`.
 *
 * If you are using `$element` or `$attrs` in the controller, make sure to provide them as `locals`.
 * The `$element` must be a jqLite-wrapped DOM element, and `$attrs` should be an object that
 * has all properties / functions that you are using in the controller. If this is getting too complex,
 * you should compile the component instead and access the component's controller via the
 * {@link angular.element#methods `controller`} function.
 *
 * See also the section on {@link guide/component#unit-testing-component-controllers unit-testing component controllers}
 * in the guide.
 *
 * @param {string} componentName the name of the component whose controller we want to instantiate
 * @param {Object} locals Injection locals for Controller.
 * @param {Object=} bindings Properties to add to the controller before invoking the constructor. This is used
 *                           to simulate the `bindToController` feature and simplify certain kinds of tests.
 * @param {string=} ident Override the property name to use when attaching the controller to the scope.
 * @return {Object} Instance of requested controller.
 */
angular.mock.$ComponentControllerProvider = ['$compileProvider',
    function ComponentControllerProvider($compileProvider) {
  this.$get = ['$controller','$injector', '$rootScope', function($controller, $injector, $rootScope) {
    return function $componentController(componentName, locals, bindings, ident) {
      // get all directives associated to the component name
      var directives = $injector.get(componentName + 'Directive');
      // look for those directives that are components
      var candidateDirectives = directives.filter(function(directiveInfo) {
        // components have controller, controllerAs and restrict:'E'
        return directiveInfo.controller && directiveInfo.controllerAs && directiveInfo.restrict === 'E';
      });
      // check if valid directives found
      if (candidateDirectives.length === 0) {
        throw new Error('No component found');
      }
      if (candidateDirectives.length > 1) {
        throw new Error('Too many components found');
      }
      // get the info of the component
      var directiveInfo = candidateDirectives[0];
      // create a scope if needed
      locals = locals || {};
      locals.$scope = locals.$scope || $rootScope.$new(true);
      return $controller(directiveInfo.controller, locals, bindings, ident || directiveInfo.controllerAs);
    };
  }];
}];


/**
 * @ngdoc module
 * @name ngMock
 * @packageName angular-mocks
 * @description
 *
 * The `ngMock` module provides support to inject and mock AngularJS services into unit tests.
 * In addition, ngMock also extends various core AngularJS services such that they can be
 * inspected and controlled in a synchronous manner within test code.
 *
 * @installation
 *
 *  First, download the file:
 *  * [Google CDN](https://developers.google.com/speed/libraries/devguide#angularjs) e.g.
 *    `"//ajax.googleapis.com/ajax/libs/angularjs/X.Y.Z/angular-mocks.js"`
 *  * [NPM](https://www.npmjs.com/) e.g. `npm install angular-mocks@X.Y.Z`
 *  * [Yarn](https://yarnpkg.com) e.g. `yarn add angular-mocks@X.Y.Z`
 *  * [Bower](http://bower.io) e.g. `bower install angular-mocks#X.Y.Z`
 *  * [code.angularjs.org](https://code.angularjs.org/) (discouraged for production use)  e.g.
 *    `"//code.angularjs.org/X.Y.Z/angular-mocks.js"`
 *
 * where X.Y.Z is the AngularJS version you are running.
 *
 * Then, configure your test runner to load `angular-mocks.js` after `angular.js`.
 * This example uses <a href="http://karma-runner.github.io/">Karma</a>:
 *
 * ```
 * config.set({
 *   files: [
 *     'build/angular.js', // and other module files you need
 *     'build/angular-mocks.js',
 *     '<path/to/application/files>',
 *     '<path/to/spec/files>'
 *   ]
 * });
 * ```
 *
 * Including the `angular-mocks.js` file automatically adds the `ngMock` module, so your tests
 *  are ready to go!
 */
angular.module('ngMock', ['ng']).provider({
  $browser: angular.mock.$BrowserProvider,
  $exceptionHandler: angular.mock.$ExceptionHandlerProvider,
  $log: angular.mock.$LogProvider,
  $interval: angular.mock.$IntervalProvider,
  $rootElement: angular.mock.$RootElementProvider,
  $componentController: angular.mock.$ComponentControllerProvider,
  $flushPendingTasks: angular.mock.$FlushPendingTasksProvider,
  $verifyNoPendingTasks: angular.mock.$VerifyNoPendingTasksProvider
}).config(['$provide', '$compileProvider', function($provide, $compileProvider) {
  $provide.decorator('$timeout', angular.mock.$TimeoutDecorator);
  $provide.decorator('$$rAF', angular.mock.$RAFDecorator);
  $provide.decorator('$rootScope', angular.mock.$RootScopeDecorator);
  $provide.decorator('$controller', createControllerDecorator($compileProvider));
  $provide.decorator('$httpBackend', angular.mock.$httpBackendDecorator);
}]).info({ angularVersion: '1.8.2' });

/**
 * @ngdoc module
 * @name ngMockE2E
 * @module ngMockE2E
 * @packageName angular-mocks
 * @description
 *
 * The `ngMockE2E` is an AngularJS module which contains mocks suitable for end-to-end testing.
 * Currently there is only one mock present in this module -
 * the {@link ngMockE2E.$httpBackend e2e $httpBackend} mock.
 */
angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
  $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator);
}]).info({ angularVersion: '1.8.2' });

/**
 * @ngdoc service
 * @name $httpBackend
 * @module ngMockE2E
 * @description
 * Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of
 * applications that use the {@link ng.$http $http service}.
 *
 * <div class="alert alert-info">
 * **Note**: For fake http backend implementation suitable for unit testing please see
 * {@link ngMock.$httpBackend unit-testing $httpBackend mock}.
 * </div>
 *
 * This implementation can be used to respond with static or dynamic responses via the `when` api
 * and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the
 * real $httpBackend for specific requests (e.g. to interact with certain remote apis or to fetch
 * templates from a webserver).
 *
 * As opposed to unit-testing, in an end-to-end testing scenario or in scenario when an application
 * is being developed with the real backend api replaced with a mock, it is often desirable for
 * certain category of requests to bypass the mock and issue a real http request (e.g. to fetch
 * templates or static files from the webserver). To configure the backend with this behavior
 * use the `passThrough` request handler of `when` instead of `respond`.
 *
 * Additionally, we don't want to manually have to flush mocked out requests like we do during unit
 * testing. For this reason the e2e $httpBackend flushes mocked out requests
 * automatically, closely simulating the behavior of the XMLHttpRequest object.
 *
 * To setup the application to run with this http backend, you have to create a module that depends
 * on the `ngMockE2E` and your application modules and defines the fake backend:
 *
 * ```js
 *   var myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']);
 *   myAppDev.run(function($httpBackend) {
 *     var phones = [{name: 'phone1'}, {name: 'phone2'}];
 *
 *     // returns the current list of phones
 *     $httpBackend.whenGET('/phones').respond(phones);
 *
 *     // adds a new phone to the phones array
 *     $httpBackend.whenPOST('/phones').respond(function(method, url, data) {
 *       var phone = angular.fromJson(data);
 *       phones.push(phone);
 *       return [200, phone, {}];
 *     });
 *     $httpBackend.whenGET(/^\/templates\//).passThrough(); // Requests for templates are handled by the real server
 *     //...
 *   });
 * ```
 *
 * Afterwards, bootstrap your app with this new module.
 *
 * @example
 * <example name="httpbackend-e2e-testing" module="myAppE2E" deps="angular-mocks.js">
 * <file name="app.js">
 *   var myApp = angular.module('myApp', []);
 *
 *   myApp.controller('MainCtrl', function MainCtrl($http) {
 *     var ctrl = this;
 *
 *     ctrl.phones = [];
 *     ctrl.newPhone = {
 *       name: ''
 *     };
 *
 *     ctrl.getPhones = function() {
 *       $http.get('/phones').then(function(response) {
 *         ctrl.phones = response.data;
 *       });
 *     };
 *
 *     ctrl.addPhone = function(phone) {
 *       $http.post('/phones', phone).then(function() {
 *         ctrl.newPhone = {name: ''};
 *         return ctrl.getPhones();
 *       });
 *     };
 *
 *     ctrl.getPhones();
 *   });
 * </file>
 * <file name="e2e.js">
 *   var myAppDev = angular.module('myAppE2E', ['myApp', 'ngMockE2E']);
 *
 *   myAppDev.run(function($httpBackend) {
 *     var phones = [{name: 'phone1'}, {name: 'phone2'}];
 *
 *     // returns the current list of phones
 *     $httpBackend.whenGET('/phones').respond(phones);
 *
 *     // adds a new phone to the phones array
 *     $httpBackend.whenPOST('/phones').respond(function(method, url, data) {
 *       var phone = angular.fromJson(data);
 *       phones.push(phone);
 *       return [200, phone, {}];
 *     });
 *   });
 * </file>
 * <file name="index.html">
 *   <div ng-controller="MainCtrl as $ctrl">
 *   <form name="newPhoneForm" ng-submit="$ctrl.addPhone($ctrl.newPhone)">
 *     <input type="text" ng-model="$ctrl.newPhone.name">
 *     <input type="submit" value="Add Phone">
 *   </form>
 *   <h1>Phones</h1>
 *   <ul>
 *     <li ng-repeat="phone in $ctrl.phones">{{phone.name}}</li>
 *   </ul>
 *   </div>
 * </file>
 * </example>
 *
 *
 */

/**
 * @ngdoc method
 * @name $httpBackend#when
 * @module ngMockE2E
 * @description
 * Creates a new backend definition.
 *
 * @param {string} method HTTP method.
 * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
 *   and returns true if the url matches the current definition.
 * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
 *   data string and returns true if the data is as expected.
 * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
 *   object and returns true if the headers match the current definition.
 * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
 *   {@link ngMock.$httpBackend $httpBackend mock}.
 * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
 *   control how a matched request is handled. You can save this object for later use and invoke
 *   `respond` or `passThrough` again in order to change how a matched request is handled.
 *
 *  - respond –
 *    ```
 *    { function([status,] data[, headers, statusText])
 *    | function(function(method, url, data, headers, params)}
 *    ```
 *    – The respond method takes a set of static data to be returned or a function that can return
 *    an array containing response status (number), response data (Array|Object|string), response
 *    headers (Object), and the text for the status (string).
 *  - passThrough – `{function()}` – Any request matching a backend definition with
 *    `passThrough` handler will be passed through to the real backend (an XHR request will be made
 *    to the server.)
 *  - Both methods return the `requestHandler` object for possible overrides.
 */

/**
 * @ngdoc method
 * @name $httpBackend#whenGET
 * @module ngMockE2E
 * @description
 * Creates a new backend definition for GET requests. For more info see `when()`.
 *
 * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
 *   and returns true if the url matches the current definition.
 * @param {(Object|function(Object))=} headers HTTP headers.
 * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
 *   {@link ngMock.$httpBackend $httpBackend mock}.
 * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
 *   control how a matched request is handled. You can save this object for later use and invoke
 *   `respond` or `passThrough` again in order to change how a matched request is handled.
 */

/**
 * @ngdoc method
 * @name $httpBackend#whenHEAD
 * @module ngMockE2E
 * @description
 * Creates a new backend definition for HEAD requests. For more info see `when()`.
 *
 * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
 *   and returns true if the url matches the current definition.
 * @param {(Object|function(Object))=} headers HTTP headers.
 * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
 *   {@link ngMock.$httpBackend $httpBackend mock}.
 * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
 *   control how a matched request is handled. You can save this object for later use and invoke
 *   `respond` or `passThrough` again in order to change how a matched request is handled.
 */

/**
 * @ngdoc method
 * @name $httpBackend#whenDELETE
 * @module ngMockE2E
 * @description
 * Creates a new backend definition for DELETE requests. For more info see `when()`.
 *
 * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
 *   and returns true if the url matches the current definition.
 * @param {(Object|function(Object))=} headers HTTP headers.
 * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
 *   {@link ngMock.$httpBackend $httpBackend mock}.
 * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
 *   control how a matched request is handled. You can save this object for later use and invoke
 *   `respond` or `passThrough` again in order to change how a matched request is handled.
 */

/**
 * @ngdoc method
 * @name $httpBackend#whenPOST
 * @module ngMockE2E
 * @description
 * Creates a new backend definition for POST requests. For more info see `when()`.
 *
 * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
 *   and returns true if the url matches the current definition.
 * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
 *   data string and returns true if the data is as expected.
 * @param {(Object|function(Object))=} headers HTTP headers.
 * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
 *   {@link ngMock.$httpBackend $httpBackend mock}.
 * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
 *   control how a matched request is handled. You can save this object for later use and invoke
 *   `respond` or `passThrough` again in order to change how a matched request is handled.
 */

/**
 * @ngdoc method
 * @name $httpBackend#whenPUT
 * @module ngMockE2E
 * @description
 * Creates a new backend definition for PUT requests.  For more info see `when()`.
 *
 * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
 *   and returns true if the url matches the current definition.
 * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
 *   data string and returns true if the data is as expected.
 * @param {(Object|function(Object))=} headers HTTP headers.
 * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
 *   {@link ngMock.$httpBackend $httpBackend mock}.
 * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
 *   control how a matched request is handled. You can save this object for later use and invoke
 *   `respond` or `passThrough` again in order to change how a matched request is handled.
 */

/**
 * @ngdoc method
 * @name $httpBackend#whenPATCH
 * @module ngMockE2E
 * @description
 * Creates a new backend definition for PATCH requests.  For more info see `when()`.
 *
 * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
 *   and returns true if the url matches the current definition.
 * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
 *   data string and returns true if the data is as expected.
 * @param {(Object|function(Object))=} headers HTTP headers.
 * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
 *   {@link ngMock.$httpBackend $httpBackend mock}.
 * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
 *   control how a matched request is handled. You can save this object for later use and invoke
 *   `respond` or `passThrough` again in order to change how a matched request is handled.
 */

/**
 * @ngdoc method
 * @name $httpBackend#whenJSONP
 * @module ngMockE2E
 * @description
 * Creates a new backend definition for JSONP requests. For more info see `when()`.
 *
 * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
 *   and returns true if the url matches the current definition.
 * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
 *   {@link ngMock.$httpBackend $httpBackend mock}.
 * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
 *   control how a matched request is handled. You can save this object for later use and invoke
 *   `respond` or `passThrough` again in order to change how a matched request is handled.
 */
/**
 * @ngdoc method
 * @name $httpBackend#whenRoute
 * @module ngMockE2E
 * @description
 * Creates a new backend definition that compares only with the requested route.
 *
 * @param {string} method HTTP method.
 * @param {string} url HTTP url string that supports colon param matching.
 * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
 *   control how a matched request is handled. You can save this object for later use and invoke
 *   `respond` or `passThrough` again in order to change how a matched request is handled.
 */
/**
 * @ngdoc method
 * @name  $httpBackend#matchLatestDefinitionEnabled
 * @module ngMockE2E
 * @description
 * This method can be used to change which mocked responses `$httpBackend` returns, when defining
 * them with {@link ngMock.$httpBackend#when $httpBackend.when()} (and shortcut methods).
 * By default, `$httpBackend` returns the first definition that matches. When setting
 * `$http.matchLatestDefinitionEnabled(true)`, it will use the last response that matches, i.e. the
 * one that was added last.
 *
 * ```js
 * hb.when('GET', '/url1').respond(200, 'content', {});
 * hb.when('GET', '/url1').respond(201, 'another', {});
 * hb('GET', '/url1'); // receives "content"
 *
 * $http.matchLatestDefinitionEnabled(true)
 * hb('GET', '/url1'); // receives "another"
 *
 * hb.when('GET', '/url1').respond(201, 'onemore', {});
 * hb('GET', '/url1'); // receives "onemore"
 * ```
 *
 * This is useful if a you have a default response that is overriden inside specific tests.
 *
 * Note that different from config methods on providers, `matchLatestDefinitionEnabled()` can be changed
 * even when the application is already running.
 *
 * @param  {Boolean=} value value to set, either `true` or `false`. Default is `false`.
 *                          If omitted, it will return the current value.
 * @return {$httpBackend|Boolean} self when used as a setter, and the current value when used
 *                                as a getter
 */
angular.mock.e2e = {};
angular.mock.e2e.$httpBackendDecorator =
  ['$rootScope', '$timeout', '$delegate', '$browser', createHttpBackendMock];


/**
 * @ngdoc type
 * @name $rootScope.Scope
 * @module ngMock
 * @description
 * {@link ng.$rootScope.Scope Scope} type decorated with helper methods useful for testing. These
 * methods are automatically available on any {@link ng.$rootScope.Scope Scope} instance when
 * `ngMock` module is loaded.
 *
 * In addition to all the regular `Scope` methods, the following helper methods are available:
 */
angular.mock.$RootScopeDecorator = ['$delegate', function($delegate) {

  var $rootScopePrototype = Object.getPrototypeOf($delegate);

  $rootScopePrototype.$countChildScopes = countChildScopes;
  $rootScopePrototype.$countWatchers = countWatchers;

  return $delegate;

  // ------------------------------------------------------------------------------------------ //

  /**
   * @ngdoc method
   * @name $rootScope.Scope#$countChildScopes
   * @module ngMock
   * @this $rootScope.Scope
   * @description
   * Counts all the direct and indirect child scopes of the current scope.
   *
   * The current scope is excluded from the count. The count includes all isolate child scopes.
   *
   * @returns {number} Total number of child scopes.
   */
  function countChildScopes() {
    var count = 0; // exclude the current scope
    var pendingChildHeads = [this.$$childHead];
    var currentScope;

    while (pendingChildHeads.length) {
      currentScope = pendingChildHeads.shift();

      while (currentScope) {
        count += 1;
        pendingChildHeads.push(currentScope.$$childHead);
        currentScope = currentScope.$$nextSibling;
      }
    }

    return count;
  }


  /**
   * @ngdoc method
   * @name $rootScope.Scope#$countWatchers
   * @this $rootScope.Scope
   * @module ngMock
   * @description
   * Counts all the watchers of direct and indirect child scopes of the current scope.
   *
   * The watchers of the current scope are included in the count and so are all the watchers of
   * isolate child scopes.
   *
   * @returns {number} Total number of watchers.
   */
  function countWatchers() {
    var count = this.$$watchers ? this.$$watchers.length : 0; // include the current scope
    var pendingChildHeads = [this.$$childHead];
    var currentScope;

    while (pendingChildHeads.length) {
      currentScope = pendingChildHeads.shift();

      while (currentScope) {
        count += currentScope.$$watchers ? currentScope.$$watchers.length : 0;
        pendingChildHeads.push(currentScope.$$childHead);
        currentScope = currentScope.$$nextSibling;
      }
    }

    return count;
  }
}];


(function(jasmineOrMocha) {

  if (!jasmineOrMocha) {
    return;
  }

  var currentSpec = null,
      injectorState = new InjectorState(),
      annotatedFunctions = [],
      wasInjectorCreated = function() {
        return !!currentSpec;
      };

  angular.mock.$$annotate = angular.injector.$$annotate;
  angular.injector.$$annotate = function(fn) {
    if (typeof fn === 'function' && !fn.$inject) {
      annotatedFunctions.push(fn);
    }
    return angular.mock.$$annotate.apply(this, arguments);
  };

  /**
   * @ngdoc function
   * @name angular.mock.module
   * @description
   *
   * *NOTE*: This function is also published on window for easy access.<br>
   * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha
   *
   * This function registers a module configuration code. It collects the configuration information
   * which will be used when the injector is created by {@link angular.mock.inject inject}.
   *
   * See {@link angular.mock.inject inject} for usage example
   *
   * @param {...(string|Function|Object)} fns any number of modules which are represented as string
   *        aliases or as anonymous module initialization functions. The modules are used to
   *        configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an
   *        object literal is passed each key-value pair will be registered on the module via
   *        {@link auto.$provide $provide}.value, the key being the string name (or token) to associate
   *        with the value on the injector.
   */
  var module = window.module = angular.mock.module = function() {
    var moduleFns = Array.prototype.slice.call(arguments, 0);
    return wasInjectorCreated() ? workFn() : workFn;
    /////////////////////
    function workFn() {
      if (currentSpec.$injector) {
        throw new Error('Injector already created, can not register a module!');
      } else {
        var fn, modules = currentSpec.$modules || (currentSpec.$modules = []);
        angular.forEach(moduleFns, function(module) {
          if (angular.isObject(module) && !angular.isArray(module)) {
            fn = ['$provide', function($provide) {
              angular.forEach(module, function(value, key) {
                $provide.value(key, value);
              });
            }];
          } else {
            fn = module;
          }
          if (currentSpec.$providerInjector) {
            currentSpec.$providerInjector.invoke(fn);
          } else {
            modules.push(fn);
          }
        });
      }
    }
  };

  module.$$beforeAllHook = (window.before || window.beforeAll);
  module.$$afterAllHook = (window.after || window.afterAll);

  // purely for testing ngMock itself
  module.$$currentSpec = function(to) {
    if (arguments.length === 0) return to;
    currentSpec = to;
  };

  /**
   * @ngdoc function
   * @name angular.mock.module.sharedInjector
   * @description
   *
   * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha
   *
   * This function ensures a single injector will be used for all tests in a given describe context.
   * This contrasts with the default behaviour where a new injector is created per test case.
   *
   * Use sharedInjector when you want to take advantage of Jasmine's `beforeAll()`, or mocha's
   * `before()` methods. Call `module.sharedInjector()` before you setup any other hooks that
   * will create (i.e call `module()`) or use (i.e call `inject()`) the injector.
   *
   * You cannot call `sharedInjector()` from within a context already using `sharedInjector()`.
   *
   * ## Example
   *
   * Typically beforeAll is used to make many assertions about a single operation. This can
   * cut down test run-time as the test setup doesn't need to be re-run, and enabling focussed
   * tests each with a single assertion.
   *
   * ```js
   * describe("Deep Thought", function() {
   *
   *   module.sharedInjector();
   *
   *   beforeAll(module("UltimateQuestion"));
   *
   *   beforeAll(inject(function(DeepThought) {
   *     expect(DeepThought.answer).toBeUndefined();
   *     DeepThought.generateAnswer();
   *   }));
   *
   *   it("has calculated the answer correctly", inject(function(DeepThought) {
   *     // Because of sharedInjector, we have access to the instance of the DeepThought service
   *     // that was provided to the beforeAll() hook. Therefore we can test the generated answer
   *     expect(DeepThought.answer).toBe(42);
   *   }));
   *
   *   it("has calculated the answer within the expected time", inject(function(DeepThought) {
   *     expect(DeepThought.runTimeMillennia).toBeLessThan(8000);
   *   }));
   *
   *   it("has double checked the answer", inject(function(DeepThought) {
   *     expect(DeepThought.absolutelySureItIsTheRightAnswer).toBe(true);
   *   }));
   *
   * });
   *
   * ```
   */
  module.sharedInjector = function() {
    if (!(module.$$beforeAllHook && module.$$afterAllHook)) {
      throw Error('sharedInjector() cannot be used unless your test runner defines beforeAll/afterAll');
    }

    var initialized = false;

    module.$$beforeAllHook(/** @this */ function() {
      if (injectorState.shared) {
        injectorState.sharedError = Error('sharedInjector() cannot be called inside a context that has already called sharedInjector()');
        throw injectorState.sharedError;
      }
      initialized = true;
      currentSpec = this;
      injectorState.shared = true;
    });

    module.$$afterAllHook(function() {
      if (initialized) {
        injectorState = new InjectorState();
        module.$$cleanup();
      } else {
        injectorState.sharedError = null;
      }
    });
  };

  module.$$beforeEach = function() {
    if (injectorState.shared && currentSpec && currentSpec !== this) {
      var state = currentSpec;
      currentSpec = this;
      angular.forEach(['$injector','$modules','$providerInjector', '$injectorStrict'], function(k) {
        currentSpec[k] = state[k];
        state[k] = null;
      });
    } else {
      currentSpec = this;
      originalRootElement = null;
      annotatedFunctions = [];
    }
  };

  module.$$afterEach = function() {
    if (injectorState.cleanupAfterEach()) {
      module.$$cleanup();
    }
  };

  module.$$cleanup = function() {
    var injector = currentSpec.$injector;

    annotatedFunctions.forEach(function(fn) {
      delete fn.$inject;
    });

    currentSpec.$injector = null;
    currentSpec.$modules = null;
    currentSpec.$providerInjector = null;
    currentSpec = null;

    if (injector) {
      // Ensure `$rootElement` is instantiated, before checking `originalRootElement`
      var $rootElement = injector.get('$rootElement');
      var rootNode = $rootElement && $rootElement[0];
      var cleanUpNodes = !originalRootElement ? [] : [originalRootElement[0]];
      if (rootNode && (!originalRootElement || rootNode !== originalRootElement[0])) {
        cleanUpNodes.push(rootNode);
      }
      angular.element.cleanData(cleanUpNodes);

      // Ensure `$destroy()` is available, before calling it
      // (a mocked `$rootScope` might not implement it (or not even be an object at all))
      var $rootScope = injector.get('$rootScope');
      if ($rootScope && $rootScope.$destroy) $rootScope.$destroy();
    }

    // clean up jquery's fragment cache
    angular.forEach(angular.element.fragments, function(val, key) {
      delete angular.element.fragments[key];
    });

    MockXhr.$$lastInstance = null;

    angular.forEach(angular.callbacks, function(val, key) {
      delete angular.callbacks[key];
    });
    angular.callbacks.$$counter = 0;
  };

  (window.beforeEach || window.setup)(module.$$beforeEach);
  (window.afterEach || window.teardown)(module.$$afterEach);

  /**
   * @ngdoc function
   * @name angular.mock.inject
   * @description
   *
   * *NOTE*: This function is also published on window for easy access.<br>
   * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha
   *
   * The inject function wraps a function into an injectable function. The inject() creates new
   * instance of {@link auto.$injector $injector} per test, which is then used for
   * resolving references.
   *
   *
   * ## Resolving References (Underscore Wrapping)
   * Often, we would like to inject a reference once, in a `beforeEach()` block and reuse this
   * in multiple `it()` clauses. To be able to do this we must assign the reference to a variable
   * that is declared in the scope of the `describe()` block. Since we would, most likely, want
   * the variable to have the same name of the reference we have a problem, since the parameter
   * to the `inject()` function would hide the outer variable.
   *
   * To help with this, the injected parameters can, optionally, be enclosed with underscores.
   * These are ignored by the injector when the reference name is resolved.
   *
   * For example, the parameter `_myService_` would be resolved as the reference `myService`.
   * Since it is available in the function body as `_myService_`, we can then assign it to a variable
   * defined in an outer scope.
   *
   * ```
   * // Defined out reference variable outside
   * var myService;
   *
   * // Wrap the parameter in underscores
   * beforeEach( inject( function(_myService_){
   *   myService = _myService_;
   * }));
   *
   * // Use myService in a series of tests.
   * it('makes use of myService', function() {
   *   myService.doStuff();
   * });
   *
   * ```
   *
   * See also {@link angular.mock.module angular.mock.module}
   *
   * ## Example
   * Example of what a typical jasmine tests looks like with the inject method.
   * ```js
   *
   *   angular.module('myApplicationModule', [])
   *       .value('mode', 'app')
   *       .value('version', 'v1.0.1');
   *
   *
   *   describe('MyApp', function() {
   *
   *     // You need to load modules that you want to test,
   *     // it loads only the "ng" module by default.
   *     beforeEach(module('myApplicationModule'));
   *
   *
   *     // inject() is used to inject arguments of all given functions
   *     it('should provide a version', inject(function(mode, version) {
   *       expect(version).toEqual('v1.0.1');
   *       expect(mode).toEqual('app');
   *     }));
   *
   *
   *     // The inject and module method can also be used inside of the it or beforeEach
   *     it('should override a version and test the new version is injected', function() {
   *       // module() takes functions or strings (module aliases)
   *       module(function($provide) {
   *         $provide.value('version', 'overridden'); // override version here
   *       });
   *
   *       inject(function(version) {
   *         expect(version).toEqual('overridden');
   *       });
   *     });
   *   });
   *
   * ```
   *
   * @param {...Function} fns any number of functions which will be injected using the injector.
   */



  var ErrorAddingDeclarationLocationStack = function ErrorAddingDeclarationLocationStack(e, errorForStack) {
    this.message = e.message;
    this.name = e.name;
    if (e.line) this.line = e.line;
    if (e.sourceId) this.sourceId = e.sourceId;
    if (e.stack && errorForStack)
      this.stack = e.stack + '\n' + errorForStack.stack;
    if (e.stackArray) this.stackArray = e.stackArray;
  };
  ErrorAddingDeclarationLocationStack.prototype = Error.prototype;

  window.inject = angular.mock.inject = function() {
    var blockFns = Array.prototype.slice.call(arguments, 0);
    var errorForStack = new Error('Declaration Location');
    // IE10+ and PhanthomJS do not set stack trace information, until the error is thrown
    if (!errorForStack.stack) {
      try {
        throw errorForStack;
      } catch (e) { /* empty */ }
    }
    return wasInjectorCreated() ? WorkFn.call(currentSpec) : WorkFn;
    /////////////////////
    function WorkFn() {
      var modules = currentSpec.$modules || [];
      var strictDi = !!currentSpec.$injectorStrict;
      modules.unshift(['$injector', function($injector) {
        currentSpec.$providerInjector = $injector;
      }]);
      modules.unshift('ngMock');
      modules.unshift('ng');
      var injector = currentSpec.$injector;
      if (!injector) {
        if (strictDi) {
          // If strictDi is enabled, annotate the providerInjector blocks
          angular.forEach(modules, function(moduleFn) {
            if (typeof moduleFn === 'function') {
              angular.injector.$$annotate(moduleFn);
            }
          });
        }
        injector = currentSpec.$injector = angular.injector(modules, strictDi);
        currentSpec.$injectorStrict = strictDi;
      }
      for (var i = 0, ii = blockFns.length; i < ii; i++) {
        if (currentSpec.$injectorStrict) {
          // If the injector is strict / strictDi, and the spec wants to inject using automatic
          // annotation, then annotate the function here.
          injector.annotate(blockFns[i]);
        }
        try {
          injector.invoke(blockFns[i] || angular.noop, this);
        } catch (e) {
          if (e.stack && errorForStack) {
            throw new ErrorAddingDeclarationLocationStack(e, errorForStack);
          }
          throw e;
        } finally {
          errorForStack = null;
        }
      }
    }
  };


  angular.mock.inject.strictDi = function(value) {
    value = arguments.length ? !!value : true;
    return wasInjectorCreated() ? workFn() : workFn;

    function workFn() {
      if (value !== currentSpec.$injectorStrict) {
        if (currentSpec.$injector) {
          throw new Error('Injector already created, can not modify strict annotations');
        } else {
          currentSpec.$injectorStrict = value;
        }
      }
    }
  };

  function InjectorState() {
    this.shared = false;
    this.sharedError = null;

    this.cleanupAfterEach = function() {
      return !this.shared || this.sharedError;
    };
  }
})(window.jasmine || window.mocha);

'use strict';

(function() {
  /**
   * @ngdoc function
   * @name browserTrigger
   * @description
   *
   * This is a global (window) function that is only available when the {@link ngMock} module is
   * included.
   *
   * It can be used to trigger a native browser event on an element, which is useful for unit testing.
   *
   *
   * @param {Object} element Either a wrapped jQuery/jqLite node or a DOMElement
   * @param {string=} eventType Optional event type. If none is specified, the function tries
   *                            to determine the right event type for the element, e.g. `change` for
   *                            `input[text]`.
   * @param {Object=} eventData An optional object which contains additional event data that is used
   *                            when creating the event:
   *
   *  - `bubbles`: [Event.bubbles](https://developer.mozilla.org/docs/Web/API/Event/bubbles).
   *    Not applicable to all events.
   *
   *  - `cancelable`: [Event.cancelable](https://developer.mozilla.org/docs/Web/API/Event/cancelable).
   *    Not applicable to all events.
   *
   *  - `charcode`: [charCode](https://developer.mozilla.org/docs/Web/API/KeyboardEvent/charcode)
   *    for keyboard events (keydown, keypress, and keyup).
   *
   *  - `data`: [data](https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent/data) for
   *    [CompositionEvents](https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent).
   *
   *  - `elapsedTime`: the elapsedTime for
   *    [TransitionEvent](https://developer.mozilla.org/docs/Web/API/TransitionEvent)
   *    and [AnimationEvent](https://developer.mozilla.org/docs/Web/API/AnimationEvent).
   *
   *  - `keycode`: [keyCode](https://developer.mozilla.org/docs/Web/API/KeyboardEvent/keycode)
   *    for keyboard events (keydown, keypress, and keyup).
   *
   *  - `keys`: an array of possible modifier keys (ctrl, alt, shift, meta) for
   *    [MouseEvent](https://developer.mozilla.org/docs/Web/API/MouseEvent) and
   *    keyboard events (keydown, keypress, and keyup).
   *
   *  - `relatedTarget`: the
   *    [relatedTarget](https://developer.mozilla.org/docs/Web/API/MouseEvent/relatedTarget)
   *    for [MouseEvent](https://developer.mozilla.org/docs/Web/API/MouseEvent).
   *
   *  - `which`: [which](https://developer.mozilla.org/docs/Web/API/KeyboardEvent/which)
   *    for keyboard events (keydown, keypress, and keyup).
   *
   *  - `x`: x-coordinates for [MouseEvent](https://developer.mozilla.org/docs/Web/API/MouseEvent)
   *    and [TouchEvent](https://developer.mozilla.org/docs/Web/API/TouchEvent).
   *
   *  - `y`: y-coordinates for [MouseEvent](https://developer.mozilla.org/docs/Web/API/MouseEvent)
   *    and [TouchEvent](https://developer.mozilla.org/docs/Web/API/TouchEvent).
   *
   */
  window.browserTrigger = function browserTrigger(element, eventType, eventData) {
    if (element && !element.nodeName) element = element[0];
    if (!element) return;

    eventData = eventData || {};
    var relatedTarget = eventData.relatedTarget || element;
    var keys = eventData.keys;
    var x = eventData.x;
    var y = eventData.y;

    var inputType = (element.type) ? element.type.toLowerCase() : null,
        nodeName = element.nodeName.toLowerCase();
    if (!eventType) {
      eventType = {
        'text':            'change',
        'textarea':        'change',
        'hidden':          'change',
        'password':        'change',
        'button':          'click',
        'submit':          'click',
        'reset':           'click',
        'image':           'click',
        'checkbox':        'click',
        'radio':           'click',
        'select-one':      'change',
        'select-multiple': 'change',
        '_default_':       'click'
      }[inputType || '_default_'];
    }

    if (nodeName === 'option') {
      element.parentNode.value = element.value;
      element = element.parentNode;
      eventType = 'change';
    }

    keys = keys || [];
    function pressed(key) {
      return keys.indexOf(key) !== -1;
    }

    var evnt;
    if (/transitionend/.test(eventType)) {
      if (window.WebKitTransitionEvent) {
        evnt = new window.WebKitTransitionEvent(eventType, eventData);
        evnt.initEvent(eventType, eventData.bubbles, true);
      } else {
        try {
          evnt = new window.TransitionEvent(eventType, eventData);
        } catch (e) {
          evnt = window.document.createEvent('TransitionEvent');
          evnt.initTransitionEvent(eventType, eventData.bubbles, null, null, eventData.elapsedTime || 0);
        }
      }
    } else if (/animationend/.test(eventType)) {
      if (window.WebKitAnimationEvent) {
        evnt = new window.WebKitAnimationEvent(eventType, eventData);
        evnt.initEvent(eventType, eventData.bubbles, true);
      } else {
        try {
          evnt = new window.AnimationEvent(eventType, eventData);
        } catch (e) {
          evnt = window.document.createEvent('AnimationEvent');
          evnt.initAnimationEvent(eventType, eventData.bubbles, null, null, eventData.elapsedTime || 0);
        }
      }
    } else if (/touch/.test(eventType) && supportsTouchEvents()) {
      evnt = createTouchEvent(element, eventType, x, y);
    } else if (/key/.test(eventType)) {
      evnt = window.document.createEvent('Events');
      evnt.initEvent(eventType, eventData.bubbles, eventData.cancelable);
      evnt.view = window;
      evnt.ctrlKey = pressed('ctrl');
      evnt.altKey = pressed('alt');
      evnt.shiftKey = pressed('shift');
      evnt.metaKey = pressed('meta');
      evnt.keyCode = eventData.keyCode;
      evnt.charCode = eventData.charCode;
      evnt.which = eventData.which;
    } else if (/composition/.test(eventType)) {
      try {
        evnt = new window.CompositionEvent(eventType, {
          data: eventData.data
        });
      } catch (e) {
        // Support: IE9+
        evnt = window.document.createEvent('CompositionEvent', {});
        evnt.initCompositionEvent(
          eventType,
          eventData.bubbles,
          eventData.cancelable,
          window,
          eventData.data,
          null
        );
      }

    } else {
      evnt = window.document.createEvent('MouseEvents');
      x = x || 0;
      y = y || 0;
      evnt.initMouseEvent(eventType, true, true, window, 0, x, y, x, y, pressed('ctrl'),
          pressed('alt'), pressed('shift'), pressed('meta'), 0, relatedTarget);
    }

    /* we're unable to change the timeStamp value directly so this
     * is only here to allow for testing where the timeStamp value is
     * read */
    evnt.$manualTimeStamp = eventData.timeStamp;

    if (!evnt) return;

    if (!eventData.bubbles || supportsEventBubblingInDetachedTree() || isAttachedToDocument(element)) {
      return element.dispatchEvent(evnt);
    } else {
      triggerForPath(element, evnt);
    }
  };

  function supportsTouchEvents() {
    if ('_cached' in supportsTouchEvents) {
      return supportsTouchEvents._cached;
    }
    if (!window.document.createTouch || !window.document.createTouchList) {
      supportsTouchEvents._cached = false;
      return false;
    }
    try {
      window.document.createEvent('TouchEvent');
    } catch (e) {
      supportsTouchEvents._cached = false;
      return false;
    }
    supportsTouchEvents._cached = true;
    return true;
  }

  function createTouchEvent(element, eventType, x, y) {
    var evnt = new window.Event(eventType);
    x = x || 0;
    y = y || 0;

    var touch = window.document.createTouch(window, element, Date.now(), x, y, x, y);
    var touches = window.document.createTouchList(touch);

    evnt.touches = touches;

    return evnt;
  }

  function supportsEventBubblingInDetachedTree() {
    if ('_cached' in supportsEventBubblingInDetachedTree) {
      return supportsEventBubblingInDetachedTree._cached;
    }
    supportsEventBubblingInDetachedTree._cached = false;
    var doc = window.document;
    if (doc) {
      var parent = doc.createElement('div'),
          child = parent.cloneNode();
      parent.appendChild(child);
      parent.addEventListener('e', function() {
        supportsEventBubblingInDetachedTree._cached = true;
      });
      var evnt = window.document.createEvent('Events');
      evnt.initEvent('e', true, true);
      child.dispatchEvent(evnt);
    }
    return supportsEventBubblingInDetachedTree._cached;
  }

  function triggerForPath(element, evnt) {
    var stop = false;

    var _stopPropagation = evnt.stopPropagation;
    evnt.stopPropagation = function() {
      stop = true;
      _stopPropagation.apply(evnt, arguments);
    };
    patchEventTargetForBubbling(evnt, element);
    do {
      element.dispatchEvent(evnt);
      // eslint-disable-next-line no-unmodified-loop-condition
    } while (!stop && (element = element.parentNode));
  }

  function patchEventTargetForBubbling(event, target) {
    event._target = target;
    Object.defineProperty(event, 'target', {get: function() { return this._target;}});
  }

  function isAttachedToDocument(element) {
    while ((element = element.parentNode)) {
        if (element === window) {
            return true;
        }
    }
    return false;
  }
})();


})(window, window.angular);
;
/*
 AngularJS v1.8.3
 (c) 2010-2020 Google LLC. http://angularjs.org
 License: MIT
*/
(function (s, e) {
    'use strict'; function O(e) { var g = []; B(g, D).chars(e); return g.join("") } var C = e.$$minErr("$sanitize"), E, g, F, G, H, q, D, I, J, B; e.module("ngSanitize", []).provider("$sanitize", function () {
        function h(a, d) { return A(a.split(","), d) } function A(a, d) { var c = {}, b; for (b = 0; b < a.length; b++)c[d ? q(a[b]) : a[b]] = !0; return c } function t(a, d) { d && d.length && g(a, A(d)) } function P(a) { for (var d = {}, c = 0, b = a.length; c < b; c++) { var k = a[c]; d[k.name] = k.value } return d } function K(a) {
            return a.replace(/&/g, "&amp;").replace(Q, function (a) {
                var c =
                    a.charCodeAt(0); a = a.charCodeAt(1); return "&#" + (1024 * (c - 55296) + (a - 56320) + 65536) + ";"
            }).replace(u, function (a) { return "&#" + a.charCodeAt(0) + ";" }).replace(/</g, "&lt;").replace(/>/g, "&gt;")
        } function z(a) { for (; a;) { if (a.nodeType === s.Node.ELEMENT_NODE) for (var d = a.attributes, c = 0, b = d.length; c < b; c++) { var k = d[c], f = k.name.toLowerCase(); if ("xmlns:ns1" === f || 0 === f.lastIndexOf("ns1:", 0)) a.removeAttributeNode(k), c--, b-- } (d = a.firstChild) && z(d); a = v("nextSibling", a) } } function v(a, d) {
            var c = d[a]; if (c && I.call(d, c)) throw C("elclob",
                d.outerHTML || d.outerText); return c
        } var y = !1, f = !1; this.$get = ["$$sanitizeUri", function (a) { y = !0; f && g(m, l); return function (d) { var c = []; J(d, B(c, function (b, c) { return !/^unsafe:/.test(a(b, c)) })); return c.join("") } }]; this.enableSvg = function (a) { return H(a) ? (f = a, this) : f }; this.addValidElements = function (a) { y || (G(a) && (a = { htmlElements: a }), t(l, a.svgElements), t(r, a.htmlVoidElements), t(m, a.htmlVoidElements), t(m, a.htmlElements)); return this }; this.addValidAttrs = function (a) { y || g(L, A(a, !0)); return this }; E = e.bind; g = e.extend;
        F = e.forEach; G = e.isArray; H = e.isDefined; q = e.$$lowercase; D = e.noop; J = function (a, d) {
            null === a || void 0 === a ? a = "" : "string" !== typeof a && (a = "" + a); var c = M(a); if (!c) return ""; var b = 5; do { if (0 === b) throw C("uinput"); b--; a = c.innerHTML; c = M(a) } while (a !== c.innerHTML); for (b = c.firstChild; b;) {
                switch (b.nodeType) { case 1: d.start(b.nodeName.toLowerCase(), P(b.attributes)); break; case 3: d.chars(b.textContent) }var k; if (!(k = b.firstChild) && (1 === b.nodeType && d.end(b.nodeName.toLowerCase()), k = v("nextSibling", b), !k)) for (; null == k;) {
                    b =
                    v("parentNode", b); if (b === c) break; k = v("nextSibling", b); 1 === b.nodeType && d.end(b.nodeName.toLowerCase())
                } b = k
            } for (; b = c.firstChild;)c.removeChild(b)
        }; B = function (a, d) {
            var c = !1, b = E(a, a.push); return {
                start: function (a, f) { a = q(a); !c && w[a] && (c = a); c || !0 !== m[a] || (b("<"), b(a), F(f, function (c, f) { var e = q(f), h = "img" === a && "src" === e || "background" === e; !0 !== L[e] || !0 === N[e] && !d(c, h) || (b(" "), b(f), b('="'), b(K(c)), b('"')) }), b(">")) }, end: function (a) { a = q(a); c || !0 !== m[a] || !0 === r[a] || (b("</"), b(a), b(">")); a == c && (c = !1) }, chars: function (a) {
                    c ||
                    b(K(a))
                }
            }
        }; I = s.Node.prototype.contains || function (a) { return !!(this.compareDocumentPosition(a) & 16) }; var Q = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g, u = /([^#-~ |!])/g, r = h("area,br,col,hr,img,wbr"), x = h("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"), p = h("rp,rt"), n = g({}, p, x), x = g({}, x, h("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul")), p = g({}, p, h("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),
            l = h("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,stop,svg,switch,text,title,tspan"), w = h("script,style"), m = g({}, r, x, p, n), N = h("background,cite,href,longdesc,src,xlink:href,xml:base"), n = h("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,valign,value,vspace,width"),
            p = h("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan",
                !0), L = g({}, N, p, n), M = function (a, d) { function c(b) { b = "<remove></remove>" + b; try { var c = (new a.DOMParser).parseFromString(b, "text/html").body; c.firstChild.remove(); return c } catch (d) { } } var b; try { b = !!c("") } catch (f) { b = !1 } if (b) return c; if (!d || !d.implementation) throw C("noinert"); b = d.implementation.createHTMLDocument("inert"); var e = (b.documentElement || b.getDocumentElement()).querySelector("body"); return function (a) { e.innerHTML = a; d.documentMode && z(e); return e } }(s, s.document)
    }).info({ angularVersion: "1.8.3" });
    e.module("ngSanitize").filter("linky", ["$sanitize", function (h) {
        var g = /((s?ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i, t = /^mailto:/i, q = e.$$minErr("linky"), s = e.isDefined, z = e.isFunction, v = e.isObject, y = e.isString; return function (f, e, u) {
            function r(e) { e && l.push(O(e)) } function x(f, h) { var g, a = p(f); l.push("<a "); for (g in a) l.push(g + '="' + a[g] + '" '); !s(e) || "target" in a || l.push('target="', e, '" '); l.push('href="', f.replace(/"/g, "&quot;"), '">'); r(h); l.push("</a>") } if (null ==
                f || "" === f) return f; if (!y(f)) throw q("notstring", f); for (var p = z(u) ? u : v(u) ? function () { return u } : function () { return {} }, n = f, l = [], w, m; f = n.match(g);)w = f[0], f[2] || f[4] || (w = (f[3] ? "http://" : "mailto:") + w), m = f.index, r(n.substr(0, m)), x(w, f[0].replace(t, "")), n = n.substring(m + f[0].length); r(n); return h(l.join(""))
        }
    }])
})(window, window.angular);
//# sourceMappingURL=angular-sanitize.min.js.map;
