* Available under MIT license*/(function(){function N(b){b=String(b);return b.charAt(0).toUpperCase()+b.slice(1)}function S(b,m){var l=-1,f=b?b.length:0;if(typeof f=="number"&&f>-1&&f<=T)for(;++l3)i=["WebKit"];else if(i!="Trident"&&(a=/\bOpera\b/.test(c)&&(/\bOPR\b/.test(b)?"Blink":"Presto")||/\b(?:Midori|Nook|Safari)\b/i.test(b)&&"WebKit"||!i&&/\bMSIE\b/i.test(b)&&(d=="Mac OS"?"Tasman":"Trident")))i=[a];else if(/\bPlayStation\b(?! Vita\b)/i.test(c)&&i=="WebKit")i=["NetFront"];if(c=="IE"&&(a=(/;*(?:XBLWP|ZuneWP)(\d+)/i.exec(b)||0)[1])){c+=" Mobile";d="Windows Phone "+(/\+$/.test(a)?a:a+".x");g.unshift("desktop mode")}else if(/\bWPDesktop\b/i.test(b)){c="IE Mobile";d="Windows Phone 8+";g.unshift("desktop mode");e||(e=(/\brv:([\d.]+)/.exec(b)||0)[1])}else if(c!="IE"&&i=="Trident"&&(a=/\brv:([\d.]+)/.exec(b))){if(!/\bWPDesktop\b/i.test(b)){if(c)g.push("identifying as "+c+(e?" "+e:""));c="IE"}e=a[1]}else if((c=="Chrome"||c!="IE")&&(a=/\bEdge\/([\d.]+)/.exec(b))){c="IE";e=a[1];i=["Trident"];g.unshift("platform preview")}if(t){if(Q(f,"global")){if(x){a=x.lang.System;G=a.getProperty("os.arch");d=d||a.getProperty("os.name")+" "+a.getProperty("os.version")}if(X&&Q(f,"system")&&(a=[f.system])[0]){d||(d=a[0].os||null);try{a[1]=f.require("ringo/engine").version;e=a[1].join(".");c="RingoJS"}catch(ca){if(a[0].global.system==f.system)c="Narwhal"}}else if(typeof f.process=="object"&&(a=f.process)){c="Node.js";G=a.arch;d=a.platform;e=/[\d.]+/.exec(a.version)[0]}else if(I)c="Rhino"}else if(u(a=f.runtime)==Z){c="Adobe AIR";d=a.flash.system.Capabilities.os}else if(u(a=f.phantom)==$){c="PhantomJS";e=(a=a.version||null)&&a.major+"."+a.minor+"."+a.patch}else if(typeof R.documentMode=="number"&&(a=/\bTrident\/(\d+)/i.exec(b))){e=[e,R.documentMode];if((a=+a[1]+4)!=e[1]){g.push("IE "+e[1]+" mode");i&&(i[1]="");e[1]=a}e=c=="IE"?String(e[1].toFixed(1)):e[0]}d=d&&C(d)}if(e&&(a=/(?:[ab]|dp|pre|[ab]\d+pre)(?:\d+\+?)?$/i.exec(e)||/(?:alpha|beta)(?: ?\d)?/i.exec(b+";"+(t&&A.appMinorVersion))||/\bMinefield\b/i.test(b)&&"a")){H=/b/i.test(a)?"beta":"alpha";e=e.replace(RegExp(a+"\\+?$"),"")+(H=="beta"?ba:aa)+(/\d+\+?/.exec(a)||"")}if(c=="Fennec"||c=="Firefox"&&/\b(?:Android|Firefox OS)\b/.test(d))c="Firefox Mobile";else if(c=="Maxthon"&&e)e=e.replace(/\.[\d.]+/,".x");else if(c=="Silk"){if(!/\bMobi/i.test(b)){d="Android";g.unshift("desktop mode")}/Accelerated *=*true/i.test(b)&&g.unshift("accelerated")}else if(/\bXbox\b/i.test(j)){d=null;j=="Xbox 360"&&/\bIEMobile\b/.test(b)&&g.unshift("mobile mode")}else if((/^(?:Chrome|IE|Opera)$/.test(c)||c&&!j&&!/Browser|Mobi/.test(c))&&(d=="Windows CE"||/Mobi/i.test(b)))c+=" Mobile";else if(c=="IE"&&t&&f.external===null)g.unshift("platform preview");else if((/\bBlackBerry\b/.test(j)||/\bBB10\b/.test(b))&&(a=(RegExp(j.replace(/ +/g," *")+"/([.\\d]+)","i").exec(b)||0)[1]||e)){a=[a,/BB10/.test(b)];d=(a[1]?(j=null,p="BlackBerry"):"Device Software")+" "+a[0];e=null}else if(this!=B&&j!="Wii"&&(t&&s||/Opera/.test(c)&&/\b(?:MSIE|Firefox)\b/i.test(b)||c=="Firefox"&&/\bOS X(?:\d+\.){2,}/.test(d)||c=="IE"&&(d&&!/^Win/.test(d)&&e>5.5||/\bWindows XP\b/.test(d)&&e>8||e==8&&!/\bTrident\b/.test(b)))&&!E.test(a=z.call(B,b.replace(E,"")+";"))&&a.name){a="ing as "+a.name+((a=a.version)?" "+a:"");if(E.test(c)){if(/\bIE\b/.test(a)&&d=="Mac OS")d=null;a="identify"+a}else{a="mask"+a;c=F?C(F.replace(/([a-z])([A-Z])/g,"$1 $2")):"Opera";if(/\bIE\b/.test(a))d=null;t||(e=null)}i=["Presto"];g.push(a)}if(a=(/\bAppleWebKit\/([\d.]+\+?)/i.exec(b)||0)[1]){a=[parseFloat(a.replace(/\.(\d)$/,".0$1")),a];if(c=="Safari"&&a[1].slice(-1)=="+"){c="WebKit Nightly";H="alpha";e=a[1].slice(0,-1)}else if(e==a[1]||e==(a[2]=(/\bSafari\/([\d.]+\+?)/i.exec(b)||0)[1]))e=null;a[1]=(/\bChrome\/([\d.]+)/i.exec(b)||0)[1];if(a[0]==537.36&&a[2]==537.36&&parseFloat(a[1])>=28&&c!="IE")i=["Blink"];if(!t||!Y&&!a[1]){i&&(i[1]="like Safari");a=(a=a[0],a<400?1:a<500?2:a<526?3:a<533?4:a<534?"4+":a<535?5:a<537?6:a<538?7:a<601?8:"8")}else{i&&(i[1]="like Chrome");a=a[1]||(a=a[0],a<530?1:a<532?2:a<532.05?3:a<533?4:a<534.03?5:a<534.07?6:a<534.1?7:a<534.13?8:a<534.16?9:a<534.24?10:a<534.3?11:a<535.01?12:a<535.02?"13+":a<535.07?15:a<535.11?16:a<535.19?17:a<536.05?18:a<536.1?19:a<537.01?20:a<537.11?"21+":a<537.13?23:a<537.18?24:a<537.24?25:a<537.36?26:i!="Blink"?"27":"28")}i&&(i[1]+=" "+(a+=typeof a=="number"?".x":/[.+]/.test(a)?"":"+"));if(c=="Safari"&&(!e||parseInt(e)>45))e=a}if(c=="Opera"&&(a=/\bzbov|zvav$/.exec(d))){c+=" ";g.unshift("desktop mode");if(a=="zvav"){c+="Mini";e=null}else c+="Mobile";d=d.replace(RegExp(" *"+a+"$"),"")}else if(c=="Safari"&&/\bChrome\b/.exec(i&&i[1])){g.unshift("desktop mode");c="Chrome Mobile";e=null;if(/\bOS X\b/.test(d)){p="Apple";d="iOS 4.3+"}else d=null}if(e&&e.indexOf(a=/[\d.]+$/.exec(d))==0&&b.indexOf("/"+a+"-")>-1)d=O(d.replace(a,""));if(i&&!/\b(?:Avant|Nook)\b/.test(c)&&(/Browser|Lunascape|Maxthon/.test(c)||/^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Sleipnir|Web)/.test(c)&&i[1]))(a=i[i.length-1])&&g.push(a);if(g.length)g=["("+g.join(";")+")"];p&&j&&j.indexOf(p)<0&&g.push("on "+p);if(j)g.push((/^on /.test(g[g.length-1])?"":"on ")+j);if(d){J=(a=/([\d.+]+)$/.exec(d))&&d.charAt(d.length-a[0].length-1)=="/";d={architecture:32,family:a&&!J?d.replace(a[0],""):d,version:a?a[1]:null,toString:function(){var n=this.version;return this.family+(n&&!J?" "+n:"")+(this.architecture==64?" 64-bit":"")}}}if((a=/\b(?:AMD|IA|Win|WOW|x86_|x)64\b/i.exec(G))&&!/\bi686\b/i.test(G)){if(d){d.architecture=64;d.family=d.family.replace(RegExp(" *"+a),"")}if(c&&(/\bWOW64\b/i.test(b)||t&&/\w(?:86|32)$/.test(A.cpuClass||A.platform)&&!/\bWin64;x64\b/i.test(b)))g.unshift("32-bit")}b||(b=null);f={};f.description=b;f.layout=i&&i[0];f.manufacturer=p;f.name=c;f.prerelease=H;f.product=j;f.ua=b;f.version=c&&e;f.os=d||{architecture:null,family:null,version:null,toString:function(){return"null"}};f.parse=z;f.toString=function(){return this.description||""};f.version&&g.unshift(e);f.name&&g.unshift(c);if(d&&c&&!(d==String(d).split(" ")[0]&&(d==c.split(" ")[0]||j)))g.push(j?"("+d+")":"on "+d);if(g.length)f.description=g.join(" ");return f}var y={"function":true,object:true},D=y[typeof window]&&window||this,W=D,M=y[typeof exports]&&exports;y=y[typeof module]&&module&&!module.nodeType&&module;var q=M&&y&&typeof global=="object"&&global;if(q&&(q.global===q||q.window===q||q.self===q))D=q;var T=Math.pow(2,53)-1,E=/\bOpera/,V=this;q=Object.prototype;var U=q.hasOwnProperty,P=q.toString;if(typeof define=="function"&&typeof define.amd=="object"&&define.amd)define(function(){return z()});else if(M&&y)B(z(),function(b,m){M[m]=b});else D.platform=z()}).call(this);