/*
 AngularJS v1.2.18
 (c) 2010-2014 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(T,V,s){'use strict';function t(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.2.18/"+(b?b+"/":"")+a;for(c=1;c<arguments.length;c++)a=a+(1==c?"?":"&")+"p"+(c-1)+"="+encodeURIComponent("function"==typeof arguments[c]?arguments[c].toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof arguments[c]?"undefined":"string"!=typeof arguments[c]?JSON.stringify(arguments[c]):arguments[c]);return Error(a)}}function db(b){if(null==b||Ea(b))return!1;
var a=b.length;return 1===b.nodeType&&a?!0:C(b)||O(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function q(b,a,c){var d;if(b)if(Q(b))for(d in b)"prototype"==d||("length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d))||a.call(c,b[d],d);else if(b.forEach&&b.forEach!==q)b.forEach(a,c);else if(db(b))for(d=0;d<b.length;d++)a.call(c,b[d],d);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d);return b}function Wb(b){var a=[],c;for(c in b)b.hasOwnProperty(c)&&a.push(c);return a.sort()}function Sc(b,
a,c){for(var d=Wb(b),e=0;e<d.length;e++)a.call(c,b[d[e]],d[e]);return d}function Xb(b){return function(a,c){b(c,a)}}function eb(){for(var b=ja.length,a;b;){b--;a=ja[b].charCodeAt(0);if(57==a)return ja[b]="A",ja.join("");if(90==a)ja[b]="0";else return ja[b]=String.fromCharCode(a+1),ja.join("")}ja.unshift("0");return ja.join("")}function Yb(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function J(b){var a=b.$$hashKey;q(arguments,function(a){a!==b&&q(a,function(a,c){b[c]=a})});Yb(b,a);return b}function Z(b){return parseInt(b,
10)}function Zb(b,a){return J(new (J(function(){},{prototype:b})),a)}function y(){}function Fa(b){return b}function $(b){return function(){return b}}function D(b){return"undefined"===typeof b}function B(b){return"undefined"!==typeof b}function U(b){return null!=b&&"object"===typeof b}function C(b){return"string"===typeof b}function yb(b){return"number"===typeof b}function Na(b){return"[object Date]"===wa.call(b)}function Q(b){return"function"===typeof b}function fb(b){return"[object RegExp]"===wa.call(b)}
function Ea(b){return b&&b.document&&b.location&&b.alert&&b.setInterval}function Tc(b){return!(!b||!(b.nodeName||b.prop&&b.attr&&b.find))}function Uc(b,a,c){var d=[];q(b,function(b,g,f){d.push(a.call(c,b,g,f))});return d}function Oa(b,a){if(b.indexOf)return b.indexOf(a);for(var c=0;c<b.length;c++)if(a===b[c])return c;return-1}function Pa(b,a){var c=Oa(b,a);0<=c&&b.splice(c,1);return a}function Ga(b,a,c,d){if(Ea(b)||b&&b.$evalAsync&&b.$watch)throw Qa("cpws");if(a){if(b===a)throw Qa("cpi");c=c||[];
d=d||[];if(U(b)){var e=Oa(c,b);if(-1!==e)return d[e];c.push(b);d.push(a)}if(O(b))for(var g=a.length=0;g<b.length;g++)e=Ga(b[g],null,c,d),U(b[g])&&(c.push(b[g]),d.push(e)),a.push(e);else{var f=a.$$hashKey;q(a,function(b,c){delete a[c]});for(g in b)e=Ga(b[g],null,c,d),U(b[g])&&(c.push(b[g]),d.push(e)),a[g]=e;Yb(a,f)}}else(a=b)&&(O(b)?a=Ga(b,[],c,d):Na(b)?a=new Date(b.getTime()):fb(b)?a=RegExp(b.source):U(b)&&(a=Ga(b,{},c,d)));return a}function ka(b,a){if(O(b)){a=a||[];for(var c=0;c<b.length;c++)a[c]=
b[c]}else if(U(b))for(c in a=a||{},b)!zb.call(b,c)||"$"===c.charAt(0)&&"$"===c.charAt(1)||(a[c]=b[c]);return a||b}function xa(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&"object"==c)if(O(b)){if(!O(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!xa(b[d],a[d]))return!1;return!0}}else{if(Na(b))return Na(a)&&b.getTime()==a.getTime();if(fb(b)&&fb(a))return b.toString()==a.toString();if(b&&b.$evalAsync&&b.$watch||a&&a.$evalAsync&&
a.$watch||Ea(b)||Ea(a)||O(a))return!1;c={};for(d in b)if("$"!==d.charAt(0)&&!Q(b[d])){if(!xa(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&"$"!==d.charAt(0)&&a[d]!==s&&!Q(a[d]))return!1;return!0}return!1}function $b(){return V.securityPolicy&&V.securityPolicy.isActive||V.querySelector&&!(!V.querySelector("[ng-csp]")&&!V.querySelector("[data-ng-csp]"))}function Ab(b,a){var c=2<arguments.length?ya.call(arguments,2):[];return!Q(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?
a.apply(b,c.concat(ya.call(arguments,0))):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Vc(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)?c=s:Ea(a)?c="$WINDOW":a&&V===a?c="$DOCUMENT":a&&(a.$evalAsync&&a.$watch)&&(c="$SCOPE");return c}function ra(b,a){return"undefined"===typeof b?s:JSON.stringify(b,Vc,a?"  ":null)}function ac(b){return C(b)?JSON.parse(b):b}function Ra(b){"function"===typeof b?b=!0:b&&0!==b.length?(b=L(""+b),b=!("f"==b||"0"==b||"false"==
b||"no"==b||"n"==b||"[]"==b)):b=!1;return b}function ga(b){b=w(b).clone();try{b.empty()}catch(a){}var c=w("<div>").append(b).html();try{return 3===b[0].nodeType?L(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+L(b)})}catch(d){return L(c)}}function bc(b){try{return decodeURIComponent(b)}catch(a){}}function cc(b){var a={},c,d;q((b||"").split("&"),function(b){b&&(c=b.split("="),d=bc(c[0]),B(d)&&(b=B(c[1])?bc(c[1]):!0,a[d]?O(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}
function Bb(b){var a=[];q(b,function(b,d){O(b)?q(b,function(b){a.push(za(d,!0)+(!0===b?"":"="+za(b,!0)))}):a.push(za(d,!0)+(!0===b?"":"="+za(b,!0)))});return a.length?a.join("&"):""}function gb(b){return za(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function za(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function Wc(b,a){function c(a){a&&d.push(a)}var d=[b],e,g,f=["ng:app",
"ng-app","x-ng-app","data-ng-app"],k=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;q(f,function(a){f[a]=!0;c(V.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(q(b.querySelectorAll("."+a),c),q(b.querySelectorAll("."+a+"\\:"),c),q(b.querySelectorAll("["+a+"]"),c))});q(d,function(a){if(!e){var b=k.exec(" "+a.className+" ");b?(e=a,g=(b[2]||"").replace(/\s+/g,",")):q(a.attributes,function(b){!e&&f[b.name]&&(e=a,g=b.value)})}});e&&a(e,g?[g]:[])}function dc(b,a){var c=function(){b=w(b);if(b.injector()){var c=
b[0]===V?"document":ga(b);throw Qa("btstrpd",c);}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=ec(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate",function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(T&&!d.test(T.name))return c();T.name=T.name.replace(d,"");Sa.resumeBootstrap=function(b){q(b,function(b){a.push(b)});c()}}function hb(b,a){a=a||"_";return b.replace(Xc,function(b,
d){return(d?a:"")+b.toLowerCase()})}function Cb(b,a,c){if(!b)throw Qa("areq",a||"?",c||"required");return b}function Ta(b,a,c){c&&O(b)&&(b=b[b.length-1]);Cb(Q(b),a,"not a function, got "+(b&&"object"==typeof b?b.constructor.name||"Object":typeof b));return b}function Aa(b,a){if("hasOwnProperty"===b)throw Qa("badname",a);}function fc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,g=a.length,f=0;f<g;f++)d=a[f],b&&(b=(e=b)[d]);return!c&&Q(b)?Ab(e,b):b}function Db(b){var a=b[0];b=b[b.length-1];if(a===
b)return w(a);var c=[a];do{a=a.nextSibling;if(!a)break;c.push(a)}while(a!==b);return w(c)}function Yc(b){var a=t("$injector"),c=t("ng");b=b.angular||(b.angular={});b.$$minErr=b.$$minErr||t;return b.module||(b.module=function(){var b={};return function(e,g,f){if("hasOwnProperty"===e)throw c("badname","module");g&&b.hasOwnProperty(e)&&(b[e]=null);return b[e]||(b[e]=function(){function b(a,d,e){return function(){c[e||"push"]([a,d,arguments]);return n}}if(!g)throw a("nomod",e);var c=[],d=[],l=b("$injector",
"invoke"),n={_invokeQueue:c,_runBlocks:d,requires:g,name:e,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:b("$provide","value"),constant:b("$provide","constant","unshift"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),config:l,run:function(a){d.push(a);return this}};f&&l(f);return n}())}}())}function Zc(b){J(b,{bootstrap:dc,
copy:Ga,extend:J,equals:xa,element:w,forEach:q,injector:ec,noop:y,bind:Ab,toJson:ra,fromJson:ac,identity:Fa,isUndefined:D,isDefined:B,isString:C,isFunction:Q,isObject:U,isNumber:yb,isElement:Tc,isArray:O,version:$c,isDate:Na,lowercase:L,uppercase:Ha,callbacks:{counter:0},$$minErr:t,$$csp:$b});Ua=Yc(T);try{Ua("ngLocale")}catch(a){Ua("ngLocale",[]).provider("$locale",ad)}Ua("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:bd});a.provider("$compile",gc).directive({a:cd,input:hc,textarea:hc,
form:dd,script:ed,select:fd,style:gd,option:hd,ngBind:id,ngBindHtml:jd,ngBindTemplate:kd,ngClass:ld,ngClassEven:md,ngClassOdd:nd,ngCloak:od,ngController:pd,ngForm:qd,ngHide:rd,ngIf:sd,ngInclude:td,ngInit:ud,ngNonBindable:vd,ngPluralize:wd,ngRepeat:xd,ngShow:yd,ngStyle:zd,ngSwitch:Ad,ngSwitchWhen:Bd,ngSwitchDefault:Cd,ngOptions:Dd,ngTransclude:Ed,ngModel:Fd,ngList:Gd,ngChange:Hd,required:ic,ngRequired:ic,ngValue:Id}).directive({ngInclude:Jd}).directive(Eb).directive(jc);a.provider({$anchorScroll:Kd,
$animate:Ld,$browser:Md,$cacheFactory:Nd,$controller:Od,$document:Pd,$exceptionHandler:Qd,$filter:kc,$interpolate:Rd,$interval:Sd,$http:Td,$httpBackend:Ud,$location:Vd,$log:Wd,$parse:Xd,$rootScope:Yd,$q:Zd,$sce:$d,$sceDelegate:ae,$sniffer:be,$templateCache:ce,$timeout:de,$window:ee,$$rAF:fe,$$asyncCallback:ge})}])}function Va(b){return b.replace(he,function(a,b,d,e){return e?d.toUpperCase():d}).replace(ie,"Moz$1")}function Fb(b,a,c,d){function e(b){var e=c&&b?[this.filter(b)]:[this],m=a,h,l,n,p,r,
v;if(!d||null!=b)for(;e.length;)for(h=e.shift(),l=0,n=h.length;l<n;l++)for(p=w(h[l]),m?p.triggerHandler("$destroy"):m=!m,r=0,p=(v=p.children()).length;r<p;r++)e.push(Ba(v[r]));return g.apply(this,arguments)}var g=Ba.fn[b],g=g.$original||g;e.$original=g;Ba.fn[b]=e}function R(b){if(b instanceof R)return b;C(b)&&(b=aa(b));if(!(this instanceof R)){if(C(b)&&"<"!=b.charAt(0))throw Gb("nosel");return new R(b)}if(C(b)){var a=b;b=V;var c;if(c=je.exec(a))b=[b.createElement(c[1])];else{var d=b,e;b=d.createDocumentFragment();
c=[];if(Hb.test(a)){d=b.appendChild(d.createElement("div"));e=(ke.exec(a)||["",""])[1].toLowerCase();e=da[e]||da._default;d.innerHTML="<div>&#160;</div>"+e[1]+a.replace(le,"<$1></$2>")+e[2];d.removeChild(d.firstChild);for(a=e[0];a--;)d=d.lastChild;a=0;for(e=d.childNodes.length;a<e;++a)c.push(d.childNodes[a]);d=b.firstChild;d.textContent=""}else c.push(d.createTextNode(a));b.textContent="";b.innerHTML="";b=c}Ib(this,b);w(V.createDocumentFragment()).append(this)}else Ib(this,b)}function Jb(b){return b.cloneNode(!0)}
function Ia(b){lc(b);var a=0;for(b=b.childNodes||[];a<b.length;a++)Ia(b[a])}function mc(b,a,c,d){if(B(d))throw Gb("offargs");var e=la(b,"events");la(b,"handle")&&(D(a)?q(e,function(a,c){Wa(b,c,a);delete e[c]}):q(a.split(" "),function(a){D(c)?(Wa(b,a,e[a]),delete e[a]):Pa(e[a]||[],c)}))}function lc(b,a){var c=b[ib],d=Xa[c];d&&(a?delete Xa[c].data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),mc(b)),delete Xa[c],b[ib]=s))}function la(b,a,c){var d=b[ib],d=Xa[d||-1];if(B(c))d||(b[ib]=d=++me,
d=Xa[d]={}),d[a]=c;else return d&&d[a]}function nc(b,a,c){var d=la(b,"data"),e=B(c),g=!e&&B(a),f=g&&!U(a);d||f||la(b,"data",d={});if(e)d[a]=c;else if(g){if(f)return d&&d[a];J(d,a)}else return d}function Kb(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function jb(b,a){a&&b.setAttribute&&q(a.split(" "),function(a){b.setAttribute("class",aa((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+aa(a)+" "," ")))})}
function kb(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");q(a.split(" "),function(a){a=aa(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});b.setAttribute("class",aa(c))}}function Ib(b,a){if(a){a=a.nodeName||!B(a.length)||Ea(a)?[a]:a;for(var c=0;c<a.length;c++)b.push(a[c])}}function oc(b,a){return lb(b,"$"+(a||"ngController")+"Controller")}function lb(b,a,c){b=w(b);9==b[0].nodeType&&(b=b.find("html"));for(a=O(a)?a:[a];b.length;){for(var d=b[0],e=0,g=a.length;e<
g;e++)if((c=b.data(a[e]))!==s)return c;b=w(d.parentNode||11===d.nodeType&&d.host)}}function pc(b){for(var a=0,c=b.childNodes;a<c.length;a++)Ia(c[a]);for(;b.firstChild;)b.removeChild(b.firstChild)}function qc(b,a){var c=mb[a.toLowerCase()];return c&&rc[b.nodeName]&&c}function ne(b,a){var c=function(c,e){c.preventDefault||(c.preventDefault=function(){c.returnValue=!1});c.stopPropagation||(c.stopPropagation=function(){c.cancelBubble=!0});c.target||(c.target=c.srcElement||V);if(D(c.defaultPrevented)){var g=
c.preventDefault;c.preventDefault=function(){c.defaultPrevented=!0;g.call(c)};c.defaultPrevented=!1}c.isDefaultPrevented=function(){return c.defaultPrevented||!1===c.returnValue};var f=ka(a[e||c.type]||[]);q(f,function(a){a.call(b,c)});8>=S?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Ja(b){var a=typeof b,c;"object"==a&&null!==b?"function"==typeof(c=b.$$hashKey)?c=
b.$$hashKey():c===s&&(c=b.$$hashKey=eb()):c=b;return a+":"+c}function Ya(b){q(b,this.put,this)}function sc(b){var a,c;"function"==typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace(oe,""),c=c.match(pe),q(c[1].split(qe),function(b){b.replace(re,function(b,c,d){a.push(d)})})),b.$inject=a):O(b)?(c=b.length-1,Ta(b[c],"fn"),a=b.slice(0,c)):Ta(b,"fn",!0);return a}function ec(b){function a(a){return function(b,c){if(U(b))q(b,Xb(a));else return a(b,c)}}function c(a,b){Aa(a,"service");if(Q(b)||
O(b))b=n.instantiate(b);if(!b.$get)throw Za("pget",a);return l[a+k]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,g,k;q(a,function(a){if(!h.get(a)){h.put(a,!0);try{if(C(a))for(c=Ua(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue,g=0,k=d.length;g<k;g++){var f=d[g],m=n.get(f[0]);m[f[1]].apply(m,f[2])}else Q(a)?b.push(n.invoke(a)):O(a)?b.push(n.invoke(a)):Ta(a,"module")}catch(l){throw O(a)&&(a=a[a.length-1]),l.message&&(l.stack&&-1==l.stack.indexOf(l.message))&&
(l=l.message+"\n"+l.stack),Za("modulerr",a,l.stack||l.message||l);}}});return b}function g(a,b){function c(d){if(a.hasOwnProperty(d)){if(a[d]===f)throw Za("cdep",d+" <- "+m.join(" <- "));return a[d]}try{return m.unshift(d),a[d]=f,a[d]=b(d)}catch(e){throw a[d]===f&&delete a[d],e;}finally{m.shift()}}function d(a,b,e){var g=[],k=sc(a),f,m,h;m=0;for(f=k.length;m<f;m++){h=k[m];if("string"!==typeof h)throw Za("itkn",h);g.push(e&&e.hasOwnProperty(h)?e[h]:c(h))}a.$inject||(a=a[f]);return a.apply(b,g)}return{invoke:d,
instantiate:function(a,b){var c=function(){},e;c.prototype=(O(a)?a[a.length-1]:a).prototype;c=new c;e=d(a,c,b);return U(e)||Q(e)?e:c},get:c,annotate:sc,has:function(b){return l.hasOwnProperty(b+k)||a.hasOwnProperty(b)}}}var f={},k="Provider",m=[],h=new Ya,l={$provide:{provider:a(c),factory:a(d),service:a(function(a,b){return d(a,["$injector",function(a){return a.instantiate(b)}])}),value:a(function(a,b){return d(a,$(b))}),constant:a(function(a,b){Aa(a,"constant");l[a]=b;p[a]=b}),decorator:function(a,
b){var c=n.get(a+k),d=c.$get;c.$get=function(){var a=r.invoke(d,c);return r.invoke(b,null,{$delegate:a})}}}},n=l.$injector=g(l,function(){throw Za("unpr",m.join(" <- "));}),p={},r=p.$injector=g(p,function(a){a=n.get(a+k);return r.invoke(a.$get,a)});q(e(b),function(a){r.invoke(a||y)});return r}function Kd(){var b=!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;q(a,function(a){b||"a"!==L(a.nodeName)||(b=a)});return b}
function g(){var b=c.hash(),d;b?(d=f.getElementById(b))?d.scrollIntoView():(d=e(f.getElementsByName(b)))?d.scrollIntoView():"top"===b&&a.scrollTo(0,0):a.scrollTo(0,0)}var f=a.document;b&&d.$watch(function(){return c.hash()},function(){d.$evalAsync(g)});return g}]}function ge(){this.$get=["$$rAF","$timeout",function(b,a){return b.supported?function(a){return b(a)}:function(b){return a(b,0,!1)}}]}function se(b,a,c,d){function e(a){try{a.apply(null,ya.call(arguments,1))}finally{if(v--,0===v)for(;I.length;)try{I.pop()()}catch(b){c.error(b)}}}
function g(a,b){(function ba(){q(x,function(a){a()});u=b(ba,a)})()}function f(){z=null;M!=k.url()&&(M=k.url(),q(ha,function(a){a(k.url())}))}var k=this,m=a[0],h=b.location,l=b.history,n=b.setTimeout,p=b.clearTimeout,r={};k.isMock=!1;var v=0,I=[];k.$$completeOutstandingRequest=e;k.$$incOutstandingRequestCount=function(){v++};k.notifyWhenNoOutstandingRequests=function(a){q(x,function(a){a()});0===v?a():I.push(a)};var x=[],u;k.addPollFn=function(a){D(u)&&g(100,n);x.push(a);return a};var M=h.href,F=a.find("base"),
z=null;k.url=function(a,c){h!==b.location&&(h=b.location);l!==b.history&&(l=b.history);if(a){if(M!=a)return M=a,d.history?c?l.replaceState(null,"",a):(l.pushState(null,"",a),F.attr("href",F.attr("href"))):(z=a,c?h.replace(a):h.href=a),k}else return z||h.href.replace(/%27/g,"'")};var ha=[],P=!1;k.onUrlChange=function(a){if(!P){if(d.history)w(b).on("popstate",f);if(d.hashchange)w(b).on("hashchange",f);else k.addPollFn(f);P=!0}ha.push(a);return a};k.baseHref=function(){var a=F.attr("href");return a?
a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};var N={},ca="",E=k.baseHref();k.cookies=function(a,b){var d,e,g,k;if(a)b===s?m.cookie=escape(a)+"=;path="+E+";expires=Thu, 01 Jan 1970 00:00:00 GMT":C(b)&&(d=(m.cookie=escape(a)+"="+escape(b)+";path="+E).length+1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(m.cookie!==ca)for(ca=m.cookie,d=ca.split("; "),N={},g=0;g<d.length;g++)e=d[g],k=e.indexOf("="),0<k&&(a=unescape(e.substring(0,
k)),N[a]===s&&(N[a]=unescape(e.substring(k+1))));return N}};k.defer=function(a,b){var c;v++;c=n(function(){delete r[c];e(a)},b||0);r[c]=!0;return c};k.defer.cancel=function(a){return r[a]?(delete r[a],p(a),e(y),!0):!1}}function Md(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new se(b,d,a,c)}]}function Nd(){this.$get=function(){function b(b,d){function e(a){a!=n&&(p?p==a&&(p=a.n):p=a,g(a.n,a.p),g(a,n),n=a,n.n=null)}function g(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(b in
a)throw t("$cacheFactory")("iid",b);var f=0,k=J({},d,{id:b}),m={},h=d&&d.capacity||Number.MAX_VALUE,l={},n=null,p=null;return a[b]={put:function(a,b){if(h<Number.MAX_VALUE){var c=l[a]||(l[a]={key:a});e(c)}if(!D(b))return a in m||f++,m[a]=b,f>h&&this.remove(p.key),b},get:function(a){if(h<Number.MAX_VALUE){var b=l[a];if(!b)return;e(b)}return m[a]},remove:function(a){if(h<Number.MAX_VALUE){var b=l[a];if(!b)return;b==n&&(n=b.p);b==p&&(p=b.n);g(b.n,b.p);delete l[a]}delete m[a];f--},removeAll:function(){m=
{};f=0;l={};n=p=null},destroy:function(){l=k=m=null;delete a[b]},info:function(){return J({},k,{size:f})}}}var a={};b.info=function(){var b={};q(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function ce(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function gc(b,a){var c={},d="Directive",e=/^\s*directive\:\s*([\d\w_\-]+)\s+(.*)$/,g=/(([\d\w_\-]+)(?:\:([^;]+))?;?)/,f=/^(on[a-z]+|formaction)$/;this.directive=function m(a,e){Aa(a,"directive");C(a)?
(Cb(e,"directiveFactory"),c.hasOwnProperty(a)||(c[a]=[],b.factory(a+d,["$injector","$exceptionHandler",function(b,d){var e=[];q(c[a],function(c,g){try{var f=b.invoke(c);Q(f)?f={compile:$(f)}:!f.compile&&f.link&&(f.compile=$(f.link));f.priority=f.priority||0;f.index=g;f.name=f.name||a;f.require=f.require||f.controller&&f.name;f.restrict=f.restrict||"A";e.push(f)}catch(m){d(m)}});return e}])),c[a].push(e)):q(a,Xb(m));return this};this.aHrefSanitizationWhitelist=function(b){return B(b)?(a.aHrefSanitizationWhitelist(b),
this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return B(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};this.$get=["$injector","$interpolate","$exceptionHandler","$http","$templateCache","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,l,n,p,r,v,I,x,u,M,F){function z(a,b,c,d,e){a instanceof w||(a=w(a));q(a,function(b,c){3==b.nodeType&&b.nodeValue.match(/\S+/)&&(a[c]=w(b).wrap("<span></span>").parent()[0])});
var g=P(a,b,a,c,d,e);ha(a,"ng-scope");return function(b,c,d,e){Cb(b,"scope");var f=c?Ka.clone.call(a):a;q(d,function(a,b){f.data("$"+b+"Controller",a)});d=0;for(var m=f.length;d<m;d++){var h=f[d].nodeType;1!==h&&9!==h||f.eq(d).data("$scope",b)}c&&c(f,b);g&&g(b,f,f,e);return f}}function ha(a,b){try{a.addClass(b)}catch(c){}}function P(a,b,c,d,e,g){function f(a,c,d,e){var g,h,l,r,n,p,v;g=c.length;var K=Array(g);for(n=0;n<g;n++)K[n]=c[n];v=n=0;for(p=m.length;n<p;v++)h=K[v],c=m[n++],g=m[n++],l=w(h),c?
(c.scope?(r=a.$new(),l.data("$scope",r)):r=a,l=c.transcludeOnThisElement?N(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?N(a,b):null,c(g,r,h,d,l)):g&&g(a,h.childNodes,s,e)}for(var m=[],h,l,r,n,p=0;p<a.length;p++)h=new Lb,l=ca(a[p],[],h,0===p?d:s,e),(g=l.length?H(l,a[p],h,b,c,null,[],[],g):null)&&g.scope&&ha(w(a[p]),"ng-scope"),h=g&&g.terminal||!(r=a[p].childNodes)||!r.length?null:P(r,g?(g.transcludeOnThisElement||!g.templateOnThisElement)&&g.transclude:b),m.push(g,h),n=n||g||h,g=null;return n?
f:null}function N(a,b,c){return function(d,e,g){var f=!1;d||(d=a.$new(),f=d.$$transcluded=!0);e=b(d,e,g,c);if(f)e.on("$destroy",function(){d.$destroy()});return e}}function ca(a,b,c,d,f){var m=c.$attr,h;switch(a.nodeType){case 1:ba(b,ma(La(a).toLowerCase()),"E",d,f);var l,r,n;h=a.attributes;for(var p=0,v=h&&h.length;p<v;p++){var x=!1,I=!1;l=h[p];if(!S||8<=S||l.specified){r=l.name;n=ma(r);W.test(n)&&(r=hb(n.substr(6),"-"));var M=n.replace(/(Start|End)$/,"");n===M+"Start"&&(x=r,I=r.substr(0,r.length-
5)+"end",r=r.substr(0,r.length-6));n=ma(r.toLowerCase());m[n]=r;c[n]=l=aa(l.value);qc(a,n)&&(c[n]=!0);R(a,b,l,n);ba(b,n,"A",d,f,x,I)}}a=a.className;if(C(a)&&""!==a)for(;h=g.exec(a);)n=ma(h[2]),ba(b,n,"C",d,f)&&(c[n]=aa(h[3])),a=a.substr(h.index+h[0].length);break;case 3:t(b,a.nodeValue);break;case 8:try{if(h=e.exec(a.nodeValue))n=ma(h[1]),ba(b,n,"M",d,f)&&(c[n]=aa(h[2]))}catch(u){}}b.sort(D);return b}function E(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ia("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 w(d)}function A(a,b,c){return function(d,e,g,f,h){e=E(e[0],b,c);return a(d,e,g,f,h)}}function H(a,c,d,e,g,f,m,n,p){function x(a,b,c,d){if(a){c&&(a=A(a,c,d));a.require=G.require;a.directiveName=na;if(N===G||G.$$isolateScope)a=uc(a,{isolateScope:!0});m.push(a)}if(b){c&&(b=A(b,c,d));b.require=G.require;b.directiveName=na;if(N===G||G.$$isolateScope)b=uc(b,{isolateScope:!0});n.push(b)}}
function I(a,b,c,d){var e,g="data",f=!1;if(C(b)){for(;"^"==(e=b.charAt(0))||"?"==e;)b=b.substr(1),"^"==e&&(g="inheritedData"),f=f||"?"==e;e=null;d&&"data"===g&&(e=d[b]);e=e||c[g]("$"+b+"Controller");if(!e&&!f)throw ia("ctreq",b,a);}else O(b)&&(e=[],q(b,function(b){e.push(I(a,b,c,d))}));return e}function M(a,e,g,f,p){function x(a,b){var c;2>arguments.length&&(b=a,a=s);Ca&&(c=ca);return p(a,b,c)}var u,K,z,F,A,E,ca={},nb;u=c===g?d:ka(d,new Lb(w(g),d.$attr));K=u.$$element;if(N){var ba=/^\s*([@=&])(\??)\s*(\w*)\s*$/;
f=w(g);E=e.$new(!0);!H||H!==N&&H!==N.$$originalDirective?f.data("$isolateScopeNoTemplate",E):f.data("$isolateScope",E);ha(f,"ng-isolate-scope");q(N.scope,function(a,c){var d=a.match(ba)||[],g=d[3]||c,f="?"==d[2],d=d[1],m,l,n,p;E.$$isolateBindings[c]=d+g;switch(d){case "@":u.$observe(g,function(a){E[c]=a});u.$$observers[g].$$scope=e;u[g]&&(E[c]=b(u[g])(e));break;case "=":if(f&&!u[g])break;l=r(u[g]);p=l.literal?xa:function(a,b){return a===b};n=l.assign||function(){m=E[c]=l(e);throw ia("nonassign",u[g],
N.name);};m=E[c]=l(e);E.$watch(function(){var a=l(e);p(a,E[c])||(p(a,m)?n(e,a=E[c]):E[c]=a);return m=a},null,l.literal);break;case "&":l=r(u[g]);E[c]=function(a){return l(e,a)};break;default:throw ia("iscp",N.name,c,a);}})}nb=p&&x;P&&q(P,function(a){var b={$scope:a===N||a.$$isolateScope?E:e,$element:K,$attrs:u,$transclude:nb},c;A=a.controller;"@"==A&&(A=u[a.name]);c=v(A,b);ca[a.name]=c;Ca||K.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});f=0;for(z=m.length;f<z;f++)try{F=
m[f],F(F.isolateScope?E:e,K,u,F.require&&I(F.directiveName,F.require,K,ca),nb)}catch(G){l(G,ga(K))}f=e;N&&(N.template||null===N.templateUrl)&&(f=E);a&&a(f,g.childNodes,s,p);for(f=n.length-1;0<=f;f--)try{F=n[f],F(F.isolateScope?E:e,K,u,F.require&&I(F.directiveName,F.require,K,ca),nb)}catch(B){l(B,ga(K))}}p=p||{};for(var u=-Number.MAX_VALUE,F,P=p.controllerDirectives,N=p.newIsolateScopeDirective,H=p.templateDirective,ba=p.nonTlbTranscludeDirective,D=!1,J=!1,Ca=p.hasElementTranscludeDirective,t=d.$$element=
w(c),G,na,X,T=e,R,S=0,oa=a.length;S<oa;S++){G=a[S];var W=G.$$start,Y=G.$$end;W&&(t=E(c,W,Y));X=s;if(u>G.priority)break;if(X=G.scope)F=F||G,G.templateUrl||(L("new/isolated scope",N,G,t),U(X)&&(N=G));na=G.name;!G.templateUrl&&G.controller&&(X=G.controller,P=P||{},L("'"+na+"' controller",P[na],G,t),P[na]=G);if(X=G.transclude)D=!0,G.$$tlb||(L("transclusion",ba,G,t),ba=G),"element"==X?(Ca=!0,u=G.priority,X=E(c,W,Y),t=d.$$element=w(V.createComment(" "+na+": "+d[na]+" ")),c=t[0],ob(g,w(ya.call(X,0)),c),
T=z(X,e,u,f&&f.name,{nonTlbTranscludeDirective:ba})):(X=w(Jb(c)).contents(),t.empty(),T=z(X,e));if(G.template)if(J=!0,L("template",H,G,t),H=G,X=Q(G.template)?G.template(t,d):G.template,X=Z(X),G.replace){f=G;X=Hb.test(X)?w(aa(X)):[];c=X[0];if(1!=X.length||1!==c.nodeType)throw ia("tplrt",na,"");ob(g,t,c);oa={$attr:{}};X=ca(c,[],oa);var te=a.splice(S+1,a.length-(S+1));N&&tc(X);a=a.concat(X).concat(te);B(d,oa);oa=a.length}else t.html(X);if(G.templateUrl)J=!0,L("template",H,G,t),H=G,G.replace&&(f=G),M=
y(a.splice(S,a.length-S),t,d,g,D&&T,m,n,{controllerDirectives:P,newIsolateScopeDirective:N,templateDirective:H,nonTlbTranscludeDirective:ba}),oa=a.length;else if(G.compile)try{R=G.compile(t,d,T),Q(R)?x(null,R,W,Y):R&&x(R.pre,R.post,W,Y)}catch($){l($,ga(t))}G.terminal&&(M.terminal=!0,u=Math.max(u,G.priority))}M.scope=F&&!0===F.scope;M.transcludeOnThisElement=D;M.templateOnThisElement=J;M.transclude=T;p.hasElementTranscludeDirective=Ca;return M}function tc(a){for(var b=0,c=a.length;b<c;b++)a[b]=Zb(a[b],
{$$isolateScope:!0})}function ba(b,e,g,f,h,r,n){if(e===h)return null;h=null;if(c.hasOwnProperty(e)){var p;e=a.get(e+d);for(var v=0,x=e.length;v<x;v++)try{p=e[v],(f===s||f>p.priority)&&-1!=p.restrict.indexOf(g)&&(r&&(p=Zb(p,{$$start:r,$$end:n})),b.push(p),h=p)}catch(I){l(I)}}return h}function B(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,g){"class"==g?(ha(e,b),a["class"]=(a["class"]?
a["class"]+" ":"")+b):"style"==g?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==g.charAt(0)||a.hasOwnProperty(g)||(a[g]=b,d[g]=c[g])})}function y(a,b,c,d,e,g,f,h){var m=[],l,r,v=b[0],x=a.shift(),I=J({},x,{templateUrl:null,transclude:null,replace:null,$$originalDirective:x}),M=Q(x.templateUrl)?x.templateUrl(b,c):x.templateUrl;b.empty();n.get(u.getTrustedResourceUrl(M),{cache:p}).success(function(n){var p,u;n=Z(n);if(x.replace){n=Hb.test(n)?w(aa(n)):[];p=n[0];if(1!=
n.length||1!==p.nodeType)throw ia("tplrt",x.name,M);n={$attr:{}};ob(d,b,p);var z=ca(p,[],n);U(x.scope)&&tc(z);a=z.concat(a);B(c,n)}else p=v,b.html(n);a.unshift(I);l=H(a,p,c,e,b,x,g,f,h);q(d,function(a,c){a==p&&(d[c]=b[0])});for(r=P(b[0].childNodes,e);m.length;){n=m.shift();u=m.shift();var F=m.shift(),A=m.shift(),z=b[0];if(u!==v){var E=u.className;h.hasElementTranscludeDirective&&x.replace||(z=Jb(p));ob(F,w(u),z);ha(w(z),E)}u=l.transcludeOnThisElement?N(n,l.transclude,A):A;l(r,n,z,d,u)}m=null}).error(function(a,
b,c,d){throw ia("tpload",d.url);});return function(a,b,c,d,e){a=e;m?(m.push(b),m.push(c),m.push(d),m.push(a)):(l.transcludeOnThisElement&&(a=N(b,l.transclude,e)),l(r,b,c,d,a))}}function D(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 L(a,b,c,d){if(b)throw ia("multidir",b.name,c.name,a,ga(d));}function t(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){var b=a.parent().length;b&&ha(a.parent(),"ng-binding");return function(a,
c){var e=c.parent(),g=e.data("$binding")||[];g.push(d);e.data("$binding",g);b||ha(e,"ng-binding");a.$watch(d,function(a){c[0].nodeValue=a})}}})}function T(a,b){if("srcdoc"==b)return u.HTML;var c=La(a);if("xlinkHref"==b||"FORM"==c&&"action"==b||"IMG"!=c&&("src"==b||"ngSrc"==b))return u.RESOURCE_URL}function R(a,c,d,e){var g=b(d,!0);if(g){if("multiple"===e&&"SELECT"===La(a))throw ia("selmulti",ga(a));c.push({priority:100,compile:function(){return{pre:function(c,d,m){d=m.$$observers||(m.$$observers=
{});if(f.test(e))throw ia("nodomevents");if(g=b(m[e],!0,T(a,e)))m[e]=g(c),(d[e]||(d[e]=[])).$$inter=!0,(m.$$observers&&m.$$observers[e].$$scope||c).$watch(g,function(a,b){"class"===e&&a!=b?m.$updateClass(a,b):m.$set(e,a)})}}}})}}function ob(a,b,c){var d=b[0],e=b.length,g=d.parentNode,f,m;if(a)for(f=0,m=a.length;f<m;f++)if(a[f]==d){a[f++]=c;m=f+e-1;for(var h=a.length;f<h;f++,m++)m<h?a[f]=a[m]:delete a[f];a.length-=e-1;break}g&&g.replaceChild(c,d);a=V.createDocumentFragment();a.appendChild(d);c[w.expando]=
d[w.expando];d=1;for(e=b.length;d<e;d++)g=b[d],w(g).remove(),a.appendChild(g),delete b[d];b[0]=c;b.length=1}function uc(a,b){return J(function(){return a.apply(null,arguments)},a,b)}var Lb=function(a,b){this.$$element=a;this.$attr=b||{}};Lb.prototype={$normalize:ma,$addClass:function(a){a&&0<a.length&&M.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&M.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=vc(a,b),d=vc(b,a);0===c.length?M.removeClass(this.$$element,d):
0===d.length?M.addClass(this.$$element,c):M.setClass(this.$$element,c,d)},$set:function(a,b,c,d){var e=qc(this.$$element[0],a);e&&(this.$$element.prop(a,b),d=e);this[a]=b;d?this.$attr[a]=d:(d=this.$attr[a])||(this.$attr[a]=d=hb(a,"-"));e=La(this.$$element);if("A"===e&&"href"===a||"IMG"===e&&"src"===a)this[a]=b=F(b,"src"===a);!1!==c&&(null===b||b===s?this.$$element.removeAttr(d):this.$$element.attr(d,b));(c=this.$$observers)&&q(c[a],function(a){try{a(b)}catch(c){l(c)}})},$observe:function(a,b){var c=
this,d=c.$$observers||(c.$$observers={}),e=d[a]||(d[a]=[]);e.push(b);I.$evalAsync(function(){e.$$inter||b(c[a])});return b}};var Ca=b.startSymbol(),oa=b.endSymbol(),Z="{{"==Ca||"}}"==oa?Fa:function(a){return a.replace(/\{\{/g,Ca).replace(/}}/g,oa)},W=/^ngAttr[A-Z]/;return z}]}function ma(b){return Va(b.replace(ue,""))}function vc(b,a){var c="",d=b.split(/\s+/),e=a.split(/\s+/),g=0;a:for(;g<d.length;g++){for(var f=d[g],k=0;k<e.length;k++)if(f==e[k])continue a;c+=(0<c.length?" ":"")+f}return c}function Od(){var b=
{},a=/^(\S+)(\s+as\s+(\w+))?$/;this.register=function(a,d){Aa(a,"controller");U(a)?J(b,a):b[a]=d};this.$get=["$injector","$window",function(c,d){return function(e,g){var f,k,m;C(e)&&(f=e.match(a),k=f[1],m=f[3],e=b.hasOwnProperty(k)?b[k]:fc(g.$scope,k,!0)||fc(d,k,!0),Ta(e,k,!0));f=c.instantiate(e,g);if(m){if(!g||"object"!=typeof g.$scope)throw t("$controller")("noscp",k||e.name,m);g.$scope[m]=f}return f}}]}function Pd(){this.$get=["$window",function(b){return w(b.document)}]}function Qd(){this.$get=
["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function wc(b){var a={},c,d,e;if(!b)return a;q(b.split("\n"),function(b){e=b.indexOf(":");c=L(aa(b.substr(0,e)));d=aa(b.substr(e+1));c&&(a[c]=a[c]?a[c]+(", "+d):d)});return a}function xc(b){var a=U(b)?b:s;return function(c){a||(a=wc(b));return c?a[L(c)]||null:a}}function yc(b,a,c){if(Q(c))return c(b,a);q(c,function(c){b=c(b,a)});return b}function Td(){var b=/^\s*(\[|\{[^\{])/,a=/[\}\]]\s*$/,c=/^\)\]\}',?\n/,d={"Content-Type":"application/json;charset=utf-8"},
e=this.defaults={transformResponse:[function(d){C(d)&&(d=d.replace(c,""),b.test(d)&&a.test(d)&&(d=ac(d)));return d}],transformRequest:[function(a){return U(a)&&"[object File]"!==wa.call(a)&&"[object Blob]"!==wa.call(a)?ra(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ka(d),put:ka(d),patch:ka(d)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},g=this.interceptors=[],f=this.responseInterceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope",
"$q","$injector",function(a,b,c,d,n,p){function r(a){function b(a){var d=J({},a,{data:yc(a.data,a.headers,c.transformResponse)});return 200<=a.status&&300>a.status?d:n.reject(d)}var c={method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse},d=function(a){function b(a){var c;q(a,function(b,d){Q(b)&&(c=b(),null!=c?a[d]=c:delete a[d])})}var c=e.headers,d=J({},a.headers),g,f,c=J({},c.common,c[L(a.method)]);b(c);b(d);a:for(g in c){a=L(g);for(f in d)if(L(f)===a)continue a;
d[g]=c[g]}return d}(a);J(c,a);c.headers=d;c.method=Ha(c.method);var g=[function(a){d=a.headers;var c=yc(a.data,xc(d),a.transformRequest);D(a.data)&&q(d,function(a,b){"content-type"===L(b)&&delete d[b]});D(a.withCredentials)&&!D(e.withCredentials)&&(a.withCredentials=e.withCredentials);return v(a,c,d).then(b,b)},s],f=n.when(c);for(q(u,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){a=g.shift();
var m=g.shift(),f=f.then(a,m)}f.success=function(a){f.then(function(b){a(b.data,b.status,b.headers,c)});return f};f.error=function(a){f.then(null,function(b){a(b.data,b.status,b.headers,c)});return f};return f}function v(c,g,f){function h(a,b,c,e){A&&(200<=a&&300>a?A.put(w,[a,b,wc(c),e]):A.remove(w));p(b,a,c,e);d.$$phase||d.$apply()}function p(a,b,d,e){b=Math.max(b,0);(200<=b&&300>b?u.resolve:u.reject)({data:a,status:b,headers:xc(d),config:c,statusText:e})}function v(){var a=Oa(r.pendingRequests,
c);-1!==a&&r.pendingRequests.splice(a,1)}var u=n.defer(),q=u.promise,A,H,w=I(c.url,c.params);r.pendingRequests.push(c);q.then(v,v);(c.cache||e.cache)&&(!1!==c.cache&&"GET"==c.method)&&(A=U(c.cache)?c.cache:U(e.cache)?e.cache:x);if(A)if(H=A.get(w),B(H)){if(H.then)return H.then(v,v),H;O(H)?p(H[1],H[0],ka(H[2]),H[3]):p(H,200,{},"OK")}else A.put(w,q);D(H)&&((H=Mb(c.url)?b.cookies()[c.xsrfCookieName||e.xsrfCookieName]:s)&&(f[c.xsrfHeaderName||e.xsrfHeaderName]=H),a(c.method,w,g,h,f,c.timeout,c.withCredentials,
c.responseType));return q}function I(a,b){if(!b)return a;var c=[];Sc(b,function(a,b){null===a||D(a)||(O(a)||(a=[a]),q(a,function(a){U(a)&&(a=ra(a));c.push(za(b)+"="+za(a))}))});0<c.length&&(a+=(-1==a.indexOf("?")?"?":"&")+c.join("&"));return a}var x=c("$http"),u=[];q(g,function(a){u.unshift(C(a)?p.get(a):p.invoke(a))});q(f,function(a,b){var c=C(a)?p.get(a):p.invoke(a);u.splice(b,0,{response:function(a){return c(n.when(a))},responseError:function(a){return c(n.reject(a))}})});r.pendingRequests=[];
(function(a){q(arguments,function(a){r[a]=function(b,c){return r(J(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){r[a]=function(b,c,d){return r(J(d||{},{method:a,url:b,data:c}))}})})("post","put");r.defaults=e;return r}]}function ve(b){if(8>=S&&(!b.match(/^(get|post|head|put|delete|options)$/i)||!T.XMLHttpRequest))return new T.ActiveXObject("Microsoft.XMLHTTP");if(T.XMLHttpRequest)return new T.XMLHttpRequest;throw t("$httpBackend")("noxhr");}function Ud(){this.$get=
["$browser","$window","$document",function(b,a,c){return we(b,ve,b.defer,a.angular.callbacks,c[0])}]}function we(b,a,c,d,e){function g(a,b,c){var g=e.createElement("script"),f=null;g.type="text/javascript";g.src=a;g.async=!0;f=function(a){Wa(g,"load",f);Wa(g,"error",f);e.body.removeChild(g);g=null;var k=-1,v="unknown";a&&("load"!==a.type||d[b].called||(a={type:"error"}),v=a.type,k="error"===a.type?404:200);c&&c(k,v)};pb(g,"load",f);pb(g,"error",f);8>=S&&(g.onreadystatechange=function(){C(g.readyState)&&
/loaded|complete/.test(g.readyState)&&(g.onreadystatechange=null,f({type:"load"}))});e.body.appendChild(g);return f}var f=-1;return function(e,m,h,l,n,p,r,v){function I(){u=f;F&&F();z&&z.abort()}function x(a,d,e,g,f){P&&c.cancel(P);F=z=null;0===d&&(d=e?200:"file"==sa(m).protocol?404:0);a(1223===d?204:d,e,g,f||"");b.$$completeOutstandingRequest(y)}var u;b.$$incOutstandingRequestCount();m=m||b.url();if("jsonp"==L(e)){var M="_"+(d.counter++).toString(36);d[M]=function(a){d[M].data=a;d[M].called=!0};
var F=g(m.replace("JSON_CALLBACK","angular.callbacks."+M),M,function(a,b){x(l,a,d[M].data,"",b);d[M]=y})}else{var z=a(e);z.open(e,m,!0);q(n,function(a,b){B(a)&&z.setRequestHeader(b,a)});z.onreadystatechange=function(){if(z&&4==z.readyState){var a=null,b=null;u!==f&&(a=z.getAllResponseHeaders(),b="response"in z?z.response:z.responseText);x(l,u||z.status,b,a,z.statusText||"")}};r&&(z.withCredentials=!0);if(v)try{z.responseType=v}catch(s){if("json"!==v)throw s;}z.send(h||null)}if(0<p)var P=c(I,p);else p&&
p.then&&p.then(I)}}function Rd(){var b="{{",a="}}";this.startSymbol=function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this):a};this.$get=["$parse","$exceptionHandler","$sce",function(c,d,e){function g(g,h,l){for(var n,p,r=0,v=[],I=g.length,x=!1,u=[];r<I;)-1!=(n=g.indexOf(b,r))&&-1!=(p=g.indexOf(a,n+f))?(r!=n&&v.push(g.substring(r,n)),v.push(r=c(x=g.substring(n+f,p))),r.exp=x,r=p+k,x=!0):(r!=I&&v.push(g.substring(r)),r=I);(I=v.length)||(v.push(""),I=1);if(l&&1<v.length)throw zc("noconcat",
g);if(!h||x)return u.length=I,r=function(a){try{for(var b=0,c=I,f;b<c;b++){if("function"==typeof(f=v[b]))if(f=f(a),f=l?e.getTrusted(l,f):e.valueOf(f),null==f)f="";else switch(typeof f){case "string":break;case "number":f=""+f;break;default:f=ra(f)}u[b]=f}return u.join("")}catch(k){a=zc("interr",g,k.toString()),d(a)}},r.exp=g,r.parts=v,r}var f=b.length,k=a.length;g.startSymbol=function(){return b};g.endSymbol=function(){return a};return g}]}function Sd(){this.$get=["$rootScope","$window","$q",function(b,
a,c){function d(d,f,k,m){var h=a.setInterval,l=a.clearInterval,n=c.defer(),p=n.promise,r=0,v=B(m)&&!m;k=B(k)?k:0;p.then(null,null,d);p.$$intervalId=h(function(){n.notify(r++);0<k&&r>=k&&(n.resolve(r),l(p.$$intervalId),delete e[p.$$intervalId]);v||b.$apply()},f);e[p.$$intervalId]=n;return p}var e={};d.cancel=function(a){return a&&a.$$intervalId in e?(e[a.$$intervalId].reject("canceled"),clearInterval(a.$$intervalId),delete e[a.$$intervalId],!0):!1};return d}]}function ad(){this.$get=function(){return{id:"en-us",
NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),
SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function Nb(b){b=b.split("/");for(var a=b.length;a--;)b[a]=gb(b[a]);return b.join("/")}function Ac(b,a,c){b=sa(b,c);a.$$protocol=b.protocol;a.$$host=b.hostname;a.$$port=Z(b.port)||xe[b.protocol]||null}
function Bc(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=sa(b,c);a.$$path=decodeURIComponent(d&&"/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=cc(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function pa(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function $a(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Ob(b){return b.substr(0,$a(b).lastIndexOf("/")+1)}function Cc(b,a){this.$$html5=!0;a=a||
"";var c=Ob(b);Ac(b,this,b);this.$$parse=function(a){var e=pa(c,a);if(!C(e))throw Pb("ipthprfx",a,c);Bc(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Bb(this.$$search),b=this.$$hash?"#"+gb(this.$$hash):"";this.$$url=Nb(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e;if((e=pa(b,d))!==s)return d=e,(e=pa(a,e))!==s?c+(pa("/",e)||e):b+d;if((e=pa(c,d))!==s)return c+e;if(c==d+"/")return c}}function Qb(b,a){var c=
Ob(b);Ac(b,this,b);this.$$parse=function(d){var e=pa(b,d)||pa(c,d),e="#"==e.charAt(0)?pa(a,e):this.$$html5?e:"";if(!C(e))throw Pb("ihshprfx",d,a);Bc(e,this,b);d=this.$$path;var g=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));g.exec(e)||(d=(e=g.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Bb(this.$$search),e=this.$$hash?"#"+gb(this.$$hash):"";this.$$url=Nb(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if($a(b)==
$a(a))return a}}function Rb(b,a){this.$$html5=!0;Qb.apply(this,arguments);var c=Ob(b);this.$$rewrite=function(d){var e;if(b==$a(d))return d;if(e=pa(c,d))return b+a+e;if(c===d+"/")return c};this.$$compose=function(){var c=Bb(this.$$search),e=this.$$hash?"#"+gb(this.$$hash):"";this.$$url=Nb(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function qb(b){return function(){return this[b]}}function Dc(b,a){return function(c){if(D(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Vd(){var b=
"",a=!1;this.hashPrefix=function(a){return B(a)?(b=a,this):b};this.html5Mode=function(b){return B(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,g){function f(a){c.$broadcast("$locationChangeSuccess",k.absUrl(),a)}var k,m,h=d.baseHref(),l=d.url(),n;a?(n=l.substring(0,l.indexOf("/",l.indexOf("//")+2))+(h||"/"),m=e.history?Cc:Rb):(n=$a(l),m=Qb);k=new m(n,"#"+b);k.$$parse(k.$$rewrite(l));g.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var e=
w(a.target);"a"!==L(e[0].nodeName);)if(e[0]===g[0]||!(e=e.parent())[0])return;var f=e.prop("href");U(f)&&"[object SVGAnimatedString]"===f.toString()&&(f=sa(f.animVal).href);if(m===Rb){var h=e.attr("href")||e.attr("xlink:href");if(0>h.indexOf("://"))if(f="#"+b,"/"==h[0])f=n+f+h;else if("#"==h[0])f=n+f+(k.path()||"/")+h;else{for(var l=k.path().split("/"),h=h.split("/"),p=0;p<h.length;p++)"."!=h[p]&&(".."==h[p]?l.pop():h[p].length&&l.push(h[p]));f=n+f+l.join("/")}}l=k.$$rewrite(f);f&&(!e.attr("target")&&
l&&!a.isDefaultPrevented())&&(a.preventDefault(),l!=d.url()&&(k.$$parse(l),c.$apply(),T.angular["ff-684208-preventDefault"]=!0))}});k.absUrl()!=l&&d.url(k.absUrl(),!0);d.onUrlChange(function(a){k.absUrl()!=a&&(c.$evalAsync(function(){var b=k.absUrl();k.$$parse(a);c.$broadcast("$locationChangeStart",a,b).defaultPrevented?(k.$$parse(b),d.url(b)):f(b)}),c.$$phase||c.$digest())});var p=0;c.$watch(function(){var a=d.url(),b=k.$$replace;p&&a==k.absUrl()||(p++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",
k.absUrl(),a).defaultPrevented?k.$$parse(a):(d.url(k.absUrl(),b),f(a))}));k.$$replace=!1;return p});return k}]}function Wd(){var b=!0,a=this;this.debugEnabled=function(a){return B(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?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=c.console||{},e=b[a]||b.log||y;a=!1;try{a=!!e.apply}catch(m){}return a?
function(){var a=[];q(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function ea(b,a){if("constructor"===b)throw Da("isecfld",a);return b}function ab(b,a){if(b){if(b.constructor===b)throw Da("isecfn",a);if(b.document&&b.location&&b.alert&&b.setInterval)throw Da("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&
b.attr&&b.find))throw Da("isecdom",a);}return b}function rb(b,a,c,d,e){e=e||{};a=a.split(".");for(var g,f=0;1<a.length;f++){g=ea(a.shift(),d);var k=b[g];k||(k={},b[g]=k);b=k;b.then&&e.unwrapPromises&&(ta(d),"$$v"in b||function(a){a.then(function(b){a.$$v=b})}(b),b.$$v===s&&(b.$$v={}),b=b.$$v)}g=ea(a.shift(),d);return b[g]=c}function Ec(b,a,c,d,e,g,f){ea(b,g);ea(a,g);ea(c,g);ea(d,g);ea(e,g);return f.unwrapPromises?function(f,m){var h=m&&m.hasOwnProperty(b)?m:f,l;if(null==h)return h;(h=h[b])&&h.then&&
(ta(g),"$$v"in h||(l=h,l.$$v=s,l.then(function(a){l.$$v=a})),h=h.$$v);if(!a)return h;if(null==h)return s;(h=h[a])&&h.then&&(ta(g),"$$v"in h||(l=h,l.$$v=s,l.then(function(a){l.$$v=a})),h=h.$$v);if(!c)return h;if(null==h)return s;(h=h[c])&&h.then&&(ta(g),"$$v"in h||(l=h,l.$$v=s,l.then(function(a){l.$$v=a})),h=h.$$v);if(!d)return h;if(null==h)return s;(h=h[d])&&h.then&&(ta(g),"$$v"in h||(l=h,l.$$v=s,l.then(function(a){l.$$v=a})),h=h.$$v);if(!e)return h;if(null==h)return s;(h=h[e])&&h.then&&(ta(g),"$$v"in
h||(l=h,l.$$v=s,l.then(function(a){l.$$v=a})),h=h.$$v);return h}:function(g,f){var h=f&&f.hasOwnProperty(b)?f:g;if(null==h)return h;h=h[b];if(!a)return h;if(null==h)return s;h=h[a];if(!c)return h;if(null==h)return s;h=h[c];if(!d)return h;if(null==h)return s;h=h[d];return e?null==h?s:h=h[e]:h}}function ye(b,a){ea(b,a);return function(a,d){return null==a?s:(d&&d.hasOwnProperty(b)?d:a)[b]}}function ze(b,a,c){ea(b,c);ea(a,c);return function(c,e){if(null==c)return s;c=(e&&e.hasOwnProperty(b)?e:c)[b];return null==
c?s:c[a]}}function Fc(b,a,c){if(Sb.hasOwnProperty(b))return Sb[b];var d=b.split("."),e=d.length,g;if(a.unwrapPromises||1!==e)if(a.unwrapPromises||2!==e)if(a.csp)g=6>e?Ec(d[0],d[1],d[2],d[3],d[4],c,a):function(b,g){var f=0,k;do k=Ec(d[f++],d[f++],d[f++],d[f++],d[f++],c,a)(b,g),g=s,b=k;while(f<e);return k};else{var f="var p;\n";q(d,function(b,d){ea(b,c);f+="if(s == null) return undefined;\ns="+(d?"s":'((k&&k.hasOwnProperty("'+b+'"))?k:s)')+'["'+b+'"];\n'+(a.unwrapPromises?'if (s && s.then) {\n pw("'+
c.replace(/(["\r\n])/g,"\\$1")+'");\n if (!("$$v" in s)) {\n p=s;\n p.$$v = undefined;\n p.then(function(v) {p.$$v=v;});\n}\n s=s.$$v\n}\n':"")});var f=f+"return s;",k=new Function("s","k","pw",f);k.toString=$(f);g=a.unwrapPromises?function(a,b){return k(a,b,ta)}:k}else g=ze(d[0],d[1],c);else g=ye(d[0],c);"hasOwnProperty"!==b&&(Sb[b]=g);return g}function Xd(){var b={},a={csp:!1,unwrapPromises:!1,logPromiseWarnings:!0};this.unwrapPromises=function(b){return B(b)?(a.unwrapPromises=!!b,this):a.unwrapPromises};
this.logPromiseWarnings=function(b){return B(b)?(a.logPromiseWarnings=b,this):a.logPromiseWarnings};this.$get=["$filter","$sniffer","$log",function(c,d,e){a.csp=d.csp;ta=function(b){a.logPromiseWarnings&&!Gc.hasOwnProperty(b)&&(Gc[b]=!0,e.warn("[$parse] Promise found in the expression `"+b+"`. Automatic unwrapping of promises in Angular expressions is deprecated."))};return function(d){var e;switch(typeof d){case "string":if(b.hasOwnProperty(d))return b[d];e=new Tb(a);e=(new bb(e,c,a)).parse(d);"hasOwnProperty"!==
d&&(b[d]=e);return e;case "function":return d;default:return y}}}]}function Zd(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return Ae(function(a){b.$evalAsync(a)},a)}]}function Ae(b,a){function c(a){return a}function d(a){return f(a)}var e=function(){var f=[],h,l;return l={resolve:function(a){if(f){var c=f;f=s;h=g(a);c.length&&b(function(){for(var a,b=0,d=c.length;b<d;b++)a=c[b],h.then(a[0],a[1],a[2])})}},reject:function(a){l.resolve(k(a))},notify:function(a){if(f){var c=f;f.length&&
b(function(){for(var b,d=0,e=c.length;d<e;d++)b=c[d],b[2](a)})}},promise:{then:function(b,g,k){var l=e(),I=function(d){try{l.resolve((Q(b)?b:c)(d))}catch(e){l.reject(e),a(e)}},x=function(b){try{l.resolve((Q(g)?g:d)(b))}catch(c){l.reject(c),a(c)}},u=function(b){try{l.notify((Q(k)?k:c)(b))}catch(d){a(d)}};f?f.push([I,x,u]):h.then(I,x,u);return l.promise},"catch":function(a){return this.then(null,a)},"finally":function(a){function b(a,c){var d=e();c?d.resolve(a):d.reject(a);return d.promise}function d(e,
g){var f=null;try{f=(a||c)()}catch(k){return b(k,!1)}return f&&Q(f.then)?f.then(function(){return b(e,g)},function(a){return b(a,!1)}):b(e,g)}return this.then(function(a){return d(a,!0)},function(a){return d(a,!1)})}}}},g=function(a){return a&&Q(a.then)?a:{then:function(c){var d=e();b(function(){d.resolve(c(a))});return d.promise}}},f=function(a){var b=e();b.reject(a);return b.promise},k=function(c){return{then:function(g,f){var k=e();b(function(){try{k.resolve((Q(f)?f:d)(c))}catch(b){k.reject(b),
a(b)}});return k.promise}}};return{defer:e,reject:f,when:function(k,h,l,n){var p=e(),r,v=function(b){try{return(Q(h)?h:c)(b)}catch(d){return a(d),f(d)}},I=function(b){try{return(Q(l)?l:d)(b)}catch(c){return a(c),f(c)}},x=function(b){try{return(Q(n)?n:c)(b)}catch(d){a(d)}};b(function(){g(k).then(function(a){r||(r=!0,p.resolve(g(a).then(v,I,x)))},function(a){r||(r=!0,p.resolve(I(a)))},function(a){r||p.notify(x(a))})});return p.promise},all:function(a){var b=e(),c=0,d=O(a)?[]:{};q(a,function(a,e){c++;
g(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise}}}function fe(){this.$get=["$window","$timeout",function(b,a){var c=b.requestAnimationFrame||b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame,d=b.cancelAnimationFrame||b.webkitCancelAnimationFrame||b.mozCancelAnimationFrame||b.webkitCancelRequestAnimationFrame,e=!!c,g=e?function(a){var b=c(a);return function(){d(b)}}:function(b){var c=
a(b,16.66,!1);return function(){a.cancel(c)}};g.supported=e;return g}]}function Yd(){var b=10,a=t("$rootScope"),c=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$injector","$exceptionHandler","$parse","$browser",function(d,e,g,f){function k(){this.$id=eb();this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this["this"]=this.$root=this;this.$$destroyed=!1;this.$$asyncQueue=[];this.$$postDigestQueue=[];
this.$$listeners={};this.$$listenerCount={};this.$$isolateBindings={}}function m(b){if(p.$$phase)throw a("inprog",p.$$phase);p.$$phase=b}function h(a,b){var c=g(a);Ta(c,b);return c}function l(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function n(){}k.prototype={constructor:k,$new:function(a){a?(a=new k,a.$root=this.$root,a.$$asyncQueue=this.$$asyncQueue,a.$$postDigestQueue=this.$$postDigestQueue):(this.$$childScopeClass||(this.$$childScopeClass=
function(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$id=eb();this.$$childScopeClass=null},this.$$childScopeClass.prototype=this),a=new this.$$childScopeClass);a["this"]=a;a.$parent=this;a.$$prevSibling=this.$$childTail;this.$$childHead?this.$$childTail=this.$$childTail.$$nextSibling=a:this.$$childHead=this.$$childTail=a;return a},$watch:function(a,b,d){var e=h(a,"watch"),g=this.$$watchers,f={fn:b,last:n,get:e,exp:a,
eq:!!d};c=null;if(!Q(b)){var k=h(b||y,"listener");f.fn=function(a,b,c){k(c)}}if("string"==typeof a&&e.constant){var m=f.fn;f.fn=function(a,b,c){m.call(this,a,b,c);Pa(g,f)}}g||(g=this.$$watchers=[]);g.unshift(f);return function(){Pa(g,f);c=null}},$watchCollection:function(a,b){var c=this,d,e,f,k=1<b.length,h=0,m=g(a),l=[],n={},p=!0,q=0;return this.$watch(function(){d=m(c);var a,b;if(U(d))if(db(d))for(e!==l&&(e=l,q=e.length=0,h++),a=d.length,q!==a&&(h++,e.length=q=a),b=0;b<a;b++)e[b]!==e[b]&&d[b]!==
d[b]||e[b]===d[b]||(h++,e[b]=d[b]);else{e!==n&&(e=n={},q=0,h++);a=0;for(b in d)d.hasOwnProperty(b)&&(a++,e.hasOwnProperty(b)?e[b]!==d[b]&&(h++,e[b]=d[b]):(q++,e[b]=d[b],h++));if(q>a)for(b in h++,e)e.hasOwnProperty(b)&&!d.hasOwnProperty(b)&&(q--,delete e[b])}else e!==d&&(e=d,h++);return h},function(){p?(p=!1,b(d,d,c)):b(d,f,c);if(k)if(U(d))if(db(d)){f=Array(d.length);for(var a=0;a<d.length;a++)f[a]=d[a]}else for(a in f={},d)zb.call(d,a)&&(f[a]=d[a]);else f=d})},$digest:function(){var d,g,f,k,h=this.$$asyncQueue,
l=this.$$postDigestQueue,q,z,s=b,P,N=[],w,E,A;m("$digest");c=null;do{z=!1;for(P=this;h.length;){try{A=h.shift(),A.scope.$eval(A.expression)}catch(H){p.$$phase=null,e(H)}c=null}a:do{if(k=P.$$watchers)for(q=k.length;q--;)try{if(d=k[q])if((g=d.get(P))!==(f=d.last)&&!(d.eq?xa(g,f):"number"==typeof g&&"number"==typeof f&&isNaN(g)&&isNaN(f)))z=!0,c=d,d.last=d.eq?Ga(g,null):g,d.fn(g,f===n?g:f,P),5>s&&(w=4-s,N[w]||(N[w]=[]),E=Q(d.exp)?"fn: "+(d.exp.name||d.exp.toString()):d.exp,E+="; newVal: "+ra(g)+"; oldVal: "+
ra(f),N[w].push(E));else if(d===c){z=!1;break a}}catch(B){p.$$phase=null,e(B)}if(!(k=P.$$childHead||P!==this&&P.$$nextSibling))for(;P!==this&&!(k=P.$$nextSibling);)P=P.$parent}while(P=k);if((z||h.length)&&!s--)throw p.$$phase=null,a("infdig",b,ra(N));}while(z||h.length);for(p.$$phase=null;l.length;)try{l.shift()()}catch(t){e(t)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this!==p&&(q(this.$$listenerCount,Ab(null,l,this)),a.$$childHead==
this&&(a.$$childHead=this.$$nextSibling),a.$$childTail==this&&(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=null,this.$$listeners={},this.$$watchers=this.$$asyncQueue=this.$$postDigestQueue=[],this.$destroy=this.$digest=this.$apply=y,this.$on=this.$watch=function(){return y})}},
$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a){p.$$phase||p.$$asyncQueue.length||f.defer(function(){p.$$asyncQueue.length&&p.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)},$apply:function(a){try{return m("$apply"),this.$eval(a)}catch(b){e(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw e(c),c;}}},$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(){c[Oa(c,b)]=null;l(e,1,a)}},$emit:function(a,b){var c=[],d,g=this,f=!1,k={name:a,targetScope:g,stopPropagation:function(){f=!0},preventDefault:function(){k.defaultPrevented=!0},defaultPrevented:!1},h=[k].concat(ya.call(arguments,1)),m,l;do{d=g.$$listeners[a]||c;k.currentScope=g;m=0;for(l=d.length;m<l;m++)if(d[m])try{d[m].apply(null,h)}catch(n){e(n)}else d.splice(m,1),m--,l--;if(f)break;g=g.$parent}while(g);
return k},$broadcast:function(a,b){for(var c=this,d=this,g={name:a,targetScope:this,preventDefault:function(){g.defaultPrevented=!0},defaultPrevented:!1},f=[g].concat(ya.call(arguments,1)),k,h;c=d;){g.currentScope=c;d=c.$$listeners[a]||[];k=0;for(h=d.length;k<h;k++)if(d[k])try{d[k].apply(null,f)}catch(m){e(m)}else d.splice(k,1),k--,h--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}return g}};var p=new k;return p}]}function bd(){var b=
/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*(https?|ftp|file):|data:image\//;this.aHrefSanitizationWhitelist=function(a){return B(a)?(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return B(b)?(a=b,this):a};this.$get=function(){return function(c,d){var e=d?a:b,g;if(!S||8<=S)if(g=sa(c).href,""!==g&&!g.match(e))return"unsafe:"+g;return c}}}function Be(b){if("self"===b)return b;if(C(b)){if(-1<b.indexOf("***"))throw ua("iwcard",b);b=b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,
"\\x08").replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return RegExp("^"+b+"$")}if(fb(b))return RegExp("^"+b.source+"$");throw ua("imatcher");}function Hc(b){var a=[];B(b)&&q(b,function(b){a.push(Be(b))});return a}function ae(){this.SCE_CONTEXTS=fa;var b=["self"],a=[];this.resourceUrlWhitelist=function(a){arguments.length&&(b=Hc(a));return b};this.resourceUrlBlacklist=function(b){arguments.length&&(a=Hc(b));return a};this.$get=["$injector",function(c){function d(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 e=function(a){throw ua("unsafe");};c.has("$sanitize")&&(e=c.get("$sanitize"));var g=d(),f={};f[fa.HTML]=d(g);f[fa.CSS]=d(g);f[fa.URL]=d(g);f[fa.JS]=d(g);f[fa.RESOURCE_URL]=d(f[fa.URL]);return{trustAs:function(a,b){var c=f.hasOwnProperty(a)?f[a]:null;if(!c)throw ua("icontext",a,b);if(null===b||b===
s||""===b)return b;if("string"!==typeof b)throw ua("itype",a);return new c(b)},getTrusted:function(c,d){if(null===d||d===s||""===d)return d;var g=f.hasOwnProperty(c)?f[c]:null;if(g&&d instanceof g)return d.$$unwrapTrustedValue();if(c===fa.RESOURCE_URL){var g=sa(d.toString()),l,n,p=!1;l=0;for(n=b.length;l<n;l++)if("self"===b[l]?Mb(g):b[l].exec(g.href)){p=!0;break}if(p)for(l=0,n=a.length;l<n;l++)if("self"===a[l]?Mb(g):a[l].exec(g.href)){p=!1;break}if(p)return d;throw ua("insecurl",d.toString());}if(c===
fa.HTML)return e(d);throw ua("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function $d(){var b=!0;this.enabled=function(a){arguments.length&&(b=!!a);return b};this.$get=["$parse","$sniffer","$sceDelegate",function(a,c,d){if(b&&c.msie&&8>c.msieDocumentMode)throw ua("iequirks");var e=ka(fa);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b},e.valueOf=Fa);e.parseAs=
function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b,d(a,c))}};var g=e.parseAs,f=e.getTrusted,k=e.trustAs;q(fa,function(a,b){var c=L(b);e[Va("parse_as_"+c)]=function(b){return g(a,b)};e[Va("get_trusted_"+c)]=function(b){return f(a,b)};e[Va("trust_as_"+c)]=function(b){return k(a,b)}});return e}]}function be(){this.$get=["$window","$document",function(b,a){var c={},d=Z((/android (\d+)/.exec(L((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||
{}).userAgent),g=a[0]||{},f=g.documentMode,k,m=/^(Moz|webkit|O|ms)(?=[A-Z])/,h=g.body&&g.body.style,l=!1,n=!1;if(h){for(var p in h)if(l=m.exec(p)){k=l[0];k=k.substr(0,1).toUpperCase()+k.substr(1);break}k||(k="WebkitOpacity"in h&&"webkit");l=!!("transition"in h||k+"Transition"in h);n=!!("animation"in h||k+"Animation"in h);!d||l&&n||(l=C(g.body.style.webkitTransition),n=C(g.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!f||7<
f),hasEvent:function(a){if("input"==a&&9==S)return!1;if(D(c[a])){var b=g.createElement("div");c[a]="on"+a in b}return c[a]},csp:$b(),vendorPrefix:k,transitions:l,animations:n,android:d,msie:S,msieDocumentMode:f}}]}function de(){this.$get=["$rootScope","$browser","$q","$exceptionHandler",function(b,a,c,d){function e(e,k,m){var h=c.defer(),l=h.promise,n=B(m)&&!m;k=a.defer(function(){try{h.resolve(e())}catch(a){h.reject(a),d(a)}finally{delete g[l.$$timeoutId]}n||b.$apply()},k);l.$$timeoutId=k;g[k]=h;
return l}var g={};e.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"),delete g[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return e}]}function sa(b,a){var c=b;S&&(W.setAttribute("href",c),c=W.href);W.setAttribute("href",c);return{href:W.href,protocol:W.protocol?W.protocol.replace(/:$/,""):"",host:W.host,search:W.search?W.search.replace(/^\?/,""):"",hash:W.hash?W.hash.replace(/^#/,""):"",hostname:W.hostname,port:W.port,pathname:"/"===W.pathname.charAt(0)?W.pathname:
"/"+W.pathname}}function Mb(b){b=C(b)?sa(b):b;return b.protocol===Ic.protocol&&b.host===Ic.host}function ee(){this.$get=$(T)}function kc(b){function a(d,e){if(U(d)){var g={};q(d,function(b,c){g[c]=a(c,b)});return g}return b.factory(d+c,e)}var c="Filter";this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}];a("currency",Jc);a("date",Kc);a("filter",Ce);a("json",De);a("limitTo",Ee);a("lowercase",Fe);a("number",Lc);a("orderBy",Mc);a("uppercase",Ge)}function Ce(){return function(b,
a,c){if(!O(b))return b;var d=typeof c,e=[];e.check=function(a){for(var b=0;b<e.length;b++)if(!e[b](a))return!1;return!0};"function"!==d&&(c="boolean"===d&&c?function(a,b){return Sa.equals(a,b)}:function(a,b){if(a&&b&&"object"===typeof a&&"object"===typeof b){for(var d in a)if("$"!==d.charAt(0)&&zb.call(a,d)&&c(a[d],b[d]))return!0;return!1}b=(""+b).toLowerCase();return-1<(""+a).toLowerCase().indexOf(b)});var g=function(a,b){if("string"==typeof b&&"!"===b.charAt(0))return!g(a,b.substr(1));switch(typeof a){case "boolean":case "number":case "string":return c(a,
b);case "object":switch(typeof b){case "object":return c(a,b);default:for(var d in a)if("$"!==d.charAt(0)&&g(a[d],b))return!0}return!1;case "array":for(d=0;d<a.length;d++)if(g(a[d],b))return!0;return!1;default:return!1}};switch(typeof a){case "boolean":case "number":case "string":a={$:a};case "object":for(var f in a)(function(b){"undefined"!=typeof a[b]&&e.push(function(c){return g("$"==b?c:c&&c[b],a[b])})})(f);break;case "function":e.push(a);break;default:return b}d=[];for(f=0;f<b.length;f++){var k=
b[f];e.check(k)&&d.push(k)}return d}}function Jc(b){var a=b.NUMBER_FORMATS;return function(b,d){D(d)&&(d=a.CURRENCY_SYM);return Nc(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,2).replace(/\u00A4/g,d)}}function Lc(b){var a=b.NUMBER_FORMATS;return function(b,d){return Nc(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function Nc(b,a,c,d,e){if(null==b||!isFinite(b)||U(b))return"";var g=0>b;b=Math.abs(b);var f=b+"",k="",m=[],h=!1;if(-1!==f.indexOf("e")){var l=f.match(/([\d\.]+)e(-?)(\d+)/);l&&"-"==l[2]&&
l[3]>e+1?f="0":(k=f,h=!0)}if(h)0<e&&(-1<b&&1>b)&&(k=b.toFixed(e));else{f=(f.split(Oc)[1]||"").length;D(e)&&(e=Math.min(Math.max(a.minFrac,f),a.maxFrac));f=Math.pow(10,e+1);b=Math.floor(b*f+5)/f;b=(""+b).split(Oc);f=b[0];b=b[1]||"";var l=0,n=a.lgSize,p=a.gSize;if(f.length>=n+p)for(l=f.length-n,h=0;h<l;h++)0===(l-h)%p&&0!==h&&(k+=c),k+=f.charAt(h);for(h=l;h<f.length;h++)0===(f.length-h)%n&&0!==h&&(k+=c),k+=f.charAt(h);for(;b.length<e;)b+="0";e&&"0"!==e&&(k+=d+b.substr(0,e))}m.push(g?a.negPre:a.posPre);
m.push(k);m.push(g?a.negSuf:a.posSuf);return m.join("")}function Ub(b,a,c){var d="";0>b&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function Y(b,a,c,d){c=c||0;return function(e){e=e["get"+b]();if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Ub(e,a,d)}}function sb(b,a){return function(c,d){var e=c["get"+b](),g=Ha(a?"SHORT"+b:b);return d[g][e]}}function Kc(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var g=0,f=0,k=b[8]?a.setUTCFullYear:a.setFullYear,m=
b[8]?a.setUTCHours:a.setHours;b[9]&&(g=Z(b[9]+b[10]),f=Z(b[9]+b[11]));k.call(a,Z(b[1]),Z(b[2])-1,Z(b[3]));g=Z(b[4]||0)-g;f=Z(b[5]||0)-f;k=Z(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));m.call(a,g,f,k,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var g="",f=[],k,m;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;C(c)&&(c=He.test(c)?Z(c):a(c));yb(c)&&(c=new Date(c));if(!Na(c))return c;for(;e;)(m=Ie.exec(e))?
(f=f.concat(ya.call(m,1)),e=f.pop()):(f.push(e),e=null);q(f,function(a){k=Je[a];g+=k?k(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function De(){return function(b){return ra(b,!0)}}function Ee(){return function(b,a){if(!O(b)&&!C(b))return b;a=Infinity===Math.abs(Number(a))?Number(a):Z(a);if(C(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0<a?(d=0,e=a):(d=b.length+a,e=b.length);for(;d<e;d++)c.push(b[d]);
return c}}function Mc(b){return function(a,c,d){function e(a,b){return Ra(b)?function(b,c){return a(c,b)}:a}function g(a,b){var c=typeof a,d=typeof b;return c==d?("string"==c&&(a=a.toLowerCase(),b=b.toLowerCase()),a===b?0:a<b?-1:1):c<d?-1:1}if(!O(a)||!c)return a;c=O(c)?c:[c];c=Uc(c,function(a){var c=!1,d=a||Fa;if(C(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))c="-"==a.charAt(0),a=a.substring(1);d=b(a);if(d.constant){var f=d();return e(function(a,b){return g(a[f],b[f])},c)}}return e(function(a,b){return g(d(a),
d(b))},c)});for(var f=[],k=0;k<a.length;k++)f.push(a[k]);return f.sort(e(function(a,b){for(var d=0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function va(b){Q(b)&&(b={link:b});b.restrict=b.restrict||"AC";return $(b)}function Pc(b,a,c,d){function e(a,c){c=c?"-"+hb(c,"-"):"";d.removeClass(b,(a?tb:ub)+c);d.addClass(b,(a?ub:tb)+c)}var g=this,f=b.parent().controller("form")||vb,k=0,m=g.$error={},h=[];g.$name=a.name||a.ngForm;g.$dirty=!1;g.$pristine=!0;g.$valid=!0;g.$invalid=!1;f.$addControl(g);
b.addClass(Ma);e(!0);g.$addControl=function(a){Aa(a.$name,"input");h.push(a);a.$name&&(g[a.$name]=a)};g.$removeControl=function(a){a.$name&&g[a.$name]===a&&delete g[a.$name];q(m,function(b,c){g.$setValidity(c,!0,a)});Pa(h,a)};g.$setValidity=function(a,b,c){var d=m[a];if(b)d&&(Pa(d,c),d.length||(k--,k||(e(b),g.$valid=!0,g.$invalid=!1),m[a]=!1,e(!0,a),f.$setValidity(a,!0,g)));else{k||e(b);if(d){if(-1!=Oa(d,c))return}else m[a]=d=[],k++,e(!1,a),f.$setValidity(a,!1,g);d.push(c);g.$valid=!1;g.$invalid=
!0}};g.$setDirty=function(){d.removeClass(b,Ma);d.addClass(b,wb);g.$dirty=!0;g.$pristine=!1;f.$setDirty()};g.$setPristine=function(){d.removeClass(b,wb);d.addClass(b,Ma);g.$dirty=!1;g.$pristine=!0;q(h,function(a){a.$setPristine()})}}function qa(b,a,c,d){b.$setValidity(a,c);return c?d:s}function Ke(b,a,c){var d=c.prop("validity");U(d)&&b.$parsers.push(function(c){if(b.$error[a]||!(d.badInput||d.customError||d.typeMismatch)||d.valueMissing)return c;b.$setValidity(a,!1)})}function xb(b,a,c,d,e,g){var f=
a.prop("validity"),k=a[0].placeholder,m={};if(!e.android){var h=!1;a.on("compositionstart",function(a){h=!0});a.on("compositionend",function(){h=!1;l()})}var l=function(e){if(!h){var g=a.val();if(S&&"input"===(e||m).type&&a[0].placeholder!==k)k=a[0].placeholder;else if(Ra(c.ngTrim||"T")&&(g=aa(g)),d.$viewValue!==g||f&&""===g&&!f.valueMissing)b.$$phase?d.$setViewValue(g):b.$apply(function(){d.$setViewValue(g)})}};if(e.hasEvent("input"))a.on("input",l);else{var n,p=function(){n||(n=g.defer(function(){l();
n=null}))};a.on("keydown",function(a){a=a.keyCode;91===a||(15<a&&19>a||37<=a&&40>=a)||p()});if(e.hasEvent("paste"))a.on("paste cut",p)}a.on("change",l);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var r=c.ngPattern;r&&((e=r.match(/^\/(.*)\/([gim]*)$/))?(r=RegExp(e[1],e[2]),e=function(a){return qa(d,"pattern",d.$isEmpty(a)||r.test(a),a)}):e=function(c){var e=b.$eval(r);if(!e||!e.test)throw t("ngPattern")("noregexp",r,e,ga(a));return qa(d,"pattern",d.$isEmpty(c)||e.test(c),
c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var v=Z(c.ngMinlength);e=function(a){return qa(d,"minlength",d.$isEmpty(a)||a.length>=v,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var q=Z(c.ngMaxlength);e=function(a){return qa(d,"maxlength",d.$isEmpty(a)||a.length<=q,a)};d.$parsers.push(e);d.$formatters.push(e)}}function Vb(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],l=0;l<b.length;l++)if(e==
b[l])continue a;c.push(e)}return c}function e(a){if(!O(a)){if(C(a))return a.split(" ");if(U(a)){var b=[];q(a,function(a,c){a&&(b=b.concat(c.split(" ")))});return b}}return a}return{restrict:"AC",link:function(g,f,k){function m(a,b){var c=f.data("$classCounts")||{},d=[];q(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});f.data("$classCounts",c);return d.join(" ")}function h(b){if(!0===a||g.$index%2===a){var h=e(b||[]);if(!l){var r=m(h,1);k.$addClass(r)}else if(!xa(b,l)){var q=
e(l),r=d(h,q),h=d(q,h),h=m(h,-1),r=m(r,1);0===r.length?c.removeClass(f,h):0===h.length?c.addClass(f,r):c.setClass(f,r,h)}}l=ka(b)}var l;g.$watch(k[b],h,!0);k.$observe("class",function(a){h(g.$eval(k[b]))});"ngClass"!==b&&g.$watch("$index",function(c,d){var f=c&1;if(f!==(d&1)){var h=e(g.$eval(k[b]));f===a?(f=m(h,1),k.$addClass(f)):(f=m(h,-1),k.$removeClass(f))}})}}}]}var L=function(b){return C(b)?b.toLowerCase():b},zb=Object.prototype.hasOwnProperty,Ha=function(b){return C(b)?b.toUpperCase():b},S,
w,Ba,ya=[].slice,Le=[].push,wa=Object.prototype.toString,Qa=t("ng"),Sa=T.angular||(T.angular={}),Ua,La,ja=["0","0","0"];S=Z((/msie (\d+)/.exec(L(navigator.userAgent))||[])[1]);isNaN(S)&&(S=Z((/trident\/.*; rv:(\d+)/.exec(L(navigator.userAgent))||[])[1]));y.$inject=[];Fa.$inject=[];var O=function(){return Q(Array.isArray)?Array.isArray:function(b){return"[object Array]"===wa.call(b)}}(),aa=function(){return String.prototype.trim?function(b){return C(b)?b.trim():b}:function(b){return C(b)?b.replace(/^\s\s*/,
"").replace(/\s\s*$/,""):b}}();La=9>S?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?Ha(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var Xc=/[A-Z]/g,$c={full:"1.2.18",major:1,minor:2,dot:18,codeName:"ear-extendability"},Xa=R.cache={},ib=R.expando="ng"+(new Date).getTime(),me=1,pb=T.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},Wa=T.document.removeEventListener?
function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)};R._data=function(b){return this.cache[b[this.expando]]||{}};var he=/([\:\-\_]+(.))/g,ie=/^moz([A-Z])/,Gb=t("jqLite"),je=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Hb=/<|&#?\w+;/,ke=/<([\w:]+)/,le=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,da={option:[1,'<select multiple="multiple">',"</select>"],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,"",""]};da.optgroup=da.option;da.tbody=da.tfoot=da.colgroup=da.caption=da.thead;da.th=da.td;var Ka=R.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===V.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),R(T).on("load",a))},toString:function(){var b=[];q(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?w(this[b]):w(this[this.length+b])},length:0,
push:Le,sort:[].sort,splice:[].splice},mb={};q("multiple selected checked disabled readOnly required open".split(" "),function(b){mb[L(b)]=b});var rc={};q("input select option textarea button form details".split(" "),function(b){rc[Ha(b)]=!0});q({data:nc,inheritedData:lb,scope:function(b){return w(b).data("$scope")||lb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return w(b).data("$isolateScope")||w(b).data("$isolateScopeNoTemplate")},controller:oc,injector:function(b){return lb(b,
"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Kb,css:function(b,a,c){a=Va(a);if(B(c))b.style[a]=c;else{var d;8>=S&&(d=b.currentStyle&&b.currentStyle[a],""===d&&(d="auto"));d=d||b.style[a];8>=S&&(d=""===d?s:d);return d}},attr:function(b,a,c){var d=L(a);if(mb[d])if(B(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||y).specified?d:s;else if(B(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,
2),null===b?s:b},prop:function(b,a,c){if(B(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType];if(D(d))return e?b[e]:"";b[e]=d}var a=[];9>S?(a[1]="innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(D(a)){if("SELECT"===La(b)&&b.multiple){var c=[];q(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(D(a))return b.innerHTML;for(var c=0,d=b.childNodes;c<
d.length;c++)Ia(d[c]);b.innerHTML=a},empty:pc},function(b,a){R.prototype[a]=function(a,d){var e,g,f=this.length;if(b!==pc&&(2==b.length&&b!==Kb&&b!==oc?a:d)===s){if(U(a)){for(e=0;e<f;e++)if(b===nc)b(this[e],a);else for(g in a)b(this[e],g,a[g]);return this}e=b.$dv;f=e===s?Math.min(f,1):f;for(g=0;g<f;g++){var k=b(this[g],a,d);e=e?e+k:k}return e}for(e=0;e<f;e++)b(this[e],a,d);return this}});q({removeData:lc,dealoc:Ia,on:function a(c,d,e,g){if(B(g))throw Gb("onargs");var f=la(c,"events"),k=la(c,"handle");
f||la(c,"events",f={});k||la(c,"handle",k=ne(c,f));q(d.split(" "),function(d){var g=f[d];if(!g){if("mouseenter"==d||"mouseleave"==d){var l=V.body.contains||V.body.compareDocumentPosition?function(a,c){var d=9===a.nodeType?a.documentElement:a,e=c&&c.parentNode;return a===e||!!(e&&1===e.nodeType&&(d.contains?d.contains(e):a.compareDocumentPosition&&a.compareDocumentPosition(e)&16))}:function(a,c){if(c)for(;c=c.parentNode;)if(c===a)return!0;return!1};f[d]=[];a(c,{mouseleave:"mouseout",mouseenter:"mouseover"}[d],
function(a){var c=a.relatedTarget;c&&(c===this||l(this,c))||k(a,d)})}else pb(c,d,k),f[d]=[];g=f[d]}g.push(e)})},off:mc,one:function(a,c,d){a=w(a);a.on(c,function g(){a.off(c,d);a.off(c,g)});a.on(c,d)},replaceWith:function(a,c){var d,e=a.parentNode;Ia(a);q(new R(c),function(c){d?e.insertBefore(c,d.nextSibling):e.replaceChild(c,a);d=c})},children:function(a){var c=[];q(a.childNodes,function(a){1===a.nodeType&&c.push(a)});return c},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,
c){q(new R(c),function(c){1!==a.nodeType&&11!==a.nodeType||a.appendChild(c)})},prepend:function(a,c){if(1===a.nodeType){var d=a.firstChild;q(new R(c),function(c){a.insertBefore(c,d)})}},wrap:function(a,c){c=w(c)[0];var d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},remove:function(a){Ia(a);var c=a.parentNode;c&&c.removeChild(a)},after:function(a,c){var d=a,e=a.parentNode;q(new R(c),function(a){e.insertBefore(a,d.nextSibling);d=a})},addClass:kb,removeClass:jb,toggleClass:function(a,c,d){c&&
q(c.split(" "),function(c){var g=d;D(g)&&(g=!Kb(a,c));(g?kb:jb)(a,c)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){if(a.nextElementSibling)return a.nextElementSibling;for(a=a.nextSibling;null!=a&&1!==a.nodeType;)a=a.nextSibling;return a},find:function(a,c){return a.getElementsByTagName?a.getElementsByTagName(c):[]},clone:Jb,triggerHandler:function(a,c,d){c=(la(a,"events")||{})[c];d=d||[];var e=[{preventDefault:y,stopPropagation:y}];q(c,function(c){c.apply(a,
e.concat(d))})}},function(a,c){R.prototype[c]=function(c,e,g){for(var f,k=0;k<this.length;k++)D(f)?(f=a(this[k],c,e,g),B(f)&&(f=w(f))):Ib(f,a(this[k],c,e,g));return B(f)?f:this};R.prototype.bind=R.prototype.on;R.prototype.unbind=R.prototype.off});Ya.prototype={put:function(a,c){this[Ja(a)]=c},get:function(a){return this[Ja(a)]},remove:function(a){var c=this[a=Ja(a)];delete this[a];return c}};var pe=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,qe=/,/,re=/^\s*(_?)(\S+?)\1\s*$/,oe=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,
Za=t("$injector"),Me=t("$animate"),Ld=["$provide",function(a){this.$$selectors={};this.register=function(c,d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Me("notcsel",c);this.$$selectors[c.substr(1)]=e;a.factory(e,d)};this.classNameFilter=function(a){1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null);return this.$$classNameFilter};this.$get=["$timeout","$$asyncCallback",function(a,d){return{enter:function(a,c,f,k){f?f.after(a):(c&&c[0]||(c=f.parent()),c.append(a));k&&
d(k)},leave:function(a,c){a.remove();c&&d(c)},move:function(a,c,d,k){this.enter(a,c,d,k)},addClass:function(a,c,f){c=C(c)?c:O(c)?c.join(" "):"";q(a,function(a){kb(a,c)});f&&d(f)},removeClass:function(a,c,f){c=C(c)?c:O(c)?c.join(" "):"";q(a,function(a){jb(a,c)});f&&d(f)},setClass:function(a,c,f,k){q(a,function(a){kb(a,c);jb(a,f)});k&&d(k)},enabled:y}}]}],ia=t("$compile");gc.$inject=["$provide","$$sanitizeUriProvider"];var ue=/^(x[\:\-_]|data[\:\-_])/i,zc=t("$interpolate"),Ne=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
xe={http:80,https:443,ftp:21},Pb=t("$location");Rb.prototype=Qb.prototype=Cc.prototype={$$html5:!1,$$replace:!1,absUrl:qb("$$absUrl"),url:function(a,c){if(D(a))return this.$$url;var d=Ne.exec(a);d[1]&&this.path(decodeURIComponent(d[1]));(d[2]||d[1])&&this.search(d[3]||"");this.hash(d[5]||"",c);return this},protocol:qb("$$protocol"),host:qb("$$host"),port:qb("$$port"),path:Dc("$$path",function(a){return"/"==a.charAt(0)?a:"/"+a}),search:function(a,c){switch(arguments.length){case 0:return this.$$search;
case 1:if(C(a))this.$$search=cc(a);else if(U(a))this.$$search=a;else throw Pb("isrcharg");break;default:D(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();return this},hash:Dc("$$hash",Fa),replace:function(){this.$$replace=!0;return this}};var Da=t("$parse"),Gc={},ta,cb={"null":function(){return null},"true":function(){return!0},"false":function(){return!1},undefined:y,"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return B(d)?B(e)?d+e:d:B(e)?e:s},"-":function(a,c,d,e){d=d(a,c);e=
e(a,c);return(B(d)?d:0)-(B(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"^":function(a,c,d,e){return d(a,c)^e(a,c)},"=":y,"===":function(a,c,d,e){return d(a,c)===e(a,c)},"!==":function(a,c,d,e){return d(a,c)!==e(a,c)},"==":function(a,c,d,e){return d(a,c)==e(a,c)},"!=":function(a,c,d,e){return d(a,c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,
c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Oe={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Tb=function(a){this.options=a};Tb.prototype={constructor:Tb,lex:function(a){this.text=a;this.index=0;this.ch=s;this.lastCh=":";for(this.tokens=[];this.index<
this.text.length;){this.ch=this.text.charAt(this.index);if(this.is("\"'"))this.readString(this.ch);else if(this.isNumber(this.ch)||this.is(".")&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(this.ch))this.readIdent();else if(this.is("(){}[].,;:?"))this.tokens.push({index:this.index,text:this.ch}),this.index++;else if(this.isWhitespace(this.ch)){this.index++;continue}else{a=this.ch+this.peek();var c=a+this.peek(2),d=cb[this.ch],e=cb[a],g=cb[c];g?(this.tokens.push({index:this.index,
text:c,fn:g}),this.index+=3):e?(this.tokens.push({index:this.index,text:a,fn:e}),this.index+=2):d?(this.tokens.push({index:this.index,text:this.ch,fn:d}),this.index+=1):this.throwError("Unexpected next character ",this.index,this.index+1)}this.lastCh=this.ch}return this.tokens},is:function(a){return-1!==a.indexOf(this.ch)},was:function(a){return-1!==a.indexOf(this.lastCh)},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},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=B(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw Da("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index<this.text.length;){var d=L(this.text.charAt(this.index));
if("."==d||this.isNumber(d))a+=d;else{var e=this.peek();if("e"==d&&this.isExpOperator(e))a+=d;else if(this.isExpOperator(d)&&e&&this.isNumber(e)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||e&&this.isNumber(e)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}a*=1;this.tokens.push({index:c,text:a,literal:!0,constant:!0,fn:function(){return a}})},readIdent:function(){for(var a=this,c="",d=this.index,e,g,f,k;this.index<this.text.length;){k=this.text.charAt(this.index);
if("."===k||this.isIdent(k)||this.isNumber(k))"."===k&&(e=this.index),c+=k;else break;this.index++}if(e)for(g=this.index;g<this.text.length;){k=this.text.charAt(g);if("("===k){f=c.substr(e-d+1);c=c.substr(0,e-d);this.index=g;break}if(this.isWhitespace(k))g++;else break}d={index:d,text:c};if(cb.hasOwnProperty(c))d.fn=cb[c],d.literal=!0,d.constant=!0;else{var m=Fc(c,this.options,this.text);d.fn=J(function(a,c){return m(a,c)},{assign:function(d,e){return rb(d,c,e,a.text,a.options)}})}this.tokens.push(d);
f&&(this.tokens.push({index:e,text:"."}),this.tokens.push({index:e+1,text:f}))},readString:function(a){var c=this.index;this.index++;for(var d="",e=a,g=!1;this.index<this.text.length;){var f=this.text.charAt(this.index),e=e+f;if(g)"u"===f?(f=this.text.substring(this.index+1,this.index+5),f.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=4,d+=String.fromCharCode(parseInt(f,16))):d=(g=Oe[f])?d+g:d+f,g=!1;else if("\\"===f)g=!0;else{if(f===a){this.index++;this.tokens.push({index:c,
text:e,string:d,literal:!0,constant:!0,fn:function(){return d}});return}d+=f}this.index++}this.throwError("Unterminated quote",c)}};var bb=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d};bb.ZERO=J(function(){return 0},{constant:!0});bb.prototype={constructor:bb,parse:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.statements();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);a.literal=!!a.literal;a.constant=!!a.constant;return a},primary:function(){var a;
if(this.expect("("))a=this.filterChain(),this.consume(")");else if(this.expect("["))a=this.arrayDeclaration();else if(this.expect("{"))a=this.object();else{var c=this.expect();(a=c.fn)||this.throwError("not a primary expression",c);a.literal=!!c.literal;a.constant=!!c.constant}for(var d;c=this.expect("(","[",".");)"("===c.text?(a=this.functionCall(a,d),d=null):"["===c.text?(d=a,a=this.objectIndex(a)):"."===c.text?(d=a,a=this.fieldAccess(a)):this.throwError("IMPOSSIBLE");return a},throwError:function(a,
c){throw Da("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},peekToken:function(){if(0===this.tokens.length)throw Da("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){if(0<this.tokens.length){var g=this.tokens[0],f=g.text;if(f===a||f===c||f===d||f===e||!(a||c||d||e))return g}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},consume:function(a){this.expect(a)||this.throwError("is unexpected, expecting ["+a+"]",this.peek())},
unaryFn:function(a,c){return J(function(d,e){return a(d,e,c)},{constant:c.constant})},ternaryFn:function(a,c,d){return J(function(e,g){return a(e,g)?c(e,g):d(e,g)},{constant:a.constant&&c.constant&&d.constant})},binaryFn:function(a,c,d){return J(function(e,g){return c(e,g,a,d)},{constant:a.constant&&d.constant})},statements:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.filterChain()),!this.expect(";"))return 1===a.length?a[0]:function(c,d){for(var e,g=
0;g<a.length;g++){var f=a[g];f&&(e=f(c,d))}return e}},filterChain:function(){for(var a=this.expression(),c;;)if(c=this.expect("|"))a=this.binaryFn(a,c.fn,this.filter());else return a},filter:function(){for(var a=this.expect(),c=this.$filter(a.text),d=[];;)if(a=this.expect(":"))d.push(this.expression());else{var e=function(a,e,k){k=[k];for(var m=0;m<d.length;m++)k.push(d[m](a,e));return c.apply(a,k)};return function(){return e}}},expression:function(){return this.assignment()},assignment:function(){var a=
this.ternary(),c,d;return(d=this.expect("="))?(a.assign||this.throwError("implies assignment but ["+this.text.substring(0,d.index)+"] can not be assigned to",d),c=this.ternary(),function(d,g){return a.assign(d,c(d,g),g)}):a},ternary:function(){var a=this.logicalOR(),c,d;if(this.expect("?")){c=this.ternary();if(d=this.expect(":"))return this.ternaryFn(a,c,this.ternary());this.throwError("expected :",d)}else return a},logicalOR:function(){for(var a=this.logicalAND(),c;;)if(c=this.expect("||"))a=this.binaryFn(a,
c.fn,this.logicalAND());else return a},logicalAND:function(){var a=this.equality(),c;if(c=this.expect("&&"))a=this.binaryFn(a,c.fn,this.logicalAND());return a},equality:function(){var a=this.relational(),c;if(c=this.expect("==","!=","===","!=="))a=this.binaryFn(a,c.fn,this.equality());return a},relational:function(){var a=this.additive(),c;if(c=this.expect("<",">","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+",
"-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(bb.ZERO,a.fn,this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=Fc(d,this.options,this.text);return J(function(c,d,k){return e(k||
a(c,d))},{assign:function(e,f,k){return rb(a(e,k),d,f,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return J(function(e,g){var f=a(e,g),k=d(e,g),m;if(!f)return s;(f=ab(f[k],c.text))&&(f.then&&c.options.unwrapPromises)&&(m=f,"$$v"in f||(m.$$v=s,m.then(function(a){m.$$v=a})),f=f.$$v);return f},{assign:function(e,g,f){var k=d(e,f);return ab(a(e,f),c.text)[k]=g}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());
while(this.expect(","))}this.consume(")");var e=this;return function(g,f){for(var k=[],m=c?c(g,f):g,h=0;h<d.length;h++)k.push(d[h](g,f));h=a(g,f,m)||y;ab(m,e.text);ab(h,e.text);k=h.apply?h.apply(m,k):h(k[0],k[1],k[2],k[3],k[4]);return ab(k,e.text)}},arrayDeclaration:function(){var a=[],c=!0;if("]"!==this.peekToken().text){do{if(this.peek("]"))break;var d=this.expression();a.push(d);d.constant||(c=!1)}while(this.expect(","))}this.consume("]");return J(function(c,d){for(var f=[],k=0;k<a.length;k++)f.push(a[k](c,
d));return f},{literal:!0,constant:c})},object:function(){var a=[],c=!0;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;var d=this.expect(),d=d.string||d.text;this.consume(":");var e=this.expression();a.push({key:d,value:e});e.constant||(c=!1)}while(this.expect(","))}this.consume("}");return J(function(c,d){for(var e={},m=0;m<a.length;m++){var h=a[m];e[h.key]=h.value(c,d)}return e},{literal:!0,constant:c})}};var Sb={},ua=t("$sce"),fa={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",
JS:"js"},W=V.createElement("a"),Ic=sa(T.location.href,!0);kc.$inject=["$provide"];Jc.$inject=["$locale"];Lc.$inject=["$locale"];var Oc=".",Je={yyyy:Y("FullYear",4),yy:Y("FullYear",2,0,!0),y:Y("FullYear",1),MMMM:sb("Month"),MMM:sb("Month",!0),MM:Y("Month",2,1),M:Y("Month",1,1),dd:Y("Date",2),d:Y("Date",1),HH:Y("Hours",2),H:Y("Hours",1),hh:Y("Hours",2,-12),h:Y("Hours",1,-12),mm:Y("Minutes",2),m:Y("Minutes",1),ss:Y("Seconds",2),s:Y("Seconds",1),sss:Y("Milliseconds",3),EEEE:sb("Day"),EEE:sb("Day",!0),
a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Ub(Math[0<a?"floor":"ceil"](a/60),2)+Ub(Math.abs(a%60),2))}},Ie=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,He=/^\-?\d+$/;Kc.$inject=["$locale"];var Fe=$(L),Ge=$(Ha);Mc.$inject=["$parse"];var cd=$({restrict:"E",compile:function(a,c){8>=S&&(c.href||c.name||c.$set("href",""),a.append(V.createComment("IE fix")));if(!c.href&&!c.xlinkHref&&!c.name)return function(a,
c){var g="[object SVGAnimatedString]"===wa.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(g)||a.preventDefault()})}}}),Eb={};q(mb,function(a,c){if("multiple"!=a){var d=ma("ng-"+c);Eb[d]=function(){return{priority:100,link:function(a,g,f){a.$watch(f[d],function(a){f.$set(c,!!a)})}}}}});q(["src","srcset","href"],function(a){var c=ma("ng-"+a);Eb[c]=function(){return{priority:99,link:function(d,e,g){var f=a,k=a;"href"===a&&"[object SVGAnimatedString]"===wa.call(e.prop("href"))&&
(k="xlinkHref",g.$attr[k]="xlink:href",f=null);g.$observe(c,function(a){a&&(g.$set(k,a),S&&f&&e.prop(f,g[k]))})}}}});var vb={$addControl:y,$removeControl:y,$setValidity:y,$setDirty:y,$setPristine:y};Pc.$inject=["$element","$attrs","$scope","$animate"];var Qc=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Pc,compile:function(){return{pre:function(a,e,g,f){if(!g.action){var k=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};pb(e[0],"submit",
k);e.on("$destroy",function(){c(function(){Wa(e[0],"submit",k)},0,!1)})}var m=e.parent().controller("form"),h=g.name||g.ngForm;h&&rb(a,h,f,h);if(m)e.on("$destroy",function(){m.$removeControl(f);h&&rb(a,h,s,h);J(f,vb)})}}}}}]},dd=Qc(),qd=Qc(!0),Pe=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Qe=/^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i,Re=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Rc={text:xb,number:function(a,c,d,e,g,f){xb(a,c,d,e,g,f);e.$parsers.push(function(a){var c=
e.$isEmpty(a);if(c||Re.test(a))return e.$setValidity("number",!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return s});Ke(e,"number",c);e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return qa(e,"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a),e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return qa(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return qa(e,
"number",e.$isEmpty(a)||yb(a),a)})},url:function(a,c,d,e,g,f){xb(a,c,d,e,g,f);a=function(a){return qa(e,"url",e.$isEmpty(a)||Pe.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,g,f){xb(a,c,d,e,g,f);a=function(a){return qa(e,"email",e.$isEmpty(a)||Qe.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){D(d.name)&&c.attr("name",eb());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=
d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var g=d.ngTrueValue,f=d.ngFalseValue;C(g)||(g=!0);C(f)||(f=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==g};e.$formatters.push(function(a){return a===g});e.$parsers.push(function(a){return a?g:f})},hidden:y,button:y,submit:y,reset:y,file:y},hc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel",
link:function(d,e,g,f){f&&(Rc[L(g.type)]||Rc.text)(d,e,g,f,c,a)}}}],ub="ng-valid",tb="ng-invalid",Ma="ng-pristine",wb="ng-dirty",Se=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate",function(a,c,d,e,g,f){function k(a,c){c=c?"-"+hb(c,"-"):"";f.removeClass(e,(a?tb:ub)+c);f.addClass(e,(a?ub:tb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=
d.name;var m=g(d.ngModel),h=m.assign;if(!h)throw t("ngModel")("nonassign",d.ngModel,ga(e));this.$render=y;this.$isEmpty=function(a){return D(a)||""===a||null===a||a!==a};var l=e.inheritedData("$formController")||vb,n=0,p=this.$error={};e.addClass(Ma);k(!0);this.$setValidity=function(a,c){p[a]!==!c&&(c?(p[a]&&n--,n||(k(!0),this.$valid=!0,this.$invalid=!1)):(k(!1),this.$invalid=!0,this.$valid=!1,n++),p[a]=!c,k(c,a),l.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine=
!0;f.removeClass(e,wb);f.addClass(e,Ma)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,f.removeClass(e,Ma),f.addClass(e,wb),l.$setDirty());q(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,h(a,d),q(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}}))};var r=this;a.$watch(function(){var c=m(a);if(r.$modelValue!==c){var d=r.$formatters,e=d.length;for(r.$modelValue=c;e--;)c=d[e](c);r.$viewValue!==c&&(r.$viewValue=
c,r.$render())}return c})}],Fd=function(){return{require:["ngModel","^?form"],controller:Se,link:function(a,c,d,e){var g=e[0],f=e[1]||vb;f.$addControl(g);a.$on("$destroy",function(){f.$removeControl(g)})}}},Hd=$({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),ic=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var g=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required",
!0),a};e.$formatters.push(g);e.$parsers.unshift(g);d.$observe("required",function(){g(e.$viewValue)})}}}},Gd=function(){return{require:"ngModel",link:function(a,c,d,e){var g=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!D(a)){var c=[];a&&q(a.split(g),function(a){a&&c.push(aa(a))});return c}});e.$formatters.push(function(a){return O(a)?a.join(", "):s});e.$isEmpty=function(a){return!a||!a.length}}}},Te=/^(true|false|\d+)$/,Id=function(){return{priority:100,
compile:function(a,c){return Te.test(c.ngValue)?function(a,c,g){g.$set("value",a.$eval(g.ngValue))}:function(a,c,g){a.$watch(g.ngValue,function(a){g.$set("value",a)})}}}},id=va({compile:function(a){a.addClass("ng-binding");return function(a,d,e){d.data("$binding",e.ngBind);a.$watch(e.ngBind,function(a){d.text(a==s?"":a)})}}}),kd=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],
jd=["$sce","$parse",function(a,c){return function(d,e,g){e.addClass("ng-binding").data("$binding",g.ngBindHtml);var f=c(g.ngBindHtml);d.$watch(function(){return(f(d)||"").toString()},function(c){e.html(a.getTrustedHtml(f(d))||"")})}}],ld=Vb("",!0),nd=Vb("Odd",0),md=Vb("Even",1),od=va({compile:function(a,c){c.$set("ngCloak",s);a.removeClass("ng-cloak")}}),pd=[function(){return{scope:!0,controller:"@",priority:500}}],jc={};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),
function(a){var c=ma("ng-"+a);jc[c]=["$parse",function(d){return{compile:function(e,g){var f=d(g[c]);return function(c,d){d.on(L(a),function(a){c.$apply(function(){f(c,{$event:a})})})}}}}]});var sd=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,g,f){var k,m,h;c.$watch(e.ngIf,function(g){Ra(g)?m||(m=c.$new(),f(m,function(c){c[c.length++]=V.createComment(" end ngIf: "+e.ngIf+" ");k={clone:c};a.enter(c,d.parent(),d)})):(h&&(h.remove(),
h=null),m&&(m.$destroy(),m=null),k&&(h=Db(k.clone),a.leave(h,function(){h=null}),k=null))})}}}],td=["$http","$templateCache","$anchorScroll","$animate","$sce",function(a,c,d,e,g){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Sa.noop,compile:function(f,k){var m=k.ngInclude||k.src,h=k.onload||"",l=k.autoscroll;return function(f,k,r,q,I){var s=0,u,w,F,z=function(){w&&(w.remove(),w=null);u&&(u.$destroy(),u=null);F&&(e.leave(F,function(){w=null}),w=F,F=null)};f.$watch(g.parseAsResourceUrl(m),
function(g){var m=function(){!B(l)||l&&!f.$eval(l)||d()},r=++s;g?(a.get(g,{cache:c}).success(function(a){if(r===s){var c=f.$new();q.template=a;a=I(c,function(a){z();e.enter(a,null,k,m)});u=c;F=a;u.$emit("$includeContentLoaded");f.$eval(h)}}).error(function(){r===s&&z()}),f.$emit("$includeContentRequested")):(z(),q.template=null)})}}}}],Jd=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,g){d.html(g.template);a(d.contents())(c)}}}],ud=va({priority:450,
compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),vd=va({terminal:!0,priority:1E3}),wd=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,g,f){var k=f.count,m=f.$attr.when&&g.attr(f.$attr.when),h=f.offset||0,l=e.$eval(m)||{},n={},p=c.startSymbol(),r=c.endSymbol(),s=/^when(Minus)?(.+)$/;q(f,function(a,c){s.test(c)&&(l[L(c.replace("when","").replace("Minus","-"))]=g.attr(f.$attr[c]))});q(l,function(a,e){n[e]=c(a.replace(d,p+k+"-"+h+r))});e.$watch(function(){var c=
parseFloat(e.$eval(k));if(isNaN(c))return"";c in l||(c=a.pluralCat(c-h));return n[c](e,g,!0)},function(a){g.text(a)})}}}],xd=["$parse","$animate",function(a,c){var d=t("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,link:function(e,g,f,k,m){var h=f.ngRepeat,l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),n,p,r,s,I,x,u={$id:Ja};if(!l)throw d("iexp",h);f=l[1];k=l[2];(l=l[3])?(n=a(l),p=function(a,c,d){x&&(u[x]=a);u[I]=c;u.$index=d;return n(e,
u)}):(r=function(a,c){return Ja(c)},s=function(a){return a});l=f.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!l)throw d("iidexp",f);I=l[3]||l[1];x=l[2];var B={};e.$watchCollection(k,function(a){var f,k,l=g[0],n,u={},E,A,H,t,C,y,D=[];if(db(a))C=a,n=p||r;else{n=p||s;C=[];for(H in a)a.hasOwnProperty(H)&&"$"!=H.charAt(0)&&C.push(H);C.sort()}E=C.length;k=D.length=C.length;for(f=0;f<k;f++)if(H=a===C?f:C[f],t=a[H],t=n(H,t,f),Aa(t,"`track by` id"),B.hasOwnProperty(t))y=B[t],delete B[t],u[t]=
y,D[f]=y;else{if(u.hasOwnProperty(t))throw q(D,function(a){a&&a.scope&&(B[a.id]=a)}),d("dupes",h,t);D[f]={id:t};u[t]=!1}for(H in B)B.hasOwnProperty(H)&&(y=B[H],f=Db(y.clone),c.leave(f),q(f,function(a){a.$$NG_REMOVED=!0}),y.scope.$destroy());f=0;for(k=C.length;f<k;f++){H=a===C?f:C[f];t=a[H];y=D[f];D[f-1]&&(l=D[f-1].clone[D[f-1].clone.length-1]);if(y.scope){A=y.scope;n=l;do n=n.nextSibling;while(n&&n.$$NG_REMOVED);y.clone[0]!=n&&c.move(Db(y.clone),null,w(l));l=y.clone[y.clone.length-1]}else A=e.$new();
A[I]=t;x&&(A[x]=H);A.$index=f;A.$first=0===f;A.$last=f===E-1;A.$middle=!(A.$first||A.$last);A.$odd=!(A.$even=0===(f&1));y.scope||m(A,function(a){a[a.length++]=V.createComment(" end ngRepeat: "+h+" ");c.enter(a,null,w(l));l=a;y.scope=A;y.clone=a;u[y.id]=y})}B=u})}}}],yd=["$animate",function(a){return function(c,d,e){c.$watch(e.ngShow,function(c){a[Ra(c)?"removeClass":"addClass"](d,"ng-hide")})}}],rd=["$animate",function(a){return function(c,d,e){c.$watch(e.ngHide,function(c){a[Ra(c)?"addClass":"removeClass"](d,
"ng-hide")})}}],zd=va(function(a,c,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&q(d,function(a,d){c.css(d,"")});a&&c.css(a)},!0)}),Ad=["$animate",function(a){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,g){var f=[],k=[],m=[],h=[];c.$watch(e.ngSwitch||e.on,function(d){var n,p;n=0;for(p=m.length;n<p;++n)m[n].remove();n=m.length=0;for(p=h.length;n<p;++n){var r=k[n];h[n].$destroy();m[n]=r;a.leave(r,function(){m.splice(n,1)})}k.length=0;h.length=
0;if(f=g.cases["!"+d]||g.cases["?"])c.$eval(e.change),q(f,function(d){var e=c.$new();h.push(e);d.transclude(e,function(c){var e=d.element;k.push(c);a.enter(c,e.parent(),e)})})})}}}],Bd=va({transclude:"element",priority:800,require:"^ngSwitch",link:function(a,c,d,e,g){e.cases["!"+d.ngSwitchWhen]=e.cases["!"+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:g,element:c})}}),Cd=va({transclude:"element",priority:800,require:"^ngSwitch",link:function(a,c,d,e,g){e.cases["?"]=e.cases["?"]||
[];e.cases["?"].push({transclude:g,element:c})}}),Ed=va({link:function(a,c,d,e,g){if(!g)throw t("ngTransclude")("orphan",ga(c));g(function(a){c.empty();c.append(a)})}}),ed=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(c,d){"text/ng-template"==d.type&&a.put(d.id,c[0].text)}}}],Ue=t("ngOptions"),Dd=$({terminal:!0}),fd=["$compile","$parse",function(a,c){var d=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\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]+?))?$/,
e={$setViewValue:y};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope","$attrs",function(a,c,d){var m=this,h={},l=e,n;m.databound=d.ngModel;m.init=function(a,c,d){l=a;n=d};m.addOption=function(c){Aa(c,'"option value"');h[c]=!0;l.$viewValue==c&&(a.val(c),n.parent()&&n.remove())};m.removeOption=function(a){this.hasOption(a)&&(delete h[a],l.$viewValue==a&&this.renderUnknownOption(a))};m.renderUnknownOption=function(c){c="? "+Ja(c)+" ?";n.val(c);a.prepend(n);a.val(c);n.prop("selected",
!0)};m.hasOption=function(a){return h.hasOwnProperty(a)};c.$on("$destroy",function(){m.renderUnknownOption=y})}],link:function(e,f,k,m){function h(a,c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(F.parent()&&F.remove(),c.val(a),""===a&&x.prop("selected",!0)):D(a)&&x?c.val(""):e.renderUnknownOption(a)};c.on("change",function(){a.$apply(function(){F.parent()&&F.remove();d.$setViewValue(c.val())})})}function l(a,c,d){var e;d.$render=function(){var a=new Ya(d.$viewValue);q(c.find("option"),
function(c){c.selected=B(a.get(c.value))})};a.$watch(function(){xa(e,d.$viewValue)||(e=ka(d.$viewValue),d.$render())});c.on("change",function(){a.$apply(function(){var a=[];q(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function n(e,f,g){function k(){var a={"":[]},c=[""],d,h,s,t,v;t=g.$modelValue;v=w(e)||[];var D=n?Wb(v):v,F,K,A;K={};s=!1;var E,J;if(r)if(x&&O(t))for(s=new Ya([]),A=0;A<t.length;A++)K[m]=t[A],s.put(x(e,K),t[A]);else s=new Ya(t);for(A=0;F=D.length,
A<F;A++){h=A;if(n){h=D[A];if("$"===h.charAt(0))continue;K[n]=h}K[m]=v[h];d=p(e,K)||"";(h=a[d])||(h=a[d]=[],c.push(d));r?d=B(s.remove(x?x(e,K):q(e,K))):(x?(d={},d[m]=t,d=x(e,d)===x(e,K)):d=t===q(e,K),s=s||d);E=l(e,K);E=B(E)?E:"";h.push({id:x?x(e,K):n?D[A]:A,label:E,selected:d})}r||(y||null===t?a[""].unshift({id:"",label:"",selected:!s}):s||a[""].unshift({id:"?",label:"",selected:!0}));K=0;for(D=c.length;K<D;K++){d=c[K];h=a[d];z.length<=K?(t={element:C.clone().attr("label",d),label:h.label},v=[t],z.push(v),
f.append(t.element)):(v=z[K],t=v[0],t.label!=d&&t.element.attr("label",t.label=d));E=null;A=0;for(F=h.length;A<F;A++)s=h[A],(d=v[A+1])?(E=d.element,d.label!==s.label&&E.text(d.label=s.label),d.id!==s.id&&E.val(d.id=s.id),d.selected!==s.selected&&E.prop("selected",d.selected=s.selected)):(""===s.id&&y?J=y:(J=u.clone()).val(s.id).attr("selected",s.selected).text(s.label),v.push({element:J,label:s.label,id:s.id,selected:s.selected}),E?E.after(J):t.element.append(J),E=J);for(A++;v.length>A;)v.pop().element.remove()}for(;z.length>
K;)z.pop()[0].element.remove()}var h;if(!(h=t.match(d)))throw Ue("iexp",t,ga(f));var l=c(h[2]||h[1]),m=h[4]||h[6],n=h[5],p=c(h[3]||""),q=c(h[2]?h[1]:m),w=c(h[7]),x=h[8]?c(h[8]):null,z=[[{element:f,label:""}]];y&&(a(y)(e),y.removeClass("ng-scope"),y.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=w(e)||[],d={},h,k,l,p,t,u,v;if(r)for(k=[],p=0,u=z.length;p<u;p++)for(a=z[p],l=1,t=a.length;l<t;l++){if((h=a[l].element)[0].selected){h=h.val();n&&(d[n]=h);if(x)for(v=0;v<c.length&&
(d[m]=c[v],x(e,d)!=h);v++);else d[m]=c[h];k.push(q(e,d))}}else{h=f.val();if("?"==h)k=s;else if(""===h)k=null;else if(x)for(v=0;v<c.length;v++){if(d[m]=c[v],x(e,d)==h){k=q(e,d);break}}else d[m]=c[h],n&&(d[n]=h),k=q(e,d);1<z[0].length&&z[0][1].id!==h&&(z[0][1].selected=!1)}g.$setViewValue(k)})});g.$render=k;e.$watch(k)}if(m[1]){var p=m[0];m=m[1];var r=k.multiple,t=k.ngOptions,y=!1,x,u=w(V.createElement("option")),C=w(V.createElement("optgroup")),F=u.clone();k=0;for(var z=f.children(),J=z.length;k<J;k++)if(""===
z[k].value){x=y=z.eq(k);break}p.init(m,y,F);r&&(m.$isEmpty=function(a){return!a||0===a.length});t?n(e,f,m):r?l(e,f,m):h(e,f,m,p)}}}}],hd=["$interpolate",function(a){var c={addOption:y,removeOption:y};return{restrict:"E",priority:100,compile:function(d,e){if(D(e.value)){var g=a(d.text(),!0);g||e.$set("value",d.text())}return function(a,d,e){var h=d.parent(),l=h.data("$selectController")||h.parent().data("$selectController");l&&l.databound?d.prop("selected",!1):l=c;g?a.$watch(g,function(a,c){e.$set("value",
a);a!==c&&l.removeOption(c);l.addOption(a)}):l.addOption(e.value);d.on("$destroy",function(){l.removeOption(e.value)})}}}}],gd=$({restrict:"E",terminal:!0});T.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):((Ba=T.jQuery)&&Ba.fn.on?(w=Ba,J(Ba.fn,{scope:Ka.scope,isolateScope:Ka.isolateScope,controller:Ka.controller,injector:Ka.injector,inheritedData:Ka.inheritedData}),Fb("remove",!0,!0,!1),Fb("empty",!1,!1,!1),Fb("html",!1,!1,!0)):w=R,Sa.element=w,Zc(Sa),w(V).ready(function(){Wc(V,
dc)}))})(window,document);!window.angular.$$csp()&&window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}.ng-hide-add-active,.ng-hide-remove{display:block!important;}</style>');
//# sourceMappingURL=angular.min.js.map
;
/*
 AngularJS v1.2.18
 (c) 2010-2014 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(u,f,P){'use strict';f.module("ngAnimate",["ng"]).factory("$$animateReflow",["$$rAF","$document",function(f,u){return function(e){return f(function(){e()})}}]).config(["$provide","$animateProvider",function(W,H){function e(f){for(var e=0;e<f.length;e++){var h=f[e];if(h.nodeType==aa)return h}}function C(h){return f.element(e(h))}var n=f.noop,h=f.forEach,Q=H.$$selectors,aa=1,k="$$ngAnimateState",K="ng-animate",g={running:!0};W.decorator("$animate",["$delegate","$injector","$sniffer","$rootElement",
"$$asyncCallback","$rootScope","$document",function(y,u,$,L,F,I,P){function R(a){if(a){var b=[],c={};a=a.substr(1).split(".");($.transitions||$.animations)&&b.push(u.get(Q[""]));for(var d=0;d<a.length;d++){var f=a[d],e=Q[f];e&&!c[f]&&(b.push(u.get(e)),c[f]=!0)}return b}}function M(a,b,c){function d(a,b){var c=a[b],d=a["before"+b.charAt(0).toUpperCase()+b.substr(1)];if(c||d)return"leave"==b&&(d=c,c=null),t.push({event:b,fn:c}),l.push({event:b,fn:d}),!0}function e(b,d,f){var q=[];h(b,function(a){a.fn&&
q.push(a)});var m=0;h(q,function(b,e){var h=function(){a:{if(d){(d[e]||n)();if(++m<q.length)break a;d=null}f()}};switch(b.event){case "setClass":d.push(b.fn(a,p,A,h));break;case "addClass":d.push(b.fn(a,p||c,h));break;case "removeClass":d.push(b.fn(a,A||c,h));break;default:d.push(b.fn(a,h))}});d&&0===d.length&&f()}var w=a[0];if(w){var k="setClass"==b,g=k||"addClass"==b||"removeClass"==b,p,A;f.isArray(c)&&(p=c[0],A=c[1],c=p+" "+A);var B=a.attr("class")+" "+c;if(T(B)){var r=n,v=[],l=[],x=n,m=[],t=[],
B=(" "+B).replace(/\s+/g,".");h(R(B),function(a){!d(a,b)&&k&&(d(a,"addClass"),d(a,"removeClass"))});return{node:w,event:b,className:c,isClassBased:g,isSetClassOperation:k,before:function(a){r=a;e(l,v,function(){r=n;a()})},after:function(a){x=a;e(t,m,function(){x=n;a()})},cancel:function(){v&&(h(v,function(a){(a||n)(!0)}),r(!0));m&&(h(m,function(a){(a||n)(!0)}),x(!0))}}}}}function z(a,b,c,d,e,w,g){function n(d){var e="$animate:"+d;x&&(x[e]&&0<x[e].length)&&F(function(){c.triggerHandler(e,{event:a,
className:b})})}function p(){n("before")}function A(){n("after")}function B(){n("close");g&&F(function(){g()})}function r(){r.hasBeenRun||(r.hasBeenRun=!0,w())}function v(){if(!v.hasBeenRun){v.hasBeenRun=!0;var d=c.data(k);d&&(l&&l.isClassBased?D(c,b):(F(function(){var d=c.data(k)||{};z==d.index&&D(c,b,a)}),c.data(k,d)));B()}}var l=M(c,a,b);if(l){b=l.className;var x=f.element._data(l.node),x=x&&x.events;d||(d=e?e.parent():c.parent());var m=c.data(k)||{};e=m.active||{};var t=m.totalActive||0,u=m.last;
if(l.isClassBased&&(m.disabled||u&&!u.isClassBased)||N(c,d))r(),p(),A(),v();else{d=!1;if(0<t){m=[];if(l.isClassBased)"setClass"==u.event?(m.push(u),D(c,b)):e[b]&&(y=e[b],y.event==a?d=!0:(m.push(y),D(c,b)));else if("leave"==a&&e["ng-leave"])d=!0;else{for(var y in e)m.push(e[y]),D(c,y);e={};t=0}0<m.length&&h(m,function(a){a.cancel()})}!l.isClassBased||(l.isSetClassOperation||d)||(d="addClass"==a==c.hasClass(b));if(d)r(),p(),A(),B();else{if("leave"==a)c.one("$destroy",function(a){a=f.element(this);var b=
a.data(k);b&&(b=b.active["ng-leave"])&&(b.cancel(),D(a,"ng-leave"))});c.addClass(K);var z=O++;t++;e[b]=l;c.data(k,{last:l,active:e,index:z,totalActive:t});p();l.before(function(d){var e=c.data(k);d=d||!e||!e.active[b]||l.isClassBased&&e.active[b].event!=a;r();!0===d?v():(A(),l.after(v))})}}}else r(),p(),A(),v()}function U(a){if(a=e(a))a=f.isFunction(a.getElementsByClassName)?a.getElementsByClassName(K):a.querySelectorAll("."+K),h(a,function(a){a=f.element(a);(a=a.data(k))&&a.active&&h(a.active,function(a){a.cancel()})})}
function D(a,b){if(e(a)==e(L))g.disabled||(g.running=!1,g.structural=!1);else if(b){var c=a.data(k)||{},d=!0===b;!d&&(c.active&&c.active[b])&&(c.totalActive--,delete c.active[b]);if(d||!c.totalActive)a.removeClass(K),a.removeData(k)}}function N(a,b){if(g.disabled)return!0;if(e(a)==e(L))return g.disabled||g.running;do{if(0===b.length)break;var c=e(b)==e(L),d=c?g:b.data(k),d=d&&(!!d.disabled||d.running||0<d.totalActive);if(c||d)return d;if(c)break}while(b=b.parent());return!0}var O=0;L.data(k,g);I.$$postDigest(function(){I.$$postDigest(function(){g.running=
!1})});var V=H.classNameFilter(),T=V?function(a){return V.test(a)}:function(){return!0};return{enter:function(a,b,c,d){a=f.element(a);b=b&&f.element(b);c=c&&f.element(c);this.enabled(!1,a);y.enter(a,b,c);I.$$postDigest(function(){a=C(a);z("enter","ng-enter",a,b,c,n,d)})},leave:function(a,b){a=f.element(a);U(a);this.enabled(!1,a);I.$$postDigest(function(){z("leave","ng-leave",C(a),null,null,function(){y.leave(a)},b)})},move:function(a,b,c,d){a=f.element(a);b=b&&f.element(b);c=c&&f.element(c);U(a);
this.enabled(!1,a);y.move(a,b,c);I.$$postDigest(function(){a=C(a);z("move","ng-move",a,b,c,n,d)})},addClass:function(a,b,c){a=f.element(a);a=C(a);z("addClass",b,a,null,null,function(){y.addClass(a,b)},c)},removeClass:function(a,b,c){a=f.element(a);a=C(a);z("removeClass",b,a,null,null,function(){y.removeClass(a,b)},c)},setClass:function(a,b,c,d){a=f.element(a);a=C(a);z("setClass",[b,c],a,null,null,function(){y.setClass(a,b,c)},d)},enabled:function(a,b){switch(arguments.length){case 2:if(a)D(b);else{var c=
b.data(k)||{};c.disabled=!0;b.data(k,c)}break;case 1:g.disabled=!a;break;default:a=!g.disabled}return!!a}}}]);H.register("",["$window","$sniffer","$timeout","$$animateReflow",function(k,g,C,L){function F(a,E){S&&S();X.push(E);S=L(function(){h(X,function(a){a()});X=[];S=null;q={}})}function I(a,E){var b=e(a);a=f.element(b);Y.push(a);b=Date.now()+E;b<=ea||(C.cancel(da),ea=b,da=C(function(){K(Y);Y=[]},E,!1))}function K(a){h(a,function(a){(a=a.data(m))&&(a.closeAnimationFn||n)()})}function R(a,E){var b=
E?q[E]:null;if(!b){var c=0,d=0,e=0,f=0,m,Z,s,g;h(a,function(a){if(a.nodeType==aa){a=k.getComputedStyle(a)||{};s=a[J+B];c=Math.max(M(s),c);g=a[J+r];m=a[J+v];d=Math.max(M(m),d);Z=a[p+v];f=Math.max(M(Z),f);var b=M(a[p+B]);0<b&&(b*=parseInt(a[p+l],10)||1);e=Math.max(b,e)}});b={total:0,transitionPropertyStyle:g,transitionDurationStyle:s,transitionDelayStyle:m,transitionDelay:d,transitionDuration:c,animationDelayStyle:Z,animationDelay:f,animationDuration:e};E&&(q[E]=b)}return b}function M(a){var b=0;a=
f.isString(a)?a.split(/\s*,\s*/):[];h(a,function(a){b=Math.max(parseFloat(a)||0,b)});return b}function z(a){var b=a.parent(),c=b.data(x);c||(b.data(x,++ca),c=ca);return c+"-"+e(a).getAttribute("class")}function U(a,b,c,d){var f=z(b),h=f+" "+c,k=q[h]?++q[h].total:0,g={};if(0<k){var l=c+"-stagger",g=f+" "+l;(f=!q[g])&&b.addClass(l);g=R(b,g);f&&b.removeClass(l)}d=d||function(a){return a()};b.addClass(c);var l=b.data(m)||{},s=d(function(){return R(b,h)});d=s.transitionDuration;f=s.animationDuration;if(0===
d&&0===f)return b.removeClass(c),!1;b.data(m,{running:l.running||0,itemIndex:k,stagger:g,timings:s,closeAnimationFn:n});a=0<l.running||"setClass"==a;0<d&&D(b,c,a);0<f&&(0<g.animationDelay&&0===g.animationDuration)&&(e(b).style[p]="none 0s");return!0}function D(a,b,c){"ng-enter"!=b&&("ng-move"!=b&&"ng-leave"!=b)&&c?a.addClass(t):e(a).style[J+r]="none"}function N(a,b){var c=J+r,d=e(a);d.style[c]&&0<d.style[c].length&&(d.style[c]="");a.removeClass(t)}function O(a){var b=p;a=e(a);a.style[b]&&0<a.style[b].length&&
(a.style[b]="")}function V(a,b,c,f){function g(a){b.off(z,l);b.removeClass(p);d(b,c);a=e(b);for(var fa in t)a.style.removeProperty(t[fa])}function l(a){a.stopPropagation();var b=a.originalEvent||a;a=b.$manualTimeStamp||b.timeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(Q));Math.max(a-y,0)>=x&&b>=u&&f()}var k=e(b);a=b.data(m);if(-1!=k.getAttribute("class").indexOf(c)&&a){var p="";h(c.split(" "),function(a,b){p+=(0<b?" ":"")+a+"-active"});var n=a.stagger,s=a.timings,r=a.itemIndex,u=Math.max(s.transitionDuration,
s.animationDuration),v=Math.max(s.transitionDelay,s.animationDelay),x=v*ba,y=Date.now(),z=A+" "+H,q="",t=[];if(0<s.transitionDuration){var B=s.transitionPropertyStyle;-1==B.indexOf("all")&&(q+=w+"transition-property: "+B+";",q+=w+"transition-duration: "+s.transitionDurationStyle+";",t.push(w+"transition-property"),t.push(w+"transition-duration"))}0<r&&(0<n.transitionDelay&&0===n.transitionDuration&&(q+=w+"transition-delay: "+T(s.transitionDelayStyle,n.transitionDelay,r)+"; ",t.push(w+"transition-delay")),
0<n.animationDelay&&0===n.animationDuration&&(q+=w+"animation-delay: "+T(s.animationDelayStyle,n.animationDelay,r)+"; ",t.push(w+"animation-delay")));0<t.length&&(s=k.getAttribute("style")||"",k.setAttribute("style",s+"; "+q));b.on(z,l);b.addClass(p);a.closeAnimationFn=function(){g();f()};k=(r*(Math.max(n.animationDelay,n.transitionDelay)||0)+(v+u)*W)*ba;a.running++;I(b,k);return g}f()}function T(a,b,c){var d="";h(a.split(","),function(a,e){d+=(0<e?",":"")+(c*b+parseInt(a,10))+"s"});return d}function a(a,
b,c,e){if(U(a,b,c,e))return function(a){a&&d(b,c)}}function b(a,b,c,e){if(b.data(m))return V(a,b,c,e);d(b,c);e()}function c(c,d,e,f){var g=a(c,d,e);if(g){var h=g;F(d,function(){N(d,e);O(d);h=b(c,d,e,f)});return function(a){(h||n)(a)}}f()}function d(a,b){a.removeClass(b);var c=a.data(m);c&&(c.running&&c.running--,c.running&&0!==c.running||a.removeData(m))}function G(a,b){var c="";a=f.isArray(a)?a:a.split(/\s+/);h(a,function(a,d){a&&0<a.length&&(c+=(0<d?" ":"")+a+b)});return c}var w="",J,H,p,A;u.ontransitionend===
P&&u.onwebkittransitionend!==P?(w="-webkit-",J="WebkitTransition",H="webkitTransitionEnd transitionend"):(J="transition",H="transitionend");u.onanimationend===P&&u.onwebkitanimationend!==P?(w="-webkit-",p="WebkitAnimation",A="webkitAnimationEnd animationend"):(p="animation",A="animationend");var B="Duration",r="Property",v="Delay",l="IterationCount",x="$$ngAnimateKey",m="$$ngAnimateCSS3Data",t="ng-animate-block-transitions",Q=3,W=1.5,ba=1E3,q={},ca=0,X=[],S,da=null,ea=0,Y=[];return{enter:function(a,
b){return c("enter",a,"ng-enter",b)},leave:function(a,b){return c("leave",a,"ng-leave",b)},move:function(a,b){return c("move",a,"ng-move",b)},beforeSetClass:function(b,c,d,e){var f=G(d,"-remove")+" "+G(c,"-add"),g=a("setClass",b,f,function(a){var e=b.attr("class");b.removeClass(d);b.addClass(c);a=a();b.attr("class",e);return a});if(g)return F(b,function(){N(b,f);O(b);e()}),g;e()},beforeAddClass:function(b,c,d){var e=a("addClass",b,G(c,"-add"),function(a){b.addClass(c);a=a();b.removeClass(c);return a});
if(e)return F(b,function(){N(b,c);O(b);d()}),e;d()},setClass:function(a,c,d,e){d=G(d,"-remove");c=G(c,"-add");return b("setClass",a,d+" "+c,e)},addClass:function(a,c,d){return b("addClass",a,G(c,"-add"),d)},beforeRemoveClass:function(b,c,d){var e=a("removeClass",b,G(c,"-remove"),function(a){var d=b.attr("class");b.removeClass(c);a=a();b.attr("class",d);return a});if(e)return F(b,function(){N(b,c);O(b);d()}),e;d()},removeClass:function(a,c,d){return b("removeClass",a,G(c,"-remove"),d)}}}])}])})(window,
window.angular);
//# sourceMappingURL=angular-animate.min.js.map
;
/*
 AngularJS v1.2.18
 (c) 2010-2014 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(p,h,q){'use strict';function E(a){var d=[];s(d,h.noop).chars(a);return d.join("")}function k(a){var d={};a=a.split(",");var b;for(b=0;b<a.length;b++)d[a[b]]=!0;return d}function F(a,d){function b(a,c,b,g){c=h.lowercase(c);if(t[c])for(;f.last()&&u[f.last()];)e("",f.last());v[c]&&f.last()==c&&e("",c);(g=w[c]||!!g)||f.push(c);var l={};b.replace(G,function(a,c,d,b,e){l[c]=r(d||b||e||"")});d.start&&d.start(c,l,g)}function e(a,c){var b=0,e;if(c=h.lowercase(c))for(b=f.length-1;0<=b&&f[b]!=c;b--);
if(0<=b){for(e=f.length-1;e>=b;e--)d.end&&d.end(f[e]);f.length=b}}var c,g,f=[],l=a;for(f.last=function(){return f[f.length-1]};a;){g=!0;if(f.last()&&x[f.last()])a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+f.last()+"[^>]*>","i"),function(c,a){a=a.replace(H,"$1").replace(I,"$1");d.chars&&d.chars(r(a));return""}),e("",f.last());else{if(0===a.indexOf("\x3c!--"))c=a.indexOf("--",4),0<=c&&a.lastIndexOf("--\x3e",c)===c&&(d.comment&&d.comment(a.substring(4,c)),a=a.substring(c+3),g=!1);else if(y.test(a)){if(c=a.match(y))a=
a.replace(c[0],""),g=!1}else if(J.test(a)){if(c=a.match(z))a=a.substring(c[0].length),c[0].replace(z,e),g=!1}else K.test(a)&&(c=a.match(A))&&(a=a.substring(c[0].length),c[0].replace(A,b),g=!1);g&&(c=a.indexOf("<"),g=0>c?a:a.substring(0,c),a=0>c?"":a.substring(c),d.chars&&d.chars(r(g)))}if(a==l)throw L("badparse",a);l=a}e()}function r(a){if(!a)return"";var d=M.exec(a);a=d[1];var b=d[3];if(d=d[2])n.innerHTML=d.replace(/</g,"&lt;"),d="textContent"in n?n.textContent:n.innerText;return a+d+b}function B(a){return a.replace(/&/g,
"&amp;").replace(N,function(a){var b=a.charCodeAt(0);a=a.charCodeAt(1);return"&#"+(1024*(b-55296)+(a-56320)+65536)+";"}).replace(O,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function s(a,d){var b=!1,e=h.bind(a,a.push);return{start:function(a,g,f){a=h.lowercase(a);!b&&x[a]&&(b=a);b||!0!==C[a]||(e("<"),e(a),h.forEach(g,function(b,f){var g=h.lowercase(f),k="img"===a&&"src"===g||"background"===g;!0!==P[g]||!0===D[g]&&!d(b,k)||(e(" "),e(f),e('="'),e(B(b)),e('"'))}),
e(f?"/>":">"))},end:function(a){a=h.lowercase(a);b||!0!==C[a]||(e("</"),e(a),e(">"));a==b&&(b=!1)},chars:function(a){b||e(B(a))}}}var L=h.$$minErr("$sanitize"),A=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,z=/^<\s*\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^</,J=/^<\s*\//,H=/\x3c!--(.*?)--\x3e/g,y=/<!DOCTYPE([^>]*?)>/i,I=/<!\[CDATA\[(.*?)]]\x3e/g,N=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,O=/([^\#-~| |!])/g,
w=k("area,br,col,hr,img,wbr");p=k("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr");q=k("rp,rt");var v=h.extend({},q,p),t=h.extend({},p,k("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,script,section,table,ul")),u=h.extend({},q,k("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")),x=k("script,style"),
C=h.extend({},w,t,u,v),D=k("background,cite,href,longdesc,src,usemap"),P=h.extend({},D,k("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,target,title,type,valign,value,vspace,width")),n=document.createElement("pre"),M=/^(\s*)([\s\S]*?)(\s*)$/;h.module("ngSanitize",[]).provider("$sanitize",function(){this.$get=
["$$sanitizeUri",function(a){return function(d){var b=[];F(d,s(b,function(b,c){return!/^unsafe/.test(a(b,c))}));return b.join("")}}]});h.module("ngSanitize").filter("linky",["$sanitize",function(a){var d=/((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>]/,b=/^mailto:/;return function(e,c){function g(a){a&&m.push(E(a))}function f(a,b){m.push("<a ");h.isDefined(c)&&(m.push('target="'),m.push(c),m.push('" '));m.push('href="');m.push(a);m.push('">');g(b);m.push("</a>")}if(!e)return e;
for(var l,k=e,m=[],n,p;l=k.match(d);)n=l[0],l[2]==l[3]&&(n="mailto:"+n),p=l.index,g(k.substr(0,p)),f(n,l[0].replace(b,"")),k=k.substring(p+l[0].length);g(k);return a(m.join(""))}}])})(window,window.angular);
//# sourceMappingURL=angular-sanitize.min.js.map
;
/*
 AngularJS v1.2.18
 (c) 2010-2014 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(p,f,n){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(e,b){var c={},g={},h,k=!1,l=f.copy,m=f.isUndefined;b.addPollFn(function(){var a=b.cookies();h!=a&&(h=a,l(a,g),l(a,c),k&&e.$apply())})();k=!0;e.$watch(function(){var a,d,e;for(a in g)m(c[a])&&b.cookies(a,n);for(a in c)d=c[a],f.isString(d)||(d=""+d,c[a]=d),d!==g[a]&&(b.cookies(a,d),e=!0);if(e)for(a in d=b.cookies(),c)c[a]!==d[a]&&(m(d[a])?delete c[a]:c[a]=d[a])});return c}]).factory("$cookieStore",
["$cookies",function(e){return{get:function(b){return(b=e[b])?f.fromJson(b):b},put:function(b,c){e[b]=f.toJson(c)},remove:function(b){delete e[b]}}}])})(window,window.angular);
//# sourceMappingURL=angular-cookies.min.js.map
;
/**
 * Bunch of useful filters for angularJS(with no external dependencies!)
 * @version v0.5.5 - 2015-08-07 * @link https://github.com/a8m/angular-filter
 * @author Ariel Mashraki <ariel@mashraki.co.il>
 * @license MIT License, http://www.opensource.org/licenses/MIT
 */
(function ( window, angular, undefined ) {
/*jshint globalstrict:true*/
'use strict';

var isDefined = angular.isDefined,
    isUndefined = angular.isUndefined,
    isFunction = angular.isFunction,
    isString = angular.isString,
    isNumber = angular.isNumber,
    isObject = angular.isObject,
    isArray = angular.isArray,
    forEach = angular.forEach,
    extend = angular.extend,
    copy = angular.copy,
    equals = angular.equals;


/**
 * @description
 * get an object and return array of values
 * @param object
 * @returns {Array}
 */
function toArray(object) {
  return isArray(object) 
    ? object 
    : Object.keys(object).map(function(key) {
      return object[key];
    });
}

/**
 * @param value
 * @returns {boolean}
 */
function isNull(value) {
    return value === null;
}

/**
 * @description
 * return if object contains partial object
 * @param partial{object}
 * @param object{object}
 * @returns {boolean}
 */
function objectContains(partial, object) {
  var keys = Object.keys(partial);

  return keys.map(function(el) {
    return (object[el] !== undefined) && (object[el] == partial[el]);
  }).indexOf(false) == -1;

}

/**
 * @description
 * search for approximate pattern in string
 * @param word
 * @param pattern
 * @returns {*}
 */
function hasApproxPattern(word, pattern) {
  if(pattern === '')
    return word;

  var index = word.indexOf(pattern.charAt(0));

  if(index === -1)
    return false;

  return hasApproxPattern(word.substr(index+1), pattern.substr(1))
}

/**
 * @description
 * return the first n element of an array,
 * if expression provided, is returns as long the expression return truthy
 * @param array
 * @param n {number}
 * @param expression {$parse}
 * @return array or single object
 */
function getFirstMatches(array, n, expression) {
  var count = 0;

  return array.filter(function(elm) {
    var rest = isDefined(expression) ? (count < n && expression(elm)) : count < n;
    count = rest ? count+1 : count;

    return rest;
  });
}
/**
 * Polyfill to ECMA6 String.prototype.contains
 */
if (!String.prototype.contains) {
  String.prototype.contains = function() {
    return String.prototype.indexOf.apply(this, arguments) !== -1;
  };
}

/**
 * @param num {Number}
 * @param decimal {Number}
 * @param $math
 * @returns {Number}
 */
function convertToDecimal(num, decimal, $math){
  return $math.round(num * $math.pow(10,decimal)) / ($math.pow(10,decimal));
}

/**
 * @description
 * Get an object, and return an array composed of it's properties names(nested too).
 * @param obj {Object}
 * @param stack {Array}
 * @param parent {String}
 * @returns {Array}
 * @example
 * parseKeys({ a:1, b: { c:2, d: { e: 3 } } }) ==> ["a", "b.c", "b.d.e"]
 */
function deepKeys(obj, stack, parent) {
  stack = stack || [];
  var keys = Object.keys(obj);

  keys.forEach(function(el) {
    //if it's a nested object
    if(isObject(obj[el]) && !isArray(obj[el])) {
      //concatenate the new parent if exist
      var p = parent ? parent + '.' + el : parent;
      deepKeys(obj[el], stack, p || el);
    } else {
      //create and save the key
      var key = parent ? parent + '.' + el : el;
      stack.push(key)
    }
  });
  return stack
}

/**
 * @description
 * Test if given object is a Scope instance
 * @param obj
 * @returns {Boolean}
 */
function isScope(obj) {
  return obj && obj.$evalAsync && obj.$watch;
}

/**
 * @ngdoc filter
 * @name a8m.angular
 * @kind function
 *
 * @description
 * reference to angular function
 */

angular.module('a8m.angular', [])

    .filter('isUndefined', function () {
      return function (input) {
        return angular.isUndefined(input);
      }
    })
    .filter('isDefined', function() {
      return function (input) {
        return angular.isDefined(input);
      }
    })
    .filter('isFunction', function() {
      return function (input) {
        return angular.isFunction(input);
      }
    })
    .filter('isString', function() {
      return function (input) {
        return angular.isString(input)
      }
    })
    .filter('isNumber', function() {
      return function (input) {
        return angular.isNumber(input);
      }
    })
    .filter('isArray', function() {
      return function (input) {
        return angular.isArray(input);
      }
    })
    .filter('isObject', function() {
      return function (input) {
        return angular.isObject(input);
      }
    })
    .filter('isEqual', function() {
      return function (o1, o2) {
        return angular.equals(o1, o2);
      }
    });

/**
 * @ngdoc filter
 * @name a8m.conditions
 * @kind function
 *
 * @description
 * reference to math conditions
 */
 angular.module('a8m.conditions', [])

  .filter({
    isGreaterThan  : isGreaterThanFilter,
    '>'            : isGreaterThanFilter,

    isGreaterThanOrEqualTo  : isGreaterThanOrEqualToFilter,
    '>='                    : isGreaterThanOrEqualToFilter,

    isLessThan  : isLessThanFilter,
    '<'         : isLessThanFilter,

    isLessThanOrEqualTo  : isLessThanOrEqualToFilter,
    '<='                 : isLessThanOrEqualToFilter,

    isEqualTo  : isEqualToFilter,
    '=='       : isEqualToFilter,

    isNotEqualTo  : isNotEqualToFilter,
    '!='          : isNotEqualToFilter,

    isIdenticalTo  : isIdenticalToFilter,
    '==='          : isIdenticalToFilter,

    isNotIdenticalTo  : isNotIdenticalToFilter,
    '!=='             : isNotIdenticalToFilter
  });

  function isGreaterThanFilter() {
    return function (input, check) {
      return input > check;
    };
  }

  function isGreaterThanOrEqualToFilter() {
    return function (input, check) {
      return input >= check;
    };
  }

  function isLessThanFilter() {
    return function (input, check) {
      return input < check;
    };
  }

  function isLessThanOrEqualToFilter() {
    return function (input, check) {
      return input <= check;
    };
  }

  function isEqualToFilter() {
    return function (input, check) {
      return input == check;
    };
  }

  function isNotEqualToFilter() {
    return function (input, check) {
      return input != check;
    };
  }

  function isIdenticalToFilter() {
    return function (input, check) {
      return input === check;
    };
  }

  function isNotIdenticalToFilter() {
    return function (input, check) {
      return input !== check;
    };
  }
/**
 * @ngdoc filter
 * @name isNull
 * @kind function
 *
 * @description
 * checks if value is null or not
 * @return Boolean
 */
angular.module('a8m.is-null', [])
    .filter('isNull', function () {
      return function(input) {
        return isNull(input);
      }
    });

/**
 * @ngdoc filter
 * @name after-where
 * @kind function
 *
 * @description
 * get a collection and properties object, and returns all of the items
 * in the collection after the first that found with the given properties.
 *
 */
angular.module('a8m.after-where', [])
    .filter('afterWhere', function() {
      return function (collection, object) {

        collection = isObject(collection)
          ? toArray(collection)
          : collection;

        if(!isArray(collection) || isUndefined(object)) return collection;

        var index = collection.map( function( elm ) {
          return objectContains(object, elm);
        }).indexOf( true );

        return collection.slice((index === -1) ? 0 : index);
      }
    });

/**
 * @ngdoc filter
 * @name after
 * @kind function
 *
 * @description
 * get a collection and specified count, and returns all of the items
 * in the collection after the specified count.
 *
 */

angular.module('a8m.after', [])
    .filter('after', function() {
      return function (collection, count) {
        collection = isObject(collection)
          ? toArray(collection)
          : collection;

        return (isArray(collection))
          ? collection.slice(count)
          : collection;
      }
    });

/**
 * @ngdoc filter
 * @name before-where
 * @kind function
 *
 * @description
 * get a collection and properties object, and returns all of the items
 * in the collection before the first that found with the given properties.
 */
angular.module('a8m.before-where', [])
  .filter('beforeWhere', function() {
    return function (collection, object) {

      collection = isObject(collection)
        ? toArray(collection)
        : collection;

      if(!isArray(collection) || isUndefined(object)) return collection;

      var index = collection.map( function( elm ) {
        return objectContains(object, elm);
      }).indexOf( true );

      return collection.slice(0, (index === -1) ? collection.length : ++index);
    }
  });

/**
 * @ngdoc filter
 * @name before
 * @kind function
 *
 * @description
 * get a collection and specified count, and returns all of the items
 * in the collection before the specified count.
 */
angular.module('a8m.before', [])
    .filter('before', function() {
      return function (collection, count) {
        collection = isObject(collection)
          ? toArray(collection)
          : collection;

        return (isArray(collection))
          ? collection.slice(0, (!count) ? count : --count)
          : collection;
      }
    });

/**
 * @ngdoc filter
 * @name chunkBy
 * @kind function
 *
 * @description
 * Collect data into fixed-length chunks or blocks
 */

angular.module('a8m.chunk-by', [])
  .filter('chunkBy', [function () {
    /**
     * @description
     * Get array with size `n` in `val` inside it.
     * @param n
     * @param val
     * @returns {Array}
     */
    function fill(n, val) {
      var ret = [];
      while(n--) ret[n] = val;
      return ret;
    }

    return function (array, n, fillVal) {
      if (!isArray(array)) return array;
      return array.map(function(el, i, self) {
        i = i * n;
        el = self.slice(i, i + n);
        return !isUndefined(fillVal) && el.length < n
          ? el.concat(fill(n - el.length, fillVal))
          : el;
      }).slice(0, Math.ceil(array.length / n));
    }
  }]);

/**
 * @ngdoc filter
 * @name concat
 * @kind function
 *
 * @description
 * get (array/object, object/array) and return merged collection
 */
angular.module('a8m.concat', [])
  .filter('concat', [function () {
    return function (collection, joined) {

      if (isUndefined(joined)) return collection;

      if (isArray(collection)) {
        return isObject(joined)
          ? collection.concat(toArray(joined))
          : collection.concat(joined);
      }

      if (isObject(collection)) {
        var array = toArray(collection);
        return (isObject(joined))
          ? array.concat(toArray(joined))
          : array.concat(joined);
      }
      return collection;
    };
  }
]);

/**
 * @ngdoc filter
 * @name contains
 * @kind function
 *
 * @description
 * Checks if given expression is present in one or more object in the collection
 */
angular.module('a8m.contains', [])
  .filter({
    contains: ['$parse', containsFilter],
    some: ['$parse', containsFilter]
  });

function containsFilter($parse) {
    return function (collection, expression) {

      collection = isObject(collection) ? toArray(collection) : collection;

      if(!isArray(collection) || isUndefined(expression)) {
        return false;
      }

      return collection.some(function(elm) {
        return (isObject(elm) || isFunction(expression))
          ? $parse(expression)(elm)
          : elm === expression;
      });

    }
 }

/**
 * @ngdoc filter
 * @name countBy
 * @kind function
 *
 * @description
 * Sorts a list into groups and returns a count for the number of objects in each group.
 */

angular.module('a8m.count-by', [])

  .filter('countBy', [ '$parse', function ( $parse ) {
    return function (collection, property) {

      var result = {},
        get = $parse(property),
        prop;

      collection = (isObject(collection)) ? toArray(collection) : collection;

      if(!isArray(collection) || isUndefined(property)) {
        return collection;
      }

      collection.forEach( function( elm ) {
        prop = get(elm);

        if(!result[prop]) {
          result[prop] = 0;
        }

        result[prop]++;
      });

      return result;
    }
  }]);

/**
 * @ngdoc filter
 * @name defaults
 * @kind function
 *
 * @description
 * defaultsFilter allows to specify a default fallback value for properties that resolve to undefined.
 */
angular.module('a8m.defaults', [])
  .filter('defaults', ['$parse', function( $parse ) {
    return function(collection, defaults) {

      collection = isObject(collection) ? toArray(collection) : collection;

      if(!isArray(collection) || !isObject(defaults)) {
        return collection;
      }

      var keys = deepKeys(defaults);

      collection.forEach(function(elm) {
        //loop through all the keys
        keys.forEach(function(key) {
          var getter = $parse(key);
          var setter = getter.assign;
          //if it's not exist
          if(isUndefined(getter(elm))) {
            //get from defaults, and set to the returned object
            setter(elm, getter(defaults))
          }
        });
      });

      return collection;
    }
  }]);
/**
 * @ngdoc filter
 * @name every
 * @kind function
 *
 * @description
 * Checks if given expression is present in all members in the collection
 *
 */
angular.module('a8m.every', [])
  .filter('every', ['$parse', function($parse) {
    return function (collection, expression) {
      collection = isObject(collection) ? toArray(collection) : collection;

      if(!isArray(collection) || isUndefined(expression)) {
        return true;
      }

      return collection.every( function(elm) {
        return (isObject(elm) || isFunction(expression))
          ? $parse(expression)(elm)
          : elm === expression;
      });
    }
  }]);

/**
 * @ngdoc filter
 * @name filterBy
 * @kind function
 *
 * @description
 * filter by specific properties, avoid the rest
 */
angular.module('a8m.filter-by', [])
  .filter('filterBy', ['$parse', function( $parse ) {
    return function(collection, properties, search) {
      var comparator;

      search = (isString(search) || isNumber(search)) ?
        String(search).toLowerCase() : undefined;

      collection = isObject(collection) ? toArray(collection) : collection;

      if(!isArray(collection) || isUndefined(search)) {
        return collection;
      }

      return collection.filter(function(elm) {
        return properties.some(function(prop) {

          /**
           * check if there is concatenate properties
           * example:
           * object: { first: 'foo', last:'bar' }
           * filterBy: ['first + last'] => search by full name(i.e 'foo bar')
           */
          if(!~prop.indexOf('+')) {
            comparator = $parse(prop)(elm)
          } else {
            var propList = prop.replace(new RegExp('\\s', 'g'), '').split('+');
            comparator = propList.reduce(function(prev, cur, index) {
              return (index === 1) ? $parse(prev)(elm) + ' ' + $parse(cur)(elm) :
                prev + ' ' + $parse(cur)(elm);
            });
          }

          return (isString(comparator) || isNumber(comparator))
            ? String(comparator).toLowerCase().contains(search)
            : false;
        });
      });
    }
  }]);

/**
 * @ngdoc filter
 * @name first
 * @kind function
 *
 * @description
 * Gets the first element or first n elements of an array
 * if callback is provided, is returns as long the callback return truthy
 */
angular.module('a8m.first', [])
  .filter('first', ['$parse', function( $parse ) {
    return function(collection) {
      var n
        , getter
        , args;

      collection = isObject(collection)
        ? toArray(collection)
        : collection;

      if(!isArray(collection)) {
        return collection;
      }

      args = Array.prototype.slice.call(arguments, 1);
      n = (isNumber(args[0])) ? args[0] : 1;
      getter = (!isNumber(args[0]))  ? args[0] : (!isNumber(args[1])) ? args[1] : undefined;

      return (args.length) ? getFirstMatches(collection, n,(getter) ? $parse(getter) : getter) :
        collection[0];
    }
  }]);

/**
 * @ngdoc filter
 * @name flatten
 * @kind function
 *
 * @description
 * Flattens a nested array (the nesting can be to any depth).
 * If you pass shallow, the array will only be flattened a single level
 */
angular.module('a8m.flatten', [])
  .filter('flatten', function () {
    return function(collection, shallow) {

      shallow = shallow || false;
      collection = isObject(collection)
        ? toArray(collection)
        : collection;

      if(!isArray(collection)) {
        return collection;
      }

      return !shallow
        ? flatten(collection, 0)
        : [].concat.apply([], collection);
    }
  });

/**
 * flatten nested array (the nesting can be to any depth).
 * @param array {Array}
 * @param i {int}
 * @returns {Array}
 * @private
 */
function flatten(array, i) {
  i = i || 0;

  if(i >= array.length)
    return array;

  if(isArray(array[i])) {
    return flatten(array.slice(0,i)
      .concat(array[i], array.slice(i+1)), i);
  }
  return flatten(array, i+1);
}

/**
 * @ngdoc filter
 * @name fuzzyByKey
 * @kind function
 *
 * @description
 * fuzzy string searching by key
 */
angular.module('a8m.fuzzy-by', [])
  .filter('fuzzyBy', ['$parse', function ( $parse ) {
    return function (collection, property, search, csensitive) {

      var sensitive = csensitive || false,
        prop, getter;

      collection = isObject(collection) ? toArray(collection) : collection;

      if(!isArray(collection) || isUndefined(property)
        || isUndefined(search)) {
        return collection;
      }

      getter = $parse(property);

      return collection.filter(function(elm) {

        prop = getter(elm);
        if(!isString(prop)) {
          return false;
        }

        prop = (sensitive) ? prop : prop.toLowerCase();
        search = (sensitive) ? search : search.toLowerCase();

        return hasApproxPattern(prop, search) !== false
      })
    }

 }]);
/**
 * @ngdoc filter
 * @name fuzzy
 * @kind function
 *
 * @description
 * fuzzy string searching for array of strings, objects
 */
angular.module('a8m.fuzzy', [])
  .filter('fuzzy', function () {
    return function (collection, search, csensitive) {
      var sensitive = csensitive || false;
      collection = isObject(collection) ? toArray(collection) : collection;

      if(!isArray(collection) || isUndefined(search)) {
        return collection;
      }

      search = (sensitive) ? search : search.toLowerCase();

      return collection.filter(function(elm) {
        if(isString(elm)) {
          elm = (sensitive) ? elm : elm.toLowerCase();
          return hasApproxPattern(elm, search) !== false
        }
        return (isObject(elm)) ? _hasApproximateKey(elm, search) : false;
      });

      /**
       * checks if object has key{string} that match
       * to fuzzy search pattern
       * @param object
       * @param search
       * @returns {boolean}
       * @private
       */
      function _hasApproximateKey(object, search) {
        var properties = Object.keys(object),
          prop, flag;
        return 0 < properties.filter(function (elm) {
          prop = object[elm];

          //avoid iteration if we found some key that equal[performance]
          if(flag) return true;

          if (isString(prop)) {
            prop = (sensitive) ? prop : prop.toLowerCase();
            return flag = (hasApproxPattern(prop, search) !== false);
          }

          return false;

        }).length;
      }
    }
  });

/**
 * @ngdoc filter
 * @name groupBy
 * @kind function
 *
 * @description
 * Create an object composed of keys generated from the result of running each element of a collection,
 * each key is an array of the elements.
 */

angular.module('a8m.group-by', [ 'a8m.filter-watcher' ])
  .filter('groupBy', [ '$parse', 'filterWatcher', function ( $parse, filterWatcher ) {
    return function (collection, property) {

      if(!isObject(collection) || isUndefined(property)) {
        return collection;
      }

      var getterFn = $parse(property);

      return filterWatcher.isMemoized('groupBy', arguments) ||
        filterWatcher.memoize('groupBy', arguments, this,
          _groupBy(collection, getterFn));

      /**
       * groupBy function
       * @param collection
       * @param getter
       * @returns {{}}
       */
      function _groupBy(collection, getter) {
        var result = {};
        var prop;

        forEach( collection, function( elm ) {
          prop = getter(elm);

          if(!result[prop]) {
            result[prop] = [];
          }
          result[prop].push(elm);
        });
        return result;
      }
    }
 }]);

/**
 * @ngdoc filter
 * @name isEmpty
 * @kind function
 *
 * @description
 * get collection or string and return if it empty
 */
angular.module('a8m.is-empty', [])
  .filter('isEmpty', function () {
    return function(collection) {
      return isObject(collection)
        ? !toArray(collection).length
        : !collection.length;
    }
  });

/**
 * @ngdoc filter
 * @name join
 * @kind function
 *
 * @description
 * join a collection by a provided delimiter (space by default)
 */
angular.module('a8m.join', [])
  .filter('join', function () {
    return function (input, delimiter) {
      if (isUndefined(input) || !isArray(input)) {
        return input;
      }
      if (isUndefined(delimiter)) delimiter = ' ';

      return input.join(delimiter);
    };
  })
;

/**
 * @ngdoc filter
 * @name last
 * @kind function
 *
 * @description
 * Gets the last element or last n elements of an array
 * if callback is provided, is returns as long the callback return truthy
 */
angular.module('a8m.last', [])
  .filter('last', ['$parse', function( $parse ) {
    return function(collection) {
      var n
        , getter
        , args
        //cuz reverse change our src collection
        //and we don't want side effects
        , reversed = copy(collection);

      reversed = isObject(reversed)
        ? toArray(reversed)
        : reversed;

      if(!isArray(reversed)) {
        return reversed;
      }

      args = Array.prototype.slice.call(arguments, 1);
      n = (isNumber(args[0])) ? args[0] : 1;
      getter = (!isNumber(args[0]))  ? args[0] : (!isNumber(args[1])) ? args[1] : undefined;

      return (args.length)
        //send reversed collection as arguments, and reverse it back as result
        ? getFirstMatches(reversed.reverse(), n,(getter) ? $parse(getter) : getter).reverse()
        //get the last element
        : reversed[reversed.length-1];
    }
  }]);

/**
 * @ngdoc filter
 * @name map
 * @kind function
 *
 * @description
 * Returns a new collection of the results of each expression execution.
 */
angular.module('a8m.map', [])
  .filter('map', ['$parse', function($parse) {
    return function (collection, expression) {

      collection = isObject(collection)
        ? toArray(collection)
        : collection;

      if(!isArray(collection) || isUndefined(expression)) {
        return collection;
      }

      return collection.map(function (elm) {
        return $parse(expression)(elm);
      });
    }
  }]);

/**
 * @ngdoc filter
 * @name omit
 * @kind function
 *
 * @description
 * filter collection by expression
 */

angular.module('a8m.omit', [])

  .filter('omit', ['$parse', function($parse) {
    return function (collection, expression) {

      collection = isObject(collection)
        ? toArray(collection)
        : collection;

      if(!isArray(collection) || isUndefined(expression)) {
        return collection;
      }

      return collection.filter(function (elm) {
        return !($parse(expression)(elm));
      });
    }
  }]);

/**
 * @ngdoc filter
 * @name pick
 * @kind function
 *
 * @description
 * filter collection by expression
 */

angular.module('a8m.pick', [])

  .filter('pick', ['$parse', function($parse) {
    return function (collection, expression) {

      collection = isObject(collection)
        ? toArray(collection)
        : collection;

      if(!isArray(collection) || isUndefined(expression)) {
        return collection;
      }

      return collection.filter(function (elm) {
        return $parse(expression)(elm);
      });
    }
  }]);

/**
 * @ngdoc filter
 * @name range
 * @kind function
 *
 * @description
 * rangeFilter provides some support for a for loop using numbers
 */
angular.module('a8m.range', [])
  .filter('range', function () {
    return function (input, total) {
      for (var i = 0; i < parseInt(total); i++) {
        input.push(i);
      }
      return input;
	  };
  });
/**
 * @ngdoc filter
 * @name removeWith
 * @kind function
 *
 * @description
 * get collection and properties object, and removed elements
 * with this properties
 */

angular.module('a8m.remove-with', [])
  .filter('removeWith', function() {
    return function (collection, object) {

      if(isUndefined(object)) {
        return collection;
      }
      collection = isObject(collection)
        ? toArray(collection)
        : collection;

      return collection.filter(function (elm) {
        return !objectContains(object, elm);
      });
    }
  });


/**
 * @ngdoc filter
 * @name remove
 * @kind function
 *
 * @description
 * remove specific members from collection
 */

angular.module('a8m.remove', [])

  .filter('remove', function () {
    return function (collection) {
      collection = isObject(collection) ? toArray(collection) : collection;
      var args = Array.prototype.slice.call(arguments, 1);

      if(!isArray(collection)) {
        return collection;
      }

      return collection.filter( function( member ) {
        return !args.some(function(nest) {
          return equals(nest, member);
        })
      });
    }
  });

/**
 * @ngdoc filter
 * @name reverse
 * @kind function
 *
 * @description
 * Reverses a string or collection
 */
angular.module('a8m.reverse', [])
    .filter('reverse',[ function () {
      return function (input) {
        input = isObject(input) ? toArray(input) : input;

        if(isString(input)) {
          return input.split('').reverse().join('');
        }

        return isArray(input)
          ? input.slice().reverse()
          : input;
      }
    }]);

/**
 * @ngdoc filter
 * @name searchField
 * @kind function
 *
 * @description
 * for each member, join several strings field and add them to
 * new field called 'searchField' (use for search filtering)
 */
angular.module('a8m.search-field', [])
  .filter('searchField', ['$parse', function ($parse) {
    return function (collection) {

      var get, field;

      collection = isObject(collection) ? toArray(collection) : collection;

      var args = Array.prototype.slice.call(arguments, 1);

      if(!isArray(collection) || !args.length) {
        return collection;
      }

      return collection.map(function(member) {

        field = args.map(function(field) {
          get = $parse(field);
          return get(member);
        }).join(' ');

        return extend(member, { searchField: field });
      });
    }
  }]);

/**
 * @ngdoc filter
 * @name toArray
 * @kind function
 *
 * @description
 * Convert objects into stable arrays.
 * if addKey set to true,the filter also attaches a new property
 * $key to the value containing the original key that was used in
 * the object we are iterating over to reference the property
 */
angular.module('a8m.to-array', [])
  .filter('toArray', function() {
    return function (collection, addKey) {

      if(!isObject(collection)) {
        return collection;
      }

      return !addKey
        ? toArray(collection)
        : Object.keys(collection).map(function (key) {
            return extend(collection[key], { $key: key });
          });
    }
  });

/**
 * @ngdoc filter
 * @name unique/uniq
 * @kind function
 *
 * @description
 * get collection and filter duplicate members
 * if uniqueFilter get a property(nested to) as argument it's
 * filter by this property as unique identifier
 */

angular.module('a8m.unique', [])
  .filter({
      unique: ['$parse', uniqFilter],
      uniq: ['$parse', uniqFilter]
    });

function uniqFilter($parse) {
    return function (collection, property) {

      collection = isObject(collection) ? toArray(collection) : collection;

      if (!isArray(collection)) {
        return collection;
      }

      //store all unique identifiers
      var uniqueItems = [],
          get = $parse(property);

      return (isUndefined(property))
        //if it's kind of primitive array
        ? collection.filter(function (elm, pos, self) {
          return self.indexOf(elm) === pos;
        })
        //else compare with equals
        : collection.filter(function (elm) {
          var prop = get(elm);
          if(some(uniqueItems, prop)) {
            return false;
          }
          uniqueItems.push(prop);
          return true;
      });

      //checked if the unique identifier is already exist
      function some(array, member) {
        if(isUndefined(member)) {
          return false;
        }
        return array.some(function(el) {
          return equals(el, member);
        });
      }
    }
}

/**
 * @ngdoc filter
 * @name where
 * @kind function
 *
 * @description
 * of each element in a collection to the given properties object,
 * returning an array of all elements that have equivalent property values.
 *
 */
angular.module('a8m.where', [])
  .filter('where', function() {
    return function (collection, object) {
      if(isUndefined(object)) return collection;
      collection = isObject(collection)
        ? toArray(collection)
        : collection;

      return collection.filter(function (elm) {
        return objectContains(object, elm);
      });
    }
  });

/**
 * @ngdoc filter
 * @name xor
 * @kind function
 *
 * @description
 * Exclusive or filter by expression
 */

angular.module('a8m.xor', [])

  .filter('xor', ['$parse', function($parse) {
    return function (col1, col2, expression) {

      expression = expression || false;

      col1 = isObject(col1) ? toArray(col1) : col1;
      col2 = isObject(col2) ? toArray(col2) : col2;

      if(!isArray(col1) || !isArray(col2)) return col1;

      return col1.concat(col2)
        .filter(function(elm) {
          return !(some(elm, col1) && some(elm, col2));
        });

      function some(el, col) {
        var getter = $parse(expression);
        return col.some(function(dElm) {
          return expression
            ? equals(getter(dElm), getter(el))
            : equals(dElm, el);
        });
      }
    }
  }]);

/**
 * @ngdoc filter
 * @name formatBytes
 * @kind function
 *
 * @description
 * Convert bytes into appropriate display 
 * 1024 bytes => 1 KB
 */
angular.module('a8m.math.byteFmt', ['a8m.math'])
  .filter('byteFmt', ['$math', function ($math) {
    return function (bytes, decimal) {

      if(isNumber(decimal) && isFinite(decimal) && decimal%1===0 && decimal >= 0 &&
        isNumber(bytes) && isFinite(bytes)) {
        if(bytes < 1024) { // within 1 KB so B
          return convertToDecimal(bytes, decimal, $math) + ' B';
        } else if(bytes < 1048576) { // within 1 MB so KB
          return convertToDecimal((bytes / 1024), decimal, $math) + ' KB';
        } else if(bytes < 1073741824){ // within 1 GB so MB
          return convertToDecimal((bytes / 1048576), decimal, $math) + ' MB';
        } else { // GB or more
          return convertToDecimal((bytes / 1073741824), decimal, $math) + ' GB';
        }

      }
      return "NaN";
    }
  }]);
/**
 * @ngdoc filter
 * @name degrees
 * @kind function
 *
 * @description
 * Convert angle from radians to degrees
 */
angular.module('a8m.math.degrees', ['a8m.math'])
  .filter('degrees', ['$math', function ($math) {
    return function (radians, decimal) {
      // if decimal is not an integer greater than -1, we cannot do. quit with error "NaN"
      // if degrees is not a real number, we cannot do also. quit with error "NaN"
      if(isNumber(decimal) && isFinite(decimal) && decimal%1===0 && decimal >= 0 &&
        isNumber(radians) && isFinite(radians)) {
        var degrees = (radians * 180) / $math.PI;
        return $math.round(degrees * $math.pow(10,decimal)) / ($math.pow(10,decimal));
      } else {
        return "NaN";
      }
    }
  }]);

 
 
/**
 * @ngdoc filter
 * @name formatBytes
 * @kind function
 *
 * @description
 * Convert bytes into appropriate display 
 * 1024 kilobytes => 1 MB
 */
angular.module('a8m.math.kbFmt', ['a8m.math'])
  .filter('kbFmt', ['$math', function ($math) {
    return function (bytes, decimal) {

      if(isNumber(decimal) && isFinite(decimal) && decimal%1===0 && decimal >= 0 &&
        isNumber(bytes) && isFinite(bytes)) {
        if(bytes < 1024) { // within 1 MB so KB
          return convertToDecimal(bytes, decimal, $math) + ' KB';
        } else if(bytes < 1048576) { // within 1 GB so MB
          return convertToDecimal((bytes / 1024), decimal, $math) + ' MB';
        } else {
          return convertToDecimal((bytes / 1048576), decimal, $math) + ' GB';
        }
      }
      return "NaN";
    }
  }]);
/**
 * @ngdoc module
 * @name math
 * @description
 * reference to global Math object
 */
angular.module('a8m.math', [])
  .factory('$math', ['$window', function ($window) {
    return $window.Math;
  }]);

/**
 * @ngdoc filter
 * @name max
 * @kind function
 *
 * @description
 * Math.max will get an array and return the max value. if an expression
 * is provided, will return max value by expression.
 */
angular.module('a8m.math.max', ['a8m.math'])
  .filter('max', ['$math', '$parse', function ($math, $parse) {
    return function (input, expression) {

      if(!isArray(input)) {
        return input;
      }
      return isUndefined(expression)
        ? $math.max.apply($math, input)
        : input[indexByMax(input, expression)];
    };

    /**
     * @private
     * @param array
     * @param exp
     * @returns {number|*|Number}
     */
    function indexByMax(array, exp) {
      var mappedArray = array.map(function(elm){
        return $parse(exp)(elm);
      });
      return mappedArray.indexOf($math.max.apply($math, mappedArray));
    }
  }]);
/**
 * @ngdoc filter
 * @name min
 * @kind function
 *
 * @description
 * Math.min will get an array and return the min value. if an expression
 * is provided, will return min value by expression.
 */
angular.module('a8m.math.min', ['a8m.math'])
  .filter('min', ['$math', '$parse', function ($math, $parse) {
    return function (input, expression) {

      if(!isArray(input)) {
        return input;
      }
      return isUndefined(expression)
        ? $math.min.apply($math, input)
        : input[indexByMin(input, expression)];
    };

    /**
     * @private
     * @param array
     * @param exp
     * @returns {number|*|Number}
     */
    function indexByMin(array, exp) {
      var mappedArray = array.map(function(elm){
        return $parse(exp)(elm);
      });
      return mappedArray.indexOf($math.min.apply($math, mappedArray));
    }
  }]);
/**
 * @ngdoc filter
 * @name Percent
 * @kind function
 *
 * @description
 * percentage between two numbers
 */
angular.module('a8m.math.percent', ['a8m.math'])
  .filter('percent', ['$math', '$window', function ($math, $window) {
    return function (input, divided, round) {

      var divider = isString(input) ? $window.Number(input) : input;
      divided = divided || 100;
      round = round || false;

      if (!isNumber(divider) || $window.isNaN(divider)) return input;

      return round
        ? $math.round((divider / divided) * 100)
        : (divider / divided) * 100;
    }
  }]);

/**
 * @ngdoc filter
 * @name toRadians
 * @kind function
 *
 * @description
 * Convert angle from degrees to radians
 */
angular.module('a8m.math.radians', ['a8m.math'])
  .filter('radians', ['$math', function ($math) {
    return function (degrees, decimal) {
      // if decimal is not an integer greater than -1, we cannot do. quit with error "NaN"
      // if degrees is not a real number, we cannot do also. quit with error "NaN"
      if(isNumber(decimal) && isFinite(decimal) && decimal%1===0 && decimal >= 0 &&
        isNumber(degrees) && isFinite(degrees)) {
        var radians = (degrees * 3.14159265359) / 180;
        return $math.round(radians * $math.pow(10,decimal)) / ($math.pow(10,decimal));
      }
      return "NaN";
    }
  }]);

 
 
/**
 * @ngdoc filter
 * @name Radix
 * @kind function
 *
 * @description
 * converting decimal numbers to different bases(radix)
 */
angular.module('a8m.math.radix', [])
  .filter('radix', function () {
    return function (input, radix) {
      var RANGE = /^[2-9]$|^[1-2]\d$|^3[0-6]$/;

      if(!isNumber(input) || !RANGE.test(radix)) {
        return input;
      }

      return input.toString(radix).toUpperCase();
    }
  });

/**
 * @ngdoc filter
 * @name formatBytes
 * @kind function
 *
 * @description
 * Convert number into abbreviations.
 * i.e: K for one thousand, M for Million, B for billion
 * e.g: number of users:235,221, decimal:1 => 235.2 K
 */
angular.module('a8m.math.shortFmt', ['a8m.math'])
  .filter('shortFmt', ['$math', function ($math) {
    return function (number, decimal) {
      if(isNumber(decimal) && isFinite(decimal) && decimal%1===0 && decimal >= 0 &&
        isNumber(number) && isFinite(number)){
        if(number < 1e3) {
          return number;
        } else if(number < 1e6) {
          return convertToDecimal((number / 1e3), decimal, $math) + ' K';
        } else if(number < 1e9){
          return convertToDecimal((number / 1e6), decimal, $math) + ' M';
        } else {
          return convertToDecimal((number / 1e9), decimal, $math) + ' B';
        }

      }
      return "NaN";
    }
  }]);
/**
 * @ngdoc filter
 * @name sum
 * @kind function
 *
 * @description
 * Sum up all values within an array
 */
angular.module('a8m.math.sum', [])
  .filter('sum', function () {
    return function (input, initial) {
      return !isArray(input)
        ? input
        : input.reduce(function(prev, curr) {
          return prev + curr;
        }, initial || 0);
    }
  });

/**
 * @ngdoc filter
 * @name endsWith
 * @kind function
 *
 * @description
 * checks whether string ends with the ends parameter.
 */
angular.module('a8m.ends-with', [])

  .filter('endsWith', function () {
    return function (input, ends, csensitive) {

      var sensitive = csensitive || false,
        position;

      if(!isString(input) || isUndefined(ends)) {
        return input;
      }

      input = (sensitive) ? input : input.toLowerCase();
      position = input.length - ends.length;

      return input.indexOf((sensitive) ? ends : ends.toLowerCase(), position) !== -1;
    }
  });

/**
 * @ngdoc filter
 * @name latinize
 * @kind function
 *
 * @description
 * remove accents/diacritics from a string
 */
angular.module('a8m.latinize', [])
  .filter('latinize',[ function () {
    var defaultDiacriticsRemovalap = [
      {'base':'A', 'letters':'\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F'},
      {'base':'AA','letters':'\uA732'},
      {'base':'AE','letters':'\u00C6\u01FC\u01E2'},
      {'base':'AO','letters':'\uA734'},
      {'base':'AU','letters':'\uA736'},
      {'base':'AV','letters':'\uA738\uA73A'},
      {'base':'AY','letters':'\uA73C'},
      {'base':'B', 'letters':'\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181'},
      {'base':'C', 'letters':'\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E'},
      {'base':'D', 'letters':'\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779'},
      {'base':'DZ','letters':'\u01F1\u01C4'},
      {'base':'Dz','letters':'\u01F2\u01C5'},
      {'base':'E', 'letters':'\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E'},
      {'base':'F', 'letters':'\u0046\u24BB\uFF26\u1E1E\u0191\uA77B'},
      {'base':'G', 'letters':'\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E'},
      {'base':'H', 'letters':'\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D'},
      {'base':'I', 'letters':'\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197'},
      {'base':'J', 'letters':'\u004A\u24BF\uFF2A\u0134\u0248'},
      {'base':'K', 'letters':'\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2'},
      {'base':'L', 'letters':'\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780'},
      {'base':'LJ','letters':'\u01C7'},
      {'base':'Lj','letters':'\u01C8'},
      {'base':'M', 'letters':'\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C'},
      {'base':'N', 'letters':'\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4'},
      {'base':'NJ','letters':'\u01CA'},
      {'base':'Nj','letters':'\u01CB'},
      {'base':'O', 'letters':'\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C'},
      {'base':'OI','letters':'\u01A2'},
      {'base':'OO','letters':'\uA74E'},
      {'base':'OU','letters':'\u0222'},
      {'base':'OE','letters':'\u008C\u0152'},
      {'base':'oe','letters':'\u009C\u0153'},
      {'base':'P', 'letters':'\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754'},
      {'base':'Q', 'letters':'\u0051\u24C6\uFF31\uA756\uA758\u024A'},
      {'base':'R', 'letters':'\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782'},
      {'base':'S', 'letters':'\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784'},
      {'base':'T', 'letters':'\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786'},
      {'base':'TZ','letters':'\uA728'},
      {'base':'U', 'letters':'\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244'},
      {'base':'V', 'letters':'\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245'},
      {'base':'VY','letters':'\uA760'},
      {'base':'W', 'letters':'\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72'},
      {'base':'X', 'letters':'\u0058\u24CD\uFF38\u1E8A\u1E8C'},
      {'base':'Y', 'letters':'\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE'},
      {'base':'Z', 'letters':'\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762'},
      {'base':'a', 'letters':'\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250'},
      {'base':'aa','letters':'\uA733'},
      {'base':'ae','letters':'\u00E6\u01FD\u01E3'},
      {'base':'ao','letters':'\uA735'},
      {'base':'au','letters':'\uA737'},
      {'base':'av','letters':'\uA739\uA73B'},
      {'base':'ay','letters':'\uA73D'},
      {'base':'b', 'letters':'\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253'},
      {'base':'c', 'letters':'\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184'},
      {'base':'d', 'letters':'\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A'},
      {'base':'dz','letters':'\u01F3\u01C6'},
      {'base':'e', 'letters':'\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD'},
      {'base':'f', 'letters':'\u0066\u24D5\uFF46\u1E1F\u0192\uA77C'},
      {'base':'g', 'letters':'\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F'},
      {'base':'h', 'letters':'\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265'},
      {'base':'hv','letters':'\u0195'},
      {'base':'i', 'letters':'\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131'},
      {'base':'j', 'letters':'\u006A\u24D9\uFF4A\u0135\u01F0\u0249'},
      {'base':'k', 'letters':'\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3'},
      {'base':'l', 'letters':'\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747'},
      {'base':'lj','letters':'\u01C9'},
      {'base':'m', 'letters':'\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F'},
      {'base':'n', 'letters':'\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5'},
      {'base':'nj','letters':'\u01CC'},
      {'base':'o', 'letters':'\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275'},
      {'base':'oi','letters':'\u01A3'},
      {'base':'ou','letters':'\u0223'},
      {'base':'oo','letters':'\uA74F'},
      {'base':'p','letters':'\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755'},
      {'base':'q','letters':'\u0071\u24E0\uFF51\u024B\uA757\uA759'},
      {'base':'r','letters':'\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783'},
      {'base':'s','letters':'\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B'},
      {'base':'t','letters':'\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787'},
      {'base':'tz','letters':'\uA729'},
      {'base':'u','letters': '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289'},
      {'base':'v','letters':'\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C'},
      {'base':'vy','letters':'\uA761'},
      {'base':'w','letters':'\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73'},
      {'base':'x','letters':'\u0078\u24E7\uFF58\u1E8B\u1E8D'},
      {'base':'y','letters':'\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF'},
      {'base':'z','letters':'\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763'}
    ];

    var diacriticsMap = {};
    for (var i = 0; i < defaultDiacriticsRemovalap.length; i++) {
      var letters = defaultDiacriticsRemovalap[i].letters.split("");
      for (var j = 0; j < letters.length ; j++){
        diacriticsMap[letters[j]] = defaultDiacriticsRemovalap[i].base;
      }
    }

    // "what?" version ... http://jsperf.com/diacritics/12
    function removeDiacritics (str) {
      return str.replace(/[^\u0000-\u007E]/g, function(a){
        return diacriticsMap[a] || a;
      });
    }

    return function (input) {

      return isString(input)
        ? removeDiacritics(input)
        : input;
    }
  }]);

/**
 * @ngdoc filter
 * @name ltrim
 * @kind function
 *
 * @description
 * Left trim. Similar to trimFilter, but only for left side.
 */
angular.module('a8m.ltrim', [])
  .filter('ltrim', function () {
    return function(input, chars) {

      var trim = chars || '\\s';

      return isString(input)
        ? input.replace(new RegExp('^' + trim + '+'), '')
        : input;
    }
  });

/**
 * @ngdoc filter
 * @name match
 * @kind function
 *
 * @description
 * Return the matched pattern in a string.
 */
angular.module('a8m.match', [])
  .filter('match', function () {
    return function (input, pattern, flag) {

      var reg = new RegExp(pattern, flag);

      return isString(input)
        ? input.match(reg)
        : null;
    }
  });

/**
 * @ngdoc filter
 * @name repeat
 * @kind function
 *
 * @description
 * Repeats a string n times
 */
angular.module('a8m.repeat', [])
  .filter('repeat',[ function () {
    return function (input, n, separator) {

      var times = ~~n;

      if(!isString(input)) {
        return input;
      }

      return !times
        ? input
        : strRepeat(input, --n, separator || '');
    }
  }]);

/**
 * Repeats a string n times with given separator
 * @param str string to repeat
 * @param n number of times
 * @param sep separator
 * @returns {*}
 */
function strRepeat(str, n, sep) {
  if(!n) {
    return str;
  }
  return str + sep + strRepeat(str, --n, sep);
}
/**
* @ngdoc filter
* @name rtrim
* @kind function
*
* @description
* Right trim. Similar to trimFilter, but only for right side.
*/
angular.module('a8m.rtrim', [])
  .filter('rtrim', function () {
    return function(input, chars) {

      var trim = chars || '\\s';

      return isString(input)
        ? input.replace(new RegExp(trim + '+$'), '')
        : input;
    }
  });

/**
 * @ngdoc filter
 * @name slugify
 * @kind function
 *
 * @description
 * remove spaces from string, replace with "-" or given argument
 */
angular.module('a8m.slugify', [])
  .filter('slugify',[ function () {
    return function (input, sub) {

      var replace = (isUndefined(sub)) ? '-' : sub;

      return isString(input)
        ? input.toLowerCase().replace(/\s+/g, replace)
        : input;
    }
  }]);

/**
 * @ngdoc filter
 * @name startWith
 * @kind function
 *
 * @description
 * checks whether string starts with the starts parameter.
 */
angular.module('a8m.starts-with', [])
  .filter('startsWith', function () {
    return function (input, start, csensitive) {

      var sensitive = csensitive || false;

      if(!isString(input) || isUndefined(start)) {
        return input;
      }

      input = (sensitive) ? input : input.toLowerCase();

      return !input.indexOf((sensitive) ? start : start.toLowerCase());
    }
  });

/**
 * @ngdoc filter
 * @name stringular
 * @kind function
 *
 * @description
 * get string with {n} and replace match with enumeration values
 */
angular.module('a8m.stringular', [])
  .filter('stringular', function () {
    return function(input) {

      var args = Array.prototype.slice.call(arguments, 1);

      return input.replace(/{(\d+)}/g, function (match, number) {
        return isUndefined(args[number]) ? match : args[number];
      });
    }
  });

/**
 * @ngdoc filter
 * @name stripTags
 * @kind function
 *
 * @description
 * strip html tags from string
 */
angular.module('a8m.strip-tags', [])
  .filter('stripTags', function () {
    return function(input) {
      return isString(input)
        ? input.replace(/<\S[^><]*>/g, '')
        : input;
    }
  });

/**
 * @ngdoc filter
 * @name test
 * @kind function
 *
 * @description
 * test if a string match a pattern.
 */
angular.module('a8m.test', [])
  .filter('test', function () {
    return function (input, pattern, flag) {

      var reg = new RegExp(pattern, flag);

      return isString(input)
        ? reg.test(input)
        : input;
    }
  });

/**
 * @ngdoc filter
 * @name trim
 * @kind function
 *
 * @description
 *  Strip whitespace (or other characters) from the beginning and end of a string
 */
angular.module('a8m.trim', [])
  .filter('trim', function () {
    return function(input, chars) {

      var trim = chars || '\\s';

      return isString(input)
        ? input.replace(new RegExp('^' + trim + '+|' + trim + '+$', 'g'), '')
        : input;
    }
  });

/**
 * @ngdoc filter
 * @name truncate
 * @kind function
 *
 * @description
 * truncates a string given a specified length, providing a custom string to denote an omission.
 */
angular.module('a8m.truncate', [])
  .filter('truncate', function () {
    return function(input, length, suffix, preserve) {

      length = isUndefined(length) ? input.length : length;
      preserve = preserve || false;
      suffix = suffix || '';

      if(!isString(input) || (input.length <= length)) return input;

      return input.substring(0, (preserve)
        ? ((input.indexOf(' ', length) === -1) ? input.length : input.indexOf(' ', length))
        : length) + suffix;
    };
  });

/**
 * @ngdoc filter
 * @name ucfirst
 * @kind function
 *
 * @description
 * ucfirst
 */
angular.module('a8m.ucfirst', [])
  .filter('ucfirst', [function() {
    return function(input) {
      return isString(input)
        ? input
            .split(' ')
            .map(function (ch) {
              return ch.charAt(0).toUpperCase() + ch.substring(1);
            })
            .join(' ')
        : input;
    }
  }]);

/**
 * @ngdoc filter
 * @name uriComponentEncode
 * @kind function
 *
 * @description
 * get string as parameter and return encoded string
 */
angular.module('a8m.uri-component-encode', [])
  .filter('uriComponentEncode',['$window', function ($window) {
      return function (input) {
        return isString(input)
          ? $window.encodeURIComponent(input)
          : input;
      }
    }]);

/**
 * @ngdoc filter
 * @name uriEncode
 * @kind function
 *
 * @description
 * get string as parameter and return encoded string
 */
angular.module('a8m.uri-encode', [])
  .filter('uriEncode',['$window', function ($window) {
      return function (input) {
        return isString(input)
          ? $window.encodeURI(input)
          : input;
      }
    }]);

/**
 * @ngdoc filter
 * @name wrap
 * @kind function
 *
 * @description
 * Wrap a string with another string
 */
angular.module('a8m.wrap', [])
  .filter('wrap', function () {
    return function(input, wrap, ends) {
      return isString(input) && isDefined(wrap)
        ? [wrap, input, ends || wrap].join('')
        : input;
    }
  });

/**
 * @ngdoc provider
 * @name filterWatcher
 * @kind function
 *
 * @description
 * store specific filters result in $$cache, based on scope life time(avoid memory leak).
 * on scope.$destroy remove it's cache from $$cache container
 */

angular.module('a8m.filter-watcher', [])
  .provider('filterWatcher', function() {

    this.$get = ['$window', '$rootScope', function($window, $rootScope) {

      /**
       * Cache storing
       * @type {Object}
       */
      var $$cache = {};

      /**
       * Scope listeners container
       * scope.$destroy => remove all cache keys
       * bind to current scope.
       * @type {Object}
       */
      var $$listeners = {};

      /**
       * $timeout without triggering the digest cycle
       * @type {function}
       */
      var $$timeout = $window.setTimeout;

      /**
       * @description
       * get `HashKey` string based on the given arguments.
       * @param fName
       * @param args
       * @returns {string}
       */
      function getHashKey(fName, args) {
        return [fName, angular.toJson(args)]
          .join('#')
          .replace(/"/g,'');
      }

      /**
       * @description
       * fir on $scope.$destroy,
       * remove cache based scope from `$$cache`,
       * and remove itself from `$$listeners`
       * @param event
       */
      function removeCache(event) {
        var id = event.targetScope.$id;
        forEach($$listeners[id], function(key) {
          delete $$cache[key];
        });
        delete $$listeners[id];
      }

      /**
       * @description
       * for angular version that greater than v.1.3.0
       * it clear cache when the digest cycle is end.
       */
      function cleanStateless() {
        $$timeout(function() {
          if(!$rootScope.$$phase)
            $$cache = {};
        });
      }

      /**
       * @description
       * Store hashKeys in $$listeners container
       * on scope.$destroy, remove them all(bind an event).
       * @param scope
       * @param hashKey
       * @returns {*}
       */
      function addListener(scope, hashKey) {
        var id = scope.$id;
        if(isUndefined($$listeners[id])) {
          scope.$on('$destroy', removeCache);
          $$listeners[id] = [];
        }
        return $$listeners[id].push(hashKey);
      }

      /**
       * @description
       * return the `cacheKey` or undefined.
       * @param filterName
       * @param args
       * @returns {*}
       */
      function $$isMemoized(filterName, args) {
        var hashKey = getHashKey(filterName, args);
        return $$cache[hashKey];
      }

      /**
       * @description
       * store `result` in `$$cache` container, based on the hashKey.
       * add $destroy listener and return result
       * @param filterName
       * @param args
       * @param scope
       * @param result
       * @returns {*}
       */
      function $$memoize(filterName, args, scope, result) {
        var hashKey = getHashKey(filterName, args);
        //store result in `$$cache` container
        $$cache[hashKey] = result;
        // for angular versions that less than 1.3
        // add to `$destroy` listener, a cleaner callback
        if(isScope(scope)) {
          addListener(scope, hashKey);
        } else {
          cleanStateless();
        }
        return result;
      }

      return {
        isMemoized: $$isMemoized,
        memoize: $$memoize
      }

    }];
  });
  

/**
 * @ngdoc module
 * @name angular.filters
 * @description
 * Bunch of useful filters for angularJS
 */

angular.module('angular.filter', [

  'a8m.ucfirst',
  'a8m.uri-encode',
  'a8m.uri-component-encode',
  'a8m.slugify',
  'a8m.latinize',
  'a8m.strip-tags',
  'a8m.stringular',
  'a8m.truncate',
  'a8m.starts-with',
  'a8m.ends-with',
  'a8m.wrap',
  'a8m.trim',
  'a8m.ltrim',
  'a8m.rtrim',
  'a8m.repeat',
  'a8m.test',
  'a8m.match',

  'a8m.to-array',
  'a8m.concat',
  'a8m.contains',
  'a8m.unique',
  'a8m.is-empty',
  'a8m.after',
  'a8m.after-where',
  'a8m.before',
  'a8m.before-where',
  'a8m.defaults',
  'a8m.where',
  'a8m.reverse',
  'a8m.remove',
  'a8m.remove-with',
  'a8m.group-by',
  'a8m.count-by',
  'a8m.chunk-by',
  'a8m.search-field',
  'a8m.fuzzy-by',
  'a8m.fuzzy',
  'a8m.omit',
  'a8m.pick',
  'a8m.every',
  'a8m.filter-by',
  'a8m.xor',
  'a8m.map',
  'a8m.first',
  'a8m.last',
  'a8m.flatten',
  'a8m.join',
  'a8m.range',
  
  'a8m.math',
  'a8m.math.max',
  'a8m.math.min',
  'a8m.math.percent',
  'a8m.math.radix',
  'a8m.math.sum',
  'a8m.math.degrees',
  'a8m.math.radians',
  'a8m.math.byteFmt',
  'a8m.math.kbFmt',
  'a8m.math.shortFmt',

  'a8m.angular',
  'a8m.conditions',
  'a8m.is-null',

  'a8m.filter-watcher'
]);
})( window, window.angular );;
'use strict';
angular.module("ngLocale", [], ["$provide", function($provide) {
var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
$provide.value("$locale", {
  "DATETIME_FORMATS": {
    "AMPMS": [
      "\u5348\u524d",
      "\u5348\u5f8c"
    ],
    "DAY": [
      "\u65e5\u66dc\u65e5",
      "\u6708\u66dc\u65e5",
      "\u706b\u66dc\u65e5",
      "\u6c34\u66dc\u65e5",
      "\u6728\u66dc\u65e5",
      "\u91d1\u66dc\u65e5",
      "\u571f\u66dc\u65e5"
    ],
    "MONTH": [
      "1\u6708",
      "2\u6708",
      "3\u6708",
      "4\u6708",
      "5\u6708",
      "6\u6708",
      "7\u6708",
      "8\u6708",
      "9\u6708",
      "10\u6708",
      "11\u6708",
      "12\u6708"
    ],
    "SHORTDAY": [
      "\u65e5",
      "\u6708",
      "\u706b",
      "\u6c34",
      "\u6728",
      "\u91d1",
      "\u571f"
    ],
    "SHORTMONTH": [
      "1\u6708",
      "2\u6708",
      "3\u6708",
      "4\u6708",
      "5\u6708",
      "6\u6708",
      "7\u6708",
      "8\u6708",
      "9\u6708",
      "10\u6708",
      "11\u6708",
      "12\u6708"
    ],
    "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
    "longDate": "y\u5e74M\u6708d\u65e5",
    "medium": "yyyy/MM/dd H:mm:ss",
    "mediumDate": "yyyy/MM/dd",
    "mediumTime": "H:mm:ss",
    "short": "yyyy/MM/dd H:mm",
    "shortDate": "yyyy/MM/dd",
    "shortTime": "H:mm"
  },
  "NUMBER_FORMATS": {
    "CURRENCY_SYM": "\u00a5",
    "DECIMAL_SEP": ".",
    "GROUP_SEP": ",",
    "PATTERNS": [
      {
        "gSize": 3,
        "lgSize": 3,
        "macFrac": 0,
        "maxFrac": 3,
        "minFrac": 0,
        "minInt": 1,
        "negPre": "-",
        "negSuf": "",
        "posPre": "",
        "posSuf": ""
      },
      {
        "gSize": 3,
        "lgSize": 3,
        "macFrac": 0,
        "maxFrac": 2,
        "minFrac": 2,
        "minInt": 1,
        "negPre": "\u00a4-",
        "negSuf": "",
        "posPre": "\u00a4",
        "posSuf": ""
      }
    ]
  },
  "id": "ja",
  "pluralCat": function (n) {  return PLURAL_CATEGORY.OTHER;}
});
}]);;
//! moment.js
//! version : 2.6.0
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT
//! momentjs.com
(function(a){function b(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function c(a,b){function c(){ib.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+a)}var d=!0;return i(function(){return d&&(c(),d=!1),b.apply(this,arguments)},b)}function d(a,b){return function(c){return l(a.call(this,c),b)}}function e(a,b){return function(c){return this.lang().ordinal(a.call(this,c),b)}}function f(){}function g(a){y(a),i(this,a)}function h(a){var b=r(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._milliseconds=+k+1e3*j+6e4*i+36e5*h,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._bubble()}function i(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return b.hasOwnProperty("toString")&&(a.toString=b.toString),b.hasOwnProperty("valueOf")&&(a.valueOf=b.valueOf),a}function j(a){var b,c={};for(b in a)a.hasOwnProperty(b)&&wb.hasOwnProperty(b)&&(c[b]=a[b]);return c}function k(a){return 0>a?Math.ceil(a):Math.floor(a)}function l(a,b,c){for(var d=""+Math.abs(a),e=a>=0;d.length<b;)d="0"+d;return(e?c?"+":"":"-")+d}function m(a,b,c,d){var e=b._milliseconds,f=b._days,g=b._months;d=null==d?!0:d,e&&a._d.setTime(+a._d+e*c),f&&db(a,"Date",cb(a,"Date")+f*c),g&&bb(a,cb(a,"Month")+g*c),d&&ib.updateOffset(a,f||g)}function n(a){return"[object Array]"===Object.prototype.toString.call(a)}function o(a){return"[object Date]"===Object.prototype.toString.call(a)||a instanceof Date}function p(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&t(a[d])!==t(b[d]))&&g++;return g+f}function q(a){if(a){var b=a.toLowerCase().replace(/(.)s$/,"$1");a=Zb[a]||$b[b]||b}return a}function r(a){var b,c,d={};for(c in a)a.hasOwnProperty(c)&&(b=q(c),b&&(d[b]=a[c]));return d}function s(b){var c,d;if(0===b.indexOf("week"))c=7,d="day";else{if(0!==b.indexOf("month"))return;c=12,d="month"}ib[b]=function(e,f){var g,h,i=ib.fn._lang[b],j=[];if("number"==typeof e&&(f=e,e=a),h=function(a){var b=ib().utc().set(d,a);return i.call(ib.fn._lang,b,e||"")},null!=f)return h(f);for(g=0;c>g;g++)j.push(h(g));return j}}function t(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=b>=0?Math.floor(b):Math.ceil(b)),c}function u(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function v(a,b,c){return $(ib([a,11,31+b-c]),b,c).week}function w(a){return x(a)?366:365}function x(a){return a%4===0&&a%100!==0||a%400===0}function y(a){var b;a._a&&-2===a._pf.overflow&&(b=a._a[pb]<0||a._a[pb]>11?pb:a._a[qb]<1||a._a[qb]>u(a._a[ob],a._a[pb])?qb:a._a[rb]<0||a._a[rb]>23?rb:a._a[sb]<0||a._a[sb]>59?sb:a._a[tb]<0||a._a[tb]>59?tb:a._a[ub]<0||a._a[ub]>999?ub:-1,a._pf._overflowDayOfYear&&(ob>b||b>qb)&&(b=qb),a._pf.overflow=b)}function z(a){return null==a._isValid&&(a._isValid=!isNaN(a._d.getTime())&&a._pf.overflow<0&&!a._pf.empty&&!a._pf.invalidMonth&&!a._pf.nullInput&&!a._pf.invalidFormat&&!a._pf.userInvalidated,a._strict&&(a._isValid=a._isValid&&0===a._pf.charsLeftOver&&0===a._pf.unusedTokens.length)),a._isValid}function A(a){return a?a.toLowerCase().replace("_","-"):a}function B(a,b){return b._isUTC?ib(a).zone(b._offset||0):ib(a).local()}function C(a,b){return b.abbr=a,vb[a]||(vb[a]=new f),vb[a].set(b),vb[a]}function D(a){delete vb[a]}function E(a){var b,c,d,e,f=0,g=function(a){if(!vb[a]&&xb)try{require("./lang/"+a)}catch(b){}return vb[a]};if(!a)return ib.fn._lang;if(!n(a)){if(c=g(a))return c;a=[a]}for(;f<a.length;){for(e=A(a[f]).split("-"),b=e.length,d=A(a[f+1]),d=d?d.split("-"):null;b>0;){if(c=g(e.slice(0,b).join("-")))return c;if(d&&d.length>=b&&p(e,d,!0)>=b-1)break;b--}f++}return ib.fn._lang}function F(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function G(a){var b,c,d=a.match(Bb);for(b=0,c=d.length;c>b;b++)d[b]=cc[d[b]]?cc[d[b]]:F(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function H(a,b){return a.isValid()?(b=I(b,a.lang()),_b[b]||(_b[b]=G(b)),_b[b](a)):a.lang().invalidDate()}function I(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Cb.lastIndex=0;d>=0&&Cb.test(a);)a=a.replace(Cb,c),Cb.lastIndex=0,d-=1;return a}function J(a,b){var c,d=b._strict;switch(a){case"Q":return Nb;case"DDDD":return Pb;case"YYYY":case"GGGG":case"gggg":return d?Qb:Fb;case"Y":case"G":case"g":return Sb;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return d?Rb:Gb;case"S":if(d)return Nb;case"SS":if(d)return Ob;case"SSS":if(d)return Pb;case"DDD":return Eb;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Ib;case"a":case"A":return E(b._l)._meridiemParse;case"X":return Lb;case"Z":case"ZZ":return Jb;case"T":return Kb;case"SSSS":return Hb;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return d?Ob:Db;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Db;case"Do":return Mb;default:return c=new RegExp(R(Q(a.replace("\\","")),"i"))}}function K(a){a=a||"";var b=a.match(Jb)||[],c=b[b.length-1]||[],d=(c+"").match(Xb)||["-",0,0],e=+(60*d[1])+t(d[2]);return"+"===d[0]?-e:e}function L(a,b,c){var d,e=c._a;switch(a){case"Q":null!=b&&(e[pb]=3*(t(b)-1));break;case"M":case"MM":null!=b&&(e[pb]=t(b)-1);break;case"MMM":case"MMMM":d=E(c._l).monthsParse(b),null!=d?e[pb]=d:c._pf.invalidMonth=b;break;case"D":case"DD":null!=b&&(e[qb]=t(b));break;case"Do":null!=b&&(e[qb]=t(parseInt(b,10)));break;case"DDD":case"DDDD":null!=b&&(c._dayOfYear=t(b));break;case"YY":e[ob]=ib.parseTwoDigitYear(b);break;case"YYYY":case"YYYYY":case"YYYYYY":e[ob]=t(b);break;case"a":case"A":c._isPm=E(c._l).isPM(b);break;case"H":case"HH":case"h":case"hh":e[rb]=t(b);break;case"m":case"mm":e[sb]=t(b);break;case"s":case"ss":e[tb]=t(b);break;case"S":case"SS":case"SSS":case"SSSS":e[ub]=t(1e3*("0."+b));break;case"X":c._d=new Date(1e3*parseFloat(b));break;case"Z":case"ZZ":c._useUTC=!0,c._tzm=K(b);break;case"w":case"ww":case"W":case"WW":case"d":case"dd":case"ddd":case"dddd":case"e":case"E":a=a.substr(0,1);case"gg":case"gggg":case"GG":case"GGGG":case"GGGGG":a=a.substr(0,2),b&&(c._w=c._w||{},c._w[a]=b)}}function M(a){var b,c,d,e,f,g,h,i,j,k,l=[];if(!a._d){for(d=O(a),a._w&&null==a._a[qb]&&null==a._a[pb]&&(f=function(b){var c=parseInt(b,10);return b?b.length<3?c>68?1900+c:2e3+c:c:null==a._a[ob]?ib().weekYear():a._a[ob]},g=a._w,null!=g.GG||null!=g.W||null!=g.E?h=_(f(g.GG),g.W||1,g.E,4,1):(i=E(a._l),j=null!=g.d?X(g.d,i):null!=g.e?parseInt(g.e,10)+i._week.dow:0,k=parseInt(g.w,10)||1,null!=g.d&&j<i._week.dow&&k++,h=_(f(g.gg),k,j,i._week.doy,i._week.dow)),a._a[ob]=h.year,a._dayOfYear=h.dayOfYear),a._dayOfYear&&(e=null==a._a[ob]?d[ob]:a._a[ob],a._dayOfYear>w(e)&&(a._pf._overflowDayOfYear=!0),c=W(e,0,a._dayOfYear),a._a[pb]=c.getUTCMonth(),a._a[qb]=c.getUTCDate()),b=0;3>b&&null==a._a[b];++b)a._a[b]=l[b]=d[b];for(;7>b;b++)a._a[b]=l[b]=null==a._a[b]?2===b?1:0:a._a[b];l[rb]+=t((a._tzm||0)/60),l[sb]+=t((a._tzm||0)%60),a._d=(a._useUTC?W:V).apply(null,l)}}function N(a){var b;a._d||(b=r(a._i),a._a=[b.year,b.month,b.day,b.hour,b.minute,b.second,b.millisecond],M(a))}function O(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function P(a){a._a=[],a._pf.empty=!0;var b,c,d,e,f,g=E(a._l),h=""+a._i,i=h.length,j=0;for(d=I(a._f,g).match(Bb)||[],b=0;b<d.length;b++)e=d[b],c=(h.match(J(e,a))||[])[0],c&&(f=h.substr(0,h.indexOf(c)),f.length>0&&a._pf.unusedInput.push(f),h=h.slice(h.indexOf(c)+c.length),j+=c.length),cc[e]?(c?a._pf.empty=!1:a._pf.unusedTokens.push(e),L(e,c,a)):a._strict&&!c&&a._pf.unusedTokens.push(e);a._pf.charsLeftOver=i-j,h.length>0&&a._pf.unusedInput.push(h),a._isPm&&a._a[rb]<12&&(a._a[rb]+=12),a._isPm===!1&&12===a._a[rb]&&(a._a[rb]=0),M(a),y(a)}function Q(a){return a.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e})}function R(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function S(a){var c,d,e,f,g;if(0===a._f.length)return a._pf.invalidFormat=!0,void(a._d=new Date(0/0));for(f=0;f<a._f.length;f++)g=0,c=i({},a),c._pf=b(),c._f=a._f[f],P(c),z(c)&&(g+=c._pf.charsLeftOver,g+=10*c._pf.unusedTokens.length,c._pf.score=g,(null==e||e>g)&&(e=g,d=c));i(a,d||c)}function T(a){var b,c,d=a._i,e=Tb.exec(d);if(e){for(a._pf.iso=!0,b=0,c=Vb.length;c>b;b++)if(Vb[b][1].exec(d)){a._f=Vb[b][0]+(e[6]||" ");break}for(b=0,c=Wb.length;c>b;b++)if(Wb[b][1].exec(d)){a._f+=Wb[b][0];break}d.match(Jb)&&(a._f+="Z"),P(a)}else ib.createFromInputFallback(a)}function U(b){var c=b._i,d=yb.exec(c);c===a?b._d=new Date:d?b._d=new Date(+d[1]):"string"==typeof c?T(b):n(c)?(b._a=c.slice(0),M(b)):o(c)?b._d=new Date(+c):"object"==typeof c?N(b):"number"==typeof c?b._d=new Date(c):ib.createFromInputFallback(b)}function V(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function W(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function X(a,b){if("string"==typeof a)if(isNaN(a)){if(a=b.weekdaysParse(a),"number"!=typeof a)return null}else a=parseInt(a,10);return a}function Y(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function Z(a,b,c){var d=nb(Math.abs(a)/1e3),e=nb(d/60),f=nb(e/60),g=nb(f/24),h=nb(g/365),i=45>d&&["s",d]||1===e&&["m"]||45>e&&["mm",e]||1===f&&["h"]||22>f&&["hh",f]||1===g&&["d"]||25>=g&&["dd",g]||45>=g&&["M"]||345>g&&["MM",nb(g/30)]||1===h&&["y"]||["yy",h];return i[2]=b,i[3]=a>0,i[4]=c,Y.apply({},i)}function $(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=ib(a).add("d",f),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function _(a,b,c,d,e){var f,g,h=W(a,0,1).getUTCDay();return c=null!=c?c:e,f=e-h+(h>d?7:0)-(e>h?7:0),g=7*(b-1)+(c-e)+f+1,{year:g>0?a:a-1,dayOfYear:g>0?g:w(a-1)+g}}function ab(b){var c=b._i,d=b._f;return null===c||d===a&&""===c?ib.invalid({nullInput:!0}):("string"==typeof c&&(b._i=c=E().preparse(c)),ib.isMoment(c)?(b=j(c),b._d=new Date(+c._d)):d?n(d)?S(b):P(b):U(b),new g(b))}function bb(a,b){var c;return"string"==typeof b&&(b=a.lang().monthsParse(b),"number"!=typeof b)?a:(c=Math.min(a.date(),u(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a)}function cb(a,b){return a._d["get"+(a._isUTC?"UTC":"")+b]()}function db(a,b,c){return"Month"===b?bb(a,c):a._d["set"+(a._isUTC?"UTC":"")+b](c)}function eb(a,b){return function(c){return null!=c?(db(this,a,c),ib.updateOffset(this,b),this):cb(this,a)}}function fb(a){ib.duration.fn[a]=function(){return this._data[a]}}function gb(a,b){ib.duration.fn["as"+a]=function(){return+this/b}}function hb(a){"undefined"==typeof ender&&(jb=mb.moment,mb.moment=a?c("Accessing Moment through the global scope is deprecated, and will be removed in an upcoming release.",ib):ib)}for(var ib,jb,kb,lb="2.6.0",mb="undefined"!=typeof global?global:this,nb=Math.round,ob=0,pb=1,qb=2,rb=3,sb=4,tb=5,ub=6,vb={},wb={_isAMomentObject:null,_i:null,_f:null,_l:null,_strict:null,_isUTC:null,_offset:null,_pf:null,_lang:null},xb="undefined"!=typeof module&&module.exports,yb=/^\/?Date\((\-?\d+)/i,zb=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Ab=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,Bb=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g,Cb=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,Db=/\d\d?/,Eb=/\d{1,3}/,Fb=/\d{1,4}/,Gb=/[+\-]?\d{1,6}/,Hb=/\d+/,Ib=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,Jb=/Z|[\+\-]\d\d:?\d\d/gi,Kb=/T/i,Lb=/[\+\-]?\d+(\.\d{1,3})?/,Mb=/\d{1,2}/,Nb=/\d/,Ob=/\d\d/,Pb=/\d{3}/,Qb=/\d{4}/,Rb=/[+-]?\d{6}/,Sb=/[+-]?\d+/,Tb=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ub="YYYY-MM-DDTHH:mm:ssZ",Vb=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],Wb=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],Xb=/([\+\-]|\d\d)/gi,Yb=("Date|Hours|Minutes|Seconds|Milliseconds".split("|"),{Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6}),Zb={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",D:"date",w:"week",W:"isoWeek",M:"month",Q:"quarter",y:"year",DDD:"dayOfYear",e:"weekday",E:"isoWeekday",gg:"weekYear",GG:"isoWeekYear"},$b={dayofyear:"dayOfYear",isoweekday:"isoWeekday",isoweek:"isoWeek",weekyear:"weekYear",isoweekyear:"isoWeekYear"},_b={},ac="DDD w W M D d".split(" "),bc="M D H h m s w W".split(" "),cc={M:function(){return this.month()+1},MMM:function(a){return this.lang().monthsShort(this,a)},MMMM:function(a){return this.lang().months(this,a)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(a){return this.lang().weekdaysMin(this,a)},ddd:function(a){return this.lang().weekdaysShort(this,a)},dddd:function(a){return this.lang().weekdays(this,a)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return l(this.year()%100,2)},YYYY:function(){return l(this.year(),4)},YYYYY:function(){return l(this.year(),5)},YYYYYY:function(){var a=this.year(),b=a>=0?"+":"-";return b+l(Math.abs(a),6)},gg:function(){return l(this.weekYear()%100,2)},gggg:function(){return l(this.weekYear(),4)},ggggg:function(){return l(this.weekYear(),5)},GG:function(){return l(this.isoWeekYear()%100,2)},GGGG:function(){return l(this.isoWeekYear(),4)},GGGGG:function(){return l(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return t(this.milliseconds()/100)},SS:function(){return l(t(this.milliseconds()/10),2)},SSS:function(){return l(this.milliseconds(),3)},SSSS:function(){return l(this.milliseconds(),3)},Z:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+l(t(a/60),2)+":"+l(t(a)%60,2)},ZZ:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+l(t(a/60),2)+l(t(a)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},dc=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];ac.length;)kb=ac.pop(),cc[kb+"o"]=e(cc[kb],kb);for(;bc.length;)kb=bc.pop(),cc[kb+kb]=d(cc[kb],2);for(cc.DDDD=d(cc.DDD,3),i(f.prototype,{set:function(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(a){return this._months[a.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(a){return this._monthsShort[a.month()]},monthsParse:function(a){var b,c,d;for(this._monthsParse||(this._monthsParse=[]),b=0;12>b;b++)if(this._monthsParse[b]||(c=ib.utc([2e3,b]),d="^"+this.months(c,"")+"|^"+this.monthsShort(c,""),this._monthsParse[b]=new RegExp(d.replace(".",""),"i")),this._monthsParse[b].test(a))return b},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(a){return this._weekdays[a.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(a){return this._weekdaysShort[a.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(a){return this._weekdaysMin[a.day()]},weekdaysParse:function(a){var b,c,d;for(this._weekdaysParse||(this._weekdaysParse=[]),b=0;7>b;b++)if(this._weekdaysParse[b]||(c=ib([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b},isPM:function(a){return"p"===(a+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(a,b){var c=this._calendar[a];return"function"==typeof c?c.apply(b):c},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)},pastFuture:function(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)},ordinal:function(a){return this._ordinal.replace("%d",a)},_ordinal:"%d",preparse:function(a){return a},postformat:function(a){return a},week:function(a){return $(a,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),ib=function(c,d,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._i=c,g._f=d,g._l=e,g._strict=f,g._isUTC=!1,g._pf=b(),ab(g)},ib.suppressDeprecationWarnings=!1,ib.createFromInputFallback=c("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i)}),ib.utc=function(c,d,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._useUTC=!0,g._isUTC=!0,g._l=e,g._i=c,g._f=d,g._strict=f,g._pf=b(),ab(g).utc()},ib.unix=function(a){return ib(1e3*a)},ib.duration=function(a,b){var c,d,e,f=a,g=null;return ib.isDuration(a)?f={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(f={},b?f[b]=a:f.milliseconds=a):(g=zb.exec(a))?(c="-"===g[1]?-1:1,f={y:0,d:t(g[qb])*c,h:t(g[rb])*c,m:t(g[sb])*c,s:t(g[tb])*c,ms:t(g[ub])*c}):(g=Ab.exec(a))&&(c="-"===g[1]?-1:1,e=function(a){var b=a&&parseFloat(a.replace(",","."));return(isNaN(b)?0:b)*c},f={y:e(g[2]),M:e(g[3]),d:e(g[4]),h:e(g[5]),m:e(g[6]),s:e(g[7]),w:e(g[8])}),d=new h(f),ib.isDuration(a)&&a.hasOwnProperty("_lang")&&(d._lang=a._lang),d},ib.version=lb,ib.defaultFormat=Ub,ib.momentProperties=wb,ib.updateOffset=function(){},ib.lang=function(a,b){var c;return a?(b?C(A(a),b):null===b?(D(a),a="en"):vb[a]||E(a),c=ib.duration.fn._lang=ib.fn._lang=E(a),c._abbr):ib.fn._lang._abbr},ib.langData=function(a){return a&&a._lang&&a._lang._abbr&&(a=a._lang._abbr),E(a)},ib.isMoment=function(a){return a instanceof g||null!=a&&a.hasOwnProperty("_isAMomentObject")},ib.isDuration=function(a){return a instanceof h},kb=dc.length-1;kb>=0;--kb)s(dc[kb]);ib.normalizeUnits=function(a){return q(a)},ib.invalid=function(a){var b=ib.utc(0/0);return null!=a?i(b._pf,a):b._pf.userInvalidated=!0,b},ib.parseZone=function(){return ib.apply(null,arguments).parseZone()},ib.parseTwoDigitYear=function(a){return t(a)+(t(a)>68?1900:2e3)},i(ib.fn=g.prototype,{clone:function(){return ib(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().lang("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var a=ib(this).utc();return 0<a.year()&&a.year()<=9999?H(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):H(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var a=this;return[a.year(),a.month(),a.date(),a.hours(),a.minutes(),a.seconds(),a.milliseconds()]},isValid:function(){return z(this)},isDSTShifted:function(){return this._a?this.isValid()&&p(this._a,(this._isUTC?ib.utc(this._a):ib(this._a)).toArray())>0:!1},parsingFlags:function(){return i({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(a){var b=H(this,a||ib.defaultFormat);return this.lang().postformat(b)},add:function(a,b){var c;return c="string"==typeof a?ib.duration(+b,a):ib.duration(a,b),m(this,c,1),this},subtract:function(a,b){var c;return c="string"==typeof a?ib.duration(+b,a):ib.duration(a,b),m(this,c,-1),this},diff:function(a,b,c){var d,e,f=B(a,this),g=6e4*(this.zone()-f.zone());return b=q(b),"year"===b||"month"===b?(d=432e5*(this.daysInMonth()+f.daysInMonth()),e=12*(this.year()-f.year())+(this.month()-f.month()),e+=(this-ib(this).startOf("month")-(f-ib(f).startOf("month")))/d,e-=6e4*(this.zone()-ib(this).startOf("month").zone()-(f.zone()-ib(f).startOf("month").zone()))/d,"year"===b&&(e/=12)):(d=this-f,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-g)/864e5:"week"===b?(d-g)/6048e5:d),c?e:k(e)},from:function(a,b){return ib.duration(this.diff(a)).lang(this.lang()._abbr).humanize(!b)},fromNow:function(a){return this.from(ib(),a)},calendar:function(){var a=B(ib(),this).startOf("day"),b=this.diff(a,"days",!0),c=-6>b?"sameElse":-1>b?"lastWeek":0>b?"lastDay":1>b?"sameDay":2>b?"nextDay":7>b?"nextWeek":"sameElse";return this.format(this.lang().calendar(c,this))},isLeapYear:function(){return x(this.year())},isDST:function(){return this.zone()<this.clone().month(0).zone()||this.zone()<this.clone().month(5).zone()},day:function(a){var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=X(a,this.lang()),this.add({d:a-b})):b},month:eb("Month",!0),startOf:function(a){switch(a=q(a)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===a?this.weekday(0):"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this},endOf:function(a){return a=q(a),this.startOf(a).add("isoWeek"===a?"week":a,1).subtract("ms",1)},isAfter:function(a,b){return b="undefined"!=typeof b?b:"millisecond",+this.clone().startOf(b)>+ib(a).startOf(b)},isBefore:function(a,b){return b="undefined"!=typeof b?b:"millisecond",+this.clone().startOf(b)<+ib(a).startOf(b)},isSame:function(a,b){return b=b||"ms",+this.clone().startOf(b)===+B(a,this).startOf(b)},min:function(a){return a=ib.apply(null,arguments),this>a?this:a},max:function(a){return a=ib.apply(null,arguments),a>this?this:a},zone:function(a,b){var c=this._offset||0;return null==a?this._isUTC?c:this._d.getTimezoneOffset():("string"==typeof a&&(a=K(a)),Math.abs(a)<16&&(a=60*a),this._offset=a,this._isUTC=!0,c!==a&&(!b||this._changeInProgress?m(this,ib.duration(c-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,ib.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(a){return a=a?ib(a).zone():0,(this.zone()-a)%60===0},daysInMonth:function(){return u(this.year(),this.month())},dayOfYear:function(a){var b=nb((ib(this).startOf("day")-ib(this).startOf("year"))/864e5)+1;return null==a?b:this.add("d",a-b)},quarter:function(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)},weekYear:function(a){var b=$(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==a?b:this.add("y",a-b)},isoWeekYear:function(a){var b=$(this,1,4).year;return null==a?b:this.add("y",a-b)},week:function(a){var b=this.lang().week(this);return null==a?b:this.add("d",7*(a-b))},isoWeek:function(a){var b=$(this,1,4).week;return null==a?b:this.add("d",7*(a-b))},weekday:function(a){var b=(this.day()+7-this.lang()._week.dow)%7;return null==a?b:this.add("d",a-b)},isoWeekday:function(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)},isoWeeksInYear:function(){return v(this.year(),1,4)},weeksInYear:function(){var a=this._lang._week;return v(this.year(),a.dow,a.doy)},get:function(a){return a=q(a),this[a]()},set:function(a,b){return a=q(a),"function"==typeof this[a]&&this[a](b),this},lang:function(b){return b===a?this._lang:(this._lang=E(b),this)}}),ib.fn.millisecond=ib.fn.milliseconds=eb("Milliseconds",!1),ib.fn.second=ib.fn.seconds=eb("Seconds",!1),ib.fn.minute=ib.fn.minutes=eb("Minutes",!1),ib.fn.hour=ib.fn.hours=eb("Hours",!0),ib.fn.date=eb("Date",!0),ib.fn.dates=c("dates accessor is deprecated. Use date instead.",eb("Date",!0)),ib.fn.year=eb("FullYear",!0),ib.fn.years=c("years accessor is deprecated. Use year instead.",eb("FullYear",!0)),ib.fn.days=ib.fn.day,ib.fn.months=ib.fn.month,ib.fn.weeks=ib.fn.week,ib.fn.isoWeeks=ib.fn.isoWeek,ib.fn.quarters=ib.fn.quarter,ib.fn.toJSON=ib.fn.toISOString,i(ib.duration.fn=h.prototype,{_bubble:function(){var a,b,c,d,e=this._milliseconds,f=this._days,g=this._months,h=this._data;h.milliseconds=e%1e3,a=k(e/1e3),h.seconds=a%60,b=k(a/60),h.minutes=b%60,c=k(b/60),h.hours=c%24,f+=k(c/24),h.days=f%30,g+=k(f/30),h.months=g%12,d=k(g/12),h.years=d},weeks:function(){return k(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*t(this._months/12)},humanize:function(a){var b=+this,c=Z(b,!a,this.lang());return a&&(c=this.lang().pastFuture(b,c)),this.lang().postformat(c)},add:function(a,b){var c=ib.duration(a,b);return this._milliseconds+=c._milliseconds,this._days+=c._days,this._months+=c._months,this._bubble(),this},subtract:function(a,b){var c=ib.duration(a,b);return this._milliseconds-=c._milliseconds,this._days-=c._days,this._months-=c._months,this._bubble(),this},get:function(a){return a=q(a),this[a.toLowerCase()+"s"]()},as:function(a){return a=q(a),this["as"+a.charAt(0).toUpperCase()+a.slice(1)+"s"]()},lang:ib.fn.lang,toIsoString:function(){var a=Math.abs(this.years()),b=Math.abs(this.months()),c=Math.abs(this.days()),d=Math.abs(this.hours()),e=Math.abs(this.minutes()),f=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(a?a+"Y":"")+(b?b+"M":"")+(c?c+"D":"")+(d||e||f?"T":"")+(d?d+"H":"")+(e?e+"M":"")+(f?f+"S":""):"P0D"}});for(kb in Yb)Yb.hasOwnProperty(kb)&&(gb(kb,Yb[kb]),fb(kb.toLowerCase()));gb("Weeks",6048e5),ib.duration.fn.asMonths=function(){return(+this-31536e6*this.years())/2592e6+12*this.years()},ib.lang("en",{ordinal:function(a){var b=a%10,c=1===t(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),xb?module.exports=ib:"function"==typeof define&&define.amd?(define("moment",function(a,b,c){return c.config&&c.config()&&c.config().noGlobal===!0&&(mb.moment=jb),ib}),hb(!0)):hb()}).call(this);;
// moment.js language configuration
// language : japanese (ja)
// author : LI Long : https://github.com/baryon

(function (factory) {
    if (typeof define === 'function' && define.amd) {
        define(['moment'], factory); // AMD
    } else if (typeof exports === 'object') {
        module.exports = factory(require('../moment')); // Node
    } else {
        factory(window.moment); // Browser global
    }
}(function (moment) {
    return moment.lang('ja', {
        months: "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
        monthsShort: "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),
        weekdays: "日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),
        weekdaysShort: "日_月_火_水_木_金_土".split("_"),
        weekdaysMin: "日_月_火_水_木_金_土".split("_"),
        longDateFormat: {
            LT: "Ah時m分",
            L: "YYYY/MM/DD",
            LL: "YYYY年M月D日",
            LLL: "YYYY年M月D日LT",
            LLLL: "YYYY年M月D日LT dddd"
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return "午前";
            } else {
                return "午後";
            }
        },
        calendar: {
            sameDay: '[今日] LT',
            nextDay: '[明日] LT',
            nextWeek: '[来週]dddd LT',
            lastDay: '[昨日] LT',
            lastWeek: '[前週]dddd LT',
            sameElse: 'L'
        },
        relativeTime: {
            future: "%s後",
            past: "%s前",
            s: "数秒",
            m: "1分",
            mm: "%d分",
            h: "1時間",
            hh: "%d時間",
            d: "1日",
            dd: "%d日",
            M: "1ヶ月",
            MM: "%dヶ月",
            y: "1年",
            yy: "%d年"
        }
    });
}));;
/**
 * @license
 * lodash 3.10.1 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
 * Build: `lodash modern -o ./lodash.js`
 */
;(function(){function n(n,t){if(n!==t){var r=null===n,e=n===w,u=n===n,o=null===t,i=t===w,f=t===t;if(n>t&&!o||!u||r&&!i&&f||e&&f)return 1;if(n<t&&!r||!f||o&&!e&&u||i&&u)return-1}return 0}function t(n,t,r){for(var e=n.length,u=r?e:-1;r?u--:++u<e;)if(t(n[u],u,n))return u;return-1}function r(n,t,r){if(t!==t)return p(n,r);r-=1;for(var e=n.length;++r<e;)if(n[r]===t)return r;return-1}function e(n){return typeof n=="function"||false}function u(n){return null==n?"":n+""}function o(n,t){for(var r=-1,e=n.length;++r<e&&-1<t.indexOf(n.charAt(r)););
return r}function i(n,t){for(var r=n.length;r--&&-1<t.indexOf(n.charAt(r)););return r}function f(t,r){return n(t.a,r.a)||t.b-r.b}function a(n){return Nn[n]}function c(n){return Tn[n]}function l(n,t,r){return t?n=Bn[n]:r&&(n=Dn[n]),"\\"+n}function s(n){return"\\"+Dn[n]}function p(n,t,r){var e=n.length;for(t+=r?0:-1;r?t--:++t<e;){var u=n[t];if(u!==u)return t}return-1}function h(n){return!!n&&typeof n=="object"}function _(n){return 160>=n&&9<=n&&13>=n||32==n||160==n||5760==n||6158==n||8192<=n&&(8202>=n||8232==n||8233==n||8239==n||8287==n||12288==n||65279==n);
}function v(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;)n[r]===t&&(n[r]=z,o[++u]=r);return o}function g(n){for(var t=-1,r=n.length;++t<r&&_(n.charCodeAt(t)););return t}function y(n){for(var t=n.length;t--&&_(n.charCodeAt(t)););return t}function d(n){return Ln[n]}function m(_){function Nn(n){if(h(n)&&!(Oo(n)||n instanceof zn)){if(n instanceof Ln)return n;if(nu.call(n,"__chain__")&&nu.call(n,"__wrapped__"))return Mr(n)}return new Ln(n)}function Tn(){}function Ln(n,t,r){this.__wrapped__=n,this.__actions__=r||[],
this.__chain__=!!t}function zn(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=Ru,this.__views__=[]}function Bn(){this.__data__={}}function Dn(n){var t=n?n.length:0;for(this.data={hash:gu(null),set:new lu};t--;)this.push(n[t])}function Mn(n,t){var r=n.data;return(typeof t=="string"||ge(t)?r.set.has(t):r.hash[t])?0:-1}function qn(n,t){var r=-1,e=n.length;for(t||(t=Be(e));++r<e;)t[r]=n[r];return t}function Pn(n,t){for(var r=-1,e=n.length;++r<e&&false!==t(n[r],r,n););
return n}function Kn(n,t){for(var r=-1,e=n.length;++r<e;)if(!t(n[r],r,n))return false;return true}function Vn(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;){var i=n[r];t(i,r,n)&&(o[++u]=i)}return o}function Gn(n,t){for(var r=-1,e=n.length,u=Be(e);++r<e;)u[r]=t(n[r],r,n);return u}function Jn(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function Xn(n,t,r,e){var u=-1,o=n.length;for(e&&o&&(r=n[++u]);++u<o;)r=t(r,n[u],u,n);return r}function Hn(n,t){for(var r=-1,e=n.length;++r<e;)if(t(n[r],r,n))return true;
return false}function Qn(n,t,r,e){return n!==w&&nu.call(e,r)?n:t}function nt(n,t,r){for(var e=-1,u=zo(t),o=u.length;++e<o;){var i=u[e],f=n[i],a=r(f,t[i],i,n,t);(a===a?a===f:f!==f)&&(f!==w||i in n)||(n[i]=a)}return n}function tt(n,t){return null==t?n:et(t,zo(t),n)}function rt(n,t){for(var r=-1,e=null==n,u=!e&&Er(n),o=u?n.length:0,i=t.length,f=Be(i);++r<i;){var a=t[r];f[r]=u?Cr(a,o)?n[a]:w:e?w:n[a]}return f}function et(n,t,r){r||(r={});for(var e=-1,u=t.length;++e<u;){var o=t[e];r[o]=n[o]}return r}function ut(n,t,r){
var e=typeof n;return"function"==e?t===w?n:Bt(n,t,r):null==n?Fe:"object"==e?bt(n):t===w?ze(n):xt(n,t)}function ot(n,t,r,e,u,o,i){var f;if(r&&(f=u?r(n,e,u):r(n)),f!==w)return f;if(!ge(n))return n;if(e=Oo(n)){if(f=kr(n),!t)return qn(n,f)}else{var a=ru.call(n),c=a==K;if(a!=Z&&a!=B&&(!c||u))return Fn[a]?Rr(n,a,t):u?n:{};if(f=Ir(c?{}:n),!t)return tt(f,n)}for(o||(o=[]),i||(i=[]),u=o.length;u--;)if(o[u]==n)return i[u];return o.push(n),i.push(f),(e?Pn:_t)(n,function(e,u){f[u]=ot(e,t,r,u,n,o,i)}),f}function it(n,t,r){
if(typeof n!="function")throw new Ge(L);return su(function(){n.apply(w,r)},t)}function ft(n,t){var e=n?n.length:0,u=[];if(!e)return u;var o=-1,i=xr(),f=i===r,a=f&&t.length>=F&&gu&&lu?new Dn(t):null,c=t.length;a&&(i=Mn,f=false,t=a);n:for(;++o<e;)if(a=n[o],f&&a===a){for(var l=c;l--;)if(t[l]===a)continue n;u.push(a)}else 0>i(t,a,0)&&u.push(a);return u}function at(n,t){var r=true;return Su(n,function(n,e,u){return r=!!t(n,e,u)}),r}function ct(n,t,r,e){var u=e,o=u;return Su(n,function(n,i,f){i=+t(n,i,f),(r(i,u)||i===e&&i===o)&&(u=i,
o=n)}),o}function lt(n,t){var r=[];return Su(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function st(n,t,r,e){var u;return r(n,function(n,r,o){return t(n,r,o)?(u=e?r:n,false):void 0}),u}function pt(n,t,r,e){e||(e=[]);for(var u=-1,o=n.length;++u<o;){var i=n[u];h(i)&&Er(i)&&(r||Oo(i)||pe(i))?t?pt(i,t,r,e):Jn(e,i):r||(e[e.length]=i)}return e}function ht(n,t){Nu(n,t,Re)}function _t(n,t){return Nu(n,t,zo)}function vt(n,t){return Tu(n,t,zo)}function gt(n,t){for(var r=-1,e=t.length,u=-1,o=[];++r<e;){var i=t[r];
ve(n[i])&&(o[++u]=i)}return o}function yt(n,t,r){if(null!=n){r!==w&&r in Br(n)&&(t=[r]),r=0;for(var e=t.length;null!=n&&r<e;)n=n[t[r++]];return r&&r==e?n:w}}function dt(n,t,r,e,u,o){if(n===t)n=true;else if(null==n||null==t||!ge(n)&&!h(t))n=n!==n&&t!==t;else n:{var i=dt,f=Oo(n),a=Oo(t),c=D,l=D;f||(c=ru.call(n),c==B?c=Z:c!=Z&&(f=xe(n))),a||(l=ru.call(t),l==B?l=Z:l!=Z&&xe(t));var s=c==Z,a=l==Z,l=c==l;if(!l||f||s){if(!e&&(c=s&&nu.call(n,"__wrapped__"),a=a&&nu.call(t,"__wrapped__"),c||a)){n=i(c?n.value():n,a?t.value():t,r,e,u,o);
break n}if(l){for(u||(u=[]),o||(o=[]),c=u.length;c--;)if(u[c]==n){n=o[c]==t;break n}u.push(n),o.push(t),n=(f?yr:mr)(n,t,i,r,e,u,o),u.pop(),o.pop()}else n=false}else n=dr(n,t,c)}return n}function mt(n,t,r){var e=t.length,u=e,o=!r;if(null==n)return!u;for(n=Br(n);e--;){var i=t[e];if(o&&i[2]?i[1]!==n[i[0]]:!(i[0]in n))return false}for(;++e<u;){var i=t[e],f=i[0],a=n[f],c=i[1];if(o&&i[2]){if(a===w&&!(f in n))return false}else if(i=r?r(a,c,f):w,i===w?!dt(c,a,r,true):!i)return false}return true}function wt(n,t){var r=-1,e=Er(n)?Be(n.length):[];
return Su(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function bt(n){var t=Ar(n);if(1==t.length&&t[0][2]){var r=t[0][0],e=t[0][1];return function(n){return null==n?false:n[r]===e&&(e!==w||r in Br(n))}}return function(n){return mt(n,t)}}function xt(n,t){var r=Oo(n),e=Wr(n)&&t===t&&!ge(t),u=n+"";return n=Dr(n),function(o){if(null==o)return false;var i=u;if(o=Br(o),!(!r&&e||i in o)){if(o=1==n.length?o:yt(o,Et(n,0,-1)),null==o)return false;i=Zr(n),o=Br(o)}return o[i]===t?t!==w||i in o:dt(t,o[i],w,true)}}function At(n,t,r,e,u){
if(!ge(n))return n;var o=Er(t)&&(Oo(t)||xe(t)),i=o?w:zo(t);return Pn(i||t,function(f,a){if(i&&(a=f,f=t[a]),h(f)){e||(e=[]),u||(u=[]);n:{for(var c=a,l=e,s=u,p=l.length,_=t[c];p--;)if(l[p]==_){n[c]=s[p];break n}var p=n[c],v=r?r(p,_,c,n,t):w,g=v===w;g&&(v=_,Er(_)&&(Oo(_)||xe(_))?v=Oo(p)?p:Er(p)?qn(p):[]:me(_)||pe(_)?v=pe(p)?ke(p):me(p)?p:{}:g=false),l.push(_),s.push(v),g?n[c]=At(v,_,r,l,s):(v===v?v!==p:p===p)&&(n[c]=v)}}else c=n[a],l=r?r(c,f,a,n,t):w,(s=l===w)&&(l=f),l===w&&(!o||a in n)||!s&&(l===l?l===c:c!==c)||(n[a]=l);
}),n}function jt(n){return function(t){return null==t?w:t[n]}}function kt(n){var t=n+"";return n=Dr(n),function(r){return yt(r,n,t)}}function It(n,t){for(var r=n?t.length:0;r--;){var e=t[r];if(e!=u&&Cr(e)){var u=e;pu.call(n,e,1)}}}function Rt(n,t){return n+yu(ku()*(t-n+1))}function Ot(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function Et(n,t,r){var e=-1,u=n.length;for(t=null==t?0:+t||0,0>t&&(t=-t>u?0:u+t),r=r===w||r>u?u:+r||0,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Be(u);++e<u;)r[e]=n[e+t];
return r}function Ct(n,t){var r;return Su(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function Ut(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function Wt(t,r,e){var u=wr(),o=-1;return r=Gn(r,function(n){return u(n)}),t=wt(t,function(n){return{a:Gn(r,function(t){return t(n)}),b:++o,c:n}}),Ut(t,function(t,r){var u;n:{for(var o=-1,i=t.a,f=r.a,a=i.length,c=e.length;++o<a;)if(u=n(i[o],f[o])){if(o>=c)break n;o=e[o],u*="asc"===o||true===o?1:-1;break n}u=t.b-r.b}return u})}function $t(n,t){
var r=0;return Su(n,function(n,e,u){r+=+t(n,e,u)||0}),r}function St(n,t){var e=-1,u=xr(),o=n.length,i=u===r,f=i&&o>=F,a=f&&gu&&lu?new Dn(void 0):null,c=[];a?(u=Mn,i=false):(f=false,a=t?[]:c);n:for(;++e<o;){var l=n[e],s=t?t(l,e,n):l;if(i&&l===l){for(var p=a.length;p--;)if(a[p]===s)continue n;t&&a.push(s),c.push(l)}else 0>u(a,s,0)&&((t||f)&&a.push(s),c.push(l))}return c}function Ft(n,t){for(var r=-1,e=t.length,u=Be(e);++r<e;)u[r]=n[t[r]];return u}function Nt(n,t,r,e){for(var u=n.length,o=e?u:-1;(e?o--:++o<u)&&t(n[o],o,n););
return r?Et(n,e?0:o,e?o+1:u):Et(n,e?o+1:0,e?u:o)}function Tt(n,t){var r=n;r instanceof zn&&(r=r.value());for(var e=-1,u=t.length;++e<u;)var o=t[e],r=o.func.apply(o.thisArg,Jn([r],o.args));return r}function Lt(n,t,r){var e=0,u=n?n.length:e;if(typeof t=="number"&&t===t&&u<=Eu){for(;e<u;){var o=e+u>>>1,i=n[o];(r?i<=t:i<t)&&null!==i?e=o+1:u=o}return u}return zt(n,t,Fe,r)}function zt(n,t,r,e){t=r(t);for(var u=0,o=n?n.length:0,i=t!==t,f=null===t,a=t===w;u<o;){var c=yu((u+o)/2),l=r(n[c]),s=l!==w,p=l===l;
(i?p||e:f?p&&s&&(e||null!=l):a?p&&(e||s):null==l?0:e?l<=t:l<t)?u=c+1:o=c}return xu(o,Ou)}function Bt(n,t,r){if(typeof n!="function")return Fe;if(t===w)return n;switch(r){case 1:return function(r){return n.call(t,r)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,o){return n.call(t,r,e,u,o)};case 5:return function(r,e,u,o,i){return n.call(t,r,e,u,o,i)}}return function(){return n.apply(t,arguments)}}function Dt(n){var t=new ou(n.byteLength);return new hu(t).set(new hu(n)),
t}function Mt(n,t,r){for(var e=r.length,u=-1,o=bu(n.length-e,0),i=-1,f=t.length,a=Be(f+o);++i<f;)a[i]=t[i];for(;++u<e;)a[r[u]]=n[u];for(;o--;)a[i++]=n[u++];return a}function qt(n,t,r){for(var e=-1,u=r.length,o=-1,i=bu(n.length-u,0),f=-1,a=t.length,c=Be(i+a);++o<i;)c[o]=n[o];for(i=o;++f<a;)c[i+f]=t[f];for(;++e<u;)c[i+r[e]]=n[o++];return c}function Pt(n,t){return function(r,e,u){var o=t?t():{};if(e=wr(e,u,3),Oo(r)){u=-1;for(var i=r.length;++u<i;){var f=r[u];n(o,f,e(f,u,r),r)}}else Su(r,function(t,r,u){
n(o,t,e(t,r,u),u)});return o}}function Kt(n){return le(function(t,r){var e=-1,u=null==t?0:r.length,o=2<u?r[u-2]:w,i=2<u?r[2]:w,f=1<u?r[u-1]:w;for(typeof o=="function"?(o=Bt(o,f,5),u-=2):(o=typeof f=="function"?f:w,u-=o?1:0),i&&Ur(r[0],r[1],i)&&(o=3>u?w:o,u=1);++e<u;)(i=r[e])&&n(t,i,o);return t})}function Vt(n,t){return function(r,e){var u=r?Bu(r):0;if(!Sr(u))return n(r,e);for(var o=t?u:-1,i=Br(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}function Zt(n){return function(t,r,e){var u=Br(t);e=e(t);for(var o=e.length,i=n?o:-1;n?i--:++i<o;){
var f=e[i];if(false===r(u[f],f,u))break}return t}}function Yt(n,t){function r(){return(this&&this!==Zn&&this instanceof r?e:n).apply(t,arguments)}var e=Jt(n);return r}function Gt(n){return function(t){var r=-1;t=$e(Ce(t));for(var e=t.length,u="";++r<e;)u=n(u,t[r],r);return u}}function Jt(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:
return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=$u(n.prototype),t=n.apply(r,t);return ge(t)?t:r}}function Xt(n){function t(r,e,u){return u&&Ur(r,e,u)&&(e=w),r=gr(r,n,w,w,w,w,w,e),r.placeholder=t.placeholder,r}return t}function Ht(n,t){return le(function(r){var e=r[0];return null==e?e:(r.push(t),n.apply(w,r))})}function Qt(n,t){return function(r,e,u){if(u&&Ur(r,e,u)&&(e=w),e=wr(e,u,3),1==e.length){
u=r=Oo(r)?r:zr(r);for(var o=e,i=-1,f=u.length,a=t,c=a;++i<f;){var l=u[i],s=+o(l);n(s,a)&&(a=s,c=l)}if(u=c,!r.length||u!==t)return u}return ct(r,e,n,t)}}function nr(n,r){return function(e,u,o){return u=wr(u,o,3),Oo(e)?(u=t(e,u,r),-1<u?e[u]:w):st(e,u,n)}}function tr(n){return function(r,e,u){return r&&r.length?(e=wr(e,u,3),t(r,e,n)):-1}}function rr(n){return function(t,r,e){return r=wr(r,e,3),st(t,r,n,true)}}function er(n){return function(){for(var t,r=arguments.length,e=n?r:-1,u=0,o=Be(r);n?e--:++e<r;){
var i=o[u++]=arguments[e];if(typeof i!="function")throw new Ge(L);!t&&Ln.prototype.thru&&"wrapper"==br(i)&&(t=new Ln([],true))}for(e=t?-1:r;++e<r;){var i=o[e],u=br(i),f="wrapper"==u?zu(i):w;t=f&&$r(f[0])&&f[1]==(E|k|R|C)&&!f[4].length&&1==f[9]?t[br(f[0])].apply(t,f[3]):1==i.length&&$r(i)?t[u]():t.thru(i)}return function(){var n=arguments,e=n[0];if(t&&1==n.length&&Oo(e)&&e.length>=F)return t.plant(e).value();for(var u=0,n=r?o[u].apply(this,n):e;++u<r;)n=o[u].call(this,n);return n}}}function ur(n,t){
return function(r,e,u){return typeof e=="function"&&u===w&&Oo(r)?n(r,e):t(r,Bt(e,u,3))}}function or(n){return function(t,r,e){return(typeof r!="function"||e!==w)&&(r=Bt(r,e,3)),n(t,r,Re)}}function ir(n){return function(t,r,e){return(typeof r!="function"||e!==w)&&(r=Bt(r,e,3)),n(t,r)}}function fr(n){return function(t,r,e){var u={};return r=wr(r,e,3),_t(t,function(t,e,o){o=r(t,e,o),e=n?o:e,t=n?t:o,u[e]=t}),u}}function ar(n){return function(t,r,e){return t=u(t),(n?t:"")+pr(t,r,e)+(n?"":t)}}function cr(n){
var t=le(function(r,e){var u=v(e,t.placeholder);return gr(r,n,w,e,u)});return t}function lr(n,t){return function(r,e,u,o){var i=3>arguments.length;return typeof e=="function"&&o===w&&Oo(r)?n(r,e,u,i):Ot(r,wr(e,o,4),u,i,t)}}function sr(n,t,r,e,u,o,i,f,a,c){function l(){for(var m=arguments.length,b=m,j=Be(m);b--;)j[b]=arguments[b];if(e&&(j=Mt(j,e,u)),o&&(j=qt(j,o,i)),_||y){var b=l.placeholder,k=v(j,b),m=m-k.length;if(m<c){var I=f?qn(f):w,m=bu(c-m,0),E=_?k:w,k=_?w:k,C=_?j:w,j=_?w:j;return t|=_?R:O,t&=~(_?O:R),
g||(t&=~(x|A)),j=[n,t,r,C,E,j,k,I,a,m],I=sr.apply(w,j),$r(n)&&Du(I,j),I.placeholder=b,I}}if(b=p?r:this,I=h?b[n]:n,f)for(m=j.length,E=xu(f.length,m),k=qn(j);E--;)C=f[E],j[E]=Cr(C,m)?k[C]:w;return s&&a<j.length&&(j.length=a),this&&this!==Zn&&this instanceof l&&(I=d||Jt(n)),I.apply(b,j)}var s=t&E,p=t&x,h=t&A,_=t&k,g=t&j,y=t&I,d=h?w:Jt(n);return l}function pr(n,t,r){return n=n.length,t=+t,n<t&&mu(t)?(t-=n,r=null==r?" ":r+"",Ue(r,vu(t/r.length)).slice(0,t)):""}function hr(n,t,r,e){function u(){for(var t=-1,f=arguments.length,a=-1,c=e.length,l=Be(c+f);++a<c;)l[a]=e[a];
for(;f--;)l[a++]=arguments[++t];return(this&&this!==Zn&&this instanceof u?i:n).apply(o?r:this,l)}var o=t&x,i=Jt(n);return u}function _r(n){var t=Pe[n];return function(n,r){return(r=r===w?0:+r||0)?(r=au(10,r),t(n*r)/r):t(n)}}function vr(n){return function(t,r,e,u){var o=wr(e);return null==e&&o===ut?Lt(t,r,n):zt(t,r,o(e,u,1),n)}}function gr(n,t,r,e,u,o,i,f){var a=t&A;if(!a&&typeof n!="function")throw new Ge(L);var c=e?e.length:0;if(c||(t&=~(R|O),e=u=w),c-=u?u.length:0,t&O){var l=e,s=u;e=u=w}var p=a?w:zu(n);
return r=[n,t,r,e,u,l,s,o,i,f],p&&(e=r[1],t=p[1],f=e|t,u=t==E&&e==k||t==E&&e==C&&r[7].length<=p[8]||t==(E|C)&&e==k,(f<E||u)&&(t&x&&(r[2]=p[2],f|=e&x?0:j),(e=p[3])&&(u=r[3],r[3]=u?Mt(u,e,p[4]):qn(e),r[4]=u?v(r[3],z):qn(p[4])),(e=p[5])&&(u=r[5],r[5]=u?qt(u,e,p[6]):qn(e),r[6]=u?v(r[5],z):qn(p[6])),(e=p[7])&&(r[7]=qn(e)),t&E&&(r[8]=null==r[8]?p[8]:xu(r[8],p[8])),null==r[9]&&(r[9]=p[9]),r[0]=p[0],r[1]=f),t=r[1],f=r[9]),r[9]=null==f?a?0:n.length:bu(f-c,0)||0,(p?Lu:Du)(t==x?Yt(r[0],r[2]):t!=R&&t!=(x|R)||r[4].length?sr.apply(w,r):hr.apply(w,r),r);
}function yr(n,t,r,e,u,o,i){var f=-1,a=n.length,c=t.length;if(a!=c&&(!u||c<=a))return false;for(;++f<a;){var l=n[f],c=t[f],s=e?e(u?c:l,u?l:c,f):w;if(s!==w){if(s)continue;return false}if(u){if(!Hn(t,function(n){return l===n||r(l,n,e,u,o,i)}))return false}else if(l!==c&&!r(l,c,e,u,o,i))return false}return true}function dr(n,t,r){switch(r){case M:case q:return+n==+t;case P:return n.name==t.name&&n.message==t.message;case V:return n!=+n?t!=+t:n==+t;case Y:case G:return n==t+""}return false}function mr(n,t,r,e,u,o,i){var f=zo(n),a=f.length,c=zo(t).length;
if(a!=c&&!u)return false;for(c=a;c--;){var l=f[c];if(!(u?l in t:nu.call(t,l)))return false}for(var s=u;++c<a;){var l=f[c],p=n[l],h=t[l],_=e?e(u?h:p,u?p:h,l):w;if(_===w?!r(p,h,e,u,o,i):!_)return false;s||(s="constructor"==l)}return s||(r=n.constructor,e=t.constructor,!(r!=e&&"constructor"in n&&"constructor"in t)||typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)?true:false}function wr(n,t,r){var e=Nn.callback||Se,e=e===Se?ut:e;return r?e(n,t,r):e}function br(n){for(var t=n.name+"",r=Wu[t],e=r?r.length:0;e--;){
var u=r[e],o=u.func;if(null==o||o==n)return u.name}return t}function xr(n,t,e){var u=Nn.indexOf||Vr,u=u===Vr?r:u;return n?u(n,t,e):u}function Ar(n){n=Oe(n);for(var t=n.length;t--;){var r=n[t][1];n[t][2]=r===r&&!ge(r)}return n}function jr(n,t){var r=null==n?w:n[t];return ye(r)?r:w}function kr(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&nu.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function Ir(n){return n=n.constructor,typeof n=="function"&&n instanceof n||(n=Ve),
new n}function Rr(n,t,r){var e=n.constructor;switch(t){case J:return Dt(n);case M:case q:return new e(+n);case X:case H:case Q:case nn:case tn:case rn:case en:case un:case on:return t=n.buffer,new e(r?Dt(t):t,n.byteOffset,n.length);case V:case G:return new e(n);case Y:var u=new e(n.source,kn.exec(n));u.lastIndex=n.lastIndex}return u}function Or(n,t,r){return null==n||Wr(t,n)||(t=Dr(t),n=1==t.length?n:yt(n,Et(t,0,-1)),t=Zr(t)),t=null==n?n:n[t],null==t?w:t.apply(n,r)}function Er(n){return null!=n&&Sr(Bu(n));
}function Cr(n,t){return n=typeof n=="number"||On.test(n)?+n:-1,t=null==t?Cu:t,-1<n&&0==n%1&&n<t}function Ur(n,t,r){if(!ge(r))return false;var e=typeof t;return("number"==e?Er(r)&&Cr(t,r.length):"string"==e&&t in r)?(t=r[t],n===n?n===t:t!==t):false}function Wr(n,t){var r=typeof n;return"string"==r&&dn.test(n)||"number"==r?true:Oo(n)?false:!yn.test(n)||null!=t&&n in Br(t)}function $r(n){var t=br(n),r=Nn[t];return typeof r=="function"&&t in zn.prototype?n===r?true:(t=zu(r),!!t&&n===t[0]):false}function Sr(n){return typeof n=="number"&&-1<n&&0==n%1&&n<=Cu;
}function Fr(n,t){return n===w?t:Eo(n,t,Fr)}function Nr(n,t){n=Br(n);for(var r=-1,e=t.length,u={};++r<e;){var o=t[r];o in n&&(u[o]=n[o])}return u}function Tr(n,t){var r={};return ht(n,function(n,e,u){t(n,e,u)&&(r[e]=n)}),r}function Lr(n){for(var t=Re(n),r=t.length,e=r&&n.length,u=!!e&&Sr(e)&&(Oo(n)||pe(n)),o=-1,i=[];++o<r;){var f=t[o];(u&&Cr(f,e)||nu.call(n,f))&&i.push(f)}return i}function zr(n){return null==n?[]:Er(n)?ge(n)?n:Ve(n):Ee(n)}function Br(n){return ge(n)?n:Ve(n)}function Dr(n){if(Oo(n))return n;
var t=[];return u(n).replace(mn,function(n,r,e,u){t.push(e?u.replace(An,"$1"):r||n)}),t}function Mr(n){return n instanceof zn?n.clone():new Ln(n.__wrapped__,n.__chain__,qn(n.__actions__))}function qr(n,t,r){return n&&n.length?((r?Ur(n,t,r):null==t)&&(t=1),Et(n,0>t?0:t)):[]}function Pr(n,t,r){var e=n?n.length:0;return e?((r?Ur(n,t,r):null==t)&&(t=1),t=e-(+t||0),Et(n,0,0>t?0:t)):[]}function Kr(n){return n?n[0]:w}function Vr(n,t,e){var u=n?n.length:0;if(!u)return-1;if(typeof e=="number")e=0>e?bu(u+e,0):e;else if(e)return e=Lt(n,t),
e<u&&(t===t?t===n[e]:n[e]!==n[e])?e:-1;return r(n,t,e||0)}function Zr(n){var t=n?n.length:0;return t?n[t-1]:w}function Yr(n){return qr(n,1)}function Gr(n,t,e,u){if(!n||!n.length)return[];null!=t&&typeof t!="boolean"&&(u=e,e=Ur(n,t,u)?w:t,t=false);var o=wr();if((null!=e||o!==ut)&&(e=o(e,u,3)),t&&xr()===r){t=e;var i;e=-1,u=n.length;for(var o=-1,f=[];++e<u;){var a=n[e],c=t?t(a,e,n):a;e&&i===c||(i=c,f[++o]=a)}n=f}else n=St(n,e);return n}function Jr(n){if(!n||!n.length)return[];var t=-1,r=0;n=Vn(n,function(n){
return Er(n)?(r=bu(n.length,r),true):void 0});for(var e=Be(r);++t<r;)e[t]=Gn(n,jt(t));return e}function Xr(n,t,r){return n&&n.length?(n=Jr(n),null==t?n:(t=Bt(t,r,4),Gn(n,function(n){return Xn(n,t,w,true)}))):[]}function Hr(n,t){var r=-1,e=n?n.length:0,u={};for(!e||t||Oo(n[0])||(t=[]);++r<e;){var o=n[r];t?u[o]=t[r]:o&&(u[o[0]]=o[1])}return u}function Qr(n){return n=Nn(n),n.__chain__=true,n}function ne(n,t,r){return t.call(r,n)}function te(n,t,r){var e=Oo(n)?Kn:at;return r&&Ur(n,t,r)&&(t=w),(typeof t!="function"||r!==w)&&(t=wr(t,r,3)),
e(n,t)}function re(n,t,r){var e=Oo(n)?Vn:lt;return t=wr(t,r,3),e(n,t)}function ee(n,t,r,e){var u=n?Bu(n):0;return Sr(u)||(n=Ee(n),u=n.length),r=typeof r!="number"||e&&Ur(t,r,e)?0:0>r?bu(u+r,0):r||0,typeof n=="string"||!Oo(n)&&be(n)?r<=u&&-1<n.indexOf(t,r):!!u&&-1<xr(n,t,r)}function ue(n,t,r){var e=Oo(n)?Gn:wt;return t=wr(t,r,3),e(n,t)}function oe(n,t,r){if(r?Ur(n,t,r):null==t){n=zr(n);var e=n.length;return 0<e?n[Rt(0,e-1)]:w}r=-1,n=je(n);var e=n.length,u=e-1;for(t=xu(0>t?0:+t||0,e);++r<t;){var e=Rt(r,u),o=n[e];
n[e]=n[r],n[r]=o}return n.length=t,n}function ie(n,t,r){var e=Oo(n)?Hn:Ct;return r&&Ur(n,t,r)&&(t=w),(typeof t!="function"||r!==w)&&(t=wr(t,r,3)),e(n,t)}function fe(n,t){var r;if(typeof t!="function"){if(typeof n!="function")throw new Ge(L);var e=n;n=t,t=e}return function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=w),r}}function ae(n,t,r){function e(t,r){r&&iu(r),a=p=h=w,t&&(_=ho(),c=n.apply(s,f),p||a||(f=s=w))}function u(){var n=t-(ho()-l);0>=n||n>t?e(h,a):p=su(u,n)}function o(){e(g,p);
}function i(){if(f=arguments,l=ho(),s=this,h=g&&(p||!y),false===v)var r=y&&!p;else{a||y||(_=l);var e=v-(l-_),i=0>=e||e>v;i?(a&&(a=iu(a)),_=l,c=n.apply(s,f)):a||(a=su(o,e))}return i&&p?p=iu(p):p||t===v||(p=su(u,t)),r&&(i=true,c=n.apply(s,f)),!i||p||a||(f=s=w),c}var f,a,c,l,s,p,h,_=0,v=false,g=true;if(typeof n!="function")throw new Ge(L);if(t=0>t?0:+t||0,true===r)var y=true,g=false;else ge(r)&&(y=!!r.leading,v="maxWait"in r&&bu(+r.maxWait||0,t),g="trailing"in r?!!r.trailing:g);return i.cancel=function(){p&&iu(p),a&&iu(a),
_=0,a=p=h=w},i}function ce(n,t){function r(){var e=arguments,u=t?t.apply(this,e):e[0],o=r.cache;return o.has(u)?o.get(u):(e=n.apply(this,e),r.cache=o.set(u,e),e)}if(typeof n!="function"||t&&typeof t!="function")throw new Ge(L);return r.cache=new ce.Cache,r}function le(n,t){if(typeof n!="function")throw new Ge(L);return t=bu(t===w?n.length-1:+t||0,0),function(){for(var r=arguments,e=-1,u=bu(r.length-t,0),o=Be(u);++e<u;)o[e]=r[t+e];switch(t){case 0:return n.call(this,o);case 1:return n.call(this,r[0],o);
case 2:return n.call(this,r[0],r[1],o)}for(u=Be(t+1),e=-1;++e<t;)u[e]=r[e];return u[t]=o,n.apply(this,u)}}function se(n,t){return n>t}function pe(n){return h(n)&&Er(n)&&nu.call(n,"callee")&&!cu.call(n,"callee")}function he(n,t,r,e){return e=(r=typeof r=="function"?Bt(r,e,3):w)?r(n,t):w,e===w?dt(n,t,r):!!e}function _e(n){return h(n)&&typeof n.message=="string"&&ru.call(n)==P}function ve(n){return ge(n)&&ru.call(n)==K}function ge(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function ye(n){
return null==n?false:ve(n)?uu.test(Qe.call(n)):h(n)&&Rn.test(n)}function de(n){return typeof n=="number"||h(n)&&ru.call(n)==V}function me(n){var t;if(!h(n)||ru.call(n)!=Z||pe(n)||!(nu.call(n,"constructor")||(t=n.constructor,typeof t!="function"||t instanceof t)))return false;var r;return ht(n,function(n,t){r=t}),r===w||nu.call(n,r)}function we(n){return ge(n)&&ru.call(n)==Y}function be(n){return typeof n=="string"||h(n)&&ru.call(n)==G}function xe(n){return h(n)&&Sr(n.length)&&!!Sn[ru.call(n)]}function Ae(n,t){
return n<t}function je(n){var t=n?Bu(n):0;return Sr(t)?t?qn(n):[]:Ee(n)}function ke(n){return et(n,Re(n))}function Ie(n){return gt(n,Re(n))}function Re(n){if(null==n)return[];ge(n)||(n=Ve(n));for(var t=n.length,t=t&&Sr(t)&&(Oo(n)||pe(n))&&t||0,r=n.constructor,e=-1,r=typeof r=="function"&&r.prototype===n,u=Be(t),o=0<t;++e<t;)u[e]=e+"";for(var i in n)o&&Cr(i,t)||"constructor"==i&&(r||!nu.call(n,i))||u.push(i);return u}function Oe(n){n=Br(n);for(var t=-1,r=zo(n),e=r.length,u=Be(e);++t<e;){var o=r[t];
u[t]=[o,n[o]]}return u}function Ee(n){return Ft(n,zo(n))}function Ce(n){return(n=u(n))&&n.replace(En,a).replace(xn,"")}function Ue(n,t){var r="";if(n=u(n),t=+t,1>t||!n||!mu(t))return r;do t%2&&(r+=n),t=yu(t/2),n+=n;while(t);return r}function We(n,t,r){var e=n;return(n=u(n))?(r?Ur(e,t,r):null==t)?n.slice(g(n),y(n)+1):(t+="",n.slice(o(n,t),i(n,t)+1)):n}function $e(n,t,r){return r&&Ur(n,t,r)&&(t=w),n=u(n),n.match(t||Wn)||[]}function Se(n,t,r){return r&&Ur(n,t,r)&&(t=w),h(n)?Ne(n):ut(n,t)}function Fe(n){
return n}function Ne(n){return bt(ot(n,true))}function Te(n,t,r){if(null==r){var e=ge(t),u=e?zo(t):w;((u=u&&u.length?gt(t,u):w)?u.length:e)||(u=false,r=t,t=n,n=this)}u||(u=gt(t,zo(t)));var o=true,e=-1,i=ve(n),f=u.length;false===r?o=false:ge(r)&&"chain"in r&&(o=r.chain);for(;++e<f;){r=u[e];var a=t[r];n[r]=a,i&&(n.prototype[r]=function(t){return function(){var r=this.__chain__;if(o||r){var e=n(this.__wrapped__);return(e.__actions__=qn(this.__actions__)).push({func:t,args:arguments,thisArg:n}),e.__chain__=r,e}return t.apply(n,Jn([this.value()],arguments));
}}(a))}return n}function Le(){}function ze(n){return Wr(n)?jt(n):kt(n)}_=_?Yn.defaults(Zn.Object(),_,Yn.pick(Zn,$n)):Zn;var Be=_.Array,De=_.Date,Me=_.Error,qe=_.Function,Pe=_.Math,Ke=_.Number,Ve=_.Object,Ze=_.RegExp,Ye=_.String,Ge=_.TypeError,Je=Be.prototype,Xe=Ve.prototype,He=Ye.prototype,Qe=qe.prototype.toString,nu=Xe.hasOwnProperty,tu=0,ru=Xe.toString,eu=Zn._,uu=Ze("^"+Qe.call(nu).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ou=_.ArrayBuffer,iu=_.clearTimeout,fu=_.parseFloat,au=Pe.pow,cu=Xe.propertyIsEnumerable,lu=jr(_,"Set"),su=_.setTimeout,pu=Je.splice,hu=_.Uint8Array,_u=jr(_,"WeakMap"),vu=Pe.ceil,gu=jr(Ve,"create"),yu=Pe.floor,du=jr(Be,"isArray"),mu=_.isFinite,wu=jr(Ve,"keys"),bu=Pe.max,xu=Pe.min,Au=jr(De,"now"),ju=_.parseInt,ku=Pe.random,Iu=Ke.NEGATIVE_INFINITY,Ru=Ke.POSITIVE_INFINITY,Ou=4294967294,Eu=2147483647,Cu=9007199254740991,Uu=_u&&new _u,Wu={};
Nn.support={},Nn.templateSettings={escape:_n,evaluate:vn,interpolate:gn,variable:"",imports:{_:Nn}};var $u=function(){function n(){}return function(t){if(ge(t)){n.prototype=t;var r=new n;n.prototype=w}return r||{}}}(),Su=Vt(_t),Fu=Vt(vt,true),Nu=Zt(),Tu=Zt(true),Lu=Uu?function(n,t){return Uu.set(n,t),n}:Fe,zu=Uu?function(n){return Uu.get(n)}:Le,Bu=jt("length"),Du=function(){var n=0,t=0;return function(r,e){var u=ho(),o=S-(u-t);if(t=u,0<o){if(++n>=$)return r}else n=0;return Lu(r,e)}}(),Mu=le(function(n,t){
return h(n)&&Er(n)?ft(n,pt(t,false,true)):[]}),qu=tr(),Pu=tr(true),Ku=le(function(n){for(var t=n.length,e=t,u=Be(l),o=xr(),i=o===r,f=[];e--;){var a=n[e]=Er(a=n[e])?a:[];u[e]=i&&120<=a.length&&gu&&lu?new Dn(e&&a):null}var i=n[0],c=-1,l=i?i.length:0,s=u[0];n:for(;++c<l;)if(a=i[c],0>(s?Mn(s,a):o(f,a,0))){for(e=t;--e;){var p=u[e];if(0>(p?Mn(p,a):o(n[e],a,0)))continue n}s&&s.push(a),f.push(a)}return f}),Vu=le(function(t,r){r=pt(r);var e=rt(t,r);return It(t,r.sort(n)),e}),Zu=vr(),Yu=vr(true),Gu=le(function(n){return St(pt(n,false,true));
}),Ju=le(function(n,t){return Er(n)?ft(n,t):[]}),Xu=le(Jr),Hu=le(function(n){var t=n.length,r=2<t?n[t-2]:w,e=1<t?n[t-1]:w;return 2<t&&typeof r=="function"?t-=2:(r=1<t&&typeof e=="function"?(--t,e):w,e=w),n.length=t,Xr(n,r,e)}),Qu=le(function(n){return n=pt(n),this.thru(function(t){t=Oo(t)?t:[Br(t)];for(var r=n,e=-1,u=t.length,o=-1,i=r.length,f=Be(u+i);++e<u;)f[e]=t[e];for(;++o<i;)f[e++]=r[o];return f})}),no=le(function(n,t){return rt(n,pt(t))}),to=Pt(function(n,t,r){nu.call(n,r)?++n[r]:n[r]=1}),ro=nr(Su),eo=nr(Fu,true),uo=ur(Pn,Su),oo=ur(function(n,t){
for(var r=n.length;r--&&false!==t(n[r],r,n););return n},Fu),io=Pt(function(n,t,r){nu.call(n,r)?n[r].push(t):n[r]=[t]}),fo=Pt(function(n,t,r){n[r]=t}),ao=le(function(n,t,r){var e=-1,u=typeof t=="function",o=Wr(t),i=Er(n)?Be(n.length):[];return Su(n,function(n){var f=u?t:o&&null!=n?n[t]:w;i[++e]=f?f.apply(n,r):Or(n,t,r)}),i}),co=Pt(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),lo=lr(Xn,Su),so=lr(function(n,t,r,e){var u=n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r},Fu),po=le(function(n,t){
if(null==n)return[];var r=t[2];return r&&Ur(t[0],t[1],r)&&(t.length=1),Wt(n,pt(t),[])}),ho=Au||function(){return(new De).getTime()},_o=le(function(n,t,r){var e=x;if(r.length)var u=v(r,_o.placeholder),e=e|R;return gr(n,e,t,r,u)}),vo=le(function(n,t){t=t.length?pt(t):Ie(n);for(var r=-1,e=t.length;++r<e;){var u=t[r];n[u]=gr(n[u],x,n)}return n}),go=le(function(n,t,r){var e=x|A;if(r.length)var u=v(r,go.placeholder),e=e|R;return gr(t,e,n,r,u)}),yo=Xt(k),mo=Xt(I),wo=le(function(n,t){return it(n,1,t)}),bo=le(function(n,t,r){
return it(n,t,r)}),xo=er(),Ao=er(true),jo=le(function(n,t){if(t=pt(t),typeof n!="function"||!Kn(t,e))throw new Ge(L);var r=t.length;return le(function(e){for(var u=xu(e.length,r);u--;)e[u]=t[u](e[u]);return n.apply(this,e)})}),ko=cr(R),Io=cr(O),Ro=le(function(n,t){return gr(n,C,w,w,w,pt(t))}),Oo=du||function(n){return h(n)&&Sr(n.length)&&ru.call(n)==D},Eo=Kt(At),Co=Kt(function(n,t,r){return r?nt(n,t,r):tt(n,t)}),Uo=Ht(Co,function(n,t){return n===w?t:n}),Wo=Ht(Eo,Fr),$o=rr(_t),So=rr(vt),Fo=or(Nu),No=or(Tu),To=ir(_t),Lo=ir(vt),zo=wu?function(n){
var t=null==n?w:n.constructor;return typeof t=="function"&&t.prototype===n||typeof n!="function"&&Er(n)?Lr(n):ge(n)?wu(n):[]}:Lr,Bo=fr(true),Do=fr(),Mo=le(function(n,t){if(null==n)return{};if("function"!=typeof t[0])return t=Gn(pt(t),Ye),Nr(n,ft(Re(n),t));var r=Bt(t[0],t[1],3);return Tr(n,function(n,t,e){return!r(n,t,e)})}),qo=le(function(n,t){return null==n?{}:"function"==typeof t[0]?Tr(n,Bt(t[0],t[1],3)):Nr(n,pt(t))}),Po=Gt(function(n,t,r){return t=t.toLowerCase(),n+(r?t.charAt(0).toUpperCase()+t.slice(1):t);
}),Ko=Gt(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Vo=ar(),Zo=ar(true),Yo=Gt(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),Go=Gt(function(n,t,r){return n+(r?" ":"")+(t.charAt(0).toUpperCase()+t.slice(1))}),Jo=le(function(n,t){try{return n.apply(w,t)}catch(r){return _e(r)?r:new Me(r)}}),Xo=le(function(n,t){return function(r){return Or(r,n,t)}}),Ho=le(function(n,t){return function(r){return Or(n,r,t)}}),Qo=_r("ceil"),ni=_r("floor"),ti=Qt(se,Iu),ri=Qt(Ae,Ru),ei=_r("round");return Nn.prototype=Tn.prototype,
Ln.prototype=$u(Tn.prototype),Ln.prototype.constructor=Ln,zn.prototype=$u(Tn.prototype),zn.prototype.constructor=zn,Bn.prototype["delete"]=function(n){return this.has(n)&&delete this.__data__[n]},Bn.prototype.get=function(n){return"__proto__"==n?w:this.__data__[n]},Bn.prototype.has=function(n){return"__proto__"!=n&&nu.call(this.__data__,n)},Bn.prototype.set=function(n,t){return"__proto__"!=n&&(this.__data__[n]=t),this},Dn.prototype.push=function(n){var t=this.data;typeof n=="string"||ge(n)?t.set.add(n):t.hash[n]=true;
},ce.Cache=Bn,Nn.after=function(n,t){if(typeof t!="function"){if(typeof n!="function")throw new Ge(L);var r=n;n=t,t=r}return n=mu(n=+n)?n:0,function(){return 1>--n?t.apply(this,arguments):void 0}},Nn.ary=function(n,t,r){return r&&Ur(n,t,r)&&(t=w),t=n&&null==t?n.length:bu(+t||0,0),gr(n,E,w,w,w,w,t)},Nn.assign=Co,Nn.at=no,Nn.before=fe,Nn.bind=_o,Nn.bindAll=vo,Nn.bindKey=go,Nn.callback=Se,Nn.chain=Qr,Nn.chunk=function(n,t,r){t=(r?Ur(n,t,r):null==t)?1:bu(yu(t)||1,1),r=0;for(var e=n?n.length:0,u=-1,o=Be(vu(e/t));r<e;)o[++u]=Et(n,r,r+=t);
return o},Nn.compact=function(n){for(var t=-1,r=n?n.length:0,e=-1,u=[];++t<r;){var o=n[t];o&&(u[++e]=o)}return u},Nn.constant=function(n){return function(){return n}},Nn.countBy=to,Nn.create=function(n,t,r){var e=$u(n);return r&&Ur(n,t,r)&&(t=w),t?tt(e,t):e},Nn.curry=yo,Nn.curryRight=mo,Nn.debounce=ae,Nn.defaults=Uo,Nn.defaultsDeep=Wo,Nn.defer=wo,Nn.delay=bo,Nn.difference=Mu,Nn.drop=qr,Nn.dropRight=Pr,Nn.dropRightWhile=function(n,t,r){return n&&n.length?Nt(n,wr(t,r,3),true,true):[]},Nn.dropWhile=function(n,t,r){
return n&&n.length?Nt(n,wr(t,r,3),true):[]},Nn.fill=function(n,t,r,e){var u=n?n.length:0;if(!u)return[];for(r&&typeof r!="number"&&Ur(n,t,r)&&(r=0,e=u),u=n.length,r=null==r?0:+r||0,0>r&&(r=-r>u?0:u+r),e=e===w||e>u?u:+e||0,0>e&&(e+=u),u=r>e?0:e>>>0,r>>>=0;r<u;)n[r++]=t;return n},Nn.filter=re,Nn.flatten=function(n,t,r){var e=n?n.length:0;return r&&Ur(n,t,r)&&(t=false),e?pt(n,t):[]},Nn.flattenDeep=function(n){return n&&n.length?pt(n,true):[]},Nn.flow=xo,Nn.flowRight=Ao,Nn.forEach=uo,Nn.forEachRight=oo,Nn.forIn=Fo,
Nn.forInRight=No,Nn.forOwn=To,Nn.forOwnRight=Lo,Nn.functions=Ie,Nn.groupBy=io,Nn.indexBy=fo,Nn.initial=function(n){return Pr(n,1)},Nn.intersection=Ku,Nn.invert=function(n,t,r){r&&Ur(n,t,r)&&(t=w),r=-1;for(var e=zo(n),u=e.length,o={};++r<u;){var i=e[r],f=n[i];t?nu.call(o,f)?o[f].push(i):o[f]=[i]:o[f]=i}return o},Nn.invoke=ao,Nn.keys=zo,Nn.keysIn=Re,Nn.map=ue,Nn.mapKeys=Bo,Nn.mapValues=Do,Nn.matches=Ne,Nn.matchesProperty=function(n,t){return xt(n,ot(t,true))},Nn.memoize=ce,Nn.merge=Eo,Nn.method=Xo,Nn.methodOf=Ho,
Nn.mixin=Te,Nn.modArgs=jo,Nn.negate=function(n){if(typeof n!="function")throw new Ge(L);return function(){return!n.apply(this,arguments)}},Nn.omit=Mo,Nn.once=function(n){return fe(2,n)},Nn.pairs=Oe,Nn.partial=ko,Nn.partialRight=Io,Nn.partition=co,Nn.pick=qo,Nn.pluck=function(n,t){return ue(n,ze(t))},Nn.property=ze,Nn.propertyOf=function(n){return function(t){return yt(n,Dr(t),t+"")}},Nn.pull=function(){var n=arguments,t=n[0];if(!t||!t.length)return t;for(var r=0,e=xr(),u=n.length;++r<u;)for(var o=0,i=n[r];-1<(o=e(t,i,o));)pu.call(t,o,1);
return t},Nn.pullAt=Vu,Nn.range=function(n,t,r){r&&Ur(n,t,r)&&(t=r=w),n=+n||0,r=null==r?1:+r||0,null==t?(t=n,n=0):t=+t||0;var e=-1;t=bu(vu((t-n)/(r||1)),0);for(var u=Be(t);++e<t;)u[e]=n,n+=r;return u},Nn.rearg=Ro,Nn.reject=function(n,t,r){var e=Oo(n)?Vn:lt;return t=wr(t,r,3),e(n,function(n,r,e){return!t(n,r,e)})},Nn.remove=function(n,t,r){var e=[];if(!n||!n.length)return e;var u=-1,o=[],i=n.length;for(t=wr(t,r,3);++u<i;)r=n[u],t(r,u,n)&&(e.push(r),o.push(u));return It(n,o),e},Nn.rest=Yr,Nn.restParam=le,
Nn.set=function(n,t,r){if(null==n)return n;var e=t+"";t=null!=n[e]||Wr(t,n)?[e]:Dr(t);for(var e=-1,u=t.length,o=u-1,i=n;null!=i&&++e<u;){var f=t[e];ge(i)&&(e==o?i[f]=r:null==i[f]&&(i[f]=Cr(t[e+1])?[]:{})),i=i[f]}return n},Nn.shuffle=function(n){return oe(n,Ru)},Nn.slice=function(n,t,r){var e=n?n.length:0;return e?(r&&typeof r!="number"&&Ur(n,t,r)&&(t=0,r=e),Et(n,t,r)):[]},Nn.sortBy=function(n,t,r){if(null==n)return[];r&&Ur(n,t,r)&&(t=w);var e=-1;return t=wr(t,r,3),n=wt(n,function(n,r,u){return{a:t(n,r,u),
b:++e,c:n}}),Ut(n,f)},Nn.sortByAll=po,Nn.sortByOrder=function(n,t,r,e){return null==n?[]:(e&&Ur(t,r,e)&&(r=w),Oo(t)||(t=null==t?[]:[t]),Oo(r)||(r=null==r?[]:[r]),Wt(n,t,r))},Nn.spread=function(n){if(typeof n!="function")throw new Ge(L);return function(t){return n.apply(this,t)}},Nn.take=function(n,t,r){return n&&n.length?((r?Ur(n,t,r):null==t)&&(t=1),Et(n,0,0>t?0:t)):[]},Nn.takeRight=function(n,t,r){var e=n?n.length:0;return e?((r?Ur(n,t,r):null==t)&&(t=1),t=e-(+t||0),Et(n,0>t?0:t)):[]},Nn.takeRightWhile=function(n,t,r){
return n&&n.length?Nt(n,wr(t,r,3),false,true):[]},Nn.takeWhile=function(n,t,r){return n&&n.length?Nt(n,wr(t,r,3)):[]},Nn.tap=function(n,t,r){return t.call(r,n),n},Nn.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new Ge(L);return false===r?e=false:ge(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),ae(n,t,{leading:e,maxWait:+t,trailing:u})},Nn.thru=ne,Nn.times=function(n,t,r){if(n=yu(n),1>n||!mu(n))return[];var e=-1,u=Be(xu(n,4294967295));for(t=Bt(t,r,1);++e<n;)4294967295>e?u[e]=t(e):t(e);
return u},Nn.toArray=je,Nn.toPlainObject=ke,Nn.transform=function(n,t,r,e){var u=Oo(n)||xe(n);return t=wr(t,e,4),null==r&&(u||ge(n)?(e=n.constructor,r=u?Oo(n)?new e:[]:$u(ve(e)?e.prototype:w)):r={}),(u?Pn:_t)(n,function(n,e,u){return t(r,n,e,u)}),r},Nn.union=Gu,Nn.uniq=Gr,Nn.unzip=Jr,Nn.unzipWith=Xr,Nn.values=Ee,Nn.valuesIn=function(n){return Ft(n,Re(n))},Nn.where=function(n,t){return re(n,bt(t))},Nn.without=Ju,Nn.wrap=function(n,t){return t=null==t?Fe:t,gr(t,R,w,[n],[])},Nn.xor=function(){for(var n=-1,t=arguments.length;++n<t;){
var r=arguments[n];if(Er(r))var e=e?Jn(ft(e,r),ft(r,e)):r}return e?St(e):[]},Nn.zip=Xu,Nn.zipObject=Hr,Nn.zipWith=Hu,Nn.backflow=Ao,Nn.collect=ue,Nn.compose=Ao,Nn.each=uo,Nn.eachRight=oo,Nn.extend=Co,Nn.iteratee=Se,Nn.methods=Ie,Nn.object=Hr,Nn.select=re,Nn.tail=Yr,Nn.unique=Gr,Te(Nn,Nn),Nn.add=function(n,t){return(+n||0)+(+t||0)},Nn.attempt=Jo,Nn.camelCase=Po,Nn.capitalize=function(n){return(n=u(n))&&n.charAt(0).toUpperCase()+n.slice(1)},Nn.ceil=Qo,Nn.clone=function(n,t,r,e){return t&&typeof t!="boolean"&&Ur(n,t,r)?t=false:typeof t=="function"&&(e=r,
r=t,t=false),typeof r=="function"?ot(n,t,Bt(r,e,3)):ot(n,t)},Nn.cloneDeep=function(n,t,r){return typeof t=="function"?ot(n,true,Bt(t,r,3)):ot(n,true)},Nn.deburr=Ce,Nn.endsWith=function(n,t,r){n=u(n),t+="";var e=n.length;return r=r===w?e:xu(0>r?0:+r||0,e),r-=t.length,0<=r&&n.indexOf(t,r)==r},Nn.escape=function(n){return(n=u(n))&&hn.test(n)?n.replace(sn,c):n},Nn.escapeRegExp=function(n){return(n=u(n))&&bn.test(n)?n.replace(wn,l):n||"(?:)"},Nn.every=te,Nn.find=ro,Nn.findIndex=qu,Nn.findKey=$o,Nn.findLast=eo,
Nn.findLastIndex=Pu,Nn.findLastKey=So,Nn.findWhere=function(n,t){return ro(n,bt(t))},Nn.first=Kr,Nn.floor=ni,Nn.get=function(n,t,r){return n=null==n?w:yt(n,Dr(t),t+""),n===w?r:n},Nn.gt=se,Nn.gte=function(n,t){return n>=t},Nn.has=function(n,t){if(null==n)return false;var r=nu.call(n,t);if(!r&&!Wr(t)){if(t=Dr(t),n=1==t.length?n:yt(n,Et(t,0,-1)),null==n)return false;t=Zr(t),r=nu.call(n,t)}return r||Sr(n.length)&&Cr(t,n.length)&&(Oo(n)||pe(n))},Nn.identity=Fe,Nn.includes=ee,Nn.indexOf=Vr,Nn.inRange=function(n,t,r){
return t=+t||0,r===w?(r=t,t=0):r=+r||0,n>=xu(t,r)&&n<bu(t,r)},Nn.isArguments=pe,Nn.isArray=Oo,Nn.isBoolean=function(n){return true===n||false===n||h(n)&&ru.call(n)==M},Nn.isDate=function(n){return h(n)&&ru.call(n)==q},Nn.isElement=function(n){return!!n&&1===n.nodeType&&h(n)&&!me(n)},Nn.isEmpty=function(n){return null==n?true:Er(n)&&(Oo(n)||be(n)||pe(n)||h(n)&&ve(n.splice))?!n.length:!zo(n).length},Nn.isEqual=he,Nn.isError=_e,Nn.isFinite=function(n){return typeof n=="number"&&mu(n)},Nn.isFunction=ve,Nn.isMatch=function(n,t,r,e){
return r=typeof r=="function"?Bt(r,e,3):w,mt(n,Ar(t),r)},Nn.isNaN=function(n){return de(n)&&n!=+n},Nn.isNative=ye,Nn.isNull=function(n){return null===n},Nn.isNumber=de,Nn.isObject=ge,Nn.isPlainObject=me,Nn.isRegExp=we,Nn.isString=be,Nn.isTypedArray=xe,Nn.isUndefined=function(n){return n===w},Nn.kebabCase=Ko,Nn.last=Zr,Nn.lastIndexOf=function(n,t,r){var e=n?n.length:0;if(!e)return-1;var u=e;if(typeof r=="number")u=(0>r?bu(e+r,0):xu(r||0,e-1))+1;else if(r)return u=Lt(n,t,true)-1,n=n[u],(t===t?t===n:n!==n)?u:-1;
if(t!==t)return p(n,u,true);for(;u--;)if(n[u]===t)return u;return-1},Nn.lt=Ae,Nn.lte=function(n,t){return n<=t},Nn.max=ti,Nn.min=ri,Nn.noConflict=function(){return Zn._=eu,this},Nn.noop=Le,Nn.now=ho,Nn.pad=function(n,t,r){n=u(n),t=+t;var e=n.length;return e<t&&mu(t)?(e=(t-e)/2,t=yu(e),e=vu(e),r=pr("",e,r),r.slice(0,t)+n+r):n},Nn.padLeft=Vo,Nn.padRight=Zo,Nn.parseInt=function(n,t,r){return(r?Ur(n,t,r):null==t)?t=0:t&&(t=+t),n=We(n),ju(n,t||(In.test(n)?16:10))},Nn.random=function(n,t,r){r&&Ur(n,t,r)&&(t=r=w);
var e=null==n,u=null==t;return null==r&&(u&&typeof n=="boolean"?(r=n,n=1):typeof t=="boolean"&&(r=t,u=true)),e&&u&&(t=1,u=false),n=+n||0,u?(t=n,n=0):t=+t||0,r||n%1||t%1?(r=ku(),xu(n+r*(t-n+fu("1e-"+((r+"").length-1))),t)):Rt(n,t)},Nn.reduce=lo,Nn.reduceRight=so,Nn.repeat=Ue,Nn.result=function(n,t,r){var e=null==n?w:n[t];return e===w&&(null==n||Wr(t,n)||(t=Dr(t),n=1==t.length?n:yt(n,Et(t,0,-1)),e=null==n?w:n[Zr(t)]),e=e===w?r:e),ve(e)?e.call(n):e},Nn.round=ei,Nn.runInContext=m,Nn.size=function(n){var t=n?Bu(n):0;
return Sr(t)?t:zo(n).length},Nn.snakeCase=Yo,Nn.some=ie,Nn.sortedIndex=Zu,Nn.sortedLastIndex=Yu,Nn.startCase=Go,Nn.startsWith=function(n,t,r){return n=u(n),r=null==r?0:xu(0>r?0:+r||0,n.length),n.lastIndexOf(t,r)==r},Nn.sum=function(n,t,r){if(r&&Ur(n,t,r)&&(t=w),t=wr(t,r,3),1==t.length){n=Oo(n)?n:zr(n),r=n.length;for(var e=0;r--;)e+=+t(n[r])||0;n=e}else n=$t(n,t);return n},Nn.template=function(n,t,r){var e=Nn.templateSettings;r&&Ur(n,t,r)&&(t=r=w),n=u(n),t=nt(tt({},r||t),e,Qn),r=nt(tt({},t.imports),e.imports,Qn);
var o,i,f=zo(r),a=Ft(r,f),c=0;r=t.interpolate||Cn;var l="__p+='";r=Ze((t.escape||Cn).source+"|"+r.source+"|"+(r===gn?jn:Cn).source+"|"+(t.evaluate||Cn).source+"|$","g");var p="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(n.replace(r,function(t,r,e,u,f,a){return e||(e=u),l+=n.slice(c,a).replace(Un,s),r&&(o=true,l+="'+__e("+r+")+'"),f&&(i=true,l+="';"+f+";\n__p+='"),e&&(l+="'+((__t=("+e+"))==null?'':__t)+'"),c=a+t.length,t}),l+="';",(t=t.variable)||(l="with(obj){"+l+"}"),l=(i?l.replace(fn,""):l).replace(an,"$1").replace(cn,"$1;"),
l="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}",t=Jo(function(){return qe(f,p+"return "+l).apply(w,a)}),t.source=l,_e(t))throw t;return t},Nn.trim=We,Nn.trimLeft=function(n,t,r){var e=n;return(n=u(n))?n.slice((r?Ur(e,t,r):null==t)?g(n):o(n,t+"")):n},Nn.trimRight=function(n,t,r){var e=n;return(n=u(n))?(r?Ur(e,t,r):null==t)?n.slice(0,y(n)+1):n.slice(0,i(n,t+"")+1):n;
},Nn.trunc=function(n,t,r){r&&Ur(n,t,r)&&(t=w);var e=U;if(r=W,null!=t)if(ge(t)){var o="separator"in t?t.separator:o,e="length"in t?+t.length||0:e;r="omission"in t?u(t.omission):r}else e=+t||0;if(n=u(n),e>=n.length)return n;if(e-=r.length,1>e)return r;if(t=n.slice(0,e),null==o)return t+r;if(we(o)){if(n.slice(e).search(o)){var i,f=n.slice(0,e);for(o.global||(o=Ze(o.source,(kn.exec(o)||"")+"g")),o.lastIndex=0;n=o.exec(f);)i=n.index;t=t.slice(0,null==i?e:i)}}else n.indexOf(o,e)!=e&&(o=t.lastIndexOf(o),
-1<o&&(t=t.slice(0,o)));return t+r},Nn.unescape=function(n){return(n=u(n))&&pn.test(n)?n.replace(ln,d):n},Nn.uniqueId=function(n){var t=++tu;return u(n)+t},Nn.words=$e,Nn.all=te,Nn.any=ie,Nn.contains=ee,Nn.eq=he,Nn.detect=ro,Nn.foldl=lo,Nn.foldr=so,Nn.head=Kr,Nn.include=ee,Nn.inject=lo,Te(Nn,function(){var n={};return _t(Nn,function(t,r){Nn.prototype[r]||(n[r]=t)}),n}(),false),Nn.sample=oe,Nn.prototype.sample=function(n){return this.__chain__||null!=n?this.thru(function(t){return oe(t,n)}):oe(this.value());
},Nn.VERSION=b,Pn("bind bindKey curry curryRight partial partialRight".split(" "),function(n){Nn[n].placeholder=Nn}),Pn(["drop","take"],function(n,t){zn.prototype[n]=function(r){var e=this.__filtered__;if(e&&!t)return new zn(this);r=null==r?1:bu(yu(r)||0,0);var u=this.clone();return e?u.__takeCount__=xu(u.__takeCount__,r):u.__views__.push({size:r,type:n+(0>u.__dir__?"Right":"")}),u},zn.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),Pn(["filter","map","takeWhile"],function(n,t){
var r=t+1,e=r!=T;zn.prototype[n]=function(n,t){var u=this.clone();return u.__iteratees__.push({iteratee:wr(n,t,1),type:r}),u.__filtered__=u.__filtered__||e,u}}),Pn(["first","last"],function(n,t){var r="take"+(t?"Right":"");zn.prototype[n]=function(){return this[r](1).value()[0]}}),Pn(["initial","rest"],function(n,t){var r="drop"+(t?"":"Right");zn.prototype[n]=function(){return this.__filtered__?new zn(this):this[r](1)}}),Pn(["pluck","where"],function(n,t){var r=t?"filter":"map",e=t?bt:ze;zn.prototype[n]=function(n){
return this[r](e(n))}}),zn.prototype.compact=function(){return this.filter(Fe)},zn.prototype.reject=function(n,t){return n=wr(n,t,1),this.filter(function(t){return!n(t)})},zn.prototype.slice=function(n,t){n=null==n?0:+n||0;var r=this;return r.__filtered__&&(0<n||0>t)?new zn(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==w&&(t=+t||0,r=0>t?r.dropRight(-t):r.take(t-n)),r)},zn.prototype.takeRightWhile=function(n,t){return this.reverse().takeWhile(n,t).reverse()},zn.prototype.toArray=function(){return this.take(Ru);
},_t(zn.prototype,function(n,t){var r=/^(?:filter|map|reject)|While$/.test(t),e=/^(?:first|last)$/.test(t),u=Nn[e?"take"+("last"==t?"Right":""):t];u&&(Nn.prototype[t]=function(){function t(n){return e&&i?u(n,1)[0]:u.apply(w,Jn([n],o))}var o=e?[1]:arguments,i=this.__chain__,f=this.__wrapped__,a=!!this.__actions__.length,c=f instanceof zn,l=o[0],s=c||Oo(f);return s&&r&&typeof l=="function"&&1!=l.length&&(c=s=false),l={func:ne,args:[t],thisArg:w},a=c&&!a,e&&!i?a?(f=f.clone(),f.__actions__.push(l),n.call(f)):u.call(w,this.value())[0]:!e&&s?(f=a?f:new zn(this),
f=n.apply(f,o),f.__actions__.push(l),new Ln(f,i)):this.thru(t)})}),Pn("join pop push replace shift sort splice split unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?He:Je)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:join|pop|replace|shift)$/.test(n);Nn.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?t.apply(this.value(),n):this[r](function(r){return t.apply(r,n)})}}),_t(zn.prototype,function(n,t){var r=Nn[t];if(r){var e=r.name+"";(Wu[e]||(Wu[e]=[])).push({
name:t,func:r})}}),Wu[sr(w,A).name]=[{name:"wrapper",func:w}],zn.prototype.clone=function(){var n=new zn(this.__wrapped__);return n.__actions__=qn(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=qn(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=qn(this.__views__),n},zn.prototype.reverse=function(){if(this.__filtered__){var n=new zn(this);n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},zn.prototype.value=function(){
var n,t=this.__wrapped__.value(),r=this.__dir__,e=Oo(t),u=0>r,o=e?t.length:0;n=o;for(var i=this.__views__,f=0,a=-1,c=i.length;++a<c;){var l=i[a],s=l.size;switch(l.type){case"drop":f+=s;break;case"dropRight":n-=s;break;case"take":n=xu(n,f+s);break;case"takeRight":f=bu(f,n-s)}}if(n={start:f,end:n},i=n.start,f=n.end,n=f-i,u=u?f:i-1,i=this.__iteratees__,f=i.length,a=0,c=xu(n,this.__takeCount__),!e||o<F||o==n&&c==n)return Tt(t,this.__actions__);e=[];n:for(;n--&&a<c;){for(u+=r,o=-1,l=t[u];++o<f;){var p=i[o],s=p.type,p=p.iteratee(l);
if(s==T)l=p;else if(!p){if(s==N)continue n;break n}}e[a++]=l}return e},Nn.prototype.chain=function(){return Qr(this)},Nn.prototype.commit=function(){return new Ln(this.value(),this.__chain__)},Nn.prototype.concat=Qu,Nn.prototype.plant=function(n){for(var t,r=this;r instanceof Tn;){var e=Mr(r);t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},Nn.prototype.reverse=function(){function n(n){return n.reverse()}var t=this.__wrapped__;return t instanceof zn?(this.__actions__.length&&(t=new zn(this)),
t=t.reverse(),t.__actions__.push({func:ne,args:[n],thisArg:w}),new Ln(t,this.__chain__)):this.thru(n)},Nn.prototype.toString=function(){return this.value()+""},Nn.prototype.run=Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){return Tt(this.__wrapped__,this.__actions__)},Nn.prototype.collect=Nn.prototype.map,Nn.prototype.head=Nn.prototype.first,Nn.prototype.select=Nn.prototype.filter,Nn.prototype.tail=Nn.prototype.rest,Nn}var w,b="3.10.1",x=1,A=2,j=4,k=8,I=16,R=32,O=64,E=128,C=256,U=30,W="...",$=150,S=16,F=200,N=1,T=2,L="Expected a function",z="__lodash_placeholder__",B="[object Arguments]",D="[object Array]",M="[object Boolean]",q="[object Date]",P="[object Error]",K="[object Function]",V="[object Number]",Z="[object Object]",Y="[object RegExp]",G="[object String]",J="[object ArrayBuffer]",X="[object Float32Array]",H="[object Float64Array]",Q="[object Int8Array]",nn="[object Int16Array]",tn="[object Int32Array]",rn="[object Uint8Array]",en="[object Uint8ClampedArray]",un="[object Uint16Array]",on="[object Uint32Array]",fn=/\b__p\+='';/g,an=/\b(__p\+=)''\+/g,cn=/(__e\(.*?\)|\b__t\))\+'';/g,ln=/&(?:amp|lt|gt|quot|#39|#96);/g,sn=/[&<>"'`]/g,pn=RegExp(ln.source),hn=RegExp(sn.source),_n=/<%-([\s\S]+?)%>/g,vn=/<%([\s\S]+?)%>/g,gn=/<%=([\s\S]+?)%>/g,yn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,dn=/^\w*$/,mn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,wn=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,bn=RegExp(wn.source),xn=/[\u0300-\u036f\ufe20-\ufe23]/g,An=/\\(\\)?/g,jn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,kn=/\w*$/,In=/^0[xX]/,Rn=/^\[object .+?Constructor\]$/,On=/^\d+$/,En=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Cn=/($^)/,Un=/['\n\r\u2028\u2029\\]/g,Wn=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),$n="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Sn={};
Sn[X]=Sn[H]=Sn[Q]=Sn[nn]=Sn[tn]=Sn[rn]=Sn[en]=Sn[un]=Sn[on]=true,Sn[B]=Sn[D]=Sn[J]=Sn[M]=Sn[q]=Sn[P]=Sn[K]=Sn["[object Map]"]=Sn[V]=Sn[Z]=Sn[Y]=Sn["[object Set]"]=Sn[G]=Sn["[object WeakMap]"]=false;var Fn={};Fn[B]=Fn[D]=Fn[J]=Fn[M]=Fn[q]=Fn[X]=Fn[H]=Fn[Q]=Fn[nn]=Fn[tn]=Fn[V]=Fn[Z]=Fn[Y]=Fn[G]=Fn[rn]=Fn[en]=Fn[un]=Fn[on]=true,Fn[P]=Fn[K]=Fn["[object Map]"]=Fn["[object Set]"]=Fn["[object WeakMap]"]=false;var Nn={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a",
"\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y",
"\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss"},Tn={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},Ln={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},zn={"function":true,object:true},Bn={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Dn={"\\":"\\",
"'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Mn=zn[typeof exports]&&exports&&!exports.nodeType&&exports,qn=zn[typeof module]&&module&&!module.nodeType&&module,Pn=zn[typeof self]&&self&&self.Object&&self,Kn=zn[typeof window]&&window&&window.Object&&window,Vn=qn&&qn.exports===Mn&&Mn,Zn=Mn&&qn&&typeof global=="object"&&global&&global.Object&&global||Kn!==(this&&this.window)&&Kn||Pn||this,Yn=m();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Zn._=Yn, define(function(){
return Yn})):Mn&&qn?Vn?(qn.exports=Yn)._=Yn:Mn._=Yn:Zn._=Yn}).call(this);;
var app = angular.module('zeroApp', ['ngSanitize', 'zero.Services', 'ngCookies', 'angular.filter', 'ngAnimate'])
    .config(["$locationProvider", "$httpProvider", function ($locationProvider, $httpProvider, $compileProvider) {
        $locationProvider.html5Mode(true);
        //$httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content');
        //$httpProvider.defaults.headers.common['TTTTTTTTTTTTTTTT'] = 'aaaaaaaaaaaaaaa';
        $httpProvider.defaults.headers.common = { 'X-Requested-With': 'XMLHttpRequest' };
        ///$httpProvider.defaults.xsrfCookieName = 'RequestVerificationToken';
        ///$httpProvider.defaults.xsrfHeaderName = 'RequestVerificationToken';

    }])
//app.config(["$httpProvider", function ($httpProvider) {
//    $httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content')
//}]);

app.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.interceptors.push('errorHttpInterceptor');
}]);

app.config([
    '$compileProvider',
    function ($compileProvider) {
        $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|line):/);
    }
]);
app.run(['$rootScope', '$window', 
    function ($rootScope, $window) {
    //    $rootScope.user = {};
    //    $window.fbAsyncInit = function () {
    //        // Executed when the SDK is loaded
    //        FB.init({
    //            appId: '422819445338287',
    //            /*
    //             Adding a Channel File improves the performance
    //             of the javascript SDK, by addressing issues
    //             with cross-domain communication in certain browsers.
    //            */
    //            //channelUrl: 'app/channel.html',
    //            /*
    //             Set if you want to check the authentication status
    //             at the start up of the app
    //            */
    //            status: true,
    //            /*
    //             Enable cookies to allow the server to access
    //             the session
    //            */
    //            cookie: true,
    //            /* Parse XFBML */
    //            xfbml: true,
    //            version : 'v2.4'
    //        });
    //        //sAuth.watchAuthenticationStatusChange();
    //    };

    //    (function (d) {
    //        // load the Facebook javascript SDK
    //        var js,
    //            id = 'facebook-jssdk',
    //            ref = d.getElementsByTagName('script')[0];
    //        if (d.getElementById(id)) {
    //            return;
    //        }

    //        js = d.createElement('script');
    //        js.id = id;
    //        js.async = true;
    //        js.src = "//connect.facebook.net/en_US/all.js";

    //        ref.parentNode.insertBefore(js, ref);

    //    }(document));

    }]);
;
var servicesModule = angular.module('zero.Services', []);
servicesModule.factory('Paginator', function () {
     return function (fetchFunction, pageSize, paging) {
        var paginator = {
            hasNextVar: false,
            paging: paging,
            next: function () {
                if (this.hasNextVar) {
                    this.currentOffset += pageSize;
                    this._load();
                }
            },
            _load: function () {
                var self = this;
                fetchFunction(this.currentOffset, pageSize, self.sortKey, this.isDesc, function (items, status, headers, config) {
                    self.currentPageItems = self.currentPageItems.concat(items);
                    //self.currentPageItems = items.slice(0, pageSize);
                    self.resultCount = parseInt(headers("X-Total-Count"));

                    self.hasNextVar = self.currentPageItems.length < self.resultCount && self.paging;
                    self.maxPage = Math.ceil(self.resultCount / pageSize);
                    self.currentPage = self.currentOffset / pageSize + 1;
                });
            },
            hasNext: function () {
                return this.hasNextVar;
            },
            previous: function () {
                if (this.hasPrevious()) {
                    this.currentOffset -= pageSize;
                    this._load();
                }
            },
            hasPrevious: function () {
                return this.currentOffset !== 0;
            },
            sort: function (sortKey) {
                //同じKeyなら昇順降順を逆転
                if (this.sortKey == sortKey)
                    this.isDesc = !this.isDesc;
                else//デフォルト降順
                    this.isDesc = true;
                this.sortKey = sortKey;
                //ページをリセット
                this.currentOffset = 0;
                this._load();
            },
            currentPageItems: [],
            currentOffset: 0,
            currentPage: 0,
            resultCount: 0,
            maxPage: 0,
            sortKey: '',
            isDesc: true
        };
        // 最初のページを読み込みます
        paginator._load();
        return paginator;
    };
});
servicesModule.factory('Paginator2', function () {
    return function (fetchFunction, pageSize, paging, currentOffset) {
        var paginator = {
            hasNextVar: false,
            paging: paging,
            reset: function () {
                this.currentOffset = 0;
            },
            next: function () {
                if (this.hasNextVar) {
                    this.currentOffset += pageSize;
                    this._load();
                }
            },
            _load: function () {
                var self = this;
                fetchFunction(this.currentOffset, pageSize, self.sortKey, this.isDesc, function (items, status, headers, config) {
                    if (self.isLoaded) {
                        window.scrollTo(0, 0);
                    }
                    self.isLoaded = true;
                    self.currentPageItems = self.currentPageItems =items;
                    //self.currentPageItems = items.slice(0, pageSize);
                    self.resultCount = parseInt(headers("X-Total-Count"));
                    self.maxPage = Math.ceil(self.resultCount / pageSize);
                    self.currentPage = self.currentOffset / pageSize + 1;
                    self.hasNextVar = self.maxPage > self.currentPage && self.paging;
                    window.history.replaceState('', '', window.location.pathname + '?p=' + self.currentOffset);
                });
            },
            hasNext: function () {
                return this.hasNextVar;
            },
            previous: function () {
                if (this.hasPrevious()) {
                    this.currentOffset -= pageSize;
                    this._load();
                }
            },
            hasPrevious: function () {
                return this.currentOffset !== 0;
            },
            sort: function (sortKey) {
                //同じKeyなら昇順降順を逆転
                if (this.sortKey == sortKey)
                    this.isDesc = !this.isDesc;
                else//デフォルト降順
                    this.isDesc = true;
                this.sortKey = sortKey;
                //ページをリセット
                this.currentOffset = 0;
                this._load();
            },
            currentPageItems: [],
            currentOffset: Number(currentOffset),
            currentPage: 0,
            resultCount: 0,
            maxPage: 0,
            sortKey: '',
            isLoaded : false,
            isDesc: true
        };
        // 最初のページを読み込みます
        var getQuery = function (key, default_) {
            if(default_ == null) default_ = "";
            key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regex = new RegExp("[\\?&/]" + key + "=([^&#]*)");
            var qs = regex.exec(window.location.href);
            if(qs == null)
                return default_;
            else
                return qs[1];
        }
        //var p = getQuery('p', 0);
        //if (p != 0) {
        //    alert('service in ' + p);
        //    paginator.currentOffset = p;
        //}


        paginator._load();
        return paginator;
    };
});
//Paginator2の self.currentPage = (self.currentOffset - 1) / pageSize + 1; だけが違う
servicesModule.factory('PaginatorInitOne', function () {
    return function (fetchFunction, pageSize, paging, currentOffset) {
        var paginator = {
            hasNextVar: false,
            paging: paging,
            next: function () {
                if (this.hasNextVar) {
                    this.currentOffset += pageSize;
                    this._load();
                }
            },
            _load: function () {
                var self = this;
                fetchFunction(this.currentOffset, pageSize, self.sortKey, this.isDesc, function (items, status, headers, config) {
                    if (self.isLoaded) {
                        var ele = document.getElementById('listTop');
                        if (ele !== null)
                            ele.scrollIntoView(true);
                    }
                    self.isLoaded = true;
                    self.currentPageItems = self.currentPageItems = items;
                    self.resultCount = parseInt(headers("X-Total-Count"));
                    self.hasNextVar = self.currentPageItems.length < self.resultCount && self.paging;
                    self.maxPage = Math.ceil(self.resultCount / pageSize);
                    self.currentPage = (self.currentOffset - 1) / pageSize + 1;
                    window.history.replaceState('', '', window.location.pathname + '?p=' + self.currentOffset);
                });
            },
            hasNext: function () {
                return this.hasNextVar;
            },
            previous: function () {
                if (this.hasPrevious()) {
                    this.currentOffset -= pageSize;
                    this._load();
                }
            },
            hasPrevious: function () {
                return this.currentOffset !== 0;
            },
            sort: function (sortKey) {
                //同じKeyなら昇順降順を逆転
                if (this.sortKey == sortKey)
                    this.isDesc = !this.isDesc;
                else//デフォルト降順
                    this.isDesc = true;
                this.sortKey = sortKey;
                //ページをリセット
                this.currentOffset = 0;
                this._load();
            },
            currentPageItems: [],
            currentOffset: Number(currentOffset),
            currentPage: 0,
            resultCount: 0,
            maxPage: 0,
            sortKey: '',
            isLoaded: false,
            isDesc: true
        };
        // 最初のページを読み込みます
        var getQuery = function (key, default_) {
            if (default_ == null) default_ = "";
            key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regex = new RegExp("[\\?&/]" + key + "=([^&#]*)");
            var qs = regex.exec(window.location.href);
            if (qs == null)
                return default_;
            else
                return qs[1];
        }
        //var p = getQuery('p', 0);
        //if (p != 0) {
        //    alert('service in ' + p);
        //    paginator.currentOffset = p;
        //}


        paginator._load();
        return paginator;
    };
});
servicesModule.factory('PaginatorDate', function () {
    return function (fetchFunction, pageSize, paging, currentOffset, date) {
        var paginator = {
            hasNextVar: false,
            paging: paging,
            reset: function () {
                this.currentOffset = 0;
            },
            next: function () {
                if (this.hasNextVar) {
                    this.currentOffset += pageSize;
                    this._load();
                }
            },
            _load: function () {
                var self = this;
                fetchFunction(this.currentOffset, pageSize, self.sortKey, this.isDesc, function (items, status, headers, config) {
                    if (self.isLoaded) {
                        window.scrollTo(0, 0);
                    }
                    self.isLoaded = true;
                    self.currentPageItems = self.currentPageItems = items;
                    //self.currentPageItems = items.slice(0, pageSize);
                    self.resultCount = parseInt(headers("X-Total-Count"));
                    self.maxPage = Math.ceil(self.resultCount / pageSize);
                    self.currentPage = self.currentOffset / pageSize + 1;
                    self.hasNextVar = self.maxPage > self.currentPage && self.paging;
                    if (self.date !== '')
                        window.history.replaceState('', '', window.location.pathname + '?p=' + self.currentOffset + '&date=' + self.date);
                    else
                        window.history.replaceState('', '', window.location.pathname + '?p=' + self.currentOffset);
                });
            },
            hasNext: function () {
                return this.hasNextVar;
            },
            previous: function () {
                if (this.hasPrevious()) {
                    this.currentOffset -= pageSize;
                    this._load();
                }
            },
            hasPrevious: function () {
                return this.currentOffset !== 0;
            },
            sort: function (sortKey) {
                //同じKeyなら昇順降順を逆転
                if (this.sortKey == sortKey)
                    this.isDesc = !this.isDesc;
                else//デフォルト降順
                    this.isDesc = true;
                this.sortKey = sortKey;
                //ページをリセット
                this.currentOffset = 0;
                this._load();
            },
            currentPageItems: [],
            currentOffset: Number(currentOffset),
            currentPage: 0,
            resultCount: 0,
            maxPage: 0,
            sortKey: '',
            date: date,
            isLoaded: false,
            isDesc: true
        };
        // 最初のページを読み込みます
        var getQuery = function (key, default_) {
            if (default_ == null) default_ = "";
            key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regex = new RegExp("[\\?&/]" + key + "=([^&#]*)");
            var qs = regex.exec(window.location.href);
            if (qs == null)
                return default_;
            else
                return qs[1];
        }
        //var p = getQuery('p', 0);
        //if (p != 0) {
        //    alert('service in ' + p);
        //    paginator.currentOffset = p;
        //}


        paginator._load();
        return paginator;
    };
});
servicesModule.factory('PrizePaginator', function () {
	return function (fetchFunction, pageSize, paging, initOffset) {
		var paginator = {
			hasNextVar: false,
			paging: paging,
			next: function () {
				if (this.hasNextVar) {
					this.currentOffset += pageSize;
					this._load();
				}
			},
			_load: function () {
				var self = this;
				fetchFunction(this.currentOffset, pageSize, self.sortKey, this.isDesc, function (items, status, headers, config) {
					self.currentPageItems = self.currentPageItems.concat(items);
					//self.currentPageItems = items.slice(0, pageSize);
					self.resultCount = parseInt(headers("X-Total-Count"));

					self.hasNextVar = self.currentPageItems.length < self.resultCount && self.paging;
					self.maxPage = Math.ceil(self.resultCount / pageSize);
					self.currentPage = self.currentOffset / pageSize + 1;
				});
			},
			hasNext: function () {
				return this.hasNextVar;
			},
			previous: function () {
				if (this.hasPrevious()) {
					this.currentOffset -= pageSize;
					this._load();
				}
			},
			hasPrevious: function () {
				return this.currentOffset !== 0;
			},
			sort: function (sortKey) {
				//同じKeyなら昇順降順を逆転
				if (this.sortKey == sortKey)
					this.isDesc = !this.isDesc;
				else//デフォルト降順
					this.isDesc = true;
				this.sortKey = sortKey;
				//ページをリセット
				this.currentOffset = 0;
				this._load();
			},
			currentPageItems: [],
			currentOffset: initOffset,
			currentPage: 0,
			resultCount: 0,
			maxPage: 0,
			sortKey: '',
			isDesc: true
		};
		// 最初のページを読み込みます
		paginator._load();
		return paginator;
	};
});

servicesModule.factory("AuthStateModel", ['$cookieStore',
    function ($cookieStore) {
        return {
            getTokenType: function () {
                return 'Authorization';
            },
            setToken: function (value) {
                $cookieStore.put('token', value);
            },
            getToken: function () {
                return 'Bearer ' + $cookieStore.get('token');
            },
            isAuth: function () {
                var value = $cookieStore.get('token');
                if (angular.isUndefined(value))
                    return false;
                if ( value !== '')
                    return true;
                else
                    return false;
            },
            deleteToken: function() {
                //$cookieStore.remove('token');
                window.document.cookie = 'token=; path=/taitokuji; max-age=0';
            }
        };
    }
]);

servicesModule.factory('errorHttpInterceptor', ['$q', '$rootScope', 'AuthStateModel',
    function ($q, $rootScope, AuthStateModel) {
        return {
            // optional method
            request: function (config) {
                return config;
            },

            // optional method
            requestError: function (rejection) {
                return $q.reject(rejection);
            },

            // optional method
            response: function (response) {
                if (response.status == 401) {
                    AuthStateModel.deleteToken();
                    $rootScope.$broadcast('event:loginRequired');
                    window.location.href = '/taitokuji/login';
                }
                else if (response.status == 403) {
                    
                }
                else if (response.status >= 400 && response.status < 500) {

                }
                else if (response.status == 500) {
                    ErrorService.setError('エラーが発生しました');
                }
                return response;
            },

            // optional method
            responseError: function (response) {
                if (response.status == 401) {
                    AuthStateModel.deleteToken();
                    $rootScope.$broadcast('event:loginRequired');
                    window.location.href = '/taitokuji/login';
                }
                else if (response.status == 403) {
                    $rootScope.$broadcast('event:alert-error', '権限がありません');
                }
                else if (response.status >= 400 && response.status < 500) {
                    $rootScope.$broadcast('event:alert-error', '要求されたURLが見つかりませんでした [' + response.status + ']');
                }

                else if (response.status == 500) {
                    //alert('エラーが発生しました');
                    $rootScope.$broadcast('event:alert-error', 'サーバーエラーが発生しました。');
                }
                return $q.reject(response);
            }
        };
    }
]);
servicesModule.factory('ErrorService', function () {
    return {
        errorMessage: null,
        setError: function (msg) {
            this.errorMessage = msg;
        }
    };
});
servicesModule.factory('QuerystringService', function () {
    return {
        get: function (key, default_) {
            if (default_ == null) default_ = "";
            key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regex = new RegExp("[\\?&/]" + key + "=([^&#]*)");
            var qs = regex.exec(window.location.href);
            if (qs == null)
                return default_;
            else
                return qs[1];
        }
    };
});
//app.factory("SharedCopyRightService", function () {
//    return {
//        copyRightList: [],
//    };
//});

servicesModule.factory("MenuService", function () {
    var storePrize = false;
    var storeSale = false;
    var storeTopics = false;
    var storeEvnet = false;
    var storeGame = false;
        return {
            storePrize: storePrize,
            storeSale: storeSale,
            storeTopics: storeTopics,
            storeEvent: storeEvnet,
            storeGame:storeGame
        };
    }
);


app.factory("SharedCopyRightService", function () {
    var service = {};

    service.copyRightList = [];
    service.add = function (item) {
        for (var i = 0; i < service.copyRightList.length; i++) {
            if (service.copyRightList[i] == item)
                return;
        }
        service.copyRightList.push(item);
    }
    
    return service;
});

function PagerService() {
    // service definition
    var service = {};

    service.GetPager = GetPager;

    return service;

    // service implementation
    function GetPager(totalItems, currentPage, pageSize) {
        // default to first page
        currentPage = currentPage || 1;

        // default page size is 10
        pageSize = pageSize || 10;

        // calculate total pages
        var totalPages = Math.ceil(totalItems / pageSize);

        var startPage, endPage;
        if (totalPages <= 10) {
            // less than 10 total pages so show all
            startPage = 1;
            endPage = totalPages;
        } else {
            // more than 10 total pages so calculate start and end pages
            if (currentPage <= 6) {
                startPage = 1;
                endPage = 10;
            } else if (currentPage + 4 >= totalPages) {
                startPage = totalPages - 9;
                endPage = totalPages;
            } else {
                startPage = currentPage - 5;
                endPage = currentPage + 4;
            }
        }

        // calculate start and end item indexes
        var startIndex = (currentPage - 1) * pageSize;
        var endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1);

        // create an array of pages to ng-repeat in the pager control
        var pages = _.range(startPage, endPage + 1);

        // return object with all pager properties required by the view
        return {
            totalItems: totalItems,
            currentPage: currentPage,
            pageSize: pageSize,
            totalPages: totalPages,
            startPage: startPage,
            endPage: endPage,
            startIndex: startIndex,
            endIndex: endIndex,
            pages: pages
        };
    }
}

app.factory('PagerService', PagerService);;
app.filter('range', function () {
    return function (input, total) {
        total = parseInt(total);
        for (var i = 0; i < total; i++)
            input.push(i);
        return input;
    };
});
app.filter("mobIcon", function ($sce) {
    var ffilter = function (input) {
        if (input == null)
            return;
        var str = "";
        for (var i = 0; i < input.length; i++) {
            if (input[i].GenreData.GenreNameCana == 'アイフォン')
                str += '<span class="ico iphone">iPhone</span>';

            else if (input[i].GenreData.GenreNameCana == 'アイポッドタッチ')
                str += '<span class="ico iphone">iPodTouch</span>';

            else if (input[i].GenreData.GenreNameCana == 'アイパッド')
            	str += '<span class="ico ipad">iPad</span>';

            else if (input[i].GenreData.GenreNameCana == 'アップルティーヴイ')
            	str += '<span class="ico iphone">Apple TV</span>';

            else if (input[i].GenreData.GenreNameCana == 'グーグルプレイ')
                str += '<span class="ico googlePlay">GooglePlay</span>';

            else if (input[i].GenreData.GenreNameCana == 'エーユースマートパス')
            	str += '<span class="ico auone">auスマートパス</span>';

            else if (input[i].GenreData.GenreNameCana == 'アイモード')
                str += '<span class="ico imode">iモード</span>';

            else if (input[i].GenreData.GenreNameCana == 'イージーウェブ')
                str += '<span class="ico ezweb">EZweb</span>';

            else if (input[i].GenreData.GenreNameCana == 'ヤフーケータイ')
				str += '<span class="ico yahoo">Yahoo!ケータイ</span>';

			else if (input[i].GenreData.GenreNameCana == 'ヤフーゲーム')
				str += '<span class="ico yahoo">Yahoo!ゲーム</span>';

			else if (input[i].GenreData.GenreNameCana == 'スチーム')
				str += '<span class="ico steam">STEAM</span>';

            else if (input[i].GenreData.GenreNameCana == 'ソノタ')
                str += '<span class="ico other">その他</span>';

            else if (input[i].GenreData.GenreNameCana == 'グリー')
                str += '<span class="ico gree">GREE</span>';

            else if (input[i].GenreData.GenreNameCana == 'モバゲー')
                str += '<span class="ico mobage">Mobage</span>';

            else if (input[i].GenreData.GenreNameCana == 'ヤフーモバゲー')
                str += '<span class="ico yahooMobage">Yahoo!Mobage</span>';

            else if (input[i].GenreData.GenreNameCana == 'ミクシーゲーム')
            	str += '<span class="ico mixi">mixiゲーム</span>';

            else if (input[i].GenreData.GenreNameCana == 'ディーゲーム')
            	str += '<span class="ico dgame">dゲーム</span>';

            else if (input[i].GenreData.GenreNameCana == 'アマゾン')
            	str += '<span class="ico amazon">Amazon</span>';

            else if (input[i].GenreData.GenreNameCana == 'フェイスブック')
            	str += '<span class="ico facebook">Facebook</span>';

            else if (input[i].GenreData.GenreNameCana == 'ライン')
            	str += '<span class="ico line">LINE</span>';

            else if (input[i].GenreData.GenreNameCana == 'アメーバ')
                str += '<span class="ico ameba">Ameba</span>';

            else if (input[i].GenreData.GenreNameCana == 'ニンテンドウスイッチ')
                str += '<span class="ico switch">Nintendo Switch</span>';

            else if (input[i].GenreData.GenreNameCana == 'プレイステーションフォー')
                str += '<span class="ico ps4">PS4</span>';
        }
        return $sce.trustAsHtml(str);
    };
    return ffilter;
});
app.filter("mobIconGlobal", function ($sce) {
	var ffilter = function (input) {
		if (input == null)
			return;
		var str = "";
		for (var i = 0; i < input.length; i++) {
			if (input[i].GenreData.GenreNameCana == 'アイフォン')
				str += '<span class="ico iphone">iPhone</span>';

			else if (input[i].GenreData.GenreNameCana == 'アイポッドタッチ')
				str += '<span class="ico iphone">iPodTouch</span>';

			else if (input[i].GenreData.GenreNameCana == 'アイパッド')
				str += '<span class="ico ipad">iPad</span>';

			else if (input[i].GenreData.GenreNameCana == 'アップルティーヴイ')
				str += '<span class="ico iphone">Apple TV</span>';

			else if (input[i].GenreData.GenreNameCana == 'グーグルプレイ')
				str += '<span class="ico googlePlay">GooglePlay</span>';

			else if (input[i].GenreData.GenreNameCana == 'エーユースマートパス')
				str += '<span class="ico auone">au Smart Pass</span>';

			else if (input[i].GenreData.GenreNameCana == 'アイモード')
				str += '<span class="ico imode">iモード</span>';

			else if (input[i].GenreData.GenreNameCana == 'イージーウェブ')
				str += '<span class="ico ezweb">EZweb</span>';

			else if (input[i].GenreData.GenreNameCana == 'ヤフーケータイ')
				str += '<span class="ico yahoo">Yahoo!ケータイ</span>';

			else if (input[i].GenreData.GenreNameCana == 'ヤフーゲーム')
				str += '<span class="ico yahoo">Yahoo!GAME</span>';

			else if (input[i].GenreData.GenreNameCana == 'スチーム')
				str += '<span class="ico steam">STEAM</span>';

			else if (input[i].GenreData.GenreNameCana == 'ソノタ')
				str += '<span class="ico other">その他</span>';

			else if (input[i].GenreData.GenreNameCana == 'グリー')
				str += '<span class="ico gree">GREE</span>';

			else if (input[i].GenreData.GenreNameCana == 'モバゲー')
				str += '<span class="ico mobage">Mobage</span>';

			else if (input[i].GenreData.GenreNameCana == 'ヤフーモバゲー')
				str += '<span class="ico yahooMobage">Yahoo!Mobage</span>';

			else if (input[i].GenreData.GenreNameCana == 'ミクシーゲーム')
				str += '<span class="ico mixi">mixiゲーム</span>';

			else if (input[i].GenreData.GenreNameCana == 'ディーゲーム')
				str += '<span class="ico dgame">dゲーム</span>';

			else if (input[i].GenreData.GenreNameCana == 'アマゾン')
				str += '<span class="ico amazon">Amazon</span>';

			else if (input[i].GenreData.GenreNameCana == 'フェイスブック')
				str += '<span class="ico facebook">Facebook</span>';

			else if (input[i].GenreData.GenreNameCana == 'ライン')
				str += '<span class="ico line">LINE</span>';

			else if (input[i].GenreData.GenreNameCana == 'アメーバ')
                str += '<span class="ico ameba">Ameba</span>';

            else if (input[i].GenreData.GenreNameCana == 'ニンテンドウスイッチ')
                str += '<span class="ico switch">Nintendo Switch</span>';

            else if (input[i].GenreData.GenreNameCana == 'プレイステーションフォー')
                str += '<span class="ico ps4">PS4</span>';
		}
		return $sce.trustAsHtml(str);
	};
	return ffilter;
});


app.filter("arcIcon", function ($sce) {
    var ffilter = function (input) {
        if (input == null)
            return;
        var str = "";
        switch (input) {
            case "0000000008":
                str += '<span class="ico online">オンライン</span>';
                break;
            case "0000000009":
                str += '<span class="ico video">ビデオゲーム</span>';
                break;
            case "0000000010":
                str += '<span class="ico medal">メダルゲーム</span>';
                break;
            default:
                str += '<span class="ico nocat">その他</span>';
                break;
        }
        return $sce.trustAsHtml(str);
    };
    return ffilter;
});
app.filter("arcIcon_En", function ($sce) {
    var ffilter = function (input) {
        if (input == null)
            return;
        var str = "";
        switch (input) {
            case "0000000008":
                str += '<span class="ico online">Online</span>';
                break;
            case "0000000009":
                str += '<span class="ico video">Video</span>';
                break;
            case "0000000010":
                str += '<span class="ico medal">Medal</span>';
                break;
            default:
                str += '<span class="ico nocat">Other</span>';
                break;

        }
        return $sce.trustAsHtml(str);
    };
    return ffilter;
});

app.filter("taxType", function () {
    var statusFilter = function (input) {
        switch (input) {
            case 0:
                return "非課税";
            case 1:
                return "税抜";
            case 2:
                return "税込";
        }
    };
    return statusFilter;
});
app.filter("html", function ($sce) {
    var ffilter = function (input) {
        if (input == null)
            return "";
        return $sce.trustAsHtml(input);
    };
    return ffilter;
});
app.filter('htmlToPlaintext', function () {
	return function (text) {
		return String(text).replace(/<[^>]+>/gm, '');
	}
});

app.filter('encodeURI', function () {
	return function (text) {
		try{
			return encodeURI(text);
		}
		catch(e){
			return '';
		}
	}
});

app.filter('absolutePath', function () {
	return function (path) {
		try {
			var e = document.createElement('span');
			e.insertAdjacentHTML('beforeend', '<a href="' + path + '" />');
			return e.firstChild.href;
		}
		catch (e) {
			return '';
		}
	}
});

app.filter("btobPrint", function () {
	var statusFilter = function (input) {
		if (angular.isUndefined(input) || input == null || input == '')
			return '-';
		else
			return input;
	};
	return statusFilter;
});

app.filter('dateFormat', function () {
    return function (value, format) {
        var date = moment(value);
        return date.format(format);
    }
});

app.filter("zipCode", function () {
    var statusFilter = function (input) {
        if (angular.isUndefined(input) || input == null || input == '' || input.length != 7)
            return input;
        else
            return input.slice(0,3) + '-' + input.slice(3,7);
    };
    return statusFilter;
});
app.filter("kujiSex", function () {
    var statusFilter = function (input) {
        switch (input) {
            case 1:
                return "男性";
            case 2:
                return "女性";
        }
    };
    return statusFilter;
});
app.filter("state", function (stateList) {
    var statusFilter = function (input) {
        
        for (var i = 0; i < stateList.length; i++) {
            if (stateList[i].value == input)
                return stateList[i].name;
        }
        return 'error';
    };
    return statusFilter;
});
app.filter("trustAsResourceUrl", ['$sce', function ($sce) {
    return function (val) {
        return $sce.trustAsResourceUrl(val);
    };
}]);;
app.value('stateList', [{ status: true, name: '都道府県', value: '' }, { status: false, name: '北海道', value: '01' }, { status: false, name: '青森県', value: '02' }, { status: false, name: '岩手県', value: '03' }, { status: false, name: '宮城県', value: '04' }, { status: false, name: '秋田県', value: '05' }, { status: false, name: '山形県', value: '06' }, { status: false, name: '福島県', value: '07' }, { status: false, name: '茨城県', value: '08' }, { status: false, name: '栃木県', value: '09' }, { status: false, name: '群馬県', value: '10' }, { status: false, name: '埼玉県', value: '11' }, { status: false, name: '千葉県', value: '12' }, { status: false, name: '東京都', value: '13' }, { status: false, name: '神奈川県', value: '14' }, { status: false, name: '新潟県', value: '15' }, { status: false, name: '富山県', value: '16' }, { status: false, name: '石川県', value: '17' }, { status: false, name: '福井県', value: '18' }, { status: false, name: '山梨県', value: '19' }, { status: false, name: '長野県', value: '20' }, { status: false, name: '岐阜県', value: '21' }, { status: false, name: '静岡県', value: '22' }, { status: false, name: '愛知県', value: '23' }, { status: false, name: '三重県', value: '24' }, { status: false, name: '滋賀県', value: '25' }, { status: false, name: '京都府', value: '26' }, { status: false, name: '大阪府', value: '27' }, { status: false, name: '兵庫県', value: '28' }, { status: false, name: '奈良県', value: '29' }, { status: false, name: '和歌山県', value: '30' }, { status: false, name: '鳥取県', value: '31' }, { status: false, name: '島根県', value: '32' }, { status: false, name: '岡山県', value: '33' }, { status: false, name: '広島県', value: '34' }, { status: false, name: '山口県', value: '35' }, { status: false, name: '徳島県', value: '36' }, { status: false, name: '香川県', value: '37' }, { status: false, name: '愛媛県', value: '38' }, { status: false, name: '高知県', value: '39' }, { status: false, name: '福岡県', value: '40' }, { status: false, name: '佐賀県', value: '41' }, { status: false, name: '長崎県', value: '42' }, { status: false, name: '熊本県', value: '43' }, { status: false, name: '大分県', value: '44' }, { status: false, name: '宮崎県', value: '45' }, { status: false, name: '鹿児島県', value: '46' }, { status: false, name: '沖縄県', value: '47' }]);;
app.directive('tmodal', function () {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            element.bind("click", function () {
                    wn = '.' + $(this).attr('modal-tgt');
                    var mW = $(wn).find('.modalBody').innerWidth() / 2;
                    var mH = $(wn).find('.modalBody').innerHeight() / 2;
                    $(wn).find('.modalBody').css({ 'margin-left': -mW, 'margin-top': -mH });
                    $(wn).fadeIn(500);
                $('.modalClose,.modalBody,.modalBG').click(function () {
                    $(wn).fadeOut(500);
                });
            });
        }
    };
});

app.directive('alertBar', ['$parse', function($parse) {
    return {
        restrict: 'A',
        template: '<div class="alert alert-error alert-bar"' +
        'ng-show="errorMessage">' +
        '<button type="button" class="close" ng-click="hideAlert()">' +
        'x</button>' +
'{{errorMessage}}</div>',
        link: function (scope, elem, attrs) {
            var alertMessageAttr = attrs['alertmessage'];
            scope.errorMessage = null;
            scope.$watch(alertMessageAttr, function (newVal) {
                scope.errorMessage = newVal;
            });
            scope.hideAlert = function () {
                scope.errorMessage = null;
                // 関連付けられている変数の値（エラーメッセージ）も消去します。
                // 同じエラーが続けて発生した場合にも、alertBarを再び表示できる
                // ようにするためです
                $parse(alertMessageAttr).assign(scope, null);
            };
        }
    };
}]);

app.directive('fallbackSrc', function () {
	var fallbackSrc = {
		link: function postLink(scope, iElement, iAttrs) {
			iElement.bind('error', function () {
				if (iAttrs.fallbackSrc != '')
					angular.element(this).attr("src", iAttrs.fallbackSrc);
				else
					angular.element(this).attr("src", '/Content/images/item_no_image.jpg');
			});
		}
	}
	return fallbackSrc;
});

app.directive("match", ["$parse", function ($parse) {
	return {
		require: 'ngModel',
		link: function (scope, elem, attrs, ctrl) {
			scope.$watch(function () {
				var target = $parse(attrs.match)(scope);  // 比較対象となるモデルの値
				return !ctrl.$modelValue || target === ctrl.$modelValue;
			}, function (currentValue) {
				ctrl.$setValidity('mismatch', currentValue);
			});
		}
	}
}]);

app.directive('btobIsnewlist2', function ($parse) {
	return {
		restrict: 'A',
		link: function (scope, element, attr) {
			var list = $parse(attr.btobIsnewlist2)(scope);
			if (angular.isArray(list) && list.length > 0) {
				var last = _.max(list, function (data) {
					return moment(data.UpdateDateTimeDisplay);
				});

				var value = last.UpdateDateTimeDisplay;

				if (moment(value).add('days', 14) > moment()) {
					element.prepend('<span class="ico sokuho">' + moment(value).format('M/D') + ' 更新</span>');
				}
			}

		}
	};
});

app.directive('btobIsnewlist', function ($parse) {
	return {
		restrict: 'A',
		link: function (scope, element, attr) {
			var list = $parse(attr.btobIsnewlist)(scope);
			if (angular.isArray(list)) {
				var last = _.max(list, function (data) {
					return moment(data.UpdateDateTime);
				});

				var value = last.UpdateDateTime;
			
				if (moment(value).add('days', 14) > moment()) {
					element.prepend('<span class="ico sokuho">' + moment(value).format('M/D') + ' 更新</span>');
				}
			}

		}
	};
});

app.directive('btobmaterialIsnew', function ($parse) {
	return {
		restrict: 'A',
		link: function (scope, element, attr) {
			var value = $parse(attr.btobmaterialIsnew)(scope);
			if (angular.isUndefined(value))
				return;
			if (moment(value).add('days', 14) > moment()) {
				element.prepend('<span class="ico new">更新</span>');
			}

		}
	};
});

app.directive('btobrentalIsnew', function ($parse) {
	return {
		restrict: 'A',
		link: function (scope, element, attr) {
			var value = $parse(attr.btobrentalIsnew)(scope);
			if (angular.isUndefined(value))
				return;
			if (moment(value).add('days', 10) > moment()) {
				element.prepend('<span class="ico sokuho">' + moment(value).format('M/D') + ' 更新</span>');
			}

		}
	};
});;
app.controller('SendMailCtrl', ['$scope', '$http',
	function ($scope, $http) {
	    $scope.showSubmit = true;
	    $scope.finish = false;

	    $scope.onSubmit = function () {
	        $scope.errorMsg = '送信中...';
	        $scope.errors = [];
	        $scope.showSubmit = false;
	        $http.post('/api/SendMail',
                { MailAddress: $scope.items.MailAddress, Url: $scope.items.Url })
            .success(function (items, status, headers, config) {
                if (items.IsSuccess) {
                    $scope.finish = true;
                    $scope.showSubmit = true;
                    $scope.errorMsg = items.Message;
                }
                else {
                    $scope.errorMsg = items.Message;
                    $scope.errors = items.Errors;
                    $scope.showSubmit = true;
                }
            })
	    };

	}]);
app.controller('OtherStoreCtrl', ['$scope', '$http', '$filter',
	function ($scope, $http, $filter) {
	    $scope.stateList = [{ status: true, name: '都道府県', value: '' }, { status: false, name: '北海道', value: '01' }, { status: false, name: '青森県', value: '02' }, { status: false, name: '岩手県', value: '03' }, { status: false, name: '宮城県', value: '04' }, { status: false, name: '秋田県', value: '05' }, { status: false, name: '山形県', value: '06' }, { status: false, name: '福島県', value: '07' }, { status: false, name: '茨城県', value: '08' }, { status: false, name: '栃木県', value: '09' }, { status: false, name: '群馬県', value: '10' }, { status: false, name: '埼玉県', value: '11' }, { status: false, name: '千葉県', value: '12' }, { status: false, name: '東京都', value: '13' }, { status: false, name: '神奈川県', value: '14' }, { status: false, name: '新潟県', value: '15' }, { status: false, name: '富山県', value: '16' }, { status: false, name: '石川県', value: '17' }, { status: false, name: '福井県', value: '18' }, { status: false, name: '山梨県', value: '19' }, { status: false, name: '長野県', value: '20' }, { status: false, name: '岐阜県', value: '21' }, { status: false, name: '静岡県', value: '22' }, { status: false, name: '愛知県', value: '23' }, { status: false, name: '三重県', value: '24' }, { status: false, name: '滋賀県', value: '25' }, { status: false, name: '京都府', value: '26' }, { status: false, name: '大阪府', value: '27' }, { status: false, name: '兵庫県', value: '28' }, { status: false, name: '奈良県', value: '29' }, { status: false, name: '和歌山県', value: '30' }, { status: false, name: '鳥取県', value: '31' }, { status: false, name: '島根県', value: '32' }, { status: false, name: '岡山県', value: '33' }, { status: false, name: '広島県', value: '34' }, { status: false, name: '山口県', value: '35' }, { status: false, name: '徳島県', value: '36' }, { status: false, name: '香川県', value: '37' }, { status: false, name: '愛媛県', value: '38' }, { status: false, name: '高知県', value: '39' }, { status: false, name: '福岡県', value: '40' }, { status: false, name: '佐賀県', value: '41' }, { status: false, name: '長崎県', value: '42' }, { status: false, name: '熊本県', value: '43' }, { status: false, name: '大分県', value: '44' }, { status: false, name: '宮崎県', value: '45' }, { status: false, name: '鹿児島県', value: '46' }, { status: false, name: '沖縄県', value: '47' }];
	    $scope.storeGroupList = [
            { status: true, name: 'お店の種類', value: '' },
            { status: false, name: 'ゲームセンター', value: '0' },
            { status: false, name: 'ボウリング', value: '1' },
            { status: false, name: 'brooming（プリ機専門店）', value: '2' },
            { status: false, name: 'リアル脱出ゲームセンター', value: '3' },
            { status: false, name: 'カラオケ', value: '4' }
	    ]
	    $scope.$watch("params", function () {
	        $http.get('/api/OtherStoreList/',
			{ params: { mode: $scope.params.mode } })
			 .success(function (items, status, headers, config) {
			     $scope.pageIndex = $scope.params.pageSize;
			     $scope.items = items;
			     for (var i = 0; i < $scope.stateList.length; i++) {
			         for (var j = 0; j < $scope.items.length; j++) {
			             if ($scope.stateList[i].value == $scope.items[j].StateCode) {
			                 $scope.stateList[i].status = true;
			                 break;
			             }
			         }
			     }
			     for (var i = 0; i < $scope.storeGroupList.length; i++) {
			         for (var j = 0; j < $scope.items.length; j++) {
			             if ($scope.storeGroupList[i].value == $scope.items[j].StoreGroup) {
			                 $scope.storeGroupList[i].status = true;
			                 break;
			             }
			         }
			     }
			 }, true)
           .error(function (data, status) {
               alert('通信エラーが発生しました');
           });
	    }, true);

	    $scope.next = function () {
	        $scope.pageIndex += $scope.params.pageSize;
	    }
	    $scope.selectedState = function () {
	        $scope.pageIndex = $scope.params.pageSize;
	    }
	    $scope.selectedStoreGroup = function () {
	        var data = $filter("filter")($scope.items, { StoreGroup: $scope.storeGroup.value });
	        $scope.selectState = $scope.stateList[0];
	        $scope.pageIndex = $scope.params.pageSize;
	        for (var i = 1; i < $scope.stateList.length; i++) {
	            $scope.stateList[i].status = false;
	            for (var j = 0; j < data.length; j++) {
	                if ($scope.stateList[i].value ==data[j].StateCode) {
	                    $scope.stateList[i].status = true;
	                    break;
	                }
	            }
	        }
	    };

	    $scope.selectState = $scope.stateList[0];
	    $scope.storeGroup = $scope.storeGroupList[0];
	}]);
app.controller('FranchiseStoreCtrl', ['$scope', '$http',
	function ($scope, $http) {
		$scope.dropItems = [
				   { status: true, text: 'すべての地域', value: '' },
				   { status: false, text: '北海道・東北地区', value: '01,02,03,04,05,06,07' },
				   { status: false, text: '関東・甲信越地区', value: '08,09,10,15,19,20' },
				   { status: false, text: '東京都', value: '13' },
				   { status: false, text: '神奈川・千葉・埼玉地区', value: '11,12,14' },
				   { status: false, text: '東海・中部・北陸地区', value: '16,17,18,21,22,23,24' },
				   { status: false, text: '関西地区', value: '25,26,27,28,29,30' },
				   { status: false, text: '中国・四国地区', value: '31,32,33,34,35,36,37,38,39' },
				   { status: false, text: '九州・沖縄地区', value: '40,41,42,43,44,45,46,47' }
		];
		$scope.selected = $scope.dropItems[0];

		$scope.$watch("params", function () {
			$http.get('/api/StoreList/',
			{ params: { query: $scope.query, offset: 0, limit: 10000, sortName: '', isDesc: true, mode: $scope.params.mode } })
			.success(function (items, status, headers, config) {
				$scope.items = items.map(function (o) { return o.StoreData; });
				$scope.isRead = true;
				$scope.pageIndex = $scope.params.pageSize;
				if (items instanceof Array) {
					for (var i = 0; i < $scope.dropItems.length; i++) {
						for (var j = 0; j < $scope.items.length; j++) {
							if (($scope.dropItems[i].value.indexOf($scope.items[j].StateCode)) != -1) {
								$scope.dropItems[i].status = true;
								break;
							}
						}
					}
				}
			}, true);
		});

		$scope.myComparator = function (expected, actual) {
			if (actual == '')
				return true;
			if (actual.indexOf(expected) == -1) {
				return false;
			} else {
				return true;
			}
		};
		$scope.next = function () {
			$scope.pageIndex += $scope.params.pageSize;
		}
		$scope.changed = function () {
			$scope.pageIndex = $scope.params.pageSize;
		}
	}]);
app.controller('NAIDListCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {

		$scope.params = {
			applyYear : ''
		};
		$scope.select = [];

		for (i = moment().year() ; i >= 2012; i--) {
			$scope.select.push({ value : i, text : i + '年' });
		}
		

	    $scope.$watch("params", function () {
	        $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
	    }, true);

	    var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
	        $http.get('/api/NewlyArrivedInformationModel/',
			{ params: { query: $scope.query, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, IDs: $scope.params.IDs, applyYear : $scope.params.applyYear } })
			.success(callback);
        };

        $scope.go = function () {
            window.location.href = '/prize/newslist/';
        }

	}]);
app.controller('SearchCtrl', ['$scope', '$http',
	function ($scope, $http) {
		var getQuerystring = function (key, default_) {
			if (default_ == null) default_ = "";
			key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
			var regex = new RegExp("[\\?&/]" + key + "=([^&#]*)");
			var qs = regex.exec(window.location.href);
			if (qs == null)
				return default_;
			else
				return qs[1];
		}

		$scope.keyword = getQuerystring('keyword', '');
		$scope.isRead = false;
	    $scope.pageNumber = 1;
	    $scope.result = [];
	    $scope.$watch("params", function () {
	        getData();
	    }, true);

	    var getData = function () {
	    	$http.jsonp('https://search.zone.vc/fess/json?callback=JSON_CALLBACK&query=' + $scope.keyword + '&start=' + $scope.pageNumber + '&num=15&_=1406218523384')
           //.success(callback)
               .success(function (items, status, headers, config) {
               	$scope.isRead = true;
               	$scope.items = items.response;
               	$scope.result = $scope.result.concat($scope.items.result);
               	if ($scope.result.length > 0) {
               		if ($scope.result[0] == undefined)
               			$scope.items.recordCount = 0;
               	}
               }, true)
           .error(function (data, status) {
               alert('通信エラーが発生しました');
           });
	    };
	    $scope.next = function () {
	        $scope.pageNumber++;
	        getData();
	    }
	}
]);
app.controller('PwResetCtrl', ['$scope', '$http',
	function ($scope, $http) {
	    $scope.showSubmit = true;
	    $scope.finish = false;

	    $scope.onSubmit = function () {
	        $scope.showSubmit = false;
	        $http.post('/api/PwReset', 
                { EncryptString: $scope.params.encStr, Password: $scope.items.Password, ComfirmPassword: $scope.items.ComfirmPassword })
            .success(function (items, status, headers, config) {
                if (items.IsSuccess) {
                    $scope.finish = true;
                }
                else {
                    $scope.errorMsg = items.Message;
                    $scope.errors = items.Errors;
                    $scope.showSubmit = true;
                }
            })
	    };

	}]);
app.controller('PassResetCtrl', ['$scope', '$http',
	function ($scope, $http) {
	    $scope.showSubmit = true;
	    $scope.finish = false;

	    $scope.onSubmit = function () {
	        $scope.showSubmit = false;
	        $http.post('/api/PassReset',
                 $scope.items)
            .success(function (items, status, headers, config) {
                if (items.IsSuccess) {
                    $scope.finish = true;
                }
                else {
                    $scope.errorMsg = items.Message;
                    $scope.errors = items.Errors;
                    $scope.showSubmit = true;
                }
            })
	    };

	}]);
app.controller('StoreImageGallery', ['$scope', '$http',
	function ($scope, $http) {
	    $scope.isRead = false;
	    $scope.pageIndex = 0;
	    $scope.itemsLength = 0;

	    $scope.$watch("params", function () {
	        $scope.pageIndex = $scope.params.pageSize;
	        $http.get('/api/Gallery/',
			{ params: { storeID: $scope.params.storeID, limit : $scope.params.pageSize } })
			.success(function (items, status, headers, config) {
				$scope.items = items;
				$scope.itemsLength =  parseInt(headers("X-Total-Count"));
			    if ($scope.items.length > 0) {
			        $scope.isRead = true;
			    }
			})
	    }, true);
	    $scope.next = function () {
	    	$scope.params.pageSize += $scope.params.pageSize;
	    	$scope.pageIndex += $scope.params.pageSize;
	    }
	}]);
app.controller('WhatNewStoreDataCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
	    $scope.isRead = false;
	    $scope.$watch("params", function () {
	        $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
	    }, true);

	    var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
	        $http.get('/api/WhatNewStoreData/',
			{ params: { offset: offset, limit: limit } })
			.success(callback);
	    };

	}]);
app.controller('CouponDetailCtrl', ['$scope', '$http',
	function ($scope, $http) {
	    $scope.isValid = false;
	    $scope.usedForm = false;
	    $scope.errorForm = false;
	    $scope.$watch("params", function () {
	        $http.get('/api/CouponDetail',
                { params: { storeID: $scope.params.storeID, couponID : $scope.params.couponID } })
                .success(function (items, status, headers, config) {
                    if (items.IsSuccess) {
                        $scope.items = items.Model;
                        $scope.isValid = true;
                    }
                    else {
                        $scope.items = items;
                        $scope.errorForm = true;
                    }
                }, true);
	    });
	    $scope.onSubmit = function () {
	        $http.post('/api/CouponDetail', { storeID: $scope.params.storeID, couponID : $scope.params.couponID })
		.success(function (items, status, headers, config) {
		    $('html,body').animate({ scrollTop: 0 }, 'fast');
		    if (items.IsSuccess) {
		        $scope.isValid = false;
		        $scope.usedForm = true;
		    }
		    else {
		        $scope.items = items;
		        $scope.isValid = false;
		        $scope.errorForm = true;
		    }
		})
	    }
	}]);
app.controller('StoreCouponCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
	    $scope.isRead = false;
	    $scope.$watch("params", function () {
	        $http.get('/api/StoreCoupon',
                { params: { storeID: $scope.params.storeID } })
                .success(function (items, status, headers, config) {
                    $scope.items = items.Model;
                    $scope.isRead = true;
                    
                }, true);
	    });

	    $scope.next = function () {
	        $scope.params.pageSize += $scope.params.pageSize;
	    }

	}]);
app.controller('CouponBoxCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
	    $scope.isRead = false;
	    $scope.render = false;
	    $scope.hasMyStore = false;
	    $scope.hasMyStore1 = false;
	    $scope.hasMyStore2 = false;
	    $scope.hasMyStore3 = false;
	    $scope.usingCoupon = false;
	    $scope.open = [false, false, false];
	    $http.get('/api/CouponBox'
			//,{ params: { productID: $scope.params.productID, aspMemberID: $scope.params.aspMemberID } }
            )
			.success(function (items, status, headers, config) {
			    $scope.items = items;
			    $scope.isRead = true;
			    $scope.usingCoupon = items.IsUseCoupon;
			    $scope.hasMyStore = $scope.items.StoreCouponDataExtension.length > 0;
			    if ($scope.hasMyStore) {
			        for (var i = 0; i < $scope.items.StoreCouponDataExtension.length; i++) {
			            switch ($scope.items.StoreCouponDataExtension[i].MyStoreNumber) {
			                case 1:
			                    $scope.hasMyStore1 = true;
			                    break;
			                case 2:
			                    $scope.hasMyStore2 = true;
			                    break;
			                case 3:
			                    $scope.hasMyStore3 = true;
			                    break;
			            }
			        }
			        if ($scope.hasMyStore1)
			            $scope.open[0] = true;
			        else if ($scope.hasMyStore2)
			            $scope.open[1] = true;
			        else if($scope.hasMyStore3)
			            $scope.open[2] = true;
			    }
			});
	    $scope.getDataByMyStoreNumber = function (num) {
	        if (!$scope.isRead)
	            return;
	        for(var i=0; i < $scope.items.StoreCouponDataExtension.length;i++){
	            if($scope.items.StoreCouponDataExtension[i].MyStoreNumber == num){
	                return [$scope.items.StoreCouponDataExtension[i]];
	            }
	        }
	    };
	}]);
app.controller('LogOutCtrl', ['$scope', '$http',
function ($scope, $http) {
    $scope.onSubmit = function () {
        $http.post('/api/LogOut')
		.success(function (items, status, headers, config) {
		    if (items.IsSuccess) {
		        location.href = "/";
		    }
		    else {
		        $scope.errorMsg = items.Message;
		        alert(items.Message);
		    }
		})
    };
}]);
app.controller('OtherMyStoreCtrl', ['$scope', '$http', 'ErrorService',
function ($scope, $http, ErrorService) {
    $scope.isRead = false;
    $scope.id = null;
    $scope.type = true;
    $scope.hasMyStore = false;
    $scope.$watch("id+type", function () {
        load();
    }, true);
    var load = function () {
        $http.get('/api/MyStore',
            {
                params: {
                    id: $scope.id,
                    type: $scope.type
                }
            })
        .success(function (items, status, headers, config) {
            if (items.IsSuccess) {
                $scope.items = items.Model;
                $scope.hasMyStore = true;
                $scope.isRead = true;
            }
            else {
                alert(items.Message);
            }
        })
    };
}]);
app.controller('MyStoreCtrl', ['$scope', '$http', 'ErrorService',
function ($scope, $http, ErrorService) {
    $scope.id = null;
    $scope.isRead = false;
    $scope.hasMyStore = false;
    $scope.emptyMyStore = 3;
    $scope.hasEmpty = false;
    var load = function () {
        $http.get('/api/MyStore')
        .success(function (items, status, headers, config) {
            if (items.IsSuccess) {
                $scope.items = items.Model;
                // $scope.listLength -= items.Model.length;
                $scope.emptyMyStore -= items.Model.length;
                $scope.isRead = true;
                $scope.hasMyStore = true;
                if($scope.emptyMyStore > 0)
                    $scope.hasEmpty = true;
            }
            else {
                alert(items.Message);
            }
        })
    };
    $scope.checkAddMystore = function (storeID) {
        if (!$scope.isRead)
            return false;
        if (hasMyStoreByStoreID(storeID))
            return false;
        if (!$scope.hasEmpty)
            return false;
        return true;
    };
    var hasMyStoreByStoreID = function (storeID) {
        for (var i = 0 ; i < $scope.items.length; i++) {
            if ($scope.items[i].StoreData.StoreID == storeID)
                return true;
        }
        return false;
    };
    $scope.getMyStoreByNumber = function (num) {
        if (!$scope.items instanceof Array)
            return false;
        for (var i = 0 ; i < $scope.items.length; i++) {
            if ($scope.items[i].MyStoreWishList.Number == num)
                return [$scope.items[i]];
        }
        return null;
    }

    $scope.hasMyStoreByNumber = function (num) {
        if ($scope.items == undefined)
            return false;
        if (!$scope.items instanceof Array)
            return false;
        for (var i = 0 ; i < $scope.items.length; i++) {
            if ($scope.items[i].MyStoreWishList.Number == num)
                return true;
        }
        return false;
    }
    $scope.addMyStore = function (num) {
        $http.post('/api/MyStore', { storeID: $scope.storeID, number: num, method: 'add' })
		.success(function (items, status, headers, config) {
		    if (items.IsSuccess) {
		        location.href = '/gc/store/' + $scope.storeID;
		    }
		    else {
		        alert(items.Message);
		    }
		})
    }
    
    $scope.deleteMyStore = function (num) {
        if (!confirm("マイ店舗解除しますか？\n解除すると、この店舗の最新情報メールやクーポンが利用できなくなります。"))
            return;
        $http.post('/api/MyStore', { storeID: $scope.getMyStoreByNumber(num)[0].StoreData.StoreID, number : num , method : 'del'} )
		.success(function (items, status, headers, config) {
		    if (items.IsSuccess) {
		        load();
		    }
		    else {
		        alert(items.Message);
		    }
		})
    }
    $scope.errorService = ErrorService;
    $scope.listLength = 3;
    load();
}]);
app.controller('InvitationQCtrl', ['$scope', '$http', 'ErrorService',
function ($scope, $http, ErrorService) {
    $scope.errorService = ErrorService;
    $scope.hasData = false;
    $scope.visibleQr = false;
    $http.post('/api/InvitationQr')
		.success(function (items, status, headers, config) {
		    if (items.IsSuccess) {
		        $scope.src = '/QrCode?size=100&content=' + items.Model.Line;
		        $scope.items = items.Model;
		        $scope.hasData = true;
		    }
		    else {
		        alert(items.Message);
		    }
		})

    $scope.onSubmit = function () {
        $scope.visibleQr = true;
    };
}]);
app.controller('UCancelCtrl', ['$scope', '$http', 'ErrorService',
function ($scope, $http, ErrorService) {
    $scope.showSubmit = true;
    $scope.finish = false;
    $scope.errorService = ErrorService;
    $scope.onSubmit = function () {
        $scope.showSubmit = false;
        if (!confirm("本当に退会しますか？"))
            return;
        $http.post('/api/UCancel')
		.success(function (items, status, headers, config) {
		    if (items.IsSuccess) {
		        $scope.finish = true;
		    }
		    else {
		        $scope.errorMsg = items.Message;
		        $scope.errors = items.Errors;
		        $scope.showSubmit = true;
		    }
		})
    };
}]);
app.controller('PwCtrl', ['$scope', '$http', 'ErrorService',
function ($scope, $http, ErrorService) {
    $scope.showSubmit = true;
    $scope.finish = false;
    $scope.errorService = ErrorService;
    $scope.onSubmit = function () {
        $scope.showSubmit = false;
        $http.post('/api/Pw',
			 $scope.items)
		.success(function (items, status, headers, config) {
		    if (items.IsSuccess) {
		        $scope.finish = true;
		    }
		    else {
		        $scope.errorMsg = items.Message;
		        $scope.errors = items.Errors;
		        $scope.showSubmit = true;

		    }
		})
    };
}]);
app.controller('UserCtrl', ['$scope', '$http',
	function ($scope, $http) {
	    $scope.isRead = false;
	    $scope.showSubmit = true;
	    $scope.finish = false;

	    $scope.$watch("params", function () {
	        $http.get('/api/UC/')
                .success(function (items, status, headers, config) {
                    $scope.items = items;
                    $scope.isRead = true;
                });
	    }, true);
	    $scope.onSubmit = function () {
	        $scope.showSubmit = false;
	        $http.post('/api/UC',
                 $scope.items)
            .success(function (items, status, headers, config) {
                if (items.IsSuccess) {
                    $scope.finish = true;
                }
                else {
                    $scope.errorMsg = items.Message;
                    $scope.errors = items.Errors;
                    $scope.showSubmit = true;

                }
            })
	    };

	}]);
app.controller('DiaryCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
	    $scope.$watch("params", function () {
	        $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
	    }, true);

	    var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
	        $http.get('/api/Diary/',
			{ params: { offset: offset, limit: limit } })
			.success(callback);
	    };
	    var lastDateStr = '';
	    $scope.checkDate = function (dateStr) {
	        if (lastDateStr == dateStr)
	            return false;
	        else {
	            lastDateStr = dateStr;
	            return true;
	        }
	    }
	}]);
app.controller('StoreNewlyArrivedInformationCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
	    $scope.$watch("params", function () {
	        $http.get('/api/StoreNewlyArrivedInformation',
			{ params: { storeID: $scope.params.storeID, IDs: $scope.params.IDs, isPushNews: $scope.params.isPushNews } })
			.success(function (items, status, headers, config) {
			    $scope.items = items;
			    $scope.pageIndex = $scope.params.pageSize;
			});
	    }, true);
	    $scope.next = function () {
	        $scope.pageIndex += $scope.params.pageSize;
	    };

	    $scope.getLink = function (item) {
	    	if (!angular.isObject(item))
	    		return ''

	    	if (item.LanguageStoreNewlyArrivedInformationData.URL != '')
	    		return item.LanguageStoreNewlyArrivedInformationData.URL
	    	else if (item.LanguageStoreNewlyArrivedInformationData.MobileURL != '')
	    		return item.LanguageStoreNewlyArrivedInformationData.MobileURL;
	    	else
	    		return '';
	    }

	    $scope.getImage = function (item) {
	    	if (!angular.isObject(item))
	    		return ''

	    	if (item.LanguageStoreNewlyArrivedInformationData.ImageName01 != '')
	    		return item.LanguageStoreNewlyArrivedInformationData.ImagePath + item.LanguageStoreNewlyArrivedInformationData.ImageName01
	    	else if (item.LanguageStoreNewlyArrivedInformationData.MobileImageName01 != '')
	    		return item.LanguageStoreNewlyArrivedInformationData.ImagePath + item.LanguageStoreNewlyArrivedInformationData.MobileImageName01
	    	else
	    		return '';
	    }

	}]);
app.controller('ProductHandlingStoreDataCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
	    $scope.dropItems = [
                    { status: true, text: 'すべての地域', value: '' },
                    { status: false, text: '北海道・東北地区', value: '01,02,03,04,05,06,07' },
                    { status: false, text: '関東・甲信越地区', value: '08,09,10,15,19,20' },
                    { status: false, text: '東京都', value: '13' },
                    { status: false, text: '神奈川・千葉・埼玉地区', value: '11,12,14' },
                    { status: false, text: '東海・中部・北陸地区', value: '16,17,18,21,22,23,24' },
                    { status: false, text: '関西地区', value: '25,26,27,28,29,30' },
                    { status: false, text: '中国・四国地区', value: '31,32,33,34,35,36,37,38,39' },
                    { status: false, text: '九州・沖縄地区', value: '40,41,42,43,44,45,46,47' }
	    ];
	    $scope.selected = $scope.dropItems[0];
	    $scope.$watch("params", function () {
	        $http.get('/api/ProductHandlingStoreData',
			{ params: { productID: $scope.params.productID, aspMemberID : $scope.params.aspMemberID } })
			.success(function (items, status, headers, config) {
				$scope.items = items;
				$scope.workItems = items;
			    $scope.pageIndex = $scope.params.pageSize;
			    for (var i = 0; i < $scope.dropItems.length; i++) {
			        for (var j = 0; j < $scope.items.length; j++) {
			            if (($scope.dropItems[i].value.indexOf($scope.items[j].StateCode)) != -1) {
			                $scope.dropItems[i].status = true;
			                break;
			            }
			        }
			    }

			});
	    }, true);

	    $scope.goSearch = function (index) {
	    	
	    	$scope.workItems = $scope.items.filter(function (item, index) {
	    		if (item.FullAddress.indexOf($scope.keyword) >= 0 || item.StoreName.indexOf($scope.keyword) >= 0)
	    			return true;
	    	})

	    };

	    $scope.myComparator = function (expected, actual) {
	    	
	        if (actual == '')
	            return true;
	        if (actual.indexOf(expected) == -1) {
	            return false;
	        } else {
	            return true;
	        }

	    };
	    $scope.next = function () {
	        $scope.pageIndex += $scope.params.pageSize;
	    };

	}]);

app.controller('EventNaviStoreHandlingDataCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
	    $scope.dropItems = [
                    { status: true, text: '全国', value: '' },
                    { status: false, text: '北海道・東北地区', value: '01,02,03,04,05,06,07' },
                    { status: false, text: '関東・甲信越地区', value: '08,09,10,15,19,20' },
                    { status: false, text: '東京都', value: '13' },
                    { status: false, text: '神奈川・千葉・埼玉地区', value: '11,12,14' },
                    { status: false, text: '東海・中部・北陸地区', value: '16,17,18,21,22,23,24' },
                    { status: false, text: '関西地区', value: '25,26,27,28,29,30' },
                    { status: false, text: '中国・四国地区', value: '31,32,33,34,35,36,37,38,39' },
                    { status: false, text: '九州・沖縄地区', value: '40,41,42,43,44,45,46,47' },
                    { status: false, text: 'その他地域', value: '99' }
	    ];
	    $scope.selected = $scope.dropItems[0];
	    $scope.$watch("params", function () {
	        $http.get('/api/EventNaviStoreHandling/',
			{ params: { eventID: $scope.params.eventID } })
			.success(function (items, status, headers, config) {
			    $scope.items = items;

			    for (var i = 0; i < $scope.dropItems.length; i++) {
			        for (var j = 0; j < $scope.items.length; j++) {
			            if (($scope.dropItems[i].value.indexOf($scope.items[j].StoreData.StateCode)) != -1) {
			                $scope.dropItems[i].status = true;
			                break;
			            }
			        }
			    }

			});
	    }, true);
	    $scope.getLastUpdateTimeStr = function () {
	    	if($scope.items instanceof Array)
	    	{
	    		return moment(Math.max.apply(null, $scope.items.map(function (o) { return moment(o.StoreEventHandlingData.UpdateDateTime); }))).format('YYYY年MM月DD日現在の情報です。');
	    	}
	    	else {
	    		return "";
	    	}
	    }
	    $scope.getDateStr = function (date1, date2, rEndDate) {
	    	if (date1 == undefined)
	    		return 'Coming Soon';
	    	date1 = moment(date1);
	    	if (rEndDate != null){
	    		rEndDate = moment(rEndDate);
	    		return '終了いたしました';
	    	}
	        if (date2 != null)
	            date2 = moment(date2);
	        if (date1.isSame(date2)) {
	            if (date1.date() >= 21)
	                return date1.format('YYYY年M月下旬');
	            else if (date1.date() >= 11)
	                return date1.format('YYYY年M月中旬');
	            else
	                return date1.format('YYYY年M月上旬');
	        }
	        else if (date2 != null && date1.format('YYYYMMDD') == date2.format('YYYYMMDD')) {
	        	return date1.format('YYYY年M月D日（ddd）')
	        }
	        else {
	            if (date2 == null)
	                return date1.format('YYYY年M月D日（ddd）') + '～';
	            else
	                return date1.format('YYYY年M月D日（ddd）') + '～' + date2.format('YYYY年M月D日（ddd）');
	        }
	    };
	    $scope.getDateString = function (eventData, receptionistEndDateTime) {
	    	if (eventData == null || eventData == undefined || eventData.EventPublicOpeningDate == undefined)
	    		return '-';

	    	var date1 = moment(eventData.EventPublicOpeningDate);
	    	var date2 = eventData.EventPublicOpeningEndDate;

	    	if (date1 == undefined)
	    		return 'Coming Soon';

	    	if (receptionistEndDateTime != null) {
	    		var rEndDate = moment(receptionistEndDateTime);
	    		return '終了いたしました';
	    	}

	    	if (date2 != null)
	    		date2 = moment(date2);
	    	if (eventData.DateDisplayType == 1) {
	    		if (date1.date() >= 21)
	    			return date1.format('YYYY年M月下旬');
	    		else if (date1.date() >= 11)
	    			return date1.format('YYYY年M月中旬');
	    		else
	    			return date1.format('YYYY年M月上旬');
	    	}
	    	else if (date2 != null && date1.format('YYYYMMDD') == date2.format('YYYYMMDD')) {
	    		return date1.format('YYYY年M月D日（ddd）')
	    	}
	    	else {
	    		if (date2 == null)
	    			return date1.format('YYYY年M月D日（ddd）') + '～';
	    		else
	    			return date1.format('YYYY年M月D日（ddd）') + '～' + date2.format('YYYY年M月D日（ddd）');
	    	}
	    };
	    $scope.getDateStringT20150320 = function (eventData, receptionistEndDateTime) {
	    	if (eventData == null || eventData == undefined || eventData.EventPublicOpeningDate == undefined)
	    		return '-';

	    	var date1 = moment(eventData.EventPublicOpeningDate);
	    	var date2 = eventData.EventPublicOpeningEndDate;

	    	if (date1 == undefined)
	    		return 'Coming Soon';

	    	if (receptionistEndDateTime != null) {
	    		var rEndDate = moment(receptionistEndDateTime);
	    		return '終了いたしました';
	    	}

	    	if (date2 != null)
	    		date2 = moment(date2);
	    	if (eventData.DateDisplayType == 1) {
	    		if (date1.date() >= 21)
	    			return date1.format('YYYY年M月下旬');
	    		else if (date1.date() >= 11)
	    			return date1.format('YYYY年M月中旬');
	    		else
	    			return date1.format('YYYY年M月上旬');
	    	}
	    	else if (date2 != null && date1.format('YYYYMMDD') == date2.format('YYYYMMDD')) {
	    		if (eventData.EventCampaignID == "000173")
	    			return date1.format('YYYY年M月D日（ddd）HH:mm');
	    		else
	    			return date1.format('YYYY年M月D日（ddd）');
	    	}
	    	else {
	    		if (date2 == null)
	    			return date1.format('YYYY年M月D日（ddd）') + '～';
	    		else
	    			return date1.format('YYYY年M月D日（ddd）') + '～' + date2.format('YYYY年M月D日（ddd）');
	    	}
	    };
	    $scope.myComparator = function (expected, actual) {
	        if (actual == '')
	            return true;
	        if (actual.indexOf(expected) == -1) {
	            return false;
	        } else {
	            return true;
	        }

	    };

	}]);

app.controller('EventNaviCtrl', ['$scope', '$http',
	function ($scope, $http) {

	    $scope.$watch("params", function () {
	        $http.get('/api/EventNaviModel/',
                { params: { storeID: $scope.params.storeID } })
                .success(function (items, status, headers, config) {
                    $scope.items = items;
                    if ($scope.pageIndex == undefined)
                        $scope.pageIndex = $scope.params.pageSize;
                });
	    }, true);
	    $scope.getDateStr = function (date1, date2) {
	        date1 = moment(date1);
            if(date2 != null)
	            date2 = moment(date2);
	        if (date1.isSame(date2)) {
	            if (date1.date() >= 21)
	                return date1.format('YYYY年M月下旬');
	            else if (date1.date() >= 11)
	                return date1.format('YYYY年M月中旬');
	            else
	                return date1.format('YYYY年M月上旬');
	        }
	        else {
	            if (date2 == null)
	                return date1.format('YYYY年M月D日（ddd）') + '～';
                else
	                return date1.format('YYYY年M月D日（ddd）') + '～' + date2.format('YYYY年M月D日（ddd）');
	        }
	    };
	    $scope.getDateString = function (eventData) {
	    	if (eventData == null || eventData == undefined || eventData.EventPublicOpeningDate == undefined)
	    		return '-';

	    	var date1 = moment(eventData.EventPublicOpeningDate);
	    	var date2 = eventData.EventPublicOpeningEndDate;

	    	if (date2 != null)
	    		date2 = moment(date2);
	    	if (eventData.DateDisplayType == 1){
	    		if (date1.date() >= 21)
	    			return date1.format('YYYY年M月下旬');
	    		else if (date1.date() >= 11)
	    			return date1.format('YYYY年M月中旬');
	    		else
	    			return date1.format('YYYY年M月上旬');
	    	}
	    	else {
	    		if (date2 == null)
	    			return date1.format('YYYY年M月D日（ddd）') + '～';
	    		else
	    			return date1.format('YYYY年M月D日（ddd）') + '～' + date2.format('YYYY年M月D日（ddd）');
	    	}
	    };
	    $scope.next = function () {
	        $scope.pageIndex += $scope.params.pageSize;
	    };

	    $scope.checkEventStatus = function (startDateTimeVal, endDateTimeVal) {
	        var startDateTime = Date.parse(startDateTimeVal);
	        var endDateTime = endDateTimeVal != null ? Date.parse(endDateTimeVal) : Date.parse('2300/01/01 00:00:00');
	        var now = Date.now();

	        if (startDateTime == endDateTime) {
	        	return '';
	        }
	        else if (now >= startDateTime && now <= endDateTime) {
	            if (moment(now).add('days', -7).format() <= startDateTime)
	                return 'new';
	            return 'hot';
	        }
	        else if (now < startDateTime)
	            return "soon";
	        else
	            return "close";

	    };
	    $scope.getEventStatus = function (startDateTimeVal, endDateTimeVal, dateDisplayType) {
	    	var startDateTime = Date.parse(startDateTimeVal);
	    	var endDateTime = endDateTimeVal != null ? Date.parse(endDateTimeVal) : Date.parse('2300/01/01 00:00:00');
	    	var now = Date.now();

	    	if (dateDisplayType == 1) {
	    		return '';
	    	}
	    	else if (now >= startDateTime && now <= endDateTime) {
	    		if (moment(now).add('days', -7).format() <= startDateTime)
	    			return 'new';
	    		return 'hot';
	    	}
	    	else if (now < startDateTime)
	    		return "soon";
	    	else
	    		return "close";

	    };
	    $scope.getEventStatus2 = function (startDateTimeVal, endDateTimeVal, dateDisplayType, receptionistEndDateTime) {
	    	var startDateTime = Date.parse(startDateTimeVal);
	    	var endDateTime = endDateTimeVal != null ? Date.parse(endDateTimeVal) : Date.parse('2300/01/01 00:00:00');
	    	var now = Date.now();

	    	var rEndDate = moment(receptionistEndDateTime);
	    	if (rEndDate.year() != 2300) {
	    		return 'close';
	    	}

	    	if (dateDisplayType == 1) {
	    		return '';
	    	}
	    	else if (now >= startDateTime && now <= endDateTime) {
	    		if (moment(now).add('days', -7).format() <= startDateTime)
	    			return 'new';
	    		return 'hot';
	    	}
	    	else if (now < startDateTime)
	    		return "soon";
	    	else
	    		return "close";

	    };
	}]);
app.controller('PrizeNaviStoreHandlingDataCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        onlineStoreID1 = '00002159';
        onlineStoreID2 = '00002162';
		$scope.isRead = false;
        $scope.hasData = false;
        $scope.hasOnlineStore = false;
        $scope.onlineStoreData = {};
	    $scope.dropItems = [
                    { status : true, text: '全国', value: '' },
                    { status : false, text: '北海道・東北地区', value: '01,02,03,04,05,06,07' },
                    { status : false, text: '関東・甲信越地区', value: '08,09,10,15,19,20' },
                    { status : false, text: '東京都', value: '13' },
                    { status : false, text: '神奈川・千葉・埼玉地区', value: '11,12,14' },
                    { status : false, text: '東海・中部・北陸地区', value: '16,17,18,21,22,23,24' },
                    { status : false, text: '関西地区', value: '25,26,27,28,29,30' },
                    { status : false, text: '中国・四国地区', value: '31,32,33,34,35,36,37,38,39' },
                    { status: false, text: '九州・沖縄地区', value: '40,41,42,43,44,45,46,47' },
                    { status: false, text: 'その他地域', value: '99' }
	    ];
	    $scope.selected = $scope.dropItems[0];
	    $scope.$watch("params", function () {
	        $http.get('/api/PrizeNaviStoreHandling/',
			{ params: { productID: $scope.params.productID} })
			.success(function (items, status, headers, config) {
				$scope.items = items;
				$scope.isRead = true;
				if (items.StoreDatas != null) {
                    $scope.hasData = true;
                    //$scope.hasOnlineStore = $scope.items.StoreDatas.some((v) => v.BaseStoreData.StoreID === '00001170' || v.BaseStoreData.StoreID === '00001170');
                    var onlineStores = [];
                    for (var i = 0; i < $scope.items.StoreDatas.length; i++) {
                        if ($scope.items.StoreDatas[i].BaseStoreData.StoreID === onlineStoreID1 || $scope.items.StoreDatas[i].BaseStoreData.StoreID === onlineStoreID2) {
                            onlineStores.push($scope.items.StoreDatas[i]);
                        }
                    }
                    //var onlineStores = $scope.items.StoreDatas.filter((v) => v.BaseStoreData.StoreID === onlineStoreID1 || v.BaseStoreData.StoreID === onlineStoreID2);
                    for (var i = 0; i < onlineStores.length; i++) {
                        $scope.hasOnlineStore = true;
                        if (onlineStores[i].BaseStoreData.StoreID == onlineStoreID1) {
                            $scope.onlineStoreData = onlineStores[i];
                            break;
                        }
                        else
                            $scope.onlineStoreData = onlineStores[i];
                    }
                    if ($scope.hasOnlineStore) {
                        for (var i = 0; i < $scope.items.StoreDatas.length; i++) {
                            if ($scope.items.StoreDatas[i].BaseStoreData.StoreID === onlineStoreID1) {
                                $scope.items.StoreDatas.splice(i, 1);
                            }
                        }
                        for (var i = 0; i < $scope.items.StoreDatas.length; i++) {
                            if ($scope.items.StoreDatas[i].BaseStoreData.StoreID === onlineStoreID2) {
                                $scope.items.StoreDatas.splice(i, 1);
                            }
                        }
                    }
					for (var i = 0; i < $scope.dropItems.length; i++) {
						for (var j = 0; j < $scope.items.StoreDatas.length; j++) {
							if (($scope.dropItems[i].value.indexOf($scope.items.StoreDatas[j].StateCode)) != -1) {
								$scope.dropItems[i].status = true;
								break;
							}
						}
					}
				}
			});
	    }, true);

	    $scope.myComparator = function (expected, actual) {
	        if (actual == '')
	            return true;
	        if (actual.indexOf(expected) == -1) {
	            return false;
	        } else {
	            return true;
	        }

	    };

	}]);
app.controller('WadaiNaviStoreHandlingDataCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
	    $scope.dropItems = [
                    { status: true, text: '全国', value: '' },
                    { status: false, text: '北海道・東北地区', value: '01,02,03,04,05,06,07' },
                    { status: false, text: '関東・甲信越地区', value: '08,09,10,15,19,20' },
                    { status: false, text: '東京都', value: '13' },
                    { status: false, text: '神奈川・千葉・埼玉地区', value: '11,12,14' },
                    { status: false, text: '東海・中部・北陸地区', value: '16,17,18,21,22,23,24' },
                    { status: false, text: '関西地区', value: '25,26,27,28,29,30' },
                    { status: false, text: '中国・四国地区', value: '31,32,33,34,35,36,37,38,39' },
                    { status: false, text: '九州・沖縄地区', value: '40,41,42,43,44,45,46,47' },
                    { status: false, text: 'その他地域', value: '99' }
	    ];
	    $scope.selected = $scope.dropItems[0];
	    $scope.$watch("params", function () {
	        $http.get('/api/WadaiNaviStoreHandling/',
			{ params: { productID: $scope.params.productID } })
			.success(function (items, status, headers, config) {
                $scope.items = items;

			    for (var i = 0; i < $scope.dropItems.length; i++) {
			        for (var j = 0; j < $scope.items.StoreDatas.length; j++) {
			            if (($scope.dropItems[i].value.indexOf($scope.items.StoreDatas[j].StateCode)) != -1) {
			                $scope.dropItems[i].status = true;
			                break;
			            }
			        }
			    }

			});
	    }, true);

	    $scope.myComparator = function (expected, actual) {
	        if (actual == '')
	            return true;
	        if (actual.indexOf(expected) == -1) {
	            return false;
	        } else {
	            return true;
	        }

	    };

	}]);

app.controller('ProductModelCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
	    $scope.loading = true;
	    $scope.$watch("params", function () {
	        $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
	    }, true);

	    var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
	        $http.get('/api/ProductModel/',
			{ params: { aspMemberID: $scope.params.aspMemberID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, genreTag: $scope.params.genreTag, category: $scope.params.category, ignore: $scope.params.ignore, isParents: $scope.params.isParents} })
			.success(function (items, status, headers, config) {
			    $scope.loading = false;
			    callback(items, status, headers, config);
			});
	    };

	}]);

app.controller('GoodsProductModelCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
		$scope.loading = true;
		$scope.$watch("params", function () {
			$scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
		}, true);

		var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
			$http.get('/api/GoodsProductModel/',
			{ params: { aspMemberID: $scope.params.aspMemberID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc } })
			.success(function (items, status, headers, config) {
				$scope.loading = false;
				callback(items, status, headers, config);
			});
		};

	}]);

app.controller('ArcProductModelCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
		$scope.loading = true;
		$scope.$watch("params", function () {
			$scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
		}, true);

		var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
			$http.get('/api/ArcProductModel/',
			{ params: { aspMemberID: $scope.params.aspMemberID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, genreTag: $scope.params.genreTag, category: $scope.params.category, ignore: $scope.params.ignore, isParents: $scope.params.isParents } })
			.success(function (items, status, headers, config) {
				$scope.loading = false;
				callback(items, status, headers, config);
			});
		};

	}]);

app.controller('MobProductModelCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
		$scope.loading = true;
		$scope.$watch("params", function () {
			$scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
		}, true);

		var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
			$http.get('/api/MobProductModel/',
			{ params: { aspMemberID: $scope.params.aspMemberID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, genreTag: $scope.params.genreTag, category: $scope.params.category, ignore: $scope.params.ignore, isParents: $scope.params.isParents } })
			.success(function (items, status, headers, config) {
				$scope.loading = false;
				callback(items, status, headers, config);
			});
		};

	}]);


app.controller('PrizeProductModelCtrl', ['$scope', '$http', 'PrizePaginator',
	function ($scope, $http, Paginator) {
        $scope.loading = true;
        $scope.params = {
            sortKey:''
        };
	    $scope.$watch("params", function () {
	        $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging, 1);
	    }, true);

	    var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
	        $http.get('/api/PrizeProductModel/',
			{ params: { aspMemberID: $scope.params.aspMemberID, offset: offset, limit: limit, sortName: $scope.params.sortKey, isDesc: isDesc, genreTag: $scope.params.genreTag, category: $scope.params.category, ignore: $scope.params.ignore, isParents: $scope.params.isParents } })
			.success(function (items, status, headers, config) {
			    $scope.loading = false;
			    callback(items, status, headers, config);
			});
	    };
        $scope.go = function (pid) {
            window.location.href = '/prize/item/' + pid;
        };
	}]);

app.controller('PrizeSeriesProductModelCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {

	    $scope.$watch("params", function () {
	        $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
	    }, true);

	    var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
	        $http.get('/api/PrizeSeriesProductModel/',
			{ params: { aspMemberID: $scope.params.aspMemberID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, genreTag: $scope.params.genreTag, category: $scope.params.category, ignore: $scope.params.ignore, isParents: $scope.params.isParents, productID : $scope.params.productID } })
			.success(callback);
	    };

	    $scope.$watch("params.productID", function () {
	        $http.get('/api/PrizeSeriesProductYear/',
			{ params: { aspMemberID: $scope.params.aspMemberID, productID: $scope.params.productID } })
			.success(function (items, status, headers, config) {
			    $scope.dropItems = items;
			    $scope.selectedYear = $scope.dropItems[0];
			});
	    });
	    $scope.selected = function () {
	        $scope.params.category = $scope.selectedYear.value;
	    };
	    
	    $scope.selectedYear = [{ text: 'すべて', value: '' }];

	}]);
app.controller('PrizeNaviRandomCtrl', ['$scope', '$http', '$filter',
	function ($scope, $http, $filter) {
		$scope.loading = true;
		$scope.hasFigureData = false;
		$scope.hasstuffedDollData = false;
		$scope.figure = {};
		$scope.stuffedDoll = {};
		$http.get('/api/PrizeNavi/',
		{ params: { keyword: '', storeID: '' } })
		.success(function (items, status, headers, config) {
			$scope.loading = false;
			if (items.length > 0) {
				
				var filterdItems = $filter("filter")(items, {
					Genres: 'フィギュア'
				});
				if (filterdItems.length > 0) {
					$scope.hasFigureData = true;
					$scope.figure = filterdItems[Math.floor(Math.random() * (filterdItems.length - 1))];
				}
				filterdItems = $filter("filter")(items, {
					Genres: 'ぬいぐるみ'
				});
				if (filterdItems.length > 0) {
					$scope.hasstuffedDollData = true;
					$scope.stuffedDoll = filterdItems[Math.floor(Math.random() * (filterdItems.length - 1))];
				}
			}
		});
	}]);

app.controller('PrizeNaviCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
	    $scope.pageIndex = 5;
	    $scope.loading = true;
	    $scope.$watch("params", function () {
	        $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
	    }, true);

	    var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
	        $http.get('/api/PrizeNavi/',
			{ params: { keyword: '', storeID : $scope.params.storeID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc } })
			.success(function (items, status, headers, config) {
			    $scope.loading = false;
			    callback(items, status, headers, config);
			});
	    };
	    
	    $scope.next = function () {
	        $scope.pageIndex += 5;
	    };

	    $scope.myComparator = function (expected, actual) {
	        if (actual == '')
	            return true;
	        if (expected.indexOf(actual) == -1) {
	            return false;
	        } else {
	            return true;
	        }

	    };

    }]);

app.controller('TsAppStoreSumPrizeNaviCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        $scope.pageIndex = 5;
        $scope.loading = true;
        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/PrizeNavi/',
                { params: { keyword: '', storeID: $scope.params.storeID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, isAppStoreSum: true } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    callback(items, status, headers, config);
                });
        };

        $scope.next = function () {
            $scope.pageIndex += 5;
        };

        $scope.myComparator = function (expected, actual) {
            if (actual == '')
                return true;
            if (expected.indexOf(actual) == -1) {
                return false;
            } else {
                return true;
            }

        };

    }]);

app.controller('DSPrizeNaviCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        $scope.pageIndex = 5;
        $scope.loading = true;
        $scope.params = { isDS: false };
        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/PrizeNavi/',
                { params: { keyword: '', storeID: $scope.params.storeID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, isDS: true } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    callback(items, status, headers, config);
                });
        };

        $scope.next = function () {
            $scope.pageIndex += 5;
        };

        $scope.myComparator = function (expected, actual) {
            if (actual == '')
                return true;
            if (expected.indexOf(actual) == -1) {
                return false;
            } else {
                return true;
            }

        };

    }]);

app.controller('PrizeNaviOnlineCraneStoreCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        $scope.pageIndex = 5;
        $scope.loading = true;
        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/PrizeNaviOnlineCraneStore/',
                { params: { keyword: '', storeID: $scope.params.storeID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    callback(items, status, headers, config);
                });
        };

        $scope.next = function () {
            $scope.pageIndex += $scope.params.pageSize;
        };

        $scope.myComparator = function (expected, actual) {
            if (actual == '')
                return true;
            if (expected.indexOf(actual) == -1) {
                return false;
            } else {
                return true;
            }

        };

    }]);

app.controller('WadaiNaviCtrl', ['$scope', '$http', 'Paginator',
	function ($scope, $http, Paginator) {
        $scope.pageIndex = 5;
        $scope.pageSize = 5;
	    $scope.$watch("params", function () {
	        $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
	    }, true);

	    var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
	        $http.get('/api/WadaiNavi/',
			{ params: { keyword: '', storeID: $scope.params.storeID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc } })
			.success(callback);
	    };

	    $scope.next = function () {
            $scope.pageIndex += $scope.pageSize;
	    };

	    $scope.myComparator = function (expected, actual) {
	        if (actual == '')
	            return true;
	        if (expected.indexOf(actual) == -1) {
	            return false;
	        } else {
	            return true;
	        }

	    };

	}]);

app.controller('BtobSignUpCtrl', ['$scope', '$http', '$cookies', 'ErrorService',
	function ($scope, $http, $cookies, ErrorService) {
		var getQuerystring = function (key, default_) {
			if (default_ == null) default_ = "";
			key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
			var regex = new RegExp("[\\?&/]" + key + "=([^&#]*)");
			var qs = regex.exec(window.location.href);
			if (qs == null)
				return default_;
			else
				return qs[1];
		}

		$scope.errorService = ErrorService;
		$scope.id = $cookies['MailAddress'];
		$scope.url = getQuerystring('r', '');
		$scope.onSubmit = function () {
			if ($scope.form.$invalid)
			{
				$scope.errorMsg = 'ID,パスワードを正しく入力してください';
				return;
			}
			$http.post('/api/BtoBAuthentication',
				{ Id: $scope.id, Password: $scope.password, Url: $scope.url, AspMemberID: $scope.aspMemberID })
			.success(function (items, status, headers, config) {
				if (items.IsSuccess) {
					$cookies.MailAddress = $scope.id;
					if (items.Url != '')
						location.href =  items.Url;
					else
						location.href = '/corporate';
				}
				else {
					$scope.errorMsg = items.Message;
				}
			});
		};
	}]);

app.controller('NAIDDetailCtrl', ['$scope', '$http',
	function ($scope, $http) {
		$scope.viewName = 'loading';

		$scope.$watch("params", function () {
			getData();
		}, true);

		var getData = function () {
			$http.get('/api/NewlyArrivedInformationDetailModel', 
				 {
				 	params: { aspMemberID: $scope.params.AspMemberID, id : $scope.params.ID }
				 }).then(function success(response) {
				if (response.data.IsSuccess) {
					$scope.items = response.data.Model;
					$scope.viewName = 'loaded';
				}
				else {
					//ログインページへ
					if ($scope.params.AspMemberID == '0000002001')
						location.href = '/corporate/business/character_business/partner/signin';
					else
						location.href = '/corporate/business/character_business/partner/signin';
				}
			}, function error(response) {
				//個別エラー処理
			}).finally(function () {
			});
		}
	}
]);

app.controller('BtoBCTMainCtrl', ['$scope', '$http', '$cookies', 'ErrorService',
	function ($scope, $http, $cookies, ErrorService) {
		var getQuerystring = function (key, default_) {
			if (default_ == null) default_ = "";
			key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
			var regex = new RegExp("[\\?&/]" + key + "=([^&#]*)");
			var qs = regex.exec(window.location.href);
			if (qs == null)
				return default_;
			else
				return qs[1];
		}

		$scope.errorService = ErrorService;
		$scope.id = $cookies['MailAddress'];
		$scope.url = getQuerystring('r', '');
		$scope.onSubmit = function () {
			$scope.errorMsg = '';
			if ($scope.form.$invalid) {
				$scope.errorMsg = 'ID,パスワードを正しく入力してください';
				return;
			}
			$http.post('/api/BtoBAuthentication',
				{ Id: $scope.id, Password: $scope.password, Url: $scope.url, AspMemberID : $scope.aspMemberID })
			.success(function (items, status, headers, config) {
				if (items.IsSuccess) {
					$cookies.MailAddress = $scope.id;
					if (items.Url != '')
						location.href = items.Url;
					else
						location.href = '/corporate';
				}
				else {
					$scope.errorMsg = items.Message;
				}
			});
		};

		$scope.signOut = function (aspMemberID) {
			$scope.errorMsg = '';
			$http.post('/api/BtoBLogOut',
				{ AspMemberID: aspMemberID })
			.success(function (items, status, headers, config) {
				if (items.IsSuccess) {
					if (items.Model != '')
						location.href = items.Model;
					else
						location.href = '/corporate';
				}
				else {
					location.href = items.Model;
				}
			});
		};

	}]);

app.controller('BtoBPassCtrl', ['$rootScope', '$scope', '$http',
	function ($rootScope, $scope, $http) {

		$scope.viewName = 'input';
		$scope.update = function () {
			$scope.Message = '';
			//リセット処理
			if ($scope.form.$invalid) {
				$scope.Message = '入力項目に誤りがございます。訂正して再度実行して下さい。';
				$scope.viewName = 'input';
				return;
			}
			$rootScope.$broadcast('loading', true);
			//新規処理
			$http.post('/api/BtoBPw', $scope.input).then(function success(response) {
				if (response.data.IsSuccess) {
					var items = response.data;
					$rootScope.$broadcast('event:addAlert', '完了');
					$scope.viewName = 'finish';
				}
				else {
					$scope.Message = response.data.Message;
					$rootScope.$broadcast('event:addAlert-error', response.data.Message);
					$scope.viewName = 'input';
				}
			}, function error(response) {
				//個別エラー処理
			}).finally(function () {
				$rootScope.$broadcast('loading', false);
			});
		};
	}
]);

app.controller('BtoBPassResetSendCtrl', ['$rootScope', '$scope', '$http',
	function ($rootScope, $scope, $http) {

		$scope.viewName = 'input';
		$scope.send = function () {
			$scope.Message = '';
			//リセット処理
			if ($scope.form.$invalid) {
				$scope.Message = '入力項目に誤りがございます。訂正して再度実行して下さい。';
				$scope.viewName = 'input';
				return;
			}
			$rootScope.$broadcast('loading', true);
			$scope.viewName = 'loading';
			$http.post('/api/BtoBPassResetSend', $scope.input).then(function success(response) {
				if (response.data.IsSuccess) {
					$scope.viewName = 'finish';
				}
				else {
					$scope.Message = response.data.Message;
					$scope.viewName = 'input';
				}
			}, function error(response) {
				//個別エラー処理
				$scope.viewName = 'input';
			}).finally(function () {
				$rootScope.$broadcast('loading', false);
			});
		};
	}
]);

app.controller('BtoBPassResetCtrl', ['$rootScope', '$scope', '$http',
	function ($rootScope, $scope, $http) {

		var getQuerystring = function (key, default_) {
			if (default_ == null) default_ = "";
			key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
			var regex = new RegExp("[\\?&/]" + key + "=([^&#]*)");
			var qs = regex.exec(window.location.href);
			if (qs == null)
				return default_;
			else
				return qs[1];
		}

		$scope.viewName = 'input';
		$scope.update = function () {
			$scope.Message = '';
			//リセット処理
			if ($scope.form.$invalid) {
				$scope.Message = '入力項目に誤りがございます。訂正して再度実行して下さい。';
				$scope.viewName = 'input';
				return;
			}
			$rootScope.$broadcast('loading', true);
			$scope.viewName = 'loading';
			//新規処理
			$scope.input.SessionID = getQuerystring('s', '');

			$http.post('/api/BtoBPassReset', $scope.input).then(function success(response) {
				if (response.data.IsSuccess) {
					var items = response.data;
					$rootScope.$broadcast('event:addAlert', '完了');
					$scope.viewName = 'finish';
				}
				else {
					$scope.Message = response.data.Message;
					$rootScope.$broadcast('event:addAlert-error', response.data.Message);
					$scope.viewName = 'input';
				}
			}, function error(response) {
				//個別エラー処理
				$scope.viewName = 'input';
			}).finally(function () {
				$rootScope.$broadcast('loading', false);
			});
		};
	}
]);

app.controller('BtoBProductListCtrl', ['$rootScope', '$scope', '$http',
	function ($rootScope, $scope, $http) {

		$scope.viewName = 'loading';
		$scope.index = 20;
		$scope.selected = {genreID :  '', year : '', month : '', keyword : '' };

		var getData = function () {
			$http.get('/api/BtoBProductList', { params: { aspMemberID : $scope.params.aspMemberID } }
				).then(function success(response) {
					var items = response.data;
					if (items.IsSuccess) {
						$scope.items = items.Model;
						$scope.viewName = 'view';
					}
					else
						$rootScope.$broadcast('event:addAlert-error', items.Message);
				});
			$http.get('/api/BtoBGenreList', { params: { aspMemberID: $scope.params.aspMemberID } }
				).then(function success(response) {
					var items = response.data;
					if (items.IsSuccess) {
						$scope.genreList = items.Model;
					}
					else
						$rootScope.$broadcast('event:addAlert-error', items.Message);
				});
		}

		$scope.hasNextData = function(){
			if (!angular.isArray($scope.items))
				return false;
			return $scope.filtered.length > $scope.index;
		}

		$scope.showNext = function () {
			$scope.index += 20;
		}

		$scope.genreFilter = function (element) {
			if ($scope.selected.genreID == '')
				return true;

			return element.ProductData.GenreID == $scope.selected.genreID;
		};

		$scope.keywordFilter = function (element) {
			if ($scope.selected.keyword == '')
				return true;
			return element.ProductName.match($scope.selected.keyword);
		};

		$scope.releaseDateFilter = function (element) {
			var date = moment(element.ReleaseDate);
			if ($scope.selected.year == '' && $scope.selected.month == '')
				return true;
			else if ($scope.selected.year != '' && $scope.selected.month == '')
				return date.year() == $scope.selected.year;
			else if($scope.selected.year == '' && $scope.selected.month != '')
				return date.month() + 1 == $scope.selected.month;
			else
				return date.year() == $scope.selected.year && date.month() + 1 == $scope.selected.month;
		};

		$scope.$watch("params", function () {
			getData();
		}, true);

	}
]);

app.controller('BtoBProductCtrl', ['$rootScope', '$scope', '$http',
	function ($rootScope, $scope, $http) {

		$scope.viewName = 'loading';

		var getData = function () {
			$http.get('/api/BtoBProduct', { params: { aspMemberID: $scope.params.aspMemberID, productID : $scope.params.productID } }
				).then(function success(response) {
					var items = response.data;
					if (items.IsSuccess && angular.isObject(items.Model)) {
						$scope.items = items.Model;
						$scope.datas = items.Model.MaterialDataList;
						$scope.viewName = 'view';
					}
					else {
						$rootScope.$broadcast('event:addAlert-error', items.Message);
						$scope.Message = '商品データの読込に失敗しました';
					}
				});
		}

		$scope.$watch("params", function () {
			getData();
		}, true);

	}
]);

app.controller('SteamRankingCtrl', ['$rootScope', '$scope', '$http',
    function ($rootScope, $scope, $http) {
        $scope.viewName = 'loading';
        $scope.params = {
            id: '0',
            start: 0,
            end:100
        };
        var getData = function () {
            $http.get('/api/SteamRanking', { params: { id: $scope.params.id, start: $scope.params.start, end: $scope.params.end } }
            ).then(function success(response) {
                    var items = response.data;
                    if (items.Status == 200) {
                        $scope.items = items;
                        $scope.list = items.RankingList;
                        $scope.items.UpdateDateTime = moment($scope.items.UpdateDateTime);
                        $scope.items.UtcUpdateDateTime = moment($scope.items.UpdateDateTime).add(-9, 'hours');
                        $scope.viewName = 'view';
                    }
                    else {
                        $scope.viewName = 'error';
                    }
                });
        }

        $scope.$watch("params", function () {
            getData();    
        }, true);
        
    }
]);

app.controller('StoreRelationServiceDataCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        $scope.dropItems = [
            { status: true, text: 'すべての地域', value: '' },
            { status: false, text: '北海道・東北地区', value: '01,02,03,04,05,06,07' },
            { status: false, text: '関東・甲信越地区', value: '08,09,10,15,19,20' },
            { status: false, text: '東京都', value: '13' },
            { status: false, text: '神奈川・千葉・埼玉地区', value: '11,12,14' },
            { status: false, text: '東海・中部・北陸地区', value: '16,17,18,21,22,23,24' },
            { status: false, text: '関西地区', value: '25,26,27,28,29,30' },
            { status: false, text: '中国・四国地区', value: '31,32,33,34,35,36,37,38,39' },
            { status: false, text: '九州・沖縄地区', value: '40,41,42,43,44,45,46,47' }
        ];
        $scope.params = {};
        $scope.selected = $scope.dropItems[0];
        $scope.$watch("params", function () {
            $http.get('/api/StoreRelationServiceData',
                { params: { serviceID: $scope.params.serviceID } })
                .success(function (items, status, headers, config) {
                    $scope.items = items;
                    $scope.workItems = items;
                    $scope.pageIndex = $scope.params.pageSize;
                    for (var i = 0; i < $scope.dropItems.length; i++) {
                        for (var j = 0; j < $scope.items.length; j++) {
                            if (($scope.dropItems[i].value.indexOf($scope.items[j].StoreData.StateCode)) != -1) {
                                $scope.dropItems[i].status = true;
                                break;
                            }
                        }
                    }

                });
        }, true);

        $scope.goSearch = function (index) {
            
            $scope.workItems = $scope.items.filter(function (item, index) {
                if (item.FullAddress.indexOf($scope.keyword) >= 0 || item.StoreName.indexOf($scope.keyword) >= 0)
                    return true;
            })

        };


        $scope.forChildDetails = function (element) {
            return element.ServiceDetailsName != '';
        }
        $scope.myComparators = function (element) {   
            if ($scope.selected.value == '')
                return true;

            return $scope.selected.value.indexOf(element.StoreData.StateCode) != -1;
        };
        $scope.next = function () {
            $scope.pageIndex += $scope.params.pageSize;
        };

    }]);

app.controller('NxLProductModelCtrl', ['$scope', '$http', 'Paginator', 'SharedCopyRightService',
    function ($scope, $http, Paginator, SharedCopyRightService) {
        $scope.loading = true;
        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/NxLProductModel/',
                { params: { aspMemberID: $scope.params.aspMemberID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, genreTag: $scope.params.genreTag, category: $scope.params.category, ignore: $scope.params.ignore, isParents: $scope.params.isParents } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    var idList = [];
                    for (var i = 0; i < items.length; i++) {
                        idList.push(items[i].ProductData.ProductID);
                    }
                    $scope.getCopyRight(idList);
                    callback(items, status, headers, config);
                });
        };

        $scope.getCopyRight = function (productIDlist) {
            $http.post('/api/CopyRightProductData', productIDlist).then(function success(response) {
                //CopyRight
                var items = response.data;
                for (var i = 0; i < items.length; i++) {
                    SharedCopyRightService.add(items[i].CopyrightBody);
                }
            }, function error(response) {
                //個別エラー処理
            });
        }

    }]);

app.controller('SharedCopyRightCtrl', ['$scope', 'SharedCopyRightService',
    function ($scope, SharedCopyRightService) {
        $scope.list = SharedCopyRightService.copyRightList;
    }]);

app.controller('NxLShopListCtrl', ['$scope', '$http', '$location',
    function ($scope, $http, $location) {
        $scope.loading = true;
        $scope.result = false;
        $scope.category = 'nxl2'
        $scope.dropItems = [
            { status: true, text: 'すべての地域', value: '' },
            { status: false, text: '北海道', value: '北海道' },
            { status: false, text: '青森県', value: '青森県' },
            { status: false, text: '岩手県', value: '岩手県' },
            { status: false, text: '宮城県', value: '宮城県' },
            { status: false, text: '秋田県', value: '秋田県' },
            { status: false, text: '山形県', value: '山形県' },
            { status: false, text: '福島県', value: '福島県' },
            { status: false, text: '茨城県', value: '茨城県' },            
            { status: false, text: '栃木県', value: '栃木県' },
            { status: false, text: '群馬県', value: '群馬県' },
            { status: false, text: '埼玉県', value: '埼玉県' },
            { status: false, text: '千葉県', value: '千葉県' },
            { status: false, text: '東京都', value: '東京都' },
            { status: false, text: '神奈川県', value: '神奈川県' },
            { status: false, text: '新潟県', value: '新潟県' },
            { status: false, text: '富山県', value: '富山県' },
            { status: false, text: '石川県', value: '石川県' },
            { status: false, text: '福井県', value: '福井県' },
            { status: false, text: '山梨県', value: '山梨県' },
            { status: false, text: '長野県', value: '長野県' },
            { status: false, text: '岐阜県', value: '岐阜県' },            
            { status: false, text: '静岡県', value: '静岡県' },
            { status: false, text: '愛知県', value: '愛知県' },
            { status: false, text: '三重県', value: '三重県' },
            { status: false, text: '滋賀県', value: '滋賀県' },            
            { status: false, text: '京都府', value: '京都府' },
            { status: false, text: '大阪府', value: '大阪府' },
            { status: false, text: '兵庫県', value: '兵庫県' },
            { status: false, text: '奈良県', value: '奈良県' },
            { status: false, text: '和歌山県', value: '和歌山県' },
            { status: false, text: '鳥取県', value: '鳥取県' },
            { status: false, text: '島根県', value: '島根県' },
            { status: false, text: '岡山県', value: '岡山県' },
            { status: false, text: '広島県', value: '広島県' },
            { status: false, text: '山口県', value: '山口県' },  
            { status: false, text: '徳島県', value: '徳島県' },
            { status: false, text: '香川県', value: '香川県' },
            { status: false, text: '愛媛県', value: '愛媛県' },
            { status: false, text: '高知県', value: '高知県' },
            { status: false, text: '福岡県', value: '福岡県' },
            { status: false, text: '佐賀県', value: '佐賀県' },
            { status: false, text: '長崎県', value: '長崎県' },
            { status: false, text: '熊本県', value: '熊本県' },
            { status: false, text: '大分県', value: '大分県' },
            { status: false, text: '宮崎県', value: '宮崎県' },
            { status: false, text: '鹿児島県', value: '鹿児島県' },
            { status: false, text: '沖縄県', value: '沖縄県' }
        ];
        $scope.input = $scope.dropItems[0];
        $scope.$watch("params", function () {
            $scope.init();
        }, true);
        var getQuerystring = function (key, default_) {
            if (default_ == null) default_ = "";
            key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regex = new RegExp("[\\?&/]" + key + "=([^&#]*)");
            var qs = regex.exec(window.location.href);
            if (qs == null)
                return default_;
            else
                return qs[1];
        }

        $scope.init = function () {
            var value = decodeURI(getQuerystring('pref', ''));
            if (value == '')
                $scope.input = $scope.dropItems[0];
            else {
                for (var i = 0; i < $scope.dropItems.length; i++) {
                    if (value == $scope.dropItems[i].value) {
                        $scope.input = $scope.dropItems[i];
                        $scope.getData();
                        return;
                    }
                }
            }
        }

        $scope.getData = function () {
            //$location.url($location.path() + '?pref=' + $scope.input.value);
            $http.get('/api/NxLShopList/',
                { params: { category: $scope.category, pref: $scope.input.value } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    $scope.result = true;
                    $scope.items = items;
                    $('html,body').animate({ scrollTop: $("#list").offset().top }, 'fast');
                });
        }

    }]);
;
app.controller('StoreMenuCtrl', ['$scope', 'MenuService',
    function ($scope, MenuService) {
        $scope.menu = MenuService;
    }]);

app.controller('OldStoreRelationServiceDataCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        $scope.dropItems = [
            { data: [], status: true, text: 'すべての地域', value: '' },
            { data: [], status: false, text: '北海道', value: '01' },
            { data: [], status: false, text: '東北', value: '02,03,04,05,06,07' },
            { data: [], status: false, text: '東京', value: '13' },
            { data: [], status: false, text: '関東', value: '08,09,10,,11,12,14' },
            { data: [], status: false, text: '東海', value: '21,22,23,24' },
            { data: [], status: false, text: '北陸', value: '15,16,17,18,19,20' },
            { data: [], status: false, text: '関西', value: '25,26,27,28,29,30' },
            { data: [], status: false, text: '中国・四国', value: '31,32,33,34,35,36,37,38,39' },
            { data: [], status: false, text: '九州・沖縄', value: '40,41,42,43,44,45,46,47' }
        ];
        $scope.params = {};
        $scope.selected = $scope.dropItems[0];
        $scope.$watch("params", function () {
            $http.get('/api/StoreRelationServiceData',
                { params: { serviceID: $scope.params.serviceID } })
                .success(function (items, status, headers, config) {
                    $scope.items = items;
                    $scope.workItems = items;
                    $scope.pageIndex = $scope.params.pageSize;
                    for (var i = 0; i < $scope.dropItems.length; i++) {
                        for (var j = 0; j < $scope.items.length; j++) {
                            if (($scope.dropItems[i].value.indexOf($scope.items[j].StoreData.StateCode)) != -1) {
                                $scope.dropItems[i].status = true;
                                break;
                            }
                        }
                    }

                });
        }, true);

        $scope.goSearch = function (index) {

            $scope.workItems = $scope.items.filter(function (item, index) {
                if (item.FullAddress.indexOf($scope.keyword) >= 0 || item.StoreName.indexOf($scope.keyword) >= 0)
                    return true;
            })

        };


        $scope.forChildDetails = function (element) {
            return element.ServiceDetailsName != '';
        }
        $scope.myComparators = function (element) {
            if ($scope.selected.value == '')
                return true;

            return $scope.selected.value.indexOf(element.StoreData.StateCode) != -1;
        };
        $scope.next = function () {
            $scope.pageIndex += $scope.params.pageSize;
        };

    }]);

app.controller('NewStoreRelationServiceDataCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        $scope.isRead = false;
        $scope.hasData = false;
        $scope.dropItems = [
            { data: [], status: false, text: '北海道', value: '01' },
            { data: [], status: false, text: '東北', value: '02,03,04,05,06,07' },
            { data: [], status: false, text: '東京', value: '13' },
            { data: [], status: false, text: '関東', value: '08,09,10,,11,12,14' },
            { data: [], status: false, text: '東海', value: '21,22,23,24' },
            { data: [], status: false, text: '北陸', value: '15,16,17,18,19,20' },
            { data: [], status: false, text: '関西', value: '25,26,27,28,29,30' },
            { data: [], status: false, text: '中国・四国', value: '31,32,33,34,35,36,37,38,39' },
            { data: [], status: false, text: '九州・沖縄', value: '40,41,42,43,44,45,46,47' }
        ];
        var tokyoList = ['千代田区', '中央区', '港区', '新宿区', '文京区', '台東区', '墨田区', '江東区', '品川区', '目黒区', '大田区', '世田谷区', '渋谷区', '中野区', '杉並区', '豊島区', '北区', '荒川区', '板橋区', '練馬区', '足立区', '葛飾区', '江戸川区'];
        $scope.selected = $scope.dropItems[0];

        $scope.$watch("params", function () {
            $http.get('/api/StoreRelationServiceData/',
                { params: { serviceID: $scope.params.serviceID } })
                .success(function (items, status, headers, config) {
                    $scope.isRead = true;
                    $scope.items = items;
                    if (items.length > 0) {
                        $scope.hasData = true;
                        var tempList = [];
                        var item = items;
                        var dropItems = $scope.dropItems;
                        for (var i = 0; i < dropItems.length; i++) {
                            for (var j = 0; j < item.length; j++) {
                                if ((dropItems[i].value.indexOf(item[j].StoreData.StateCode)) != -1) {
                                    tempList.push({ isActive: false, data: [], status: true, text: dropItems[i].text, value: dropItems[i].value });
                                    break;
                                }
                            }
                        }


                        //$scope.dropItems = dropItems.filter(x => x.status == true);
                        var storeDatas = item;
                        for (var i = 0; i < tempList.length; i++) {
                            if (tempList[i].value == '13') {
                                //var tokyoItems = storeDatas.filter(x => tempList[i].value.indexOf(x.StateCode) !== -1);
                                var tokyoItems = storeDatas.filter(function (x) {
                                    return tempList[i].value.indexOf(x.StoreData.StateCode) !== -1;
                                });
                                var removeList = [];
                                var hit = 0;
                                for (var j = 0; j < tokyoList.length; j++) {
                                    //var target = tokyoItems.filter(x => x.data.StoreData.FullAddress.indexOf(tokyoList[j]) !== -1);
                                    var target = tokyoItems.filter(function (x) { return x.StoreData.FullAddress.indexOf(tokyoList[j]) !== -1; });
                                    if (target.length > 0) {
                                        tempList[i].data.push({ name: tokyoList[j], isList: true, stores: target });
                                        target.forEach(function (x) {
                                            removeList.push(x.StoreData.StoreID);
                                        });
                                    }
                                }
                                var otherTokyo = [];
                                for (var o = 0; o < tokyoItems.length; o++) {
                                    var isHIt = false;
                                    for (var p = 0; p < removeList.length; p++) {
                                        if (tokyoItems[o].StoreData.StoreID == removeList[p])
                                            isHIt = true;
                                    }
                                    if (!isHIt)
                                        otherTokyo.push(tokyoItems[o]);
                                }
                                if (otherTokyo.length > 0) {
                                    tempList[i].data.push({ name: '23区外', isList: true, stores: otherTokyo });
                                }

                            }
                            else {
                                tempList[i].data[0] = { name: '', isList: false, stores: [] };
                                tempList[i].data[0].isList = false;
                                tempList[i].data[0].name = '';
                                tempList[i].data[0].stores = storeDatas.filter(function (x) { return tempList[i].value.indexOf(x.StoreData.StateCode) !== -1; });
                            }

                        }
                        $scope.dropItems = tempList;
                    }
                });
        }, true);

        $scope.accordionChange = function (item) {
            item.isActive = !item.isActive;
        };
        $scope.changeArea = function (value) {
            $scope.stateCode = $scope.stateList[value];
            search();
        };
//--

        $scope.goSearch = function (index) {

            $scope.workItems = $scope.items.filter(function (item, index) {
                if (item.FullAddress.indexOf($scope.keyword) >= 0 || item.StoreName.indexOf($scope.keyword) >= 0)
                    return true;
            })

        };


        $scope.forChildDetails = function (element) {
            return element.ServiceDetailsName != '';
        }
        $scope.myComparators = function (element) {
            if ($scope.selected.value == '')
                return true;

            return $scope.selected.value.indexOf(element.StoreData.StateCode) != -1;
        };
        $scope.next = function () {
            $scope.pageIndex += $scope.params.pageSize;
        };

    }]);

app.controller('PrizeDetailCtrl', ['$scope', '$http', 'Paginator', 'MenuService',
    function ($scope, $http, Paginator, MenuService) {
        $scope.pageIndex = 5;
        $scope.isShow = true;
        $scope.hasData = false;
        $scope.loading = true;
        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/PrizeNavi/',
                { params: { keyword: '', storeID: $scope.params.storeID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    if (items.length > 0) {
                        MenuService.storePrize = true;
                        $scope.hasData = true;
                    }
                    else
                        $scope.isShow = false;
                    callback(items, status, headers, config);
                });
        };

        $scope.next = function () {
            $scope.pageIndex += 9;
        };

        $scope.myComparator = function (expected, actual) {
            if (actual == '')
                return true;
            if (expected.indexOf(actual) == -1) {
                return false;
            } else {
                return true;
            }

        };

    }]);

app.controller('LanguageStoreSearchCtrl', ['$scope', '$http', 'QuerystringService',
    function ($scope, $http, queryService) {
        $scope.dropItems = [];
        $scope.pageIndex = 0;
        $scope.mode = 0;//0=search, 1=近くのお店
        $scope.isGps = false;
        $scope.lat = null;
        $scope.lng = null;
        $scope.isRead = false;
        $scope.ignore = null;
        $scope.opnePanel = false;
        $scope.$watch("stateCode+params", function () {
            search();
        });
        $scope.count = 0;

        $scope.stateList = [
            { name: 'すべての店舗', value: 0 },
            { name: '北海道', value: 1 },
            { name: '東北', value: 2 },
            { name: '東京', value: 3 },
            { name: '関東', value: 4 },
            { name: '東海', value: 5 },
            { name: '北陸', value: 6 },
            { name: '関西', value: 7 },
            { name: '中国・四国', value: 8 },
            { name: '九州・沖縄', value: 9 },
            { name: 'その他地域', value: 10 }
        ];

        $scope.stateCode = $scope.stateList[0];

        $scope.getStoreLink = function(path, url){
            if (path == '')
                return url;

            if (url.indexOf('http') == -1)
                return path + url;
            else
                return url;
        }

        var search = function (offset, limit) {
            $scope.isRead = false;
            $scope.dropItems = [];
            var dropItems = [
                { data: [], status: false, text: '北海道', value: '01' },
                { data: [], status: false, text: '東北', value: '02,03,04,05,06,07' },
                { data: [], status: false, text: '東京', value: '13' },
                { data: [], status: false, text: '関東', value: '08,09,10,,11,12,14' },
                { data: [], status: false, text: '東海', value: '21,22,23,24' },
                { data: [], status: false, text: '北陸', value: '15,16,17,18,19,20' },
                { data: [], status: false, text: '関西', value: '25,26,27,28,29,30' },
                { data: [], status: false, text: '中国・四国', value: '31,32,33,34,35,36,37,38,39' },
                { data: [], status: false, text: '九州・沖縄', value: '40,41,42,43,44,45,46,47' },
                { data: [], status: false, text: 'その他地域', value: '99' },
            ];
            var tokyoList = ['千代田区', '中央区', '港区', '新宿区', '文京区', '台東区', '墨田区', '江東区', '品川区', '目黒区', '大田区', '世田谷区', '渋谷区', '中野区', '杉並区', '豊島区', '北区', '荒川区', '板橋区', '練馬区', '足立区', '葛飾区', '江戸川区'];
            $scope.isRead = true;
            var lat = null;
            var lng = null;
            if ($scope.isGps || $scope.mode == 1) {
                lat = $scope.lat;
                lng = $scope.lng;
            }
            var isGlobalOnly = $scope.stateCode.value == 10;

            $http.get('/api/LanguageStoreSearch/',
                {
                    method: 'post',
                    params: { stateCode: $scope.stateCode.value, groupID: $scope.params.groupID, lat: lat, lng: lng, lang: $scope.params.lang, ignore: $scope.ignore, isGlobalOnly: isGlobalOnly }
                })
                .success(function (items, status, headers, config) {
                    $scope.count++;

                    for (var i = 0; i < items.length; i++) {
                        if (items[i].StoreData.CountryCode != 'JP') {
                            //items[i].StoreData.StateCode = '99';
                            items[i].StoreData.State = 'その他地域';
                            items[i].StateCode = '99';
                            items[i].State = 'その他地域';
                        }
                    }

                    if ($scope.isGps)
                        $scope.opnePanel = true;
                    else if (!$scope.isGps && $scope.stateCode.value == 0)
                        $scope.opnePanel = false;
                    else
                        $scope.opnePanel = true;

                    var filterdItems = [];

                    filterdItems.push(items.filter(function (x) { return x.data.StoreData.StoreGroupID === 0; }));//0 ゲーセン
                    filterdItems.push(items.filter(function (x) { return x.data.StoreData.StoreGroupID === 1; }));//1 ボーリング
                    filterdItems.push(items.filter(function (x) { return x.data.StoreData.StoreGroupID === 7; }));//2 クレープ
                    filterdItems.push(items.filter(function (x) { return x.data.StoreData.StoreGroupID === 8; }));//3 飲食店
                    filterdItems.push(items.filter(function (x) { return x.data.StoreData.StoreGroupID === 6; }));//4 アスレチック
                    filterdItems.push(items.filter(function (x) { return x.data.StoreData.StoreGroupID === 2; }));//5 プリ専門店
                    filterdItems.push(items.filter(function (x) { return x.data.StoreData.StoreGroupID === 10; }));//6 メガレイジ
                    filterdItems.push(items.filter(function (x) { return x.data.StoreData.StoreGroupID === 11; }));//7 ガチャ専門店

                    //filterdItems.push(items.filter(x => x.data.StoreData.StoreGroupID === 0));
                    //filterdItems.push(items.filter(x => x.data.StoreData.StoreGroupID === 1));
                    //filterdItems.push(items.filter(x => x.data.StoreData.StoreGroupID === 2));
                    //filterdItems.push(items.filter(x => x.data.StoreData.StoreGroupID === 3));
                    //filterdItems.push(items.filter(x => x.data.StoreData.StoreGroupID === 4));
                    //filterdItems.push(items.filter(x => x.data.StoreData.StoreGroupID === 5));
                    //filterdItems.push(items.filter(x => x.data.StoreData.StoreGroupID === 6));

                    for (var s = 0; s < filterdItems.length; s++) {

                        if ($scope.mode == 1 || s == 1 || s == 3 || s == 4 || s == 6) {
                            $scope.dropItems.push(filterdItems[s]);
                        }
                        else {
                            var tempList = [];
                            var item = filterdItems[s];

                            for (var i = 0; i < dropItems.length; i++) {
                                for (var j = 0; j < item.length; j++) {
                                    if ((dropItems[i].value.indexOf(item[j].StateCode)) != -1) {
                                        tempList.push({ isActive: $scope.opnePanel ? true : false, data: [], status: true, text: dropItems[i].text, value: dropItems[i].value });
                                        break;
                                    }
                                }
                            }


                            //$scope.dropItems = dropItems.filter(x => x.status == true);
                            var storeDatas = item;
                            for (var i = 0; i < tempList.length; i++) {
                                if (tempList[i].value == '13') {
                                    //var tokyoItems = storeDatas.filter(x => tempList[i].value.indexOf(x.StateCode) !== -1);
                                    var tokyoItems = storeDatas.filter(function (x) {
                                        return tempList[i].value.indexOf(x.StateCode) !== -1;
                                    });
                                    var removeList = [];
                                    var hit = 0;
                                    for (var j = 0; j < tokyoList.length; j++) {
                                        //var target = tokyoItems.filter(x => x.data.StoreData.FullAddress.indexOf(tokyoList[j]) !== -1);
                                        var target = tokyoItems.filter(function (x) { return x.data.StoreData.FullAddress.indexOf(tokyoList[j]) !== -1; });
                                        if (target.length > 0) {
                                            tempList[i].data.push({ name: tokyoList[j], isList: true, stores: target });
                                            target.forEach(function (x) {
                                                removeList.push(x.StoreData.StoreID);
                                            });
                                        }
                                    }
                                    var otherTokyo = [];
                                    for (var o = 0; o < tokyoItems.length; o++) {
                                        var isHIt = false;
                                        for (var p = 0; p < removeList.length; p++) {
                                            if (tokyoItems[o].StoreData.StoreID == removeList[p])
                                                isHIt = true;
                                        }
                                        if (!isHIt)
                                            otherTokyo.push(tokyoItems[o]);
                                    }
                                    if (otherTokyo.length > 0) {
                                        tempList[i].data.push({ name: '23区外', isList: true, stores: otherTokyo });
                                    }

                                }
                                else {
                                    var storeTemp = storeDatas.filter(function (x) { return tempList[i].value.indexOf(x.StateCode) !== -1; });
                                    var group = storeTemp.reduce(function (result, current) {
                                        var element = result.filter(function (p) {
                                            return p.State == current.State;
                                        })[0];
                                        if (!element) {
                                            result.push({
                                               Region : tempList[i].value, State: current.State, StateCode : current.StateCode
                                            });
                                        }
                                        return result;
                                    }, []);
                                    group.sort(function (a, b) {
                                        if (a.StateCode < b.StateCode) return -1;
                                        if (a.StateCode > b.StateCode) return 1;
                                        return 0;
                                    });
                                    for (var j = 0; j < group.length; j++) {
                                        tempList[i].data[j] = { name: '', isList: false, stores: [] };
                                        tempList[i].data[j].isList = true;
                                        tempList[i].data[j].name = group[j].State;
                                        tempList[i].data[j].stores = storeDatas.filter(function (x) { return group[j].State.indexOf(x.State) !== -1; });
                                    }
                                }

                            }
                            $scope.dropItems.push(tempList);
                        }
                    }
                    $scope.isRead = true;
                    $scope.isGps = false;
                })
                .error(function (data, status) {
                    //alert('通信エラーが発生しました');
                });
            
        };
        $scope.accordionChange = function (item) {
            item.isActive = !item.isActive;
        };
        $scope.changeArea = function (value) {
            $scope.stateCode = $scope.stateList[value];
            search();
        };
        $scope.getData = function() {
            search();
        };
        
        $scope.searchPageExecuteGetPosition = function () {
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(function (position) {
                    $scope.lat = position.coords.latitude;
                    $scope.lng = position.coords.longitude;
                    $scope.isGps = true;
                    $scope.opnePanel = true;
                    search();
                }
                    , function (error) {
                        var message = "";

                        switch (error.code) {

                            // 位置情報が取得できない場合 
                            case error.POSITION_UNAVAILABLE:
                                message = "位置情報の取得ができませんでした。";
                                break;

                            // Geolocationの使用が許可されない場合 
                            case error.PERMISSION_DENIED:
                                message = "位置情報取得の使用許可がされませんでした。";
                                break;

                            // タイムアウトした場合 
                            case error.PERMISSION_DENIED_TIMEOUT:
                                message = "位置情報取得中にタイムアウトしました。";
                                break;
                        }
                        alert(message);
                    });
            } else {
                alert("GPSはご利用できません");
                return false;
            }
        }

        function deg2rad(deg) {
            return deg * Math.PI / 180.0;
        }
        $scope.hubenyDistance = function myfunction(x1, y1) {
            var x2 = $scope.lat;
            var y2 = $scope.lng;
            
            if (x1 == 0 || y1 == 0 || x2 == null || y2 == null)
                return;
            if ($scope.count > 2)
                return;

            var distance = 6371 * Math.acos(
                Math.cos(deg2rad(x2)) * Math.cos(deg2rad(x1)) * Math.cos(deg2rad(y1) - deg2rad(y2)) +
                Math.sin(deg2rad(x2)) * Math.sin(deg2rad(x1)));

            if (distance < 1) {
                distance = (distance * 1000);
                distance = distance.toFixed(1);
                return '[約' + String(distance).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,') + 'm]';
            }
            else {
                distance = (distance).toFixed(1)
                return '[約' + String(distance).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,') + 'km]';
            }

        };
   
        if (queryService.get('gps', '') == "on")
            $scope.searchPageExecuteGetPosition();

    }]);

app.controller('LanguageStoreListCtrl', ['$scope', '$http', 'QuerystringService',
    function ($scope, $http, queryService) {
        $scope.dropItems = [];
        $scope.pageIndex = 0;
        $scope.mode = 0;//0=search, 1=近くのお店
        $scope.isGps = false;
        $scope.lat = null;
        $scope.lng = null;
        $scope.isRead = false;
        $scope.ignore = null;
        $scope.opnePanel = false;
        $scope.$watch("stateCode+params", function () {
            search();
        });
        $scope.count = 0;


        $scope.getStoreLink = function (path, url) {
            if (path == '')
                return url;

            if (url.indexOf('http') == -1)
                return path + url;
            else
                return url;
        }

        var search = function (offset, limit) {
            $scope.isRead = false;
            
            $http.get('/api/LanguageStoreSearch/',
                {
                    method: 'post',
                    params: { groupID: $scope.params.groupID, lang: $scope.params.lang, ignore: $scope.ignore }
                })
                .success(function (items, status, headers, config) {
                    $scope.count++;
                    $scope.isRead = true;
                    $scope.items = items;
                })
                .error(function (data, status) {
                    //alert('通信エラーが発生しました');
                });

        };
        $scope.getData = function () {
            search();
        };

        $scope.getUrl= function (storeData) {
            return "https://maps.google.co.jp/maps?q=" + storeData.Latitude + "," + storeData.Longitude + "&output=embed&t=m&z=16&hl=ja";
        }
        
        function deg2rad(deg) {
            return deg * Math.PI / 180.0;
        }
        $scope.hubenyDistance = function myfunction(x1, y1) {
            var x2 = $scope.lat;
            var y2 = $scope.lng;

            if (x1 == 0 || y1 == 0 || x2 == null || y2 == null)
                return;
            if ($scope.count > 2)
                return;

            var distance = 6371 * Math.acos(
                Math.cos(deg2rad(x2)) * Math.cos(deg2rad(x1)) * Math.cos(deg2rad(y1) - deg2rad(y2)) +
                Math.sin(deg2rad(x2)) * Math.sin(deg2rad(x1)));

            if (distance < 1) {
                distance = (distance * 1000);
                distance = distance.toFixed(1);
                return '[約' + String(distance).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,') + 'm]';
            }
            else {
                distance = (distance).toFixed(1)
                return '[約' + String(distance).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,') + 'km]';
            }

        };

    }]);

app.controller('EventListCtrl', ['$scope', '$http', 'Paginator2', 'QuerystringService',
    function ($scope, $http, Paginator, queryService) {
        var offset = queryService.get('p', 0);
        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging, offset);
        }, true);
        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/EventModel/',
                { params: { storeID: $scope.params.storeID, offset: offset, limit: limit, eventCategory : $scope.params.category } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    callback(items, status, headers, config);
                });
        };
        $scope.getDateStr = function (date1, date2) {
            date1 = moment(date1);
            if (date2 != null)
                date2 = moment(date2);
            if (date1.isSame(date2)) {
                if (date1.date() >= 21)
                    return date1.format('YYYY年M月下旬');
                else if (date1.date() >= 11)
                    return date1.format('YYYY年M月中旬');
                else
                    return date1.format('YYYY年M月上旬');
            }
            else {
                if (date2 == null)
                    return date1.format('YYYY年M月D日（ddd）') + '～';
                else
                    return date1.format('YYYY年M月D日（ddd）') + '～' + date2.format('YYYY年M月D日（ddd）');
            }
        };
        $scope.getDateString = function (eventData) {
            if (eventData == null || eventData == undefined || eventData.EventPublicOpeningDate == undefined)
                return '-';

            var date1 = moment(eventData.EventPublicOpeningDate);
            var date2 = eventData.EventPublicOpeningEndDate;

            if (date2 != null)
                date2 = moment(date2);
            if (eventData.DateDisplayType == 1) {
                if (date1.date() >= 21)
                    return date1.format('YYYY年M月下旬');
                else if (date1.date() >= 11)
                    return date1.format('YYYY年M月中旬');
                else
                    return date1.format('YYYY年M月上旬');
            }
            else {
                if (date2 == null)
                    return date1.format('YYYY年M月D日（ddd）') + '～';
                else
                    return date1.format('YYYY年M月D日（ddd）') + '～' + date2.format('YYYY年M月D日（ddd）');
            }
        };
        $scope.next = function () {
            $scope.pageIndex += $scope.params.pageSize;
        };

        $scope.checkEventStatus = function (startDateTimeVal, endDateTimeVal) {
            var startDateTime = Date.parse(startDateTimeVal);
            var endDateTime = endDateTimeVal != null ? Date.parse(endDateTimeVal) : Date.parse('2300/01/01 00:00:00');
            var now = Date.now();

            if (startDateTime == endDateTime) {
                return '';
            }
            else if (now >= startDateTime && now <= endDateTime) {
                if (moment(now).add('days', -7).format() <= startDateTime)
                    return 'new';
                return 'hot';
            }
            else if (now < startDateTime)
                return "soon";
            else
                return "close";

        };
        $scope.getEventStatus = function (startDateTimeVal, endDateTimeVal, dateDisplayType) {
            var startDateTime = Date.parse(startDateTimeVal);
            var endDateTime = endDateTimeVal != null ? Date.parse(endDateTimeVal) : Date.parse('2300/01/01 00:00:00');
            var now = Date.now();

            if (dateDisplayType == 1) {
                return '';
            }
            else if (now >= startDateTime && now <= endDateTime) {
                if (moment(now).add('days', -7).format() <= startDateTime)
                    return 'new';
                return 'hot';
            }
            else if (now < startDateTime)
                return "soon";
            else
                return "close";

        };
        $scope.getEventStatus2 = function (startDateTimeVal, endDateTimeVal, dateDisplayType, receptionistEndDateTime) {
            var startDateTime = Date.parse(startDateTimeVal);
            var endDateTime = endDateTimeVal != null ? Date.parse(endDateTimeVal) : Date.parse('2300/01/01 00:00:00');
            var now = Date.now();

            var rEndDate = moment(receptionistEndDateTime);
            if (rEndDate.year() != 2300) {
                return 'close';
            }

            if (dateDisplayType == 1) {
                return '';
            }
            else if (now >= startDateTime && now <= endDateTime) {
                if (moment(now).add('days', -7).format() <= startDateTime)
                    return 'new';
                return 'hot';
            }
            else if (now < startDateTime)
                return "soon";
            else
                return "close";

        };
    }]);

app.controller('ProductCtrl', ['$scope', '$http', 'Paginator2', 'QuerystringService',
    function ($scope, $http, Paginator, queryService) {
        var offset = queryService.get('p', 0);
        $scope.loading = true;
        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging, offset);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/Product/',
                { params: { aspMemberID: $scope.params.aspMemberID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, genreTag: $scope.params.genreTag, category: $scope.params.category, ignore: $scope.params.ignore, isParents: $scope.params.isParents, lang : $scope.params.lang } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    callback(items, status, headers, config);
                });
        };

    }]);


app.controller('ProductPartsCtrl', ['$scope', '$http',
    function ($scope, $http) {
        $scope.hasData = false;
        $scope.$watch("params", function () {
            $http.get('/api/Product/',
                { params: { aspMemberID: $scope.params.aspMemberID, offset: 0, limit: $scope.params.pageSize, sortName: '', isDesc: true, genreTag: '', category: '', ignore: '', isParents: $scope.params.isParents, lang: $scope.params.lang } })
                .success(function (items, status, headers, config) {
                    if (items.length > 0)
                        $scope.hasData = true;
                    $scope.items = items;
                    
                });
        }, true);
    }]);

app.controller('TaitoPrizeSeriesProductModelCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        $scope.hasData = false;
        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/TaitoPrizeSeriesProductModel/',
                { params: { aspMemberID: $scope.params.aspMemberID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, genreTag: $scope.params.genreTag, category: $scope.params.category, ignore: $scope.params.ignore, isParents: $scope.params.isParents, productID: $scope.params.productID, lang:$scope.params.lang } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    if (items.length > 0) {
                        $scope.hasData = true;

                        var group = items.reduce(function (result, current) {
                            var element = result.filter(function (p) {
                                return p.ReleaseYear == current.ReleaseYear;
                            })[0];
                            if (!element) {
                                result.push({
                                    ReleaseYear: current.ReleaseYear
                                });
                            } 
                            return result;
                        }, []);

                        group.forEach(function(e) {
                            $scope.dropItems.push({ text : e.ReleaseYear, value : e.ReleaseYear});
                        });

                    }
                    callback(items, status, headers, config);
                });
        };

        //$scope.$watch("params.productID", function () {
        //    $http.get('/api/PrizeSeriesProductYear/',
        //        { params: { aspMemberID: $scope.params.aspMemberID, productID: $scope.params.productID } })
        //        .success(function (items, status, headers, config) {
        //            $scope.dropItems = items;
        //            $scope.selectedYear = $scope.dropItems[0];
        //        });
        //});

        $scope.dropItems = [
            { text: 'すべて', value: '' }
        ];
        $scope.selectedYear = $scope.dropItems[0];
    }]);

app.controller('TaitoPrizeSeriesProductModelExCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        $scope.items = [];
        $scope.hasData = false;
        $scope.$watch("params", function () {
            $http.get('/api/TaitoPrizeSeriesProductModel/',
                { params: { aspMemberID: $scope.params.aspMemberID, limit: 1000, offset: 0, isDesc: true, sortName: '', productID: $scope.params.productID, lang: $scope.params.lang } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    if (items.length > 0) {
                        $scope.hasData = true;
                        $scope.items = items;
                        var group = items.reduce(function (result, current) {
                            var element = result.filter(function (p) {
                                return p.ReleaseYear == current.ReleaseYear;
                            })[0];
                            if (!element) {
                                result.push({
                                    ReleaseYear: current.ReleaseYear
                                });
                            }
                            return result;
                        }, []);

                        group.forEach(function (e) {
                            $scope.dropItems.push({ text: e.ReleaseYear, value: e.ReleaseYear });
                        });
                        $scope.selected();
                    }
                });
        }, true);

        $scope.selected = function (x) {
            if ($scope.selectedYear.value == '')
                $scope.list = $scope.items;
            else if ($scope.selectedYear.value == -1) {
                $scope.list = $scope.items.slice(0, 12);
            }
            else if ($scope.selectedYear.value > 0) {
                $scope.list = $scope.items.filter(function (x) {
                    return x.ReleaseYear == $scope.selectedYear.value;
                });
            }
        }

        $scope.dropItems = [
            { text: '新しい商品', value: -1 },
            { text: 'すべて', value: '' }
        ];
        $scope.selectedYear = $scope.dropItems[0];
    }]);

app.controller('PrizeModelCtrl', ['$scope', '$http', 'Paginator2', 'QuerystringService',
    function ($scope, $http, Paginator, queryService) {
        var offset = queryService.get('p', 0);
        $scope.loading = true;
        $scope.params = {
            sortKey: ''
        };
        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging, offset);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/PrizeProduct/',
                { params: { aspMemberID: $scope.params.aspMemberID, offset: offset, limit: limit, sortName: $scope.params.sortKey, isDesc: isDesc, genreTag: $scope.params.genreTag, category: $scope.params.category, ignore: $scope.params.ignore, isParents: $scope.params.isParents, lang : $scope.params.lang } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    callback(items, status, headers, config);
                });
        };
        $scope.go = function (pid) {
            window.location.href = '/prize/item/' + pid;
        };
    }]);

app.controller('PrizeModelPartsCtrl', ['$scope', '$http',
    function ($scope, $http) {
        $scope.hasData = false;
        $scope.params = {
            sortKey: ''
        };
        $scope.$watch("params", function () {
            $http.get('/api/PrizeProduct/',
                { params: { aspMemberID: $scope.params.aspMemberID, offset: 0, limit: $scope.params.pageSize, sortName: $scope.params.sortKey, isDesc: true, category: $scope.params.category, ignore: $scope.params.ignore, isParents: $scope.params.isParents, lang : $scope.params.lang } })
                .success(function (items, status, headers, config) {
                    if(items.length > 0)
                        $scope.hasData = true;
                    $scope.items = items;
                });
        }, true);
    }]);

app.controller('GameNaviCtrl', ['$scope', '$http', 'Paginator2', 'QuerystringService',
    function ($scope, $http, Paginator, queryService) {
        $scope.loading = true;
        $scope.params = { mode: '', modeValue: 0 };
        var offset = queryService.get('p', 0);
        //$scope.pageIndex = 5;
        //$scope.pageSize = 5;
        $scope.$watch("params", function () {
            $scope.loading = true;
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging, offset);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/GameNavi/',
                { params: { keyword: '', storeID: $scope.params.storeID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, mode: $scope.params.mode  } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    callback(items, status, headers, config);
                });
        };

        $scope.selectChange = function () {
            switch ($scope.select) {
                case 'すべて':
                    $scope.changeCategoy(0);
                    break;
                case 'ビデオゲーム':
                    $scope.changeCategoy(1);
                    break;
                case '音楽ゲーム':
                    $scope.changeCategoy(2);
                    break;
                case 'プリントシール':
                    $scope.changeCategoy(3);
                    break;
                case 'メダルゲーム':
                    $scope.changeCategoy(4);
                    break;
                case 'カードゲーム':
                    $scope.changeCategoy(5);
                    break;
                case 'キッズゲーム':
                    $scope.changeCategoy(6);
                    break;
                case 'その他':
                    $scope.changeCategoy(7);
                    break;
                default:
                    $scope.changeCategoy(0);
                    break;
            }
        };
        $scope.changeCategoy = function (id) {
            offset = 0;
            switch (id) {
                case 0:
                    $scope.params.mode = '';
                    $scope.params.modeValue = '0';
                    break;
                case 1:
                    $scope.params.mode = 'ビデオゲーム';
                    $scope.params.modeValue = '1';
                    break;
                case 2:
                    $scope.params.mode = '音楽ゲーム';
                    $scope.params.modeValue = '2';
                    break;
                case 3:
                    $scope.params.mode = 'プリントシール';
                    $scope.params.modeValue = '3';
                    break;
                case 4:
                    $scope.params.mode = 'メダルゲーム';
                    $scope.params.modeValue = '4';
                    break;
                case 5:
                    $scope.params.mode = 'カードゲーム';
                    $scope.params.modeValue = '5';
                    break;
                case 6:
                    $scope.params.mode = 'キッズゲーム';
                    $scope.params.modeValue = '6';
                    break;
                case 7:
                    $scope.params.mode = 'その他';
                    $scope.params.modeValue = '7';
                    break;
                default:
                    $scope.params.mode = '';
                    $scope.params.modeValue = '0';
            }
        };
    }]);

app.controller('GameNaviPartsCtrl', ['$scope', '$http',
    function ($scope, $http) {
        $scope.loading = true;
        var offset = 0;
        $scope.hasData = false;
        
        $scope.$watch("params", function () {
            $http.get('/api/GameNavi/',
                { params: { keyword: '', offset: offset, limit: $scope.params.pageSize } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    if(items.length > 0)
                        $scope.hasData = true;

                    $scope.items = items;
                });
        }, true);
    }]);

app.controller('RelationPrizeCtrl', ['$scope', '$http', 
    function ($scope, $http) {
        var offset = 0;
        $scope.loading = true;
        $scope.hasData = false;
        $scope.$watch("params", function () {
            $scope.loading = true;
            getData();
        }, true);

        var getData = function () {
            $http.get('/api/Prize/',
                { params: { keyword: '', storeID: '', offset: offset, limit: $scope.params.pageSize, sortName: $scope.params.sortKey, isDesc: false } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    $scope.hasData = true;
                    $scope.items = items;
                });
        };
        
    }]);
app.controller('MobArcProductModelCtrl', ['$scope', '$http', 'Paginator2', 'QuerystringService',
    function ($scope, $http, Paginator, queryService) {
        $scope.params = { mode:''};
        var offset = queryService.get('p', 0);
        $scope.loading = true;
        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging, offset);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/MobArcProductModel/',
                { params: { aspMemberID: $scope.params.aspMemberID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, genreTag: $scope.params.genreTag, category: $scope.params.category, mode : $scope.params.mode } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    callback(items, status, headers, config);
                });
        };
        $scope.selectChange = function () {
            switch ($scope.select) {
                case 'すべて':
                    $scope.changeCategoy(0);
                    break;
                case '業務用ゲーム':
                    $scope.changeCategoy(1);
                    break;
                case '家庭用ゲーム':
                    $scope.changeCategoy(2);
                    break;
                case 'スマホゲーム':
                    $scope.changeCategoy(3);
                    break;
                case 'その他':
                    $scope.changeCategoy(4);
                    break;
                default:
                    $scope.changeCategoy(0);
                    break;
            }
        };
        $scope.changeCategoy = function (id) {
            offset = 0;
            switch (id) {
                case 0:
                    $scope.params.mode = '';
                    break;
                case 1:
                    $scope.params.mode = '1';
                    break;
                case 2:
                    $scope.params.mode = '2';
                    break;
                case 3:
                    $scope.params.mode = '3';
                    break;
                default:
                    $scope.params.mode = '4';
            }            
        };

    }]);

app.controller('MobArcProductModelPartsCtrl', ['$scope', '$http',
    function ($scope, $http) {
        $scope.params = { mode: '' };
        var offset = 0;
        $scope.loading = true;
        $scope.hasData = false;
        $scope.$watch("params", function () {
            $http.get('/api/MobArcProductModel/',
                { params: { offset: offset, limit: $scope.params.pageSize, sortName: '', isDesc: true } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    if (items.length > 0)
                        $scope.hasData = true;
                    $scope.items = items;
                });
        }, true);
    }]);

app.controller('PrizeCtrl', ['$scope', '$http', 'PaginatorDate', 'QuerystringService',
    function ($scope, $http, Paginator, queryService) {
        $scope.sortKey = queryService.get('s', '注目のプライズ');
        var offset = queryService.get('p', 0);
        var date = queryService.get('date', '');
        

        $scope.loading = true;
        $scope.$watch("sortKey+params", function () {
            $scope.loading = true;
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging, offset, date);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            if ($scope.sortKey === "注目のプライズ")
                $scope.params.sortKey = 'TaitoPrizeRank';
            else if ($scope.sortKey === "人気ランキング")
                $scope.params.sortKey = 'ranking';
            else
                $scope.params.sortKey = 'PrizeItem';

            $http.get('/api/Prize/',
                { params: { keyword: '', storeID: $scope.params.storeID, offset: offset, limit: limit, sortName: $scope.params.sortKey, isDesc: isDesc, date: date } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    callback(items, status, headers, config);
                });
        };

        $scope.resetPage = function () {
            offset = 0;
        };

        $scope.sort = function (index) {
            switch (index) {
                case 1:
                    $scope.sortKey = '人気ランキング';
                    break;
                case 2:
                    $scope.sortKey = '登場が新しい';
                    break;
                default:
                    $scope.sortKey = '注目のプライズ';
                    break;
            }
            resetPage();
        };

    }]);
app.controller('TaitoPrizeListCtrl', ['$scope', '$http', 'PaginatorDate', 'QuerystringService',
    function ($scope, $http, Paginator, queryService) {
        $scope.loading = true;
        $scope.sortKey = '';
        $scope.option = {
            sortKey: ''
        };
        var offset = queryService.get('p', 0);
        var date = queryService.get('date', '');
        $scope.sortKey = queryService.get('s', '注目のプライズ');


        $scope.$watch("sortKey+option", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.option.pageSize, $scope.option.paging, offset, date);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            if ($scope.sortKey === "注目のプライズ")
                $scope.option.sortKey = 'PrizeItem';
            else if ($scope.sortKey === "人気ランキング")
                $scope.option.sortKey = 'TaitoPrizeRank';
            else
                $scope.option.sortKey = 'TaitoPrizeNew';
                
            $http.get('/api/PrizeProduct/',
                { params: { aspMemberID: $scope.option.aspMemberID, offset: offset, limit: limit, sortName: $scope.option.sortKey, isDesc: isDesc, genreTag: $scope.option.genreTag, category: $scope.option.category, ignore: $scope.option.ignore, isParents: $scope.option.isParents, date: date } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    callback(items, status, headers, config);
                }).error(function (data, status) {
                    alert('エラーが発生しました');
                });;
        };
        $scope.sort = function (index) {
            switch (index) {
                case 1:
                    $scope.sortKey = '人気ランキング';
                    break;
                case 2:
                    $scope.sortKey = '登場が新しい';
                    break;
                default:
                    $scope.sortKey = '注目のプライズ';
                    break;
            }
        };
    }]);

app.controller('TaitoPrizePartsCtrl', ['$scope', '$http', 
    function ($scope, $http) {
        $scope.hasData = false;
        $scope.loading = true;
        $scope.option = {
            sortKey: 'TaitoPrizeRank'
        };

        $scope.$watch("option", function () {
            $http.get('/api/PrizeProduct/',
                { params: { aspMemberID: $scope.option.aspMemberID, offset: 0, limit: $scope.option.pageSize, sortName: $scope.option.sortKey, isDesc: true, isParents: $scope.option.isParents, lang : $scope.params.lang } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    if (items.length > 0)
                        $scope.hasData = true;
                    $scope.items = items;
                });
        }, true);
    }]);

app.controller('TopicsListCtrl', ['$scope', '$http', 'Paginator2', 'QuerystringService',
    function ($scope, $http, Paginator, queryService) {
        $scope.params = {
            applyYear: ''
        };
        $scope.select = [];

        var offset = queryService.get('p', 0);

        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging, offset);
        }, true);

        $scope.link = function (path, item) {
            if (item.LinkMethod != 3 && item.LinkMethod != 4  && item.URL !== '') {
                if (item.URL.match(/https?/)){
                    return item.URL;
                }
                return path + item.URL;
            }
            return path + item.TypesURL + item.NewlyArrivedInformationID;
        }

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {

            $http.get('/api/Topics/',
                { params: { query: $scope.query, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, IDs: $scope.params.IDs, applyYear: $scope.params.applyYear, lang : $scope.params.lang } })
                .success(callback);
        };

    }]);

app.controller('TopicsListPartsCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
       
        $scope.select = [];

        var offset = 0;

        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging, offset);
        }, true);

        $scope.link = function (path, item) {
            if (item.LinkMethod != 3 && item.LinkMethod != 4 && item.URL !== '') {
                if (item.URL.match(/https?/)) {
                    return item.URL;
                }
                return path + item.URL;
            }
            return path + item.TypesURL + item.NewlyArrivedInformationID;
        }

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {

            $http.get('/api/Topics/',
                { params: { query: $scope.query, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, IDs: $scope.params.IDs, lang: $scope.params.lang } })
                .success(callback);
        };

    }]);

app.controller('NAIDListCtrl', ['$scope', '$http', 'Paginator2', 'QuerystringService',
    function ($scope, $http, Paginator, queryService) {
        $scope.params = {
            applyYear: ''
        };
        $scope.select = [];

        var offset = queryService.get('p', 0);

        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging, offset);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            
            $http.get('/api/NewlyArrivedInformationModel/',
                { params: { query: $scope.query, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc, IDs: $scope.params.IDs, applyYear: $scope.params.applyYear } })
                .success(callback);
        };

    }]);


app.controller('EventStoreHandlingDataCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        onlineStoreID1 = '00002159';
        onlineStoreID2 = '00002162';
        $scope.hasOnlineStore = false;
        $scope.hasData = false;
        $scope.dropItems = [
            { data: [], status: false, text: '北海道', value: '01' },
            { data: [], status: false, text: '東北', value: '02,03,04,05,06,07' },
            { data: [], status: false, text: '東京', value: '13' },
            { data: [], status: false, text: '関東', value: '08,09,10,,11,12,14' },
            { data: [], status: false, text: '東海', value: '21,22,23,24' },
            { data: [], status: false, text: '北陸', value: '15,16,17,18,19,20' },
            { data: [], status: false, text: '関西', value: '25,26,27,28,29,30' },
            { data: [], status: false, text: '中国・四国', value: '31,32,33,34,35,36,37,38,39' },
            { data: [], status: false, text: '九州・沖縄', value: '40,41,42,43,44,45,46,47' },
            { data: [], status: false, text: 'その他地域', value: '99' }
        ];
        var tokyoList = ['千代田区', '中央区', '港区', '新宿区', '文京区', '台東区', '墨田区', '江東区', '品川区', '目黒区', '大田区', '世田谷区', '渋谷区', '中野区', '杉並区', '豊島区', '北区', '荒川区', '板橋区', '練馬区', '足立区', '葛飾区', '江戸川区'];
        $scope.selected = $scope.dropItems[0];
        $scope.$watch("params", function () {
            $http.get('/api/EventStoreHandling/',
                { params: { eventID: $scope.params.eventID } })
                .success(function (items, status, headers, config) {
                    if (items.length > 0)
                        $scope.hasData = true;

                    for (var i = 0; i < items.length; i++) {
                        if (items[i].StateCode == '') {
                            items[i].StateCode = '99';
                            items[i].StoreData.State = 'その他地域';
                            items[i].StoreData.StateCode = '99';
                        }
                    }
                        
                    

                    for (var i = 0; i < items.length; i++) {
                        if (items[i].StoreData.StoreID == onlineStoreID1 || items[i].StoreData.StoreID == onlineStoreID2)
                            $scope.hasOnlineStore = true;
                    }

                    $scope.items = items.filter(function (x) {
                        return x.StoreData.StoreID != onlineStoreID1 && x.StoreData.StoreID != onlineStoreID2
                    });

                    for (var i = 0; i < $scope.dropItems.length; i++) {
                        for (var j = 0; j < $scope.items.length; j++) {
                            if (($scope.dropItems[i].value.indexOf($scope.items[j].StoreData.StateCode)) != -1) {
                                $scope.dropItems[i].status = true;
                                break;
                            }
                        }
                    }

                    $scope.dropItems = $scope.dropItems.filter(function (x) {
                        return x.status == true;
                    });
                    var storeDatas = $scope.items;
                    for (var i = 0; i < $scope.dropItems.length; i++) {
                        if ($scope.dropItems[i].value == '13') {
                            var tokyoItems = storeDatas.filter(function (x) {
                                return $scope.dropItems[i].value.indexOf(x.StateCode) !== -1;
                            });
                            var removeList = [];
                            var hit = 0;
                            for (var j = 0; j < tokyoList.length; j++) {
                                var target = tokyoItems.filter(function (x) {
                                    return x.StoreData.FullAddress.indexOf(tokyoList[j]) !== -1;
                                });
                                if (target.length > 0) {
                                    $scope.dropItems[i].data.push({ name: tokyoList[j], isList: true, stores: target });
                                    target.forEach(function (x) {
                                        removeList.push(x.StoreData.StoreID);
                                    });
                                }
                            }
                            var otherTokyo = [];
                            for (var o = 0; o < tokyoItems.length; o++) {
                                var isHIt = false;
                                for (var p = 0; p < removeList.length; p++) {
                                    if (tokyoItems[o].StoreData.StoreID == removeList[p])
                                        isHIt = true;
                                }
                                if (!isHIt)
                                    otherTokyo.push(tokyoItems[o]);
                            }
                            if (otherTokyo.length > 0) {
                                $scope.dropItems[i].data.push({ name: '23区外', isList: true, stores: otherTokyo });
                            }

                        }
                        else {


                            var storeTemp = storeDatas.filter(function (x) { return $scope.dropItems[i].value.indexOf(x.StateCode) !== -1; });
                            var group = storeTemp.reduce(function (result, current) {
                                var element = result.filter(function (p) {
                                    return p.State == current.StoreData.State;
                                })[0];
                                if (!element) {
                                    result.push({
                                        Region: $scope.dropItems[i].value, State: current.StoreData.State, StateCode: current.StateCode
                                    });
                                }
                                return result;
                            }, []);
                            group.sort(function (a, b) {
                                if (a.StateCode < b.StateCode) return -1;
                                if (a.StateCode > b.StateCode) return 1;
                                return 0;
                            });
                            for (var j = 0; j < group.length; j++) {
                                $scope.dropItems[i].data[j] = { name: '', isList: false, stores: [] };
                                $scope.dropItems[i].data[j].isList = true;
                                $scope.dropItems[i].data[j].name = group[j].State;
                                $scope.dropItems[i].data[j].stores = storeDatas.filter(function (x) { return group[j].State.indexOf(x.StoreData.State) !== -1; });
                            }
                        }
                    }
                    var tes = document.querySelectorAll('.accordion-button');
                    setLigEvents(tes);

                });
        }, true);
        $scope.getLastUpdateTimeStr = function () {
            if ($scope.items instanceof Array) {
                return moment(Math.max.apply(null, $scope.items.map(function (o) { return moment(o.StoreEventHandlingData.UpdateDateTime); }))).format('YYYY年MM月DD日現在の情報です。');
            }
            else {
                return "";
            }
        }
        $scope.getDateStr = function (date1, date2, rEndDate) {
            if (date1 == undefined)
                return 'Coming Soon';
            date1 = moment(date1);
            if (rEndDate != null) {
                rEndDate = moment(rEndDate);
                return '終了いたしました';
            }
            if (date2 != null)
                date2 = moment(date2);
            if (date1.isSame(date2)) {
                if (date1.date() >= 21)
                    return date1.format('YYYY年M月下旬');
                else if (date1.date() >= 11)
                    return date1.format('YYYY年M月中旬');
                else
                    return date1.format('YYYY年M月上旬');
            }
            else if (date2 != null && date1.format('YYYYMMDD') == date2.format('YYYYMMDD')) {
                return date1.format('YYYY年M月D日（ddd）')
            }
            else {
                if (date2 == null)
                    return date1.format('YYYY年M月D日（ddd）') + '～';
                else
                    return date1.format('YYYY年M月D日（ddd）') + '～' + date2.format('YYYY年M月D日（ddd）');
            }
        };
        $scope.getDateString = function (eventData, receptionistEndDateTime) {
            if (eventData == null || eventData == undefined || eventData.EventPublicOpeningDate == undefined)
                return '-';

            var date1 = moment(eventData.EventPublicOpeningDate);
            var date2 = eventData.EventPublicOpeningEndDate;

            if (date1 == undefined)
                return 'Coming Soon';

            if (receptionistEndDateTime != null) {
                var rEndDate = moment(receptionistEndDateTime);
                return '終了いたしました';
            }

            if (date2 != null)
                date2 = moment(date2);
            if (eventData.DateDisplayType == 1) {
                if (date1.date() >= 21)
                    return date1.format('YYYY年M月下旬');
                else if (date1.date() >= 11)
                    return date1.format('YYYY年M月中旬');
                else
                    return date1.format('YYYY年M月上旬');
            }
            else if (date2 != null && date1.format('YYYYMMDD') == date2.format('YYYYMMDD')) {
                return date1.format('YYYY年M月D日（ddd）')
            }
            else {
                if (date2 == null)
                    return date1.format('YYYY年M月D日（ddd）') + '～';
                else
                    return date1.format('YYYY年M月D日（ddd）') + '～' + date2.format('YYYY年M月D日（ddd）');
            }
        };
        $scope.getDateStringT20150320 = function (eventData, receptionistEndDateTime) {
            if (eventData == null || eventData == undefined || eventData.EventPublicOpeningDate == undefined)
                return '-';

            var date1 = moment(eventData.EventPublicOpeningDate);
            var date2 = eventData.EventPublicOpeningEndDate;

            if (date1 == undefined)
                return 'Coming Soon';

            if (receptionistEndDateTime != null) {
                var rEndDate = moment(receptionistEndDateTime);
                return '終了いたしました';
            }

            if (date2 != null)
                date2 = moment(date2);
            if (eventData.DateDisplayType == 1) {
                if (date1.date() >= 21)
                    return date1.format('YYYY年M月下旬');
                else if (date1.date() >= 11)
                    return date1.format('YYYY年M月中旬');
                else
                    return date1.format('YYYY年M月上旬');
            }
            else if (date2 != null && date1.format('YYYYMMDD') == date2.format('YYYYMMDD')) {
                if (eventData.EventCampaignID == "000173")
                    return date1.format('YYYY年M月D日（ddd）HH:mm');
                else
                    return date1.format('YYYY年M月D日（ddd）');
            }
            else {
                if (date2 == null)
                    return date1.format('YYYY年M月D日（ddd）') + '～';
                else
                    return date1.format('YYYY年M月D日（ddd）') + '～' + date2.format('YYYY年M月D日（ddd）');
            }
        };
        $scope.myComparator = function (expected, actual) {
            if (actual == '')
                return true;
            if (actual.indexOf(expected) == -1) {
                return false;
            } else {
                return true;
            }

        };

        var setLigEvents = function (e) {
            var t, i = e;
            for (t = 0; t < i.length; t++)
                i[t].addEventListener("click", function (e) {
                    var t = e.target;
                    t.classList.toggle("active");
                    var i = t.nextElementSibling;
                    if ("block" === i.style.display ? i.style.display = "none" : i.style.display = "block",
                        !t.classList.contains("active"))
                        for (var s = t.nextElementSibling, n = s.querySelectorAll(".sub-accordion-button"), a = s.querySelectorAll(".sub-accordion-panel"), r = 0; r < n.length; r++)
                            n[r].classList.add("active"),
                                a[r].style.display = "block";
                });
        }

    }]);

app.controller('GameStoreHandlingDataCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        onlineStoreID1 = '00002159';
        onlineStoreID2 = '00002162';
        $scope.isShow = true;
        $scope.isRead = false;
        $scope.hasData = false;
        $scope.hasOnlineStore = false;
        $scope.onlineStoreData = {};
        $scope.dropItems = [
            { data: [], status: false, text: '北海道', value: '01' },
            { data: [], status: false, text: '東北', value: '02,03,04,05,06,07' },
            { data: [], status: false, text: '東京', value: '13' },
            { data: [], status: false, text: '関東', value: '08,09,10,,11,12,14' },
            { data: [], status: false, text: '東海', value: '21,22,23,24' },
            { data: [], status: false, text: '北陸', value: '15,16,17,18,19,20' },
            { data: [], status: false, text: '関西', value: '25,26,27,28,29,30' },
            { data: [], status: false, text: '中国・四国', value: '31,32,33,34,35,36,37,38,39' },
            { data: [], status: false, text: '九州・沖縄', value: '40,41,42,43,44,45,46,47' },
            { data: [], status: false, text: 'その他地域', value: '99' }
        ];
        var tokyoList = ['千代田区', '中央区', '港区', '新宿区', '文京区', '台東区', '墨田区', '江東区', '品川区', '目黒区', '大田区', '世田谷区', '渋谷区', '中野区', '杉並区', '豊島区', '北区', '荒川区', '板橋区', '練馬区', '足立区', '葛飾区', '江戸川区'];
        $scope.selected = $scope.dropItems[0];
        $scope.$watch("params", function () {
            $http.get('/api/GameStoreHandling/',
                { params: { productID: $scope.params.productID, lang : $scope.params.lang } })
                .success(function (items, status, headers, config) {
                    for (var i = 0; i < items.StoreDatas.length; i++) {
                        if (items.StoreDatas[i].StateCode == '') {
                            items.StoreDatas[i].State = 'その他地域';
                            items.StoreDatas[i].StateCode = '99';
                        }
                    }
                    $scope.items = items;
                    $scope.isRead = true;
                    if (items.StoreDatas != null) {
                        $scope.hasData = true;
                        //$scope.hasOnlineStore = $scope.items.StoreDatas.some((v) => v.BaseStoreData.StoreID === '00001170' || v.BaseStoreData.StoreID === '00001170');
                        var onlineStores = [];
                        for (var i = 0; i < $scope.items.StoreDatas.length; i++) {
                            if ($scope.items.StoreDatas[i].StoreID === onlineStoreID1 || $scope.items.StoreDatas[i].StoreID === onlineStoreID2) {
                                onlineStores.push($scope.items.StoreDatas[i]);
                            }
                        }
                        //var onlineStores = $scope.items.StoreDatas.filter((v) => v.BaseStoreData.StoreID === onlineStoreID1 || v.BaseStoreData.StoreID === onlineStoreID2);
                        for (var i = 0; i < onlineStores.length; i++) {
                            $scope.hasOnlineStore = true;
                            if (onlineStores[i].StoreID == onlineStoreID1) {
                                $scope.onlineStoreData = onlineStores[i];
                                break;
                            }
                            else
                                $scope.onlineStoreData = onlineStores[i];
                        }
                        if ($scope.hasOnlineStore) {
                            for (var i = 0; i < $scope.items.StoreDatas.length; i++) {
                                if ($scope.items.StoreDatas[i].StoreID === onlineStoreID1) {
                                    $scope.items.StoreDatas.splice(i, 1);
                                }
                            }
                            for (var i = 0; i < $scope.items.StoreDatas.length; i++) {
                                if ($scope.items.StoreDatas[i].StoreID === onlineStoreID2) {
                                    $scope.items.StoreDatas.splice(i, 1);
                                }
                            }
                        }
                        for (var i = 0; i < $scope.dropItems.length; i++) {
                            for (var j = 0; j < $scope.items.StoreDatas.length; j++) {
                                if (($scope.dropItems[i].value.indexOf($scope.items.StoreDatas[j].StateCode)) != -1) {
                                    $scope.dropItems[i].status = true;
                                    break;
                                }
                            }
                        }


                        $scope.dropItems = $scope.dropItems.filter(function (x) {
                            return x.status == true;
                        });
                        var storeDatas = $scope.items.StoreDatas;
                        for (var i = 0; i < $scope.dropItems.length; i++) {
                            if ($scope.dropItems[i].value == '13') {
                                var tokyoItems = storeDatas.filter(function (x) {
                                    return $scope.dropItems[i].value.indexOf(x.StateCode) !== -1;
                                });
                                var removeList = [];
                                var hit = 0;
                                for (var j = 0; j < tokyoList.length; j++) {
                                    var target = tokyoItems.filter(function (x) {
                                        return x.FullAddress.indexOf(tokyoList[j]) !== -1;
                                    });
                                    if (target.length > 0) {
                                        $scope.dropItems[i].data.push({ name: tokyoList[j], isList: true, stores: target });
                                        target.forEach(function (x) {
                                            removeList.push(x.StoreID);
                                        });
                                    }
                                }
                                var otherTokyo = [];
                                for (var o = 0; o < tokyoItems.length; o++) {
                                    var isHIt = false;
                                    for (var p = 0; p < removeList.length; p++) {
                                        if (tokyoItems[o].StoreID == removeList[p])
                                            isHIt = true;
                                    }
                                    if (!isHIt)
                                        otherTokyo.push(tokyoItems[o]);
                                }
                                if (otherTokyo.length > 0) {
                                    $scope.dropItems[i].data.push({ name: '23区外', isList: true, stores: otherTokyo });
                                }

                            }
                            else {
                                var storeTemp = storeDatas.filter(function (x) { return $scope.dropItems[i].value.indexOf(x.StateCode) !== -1; });
                                var group = storeTemp.reduce(function (result, current) {
                                    var element = result.filter(function (p) {
                                        return p.State == current.State;
                                    })[0];
                                    if (!element) {
                                        result.push({
                                            Region: $scope.dropItems[i].value, State: current.State, StateCode: current.StateCode
                                        });
                                    }
                                    return result;
                                }, []);
                                group.sort(function (a, b) {
                                    if (a.StateCode < b.StateCode) return -1;
                                    if (a.StateCode > b.StateCode) return 1;
                                    return 0;
                                });
                                for (var j = 0; j < group.length; j++) {
                                    $scope.dropItems[i].data[j] = { name: '', isList: false, stores: [] };
                                    $scope.dropItems[i].data[j].isList = true;
                                    $scope.dropItems[i].data[j].name = group[j].State;
                                    $scope.dropItems[i].data[j].stores = storeDatas.filter(function (x) { return group[j].State.indexOf(x.State) !== -1; });
                                }
                            }



                        }

                        var tes = document.querySelectorAll('.accordion-button');
                        setLigEvents(tes);
                    }
                    else {
                        $scope.isShow = false;
                    }
                });
        }, true);

        var setLigEvents = function (e) {
            var t, i = e;
            for (t = 0; t < i.length; t++)
                i[t].addEventListener("click", function (e) {
                    var t = e.target;
                    t.classList.toggle("active");
                    var i = t.nextElementSibling;
                    if ("block" === i.style.display ? i.style.display = "none" : i.style.display = "block",
                        !t.classList.contains("active"))
                        for (var s = t.nextElementSibling, n = s.querySelectorAll(".sub-accordion-button"), a = s.querySelectorAll(".sub-accordion-panel"), r = 0; r < n.length; r++)
                            n[r].classList.add("active"),
                                a[r].style.display = "block";
                });
        };

        $scope.myComparator = function (expected, actual) {
            if (actual == '')
                return true;
            if (actual.indexOf(expected) == -1) {
                return false;
            } else {
                return true;
            }

        };

    }]);
app.controller('PrizeStoreHandlingDataCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        onlineStoreID1 = '00002159';
        onlineStoreID2 = '00002162';
        $scope.isRead = false;
        $scope.hasData = false;
        $scope.hasOnlineStore = false;
        $scope.isShow = true;
        $scope.onlineStoreData = {};
        $scope.dropItems = [
            { data: [], status: false, text: '北海道', value: '01' },
            { data: [], status: false, text: '東北', value: '02,03,04,05,06,07' },
            { data: [], status: false, text: '東京', value: '13' },
            { data: [], status: false, text: '関東', value: '08,09,10,,11,12,14' },
            { data: [], status: false, text: '東海', value: '21,22,23,24' },
            { data: [], status: false, text: '北陸', value: '15,16,17,18,19,20' },
            { data: [], status: false, text: '関西', value: '25,26,27,28,29,30' },
            { data: [], status: false, text: '中国・四国', value: '31,32,33,34,35,36,37,38,39' },
            { data: [], status: false, text: '九州・沖縄', value: '40,41,42,43,44,45,46,47' },
            { data: [], status: false, text: 'その他地域', value: '99' }
        ];
        var tokyoList = ['千代田区', '中央区', '港区', '新宿区', '文京区', '台東区', '墨田区', '江東区', '品川区', '目黒区', '大田区', '世田谷区', '渋谷区', '中野区', '杉並区', '豊島区', '北区', '荒川区', '板橋区', '練馬区', '足立区', '葛飾区', '江戸川区'];
        $scope.selected = $scope.dropItems[0];
        $scope.$watch("params", function () {
            $http.get('/api/PrizeStoreHandling/',
                { params: { productID: $scope.params.productID, lang : $scope.params.lang } })
                .success(function (items, status, headers, config) {
                    for (var i = 0; i < items.StoreDatas.length; i++) {
                        if (items.StoreDatas[i].StateCode == '') {
                            items.StoreDatas[i].State = 'その他地域';
                            items.StoreDatas[i].StateCode = '99';
                        }
                    }
                    $scope.items = items;
                    $scope.isRead = true;
                    if (items.StoreDatas != null) {
                        $scope.hasData = true;

                        var onlineStores = [];
                        for (var i = 0; i < $scope.items.StoreDatas.length; i++) {
                            if ($scope.items.StoreDatas[i].StoreID === onlineStoreID1 || $scope.items.StoreDatas[i].StoreID === onlineStoreID2) {
                                onlineStores.push($scope.items.StoreDatas[i]);
                            }
                        }

                        for (var i = 0; i < onlineStores.length; i++) {
                            $scope.hasOnlineStore = true;
                            if (onlineStores[i].StoreID == onlineStoreID1) {
                                $scope.onlineStoreData = onlineStores[i];
                                break;
                            }
                            else
                                $scope.onlineStoreData = onlineStores[i];
                        }
                        if ($scope.hasOnlineStore) {
                            for (var i = 0; i < $scope.items.StoreDatas.length; i++) {
                                if ($scope.items.StoreDatas[i].StoreID === onlineStoreID1) {
                                    $scope.items.StoreDatas.splice(i, 1);
                                }
                            }
                            for (var i = 0; i < $scope.items.StoreDatas.length; i++) {
                                if ($scope.items.StoreDatas[i].StoreID === onlineStoreID2) {
                                    $scope.items.StoreDatas.splice(i, 1);
                                }
                            }
                        }
                        for (var i = 0; i < $scope.dropItems.length; i++) {
                            for (var j = 0; j < $scope.items.StoreDatas.length; j++) {
                                if (($scope.dropItems[i].value.indexOf($scope.items.StoreDatas[j].StateCode)) != -1) {
                                    $scope.dropItems[i].status = true;
                                    break;
                                }
                            }
                        }


                        $scope.dropItems = $scope.dropItems.filter(function (x) {
                            return x.status == true;
                        });
                        var storeDatas = $scope.items.StoreDatas;
                        for (var i = 0; i < $scope.dropItems.length; i++) {
                            if ($scope.dropItems[i].value == '13') {
                                var tokyoItems = storeDatas.filter(function (x) {
                                    return $scope.dropItems[i].value.indexOf(x.StateCode) !== -1;
                                });
                                var removeList = [];
                                var hit = 0;
                                for (var j = 0; j < tokyoList.length; j++) {
                                    var target = tokyoItems.filter(function (x) {
                                        return x.FullAddress.indexOf(tokyoList[j]) !== -1;
                                    });
                                    if (target.length > 0) {
                                        $scope.dropItems[i].data.push({ name: tokyoList[j], isList: true, stores: target });
                                        target.forEach(function (x) {
                                            removeList.push(x.StoreID);
                                        });
                                    }
                                }
                                var otherTokyo = [];
                                for (var o = 0; o < tokyoItems.length; o++) {
                                    var isHIt = false;
                                    for (var p = 0; p < removeList.length; p++) {
                                        if (tokyoItems[o].StoreID == removeList[p])
                                            isHIt = true;
                                    }
                                    if (!isHIt)
                                        otherTokyo.push(tokyoItems[o]);
                                }
                                if (otherTokyo.length > 0) {
                                    $scope.dropItems[i].data.push({ name: '23区外', isList: true, stores: otherTokyo });
                                }

                            }
                            else {


                                var storeTemp = storeDatas.filter(function (x) { return $scope.dropItems[i].value.indexOf(x.StateCode) !== -1; });
                                var group = storeTemp.reduce(function (result, current) {
                                    var element = result.filter(function (p) {
                                        return p.State == current.State;
                                    })[0];
                                    if (!element) {
                                        result.push({
                                            Region: $scope.dropItems[i].value, State: current.State, StateCode: current.StateCode
                                        });
                                    }
                                    return result;
                                }, []);
                                group.sort(function (a, b) {
                                    if (a.StateCode < b.StateCode) return -1;
                                    if (a.StateCode > b.StateCode) return 1;
                                    return 0;
                                });
                                for (var j = 0; j < group.length; j++) {
                                    $scope.dropItems[i].data[j] = { name: '', isList: false, stores: [] };
                                    $scope.dropItems[i].data[j].isList = true;
                                    $scope.dropItems[i].data[j].name = group[j].State;
                                    $scope.dropItems[i].data[j].stores = storeDatas.filter(function (x) { return group[j].State.indexOf(x.State) !== -1; });
                                }
                            }



                        }

                        var tes = document.querySelectorAll('.accordion-button');
                        setLigEvents(tes);
                    }
                    else {
                        $scope.isShow = false;
                    }
                });
        }, true);

        var setLigEvents = function (e) {
            var t, i = e;
            for (t = 0; t < i.length; t++)
                i[t].addEventListener("click", function (e) {
                    var t = e.target;
                    t.classList.toggle("active");
                    var i = t.nextElementSibling;
                    if ("block" === i.style.display ? i.style.display = "none" : i.style.display = "block",
                        !t.classList.contains("active"))
                        for (var s = t.nextElementSibling, n = s.querySelectorAll(".sub-accordion-button"), a = s.querySelectorAll(".sub-accordion-panel"), r = 0; r < n.length; r++)
                            n[r].classList.add("active"),
                                a[r].style.display = "block";
                });
        }

        $scope.myComparator = function (expected, actual) {
            if (actual == '')
                return true;
            if (actual.indexOf(expected) == -1) {
                return false;
            } else {
                return true;
            }

        };

    }]);
app.controller('ProductHandlingStoreDataPartsCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        $scope.hasData = false;
        $scope.loading = true;
        $scope.dropItems = [
            { data: [], status: false, text: '北海道', value: '01' },
            { data: [], status: false, text: '東北', value: '02,03,04,05,06,07' },
            { data: [], status: false, text: '東京', value: '13' },
            { data: [], status: false, text: '関東', value: '08,09,10,,11,12,14' },
            { data: [], status: false, text: '東海', value: '21,22,23,24' },
            { data: [], status: false, text: '北陸', value: '15,16,17,18,19,20' },
            { data: [], status: false, text: '関西', value: '25,26,27,28,29,30' },
            { data: [], status: false, text: '中国・四国', value: '31,32,33,34,35,36,37,38,39' },
            { data: [], status: false, text: '九州・沖縄', value: '40,41,42,43,44,45,46,47' },
            { data: [], status: false, text: 'オンラインクレーン', value: 'オンラインクレーン' }
        ];
        var tokyoList = ['千代田区', '中央区', '港区', '新宿区', '文京区', '台東区', '墨田区', '江東区', '品川区', '目黒区', '大田区', '世田谷区', '渋谷区', '中野区', '杉並区', '豊島区', '北区', '荒川区', '板橋区', '練馬区', '足立区', '葛飾区', '江戸川区'];
        $scope.selected = $scope.dropItems[0];
        $scope.$watch("params", function () {
            $http.get('/api/ProductHandlingStoreData',
                { params: { productID: $scope.params.productID, aspMemberID: $scope.params.aspMemberID } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    if (items.length > 0)
                        $scope.hasData = true;
                    $scope.items = items;
                    $scope.workItems = items;
                    $scope.pageIndex = $scope.params.pageSize;
                    for (var i = 0; i < $scope.dropItems.length; i++) {
                        for (var j = 0; j < $scope.items.length; j++) {
                            if ($scope.items[j].StateCode == '' && $scope.dropItems[i].value == 'オンラインクレーン')
                                $scope.dropItems[i].status = true;
                            else if ($scope.items[j].StateCode != '' && ($scope.dropItems[i].value.indexOf($scope.items[j].StateCode)) != -1) {
                                $scope.dropItems[i].status = true;
                                break;
                            }
                        }
                    }

                    $scope.dropItems = $scope.dropItems.filter(function (x) {
                        return x.status == true;
                    });

                    for (var i = 0; i < $scope.items.length; i++) {
                        if ($scope.items[i].StateCode == '') {
                            $scope.items[i].StateCode = 'オンラインクレーン';
                            $scope.items[i].State = 'オンラインクレーン';
                            $scope.items[i].FullAddress = '';
                        }
                    }

                    for (var i = 0; i < $scope.dropItems.length; i++) {
                        if ($scope.dropItems[i].value == '13') {
                            var tokyoItems = $scope.items.filter(function (x) {
                                return $scope.dropItems[i].value.indexOf(x.StateCode) !== -1;
                            });
                            var removeList = [];
                            var hit = 0;
                            for (var j = 0; j < tokyoList.length; j++) {
                                var target = tokyoItems.filter(function (x) {
                                    return x.FullAddress.indexOf(tokyoList[j]) !== -1;
                                });
                                if (target.length > 0) {
                                    $scope.dropItems[i].data.push({ name: tokyoList[j], isList: true, stores: target });
                                    target.forEach(function (x) {
                                        removeList.push(x.UniqID);
                                    });
                                }
                            }
                            var otherTokyo = [];
                            for (var o = 0; o < tokyoItems.length; o++) {
                                var isHIt = false;
                                for (var p = 0; p < removeList.length; p++) {
                                    if (tokyoItems[o].UniqID == removeList[p])
                                        isHIt = true;
                                }
                                if (!isHIt)
                                    otherTokyo.push(tokyoItems[o]);
                            }
                            if (otherTokyo.length > 0) {
                                $scope.dropItems[i].data.push({ name: '23区外', isList: true, stores: otherTokyo });
                            }

                        }
                        else {

                            var storeTemp = $scope.items.filter(function (x) { return $scope.dropItems[i].value.indexOf(x.StateCode) !== -1; });
                            var group = storeTemp.reduce(function (result, current) {
                                var element = result.filter(function (p) {
                                    return p.State == current.State;
                                })[0];
                                if (!element) {
                                    result.push({
                                        Region: $scope.dropItems[i].value, State: current.State, StateCode: current.StateCode
                                    });
                                }
                                return result;
                            }, []);
                            group.sort(function (a, b) {
                                if (a.StateCode < b.StateCode) return -1;
                                if (a.StateCode > b.StateCode) return 1;
                                return 0;
                            });
                            for (var j = 0; j < group.length; j++) {
                                $scope.dropItems[i].data[j] = { name: '', isList: false, stores: [] };
                                $scope.dropItems[i].data[j].isList = true;
                                if (group[j].State == 'オンラインクレーン')
                                    $scope.dropItems[i].data[j].isList = false;
                                else
                                    $scope.dropItems[i].data[j].name = group[j].State;
                                $scope.dropItems[i].data[j].stores = $scope.items.filter(function (x) { return group[j].State.indexOf(x.State) !== -1; });
                            }
                        }
                    }

                    var tes = document.querySelectorAll('.accordion-button');
                    setLigEvents(tes);

                });
        }, true);
        var setLigEvents = function (e) {
            var t, i = e;
            for (t = 0; t < i.length; t++)
                i[t].addEventListener("click", function (e) {
                    var t = e.target;
                    t.classList.toggle("active");
                    var i = t.nextElementSibling;
                    if ("block" === i.style.display ? i.style.display = "none" : i.style.display = "block",
                        !t.classList.contains("active"))
                        for (var s = t.nextElementSibling, n = s.querySelectorAll(".sub-accordion-button"), a = s.querySelectorAll(".sub-accordion-panel"), r = 0; r < n.length; r++)
                            n[r].classList.add("active"),
                                a[r].style.display = "block";
                });
        }
        $scope.goSearch = function (index) {

            $scope.workItems = $scope.items.filter(function (item, index) {
                if (item.FullAddress.indexOf($scope.keyword) >= 0 || item.StoreName.indexOf($scope.keyword) >= 0)
                    return true;
            })

        };

        $scope.myComparator = function (expected, actual) {

            if (actual == '')
                return true;
            if (actual.indexOf(expected) == -1) {
                return false;
            } else {
                return true;
            }

        };
        $scope.next = function () {
            $scope.pageIndex += $scope.params.pageSize;
        };

    }]);
app.controller('EventNaviPartsCtrl', ['$scope', '$http', 'MenuService',
    function ($scope, $http, MenuService) {
        var offset = 0;
        $scope.hasData = false;
        $scope.$watch("params", function () {
            $http.get('/api/EventModel/',
                { params: { storeID: $scope.params.storeID, eventCategory: $scope.params.eventCategory, offset: offset, limit:$scope.params.pageSize } })
                .success(function (items, status, headers, config) {
                    $scope.items = items;
                    if (items.length > 0) {
                        for (var i = 0;i < items.length; i++) {
                            if (items[i].EventCampaignCategory == 0 || items[i].EventCampaignCategory == 1)
                                MenuService.storeEvent = true;
                            else if (items[i].EventCampaignCategory == 2)
                                MenuService.storeSale = true;
                        }
                        $scope.hasData = true;
                    }

                    if ($scope.pageIndex == undefined)
                        $scope.pageIndex = $scope.params.pageSize;
                });
        }, true);
        $scope.getDateStrAttribute = function (date1, date2) {
            date1 = moment(date1);
            if (date2 != null)
                date2 = moment(date2);
            if (date1.isSame(date2)) {
                if (date1.date() >= 21)
                    return date1.format('YYYY-M-下旬');
                else if (date1.date() >= 11)
                    return date1.format('YYYY-M-中旬');
                else
                    return date1.format('YYYY-M-上旬');
            }
            else {
                if (date2 == null)
                    return date1.format('YYYY-M-D') + '～';
                else
                    return date1.format('YYYY-M-D') + '～' + date2.format('YYYY-M-D');
            }
        };
        $scope.getDateStr = function (date1, date2) {
            date1 = moment(date1);
            if (date2 != null)
                date2 = moment(date2);
            if (date1.isSame(date2)) {
                if (date1.date() >= 21)
                    return date1.format('YYYY.M.下旬');
                else if (date1.date() >= 11)
                    return date1.format('YYYY.M.中旬');
                else
                    return date1.format('YYYY.M.上旬');
            }
            else {
                if (date2 == null)
                    return date1.format('YYYY.M.D') + '～';
                else
                    return date1.format('YYYY.M.D') + '～' + date2.format('YYYY.M.D');
            }
        };
        $scope.getDateString = function (eventData) {
            if (eventData == null || eventData == undefined || eventData.EventPublicOpeningDate == undefined)
                return '-';

            var date1 = moment(eventData.EventPublicOpeningDate);
            var date2 = eventData.EventPublicOpeningEndDate;

            if (date2 != null)
                date2 = moment(date2);
            if (eventData.DateDisplayType == 1) {
                if (date1.date() >= 21)
                    return date1.format('YYYY.M.下旬');
                else if (date1.date() >= 11)
                    return date1.format('YYYY.M.中旬');
                else
                    return date1.format('YYYY.M.上旬');
            }
            else {
                if (date2 == null)
                    return date1.format('YYYY.M.D') + '～';
                else
                    return date1.format('YYYY.M.D') + '～' + date2.format('YYYY.M.D');
            }
        };
        $scope.next = function () {
            $scope.pageIndex += $scope.params.pageSize;
        };

        $scope.checkEventStatus = function (startDateTimeVal, endDateTimeVal) {
            var startDateTime = Date.parse(startDateTimeVal);
            var endDateTime = endDateTimeVal != null ? Date.parse(endDateTimeVal) : Date.parse('2300/01/01 00:00:00');
            var now = Date.now();

            if (startDateTime == endDateTime) {
                return '';
            }
            else if (now >= startDateTime && now <= endDateTime) {
                if (moment(now).add('days', -7).format() <= startDateTime)
                    return 'new';
                return 'hot';
            }
            else if (now < startDateTime)
                return "soon";
            else
                return "close";

        };
        $scope.getEventStatus = function (startDateTimeVal, endDateTimeVal, dateDisplayType) {
            var startDateTime = Date.parse(startDateTimeVal);
            var endDateTime = endDateTimeVal != null ? Date.parse(endDateTimeVal) : Date.parse('2300/01/01 00:00:00');
            var now = Date.now();

            if (dateDisplayType == 1) {
                return '';
            }
            else if (now >= startDateTime && now <= endDateTime) {
                if (moment(now).add('days', -7).format() <= startDateTime)
                    return 'new';
                return 'hot';
            }
            else if (now < startDateTime)
                return "soon";
            else
                return "close";

        };
        $scope.getEventStatus2 = function (startDateTimeVal, endDateTimeVal, dateDisplayType, receptionistEndDateTime) {
            var startDateTime = Date.parse(startDateTimeVal);
            var endDateTime = endDateTimeVal != null ? Date.parse(endDateTimeVal) : Date.parse('2300/01/01 00:00:00');
            var now = Date.now();

            var rEndDate = moment(receptionistEndDateTime);
            if (rEndDate.year() != 2300) {
                return 'close';
            }

            if (dateDisplayType == 1) {
                return '';
            }
            else if (now >= startDateTime && now <= endDateTime) {
                if (moment(now).add('days', -7).format() <= startDateTime)
                    return 'new';
                return 'hot';
            }
            else if (now < startDateTime)
                return "soon";
            else
                return "close";

        };
    }]);

app.controller('StoreTopicsListExCtrl', ['$scope', '$http', 'Paginator', 'MenuService',
    function ($scope, $http, Paginator, MenuService) {
        
        $scope.$watch("params", function () {
            $http.get('/api/StoreTopics',
                { params: { storeID: $scope.params.storeID, IDs: 'invi', ignoreID: $scope.params.ignoreID, limit: 1, offset: 0 } })
                .success(function (items, status, headers, config) {
                    if (items.length > 0)
                        MenuService.storeTopics = true;

                    $scope.invi = items;
                });
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
        }, true);

        

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/StoreTopics',
                { params: { storeID: $scope.params.storeID, IDs: $scope.params.IDs, ignoreID: $scope.params.ignoreID, limit: limit, offset: offset } })
                .success(function (items, status, headers, config) {
                    if (items.length > 0)
                        MenuService.storeTopics = true;
                    $scope.pageIndex = $scope.params.pageSize;
                    callback(items, status, headers, config);
                });
        };

        $scope.next = function () {
            $scope.pageIndex += $scope.params.pageSize;
        };

    }]);

app.controller('StoreTopicsListCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        $scope.$watch("params", function () {
            $http.get('/api/StoreNewlyArrivedInformation',
                { params: { storeID: $scope.params.storeID, IDs: $scope.params.IDs, isPushNews: $scope.params.isPushNews } })
                .success(function (items, status, headers, config) {
                    $scope.items = items;
                    $scope.pageIndex = $scope.params.pageSize;
                });
        }, true);
        $scope.next = function () {
            $scope.pageIndex += $scope.params.pageSize;
        };

        $scope.getLink = function (item) {
            if (!angular.isObject(item))
                return ''

            if (item.LanguageStoreNewlyArrivedInformationData.URL != '')
                return item.LanguageStoreNewlyArrivedInformationData.URL
            else if (item.LanguageStoreNewlyArrivedInformationData.MobileURL != '')
                return item.LanguageStoreNewlyArrivedInformationData.MobileURL;
            else
                return '';
        }

        $scope.getImage = function (item) {
            if (!angular.isObject(item))
                return ''

            if (item.LanguageStoreNewlyArrivedInformationData.ImageName01 != '')
                return item.LanguageStoreNewlyArrivedInformationData.ImagePath + item.LanguageStoreNewlyArrivedInformationData.ImageName01
            else if (item.LanguageStoreNewlyArrivedInformationData.MobileImageName01 != '')
                return item.LanguageStoreNewlyArrivedInformationData.ImagePath + item.LanguageStoreNewlyArrivedInformationData.MobileImageName01
            else
                return '';
        }

    }]);

app.controller('WadaiCtrl', ['$scope', '$http', 'MenuService',
    function ($scope, $http, MenuService) {
        $scope.hasData = false;
        $scope.isShow = true;
        $scope.loading = true;
        $scope.items = [];
        $scope.$watch("params", function () {
            $http.get('/api/WadaiNavi/',
                { params: { storeID: $scope.params.storeID, offset: 0, limit: 100, keyword:'' } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    if (items.length === 0) {
                        $scope.isShow = false;
                        return;
                    }
                    $scope.hasData = true;
                    MenuService.storeGame = true;


                    for (var i = 0; i < items.length && i < 3; i++) {
                        $scope.items.push(items[i]);
                    }

                    const group = items.reduce(function(result, current){
                        const element = result.filter(function (p) {
                            return p.GenreID === current.BaseShoppingProductData.GenreID;
                        })[0];
                        if (element) {
                            element.count++; // count
                            element.GenreID = current.BaseShoppingProductData.GenreID;
                        } else {
                            result.push({
                                GenreID: current.BaseShoppingProductData.GenreID,
                                GenreName: current.BaseShoppingProductData.GenreName,
                                count: 1,
                                isActive: false,
                                list: []
                            });
                        }
                        return result;
                    }, []);

                    for (var i = 0; i < group.length; i++) {
                        group[i].list = items.filter(function (x) {
                            return x.BaseShoppingProductData.GenreID === group[i].GenreID;
                        });
                    }

                    $scope.group = group;

                });
        }, true);

        $scope.accordionChange = function (item) {
            item.isActive = !item.isActive;
        };
        
    }]);

app.controller('PrizeListCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        $scope.pageIndex = 5;
        $scope.isShow = true;
        $scope.loading = true;
        $scope.hasData = false;
        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/Prize/',
                { params: { keyword: '', storeID: $scope.params.storeID, offset: offset, limit: limit, sortName: sortKey, isDesc: isDesc } })
                .success(function (items, status, headers, config) {
                    if (items.length > 0)
                        $scope.hasData = true;
                    else
                        $scope.isShow = false;

                    $scope.loading = false;
                    callback(items, status, headers, config);
                });
        };

    }]);

app.controller('HotWordCtrl', ['$scope', '$http',
    function ($scope, $http) {
        $scope.hasData = false;
        $scope.$watch("params", function () {
            $http.get('/api/HotWord/',
                { params: { types : $scope.params.types, lang: $scope.params.lang } })
                .success(function (items, status, headers, config) {
                    if (items.length > 0)
                        $scope.hasData = true;
                    $scope.items = items;
                });
        }, true);

        $scope.search = function (word) {
            $scope.input = word;
            var tes = '/search/' + $scope.params.search + '/?q=' + $scope.input;
            window.location.href = '/search/' + $scope.params.search + '/?q=' + $scope.input;
        };

    }]);

app.controller('ProductDetailTagRelationCtrl', ['$scope', '$http', 'Paginator',
    function ($scope, $http, Paginator) {
        $scope.isShow = true;
        $scope.loading = true;
        $scope.hasData = false;
        $scope.$watch("params", function () {
            $scope.searchPaginator = Paginator(fetchFunction, $scope.params.pageSize, $scope.params.paging);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            $http.get('/api/ProductDetailTagRelation/',
                { params: { productID: $scope.params.productID, offset: offset, limit: limit, sortName: '', isDesc: true } })
                .success(function (items, status, headers, config) {
                    if (items.length > 0)
                        $scope.hasData = true;
                    else
                        $scope.isShow = false;

                    $scope.loading = false;
                    callback(items, status, headers, config);
                });
        };

    }]);

app.controller('PrizeNaviTagRelationCtrl', ['$scope', '$http',
    function ($scope, $http) {
        var offset = 0;
        $scope.loading = true;
        $scope.hasData = false;
        $scope.$watch("params", function () {
            $scope.loading = true;
            getData();
        }, true);

        var getData = function () {
            $http.get('/api/PrizeNaviTagRelation/',
                { params: { productID: $scope.params.productID, offset: offset, limit: $scope.params.pageSize } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    $scope.hasData = items.length > 0;
                    $scope.items = items;
                });
        };

    }]);

app.controller('TaitoPrizeSerachCtrl', ['$scope', '$http', 'Paginator', 'QuerystringService',
    function ($scope, $http, Paginator, queryService) {
        $scope.loading = true;
        $scope.sortKey = '';
        $scope.option = {
            pageSize: 4,
            paging: true,
            sortKey: ''
        };

        //var offset = queryService.get('p', 0);
        var offset = 0;
        var keyword = queryService.get('q', '');
        $scope.sortKey = queryService.get('s', '注目のプライズ');


        $scope.$watch("sortKey+option", function () {
            if(keyword.length > 0)
                $scope.searchPaginator = Paginator(fetchFunction, $scope.option.pageSize, $scope.option.paging, offset);
        }, true);

        var fetchFunction = function (offset, limit, sortKey, isDesc, callback) {
            if ($scope.sortKey === "注目のプライズ")
                $scope.option.sortKey = 'PrizeItem';
            else if ($scope.sortKey === "人気ランキング")
                $scope.option.sortKey = 'TaitoPrizeRank';
            else
                $scope.option.sortKey = 'TaitoPrizeNew';

            $http.get('/api/PrizeProduct/',
                { params: { aspMemberID: '0000000002', tags : keyword, offset: offset, limit: limit, sortName: $scope.option.sortKey, isDesc: isDesc, genreTag: $scope.option.genreTag, category: $scope.option.category, ignore: $scope.option.ignore, isParents: $scope.option.isParents } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    callback(items, status, headers, config);
                });
        };
        $scope.sort = function (index) {
            switch (index) {
                case 1:
                    $scope.sortKey = '人気ランキング';
                    break;
                case 2:
                    $scope.sortKey = '登場が新しい';
                    break;
                default:
                    $scope.sortKey = '注目のプライズ';
                    break;
            }
        };

        $scope.next = function () {
            $scope.searchPaginator.next();
        }
    }]);

app.controller('PrizeNaviSearchCtrl', ['$scope', '$http', 'QuerystringService',
    function ($scope, $http, queryService) {
        var offset = 0;
        var keyword = queryService.get('q', '');
        $scope.loading = true;
        $scope.hasData = false;
        $scope.resultCount = 0;
        $scope.pageSize = 4;
        $scope.currentCount = $scope.pageSize;
        $scope.params = {
            pageSize: 100,
            paging: true,
            sortKey: ''
        };

        var getData = function () {
            $http.get('/api/PrizeNaviTagRelation/',
                { params: { tags: keyword, offset: offset, limit: $scope.pageSize } })
                .success(function (items, status, headers, config) {
                    $scope.loading = false;
                    $scope.hasData = items.length > 0;
                    $scope.items = items;
                    $scope.resultCount = items.length;
                });
        };
        $scope.hasNext = function () {
            if (!$scope.hasData)
                return false;
            return $scope.items.length > $scope.currentCount;
        }
        $scope.next = function () {
            $scope.currentCount = $scope.currentCount + $scope.pageSize;
        }
        getData();
    }]);;
