(function(){var h=h||{},k=this;function aa(){}
function m(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";
else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function n(a){var b=m(a);return"array"==b||"object"==b&&"number"==typeof a.length}function p(a){return"string"==typeof a}function q(a){return"function"==m(a)}var ba="closure_uid_"+(1E9*Math.random()>>>0),ca=0;function da(a,b,c){return a.call.apply(a.bind,arguments)}
function ea(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function r(a,b,c){r=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?da:ea;return r.apply(null,arguments)}var fa=Date.now||function(){return+new Date};
function t(a,b){function c(){}c.prototype=b.prototype;a.T=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.U=function(a,c,f){for(var g=Array(arguments.length-2),l=2;l<arguments.length;l++)g[l-2]=arguments[l];return b.prototype[c].apply(a,g)}};function u(a){if(Error.captureStackTrace)Error.captureStackTrace(this,u);else{var b=Error().stack;b&&(this.stack=b)}a&&(this.message=String(a))}t(u,Error);u.prototype.name="CustomError";function v(a,b,c,d,e){this.reset(a,b,c,d,e)}v.prototype.a=null;var ga=0;v.prototype.reset=function(a,b,c,d,e){"number"==typeof e||ga++;d||fa();this.b=b;delete this.a};function w(){0!=ha&&(this[ba]||(this[ba]=++ca));this.B=this.B;this.P=this.P}var ha=0;w.prototype.B=!1;function x(a,b){this.type=a;this.a=this.target=b}x.prototype.b=function(){};var y="closure_listenable_"+(1E6*Math.random()|0),ia=0;function ja(a,b,c,d,e){this.listener=a;this.a=null;this.src=b;this.type=c;this.G=!!d;this.I=e;++ia;this.u=this.F=!1}function ka(a){a.u=!0;a.listener=null;a.a=null;a.src=null;a.I=null};function la(a){a=String(a);if(/^\s*$/.test(a)?0:/^[\],:{}\s\u2028\u2029]*$/.test(a.replace(/\\["\\\/bfnrtu]/g,"@").replace(/"[^"\\\n\r\u2028\u2029\x00-\x08\x0a-\x1f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g,"")))try{return eval("("+a+")")}catch(b){}throw Error("Invalid JSON string: "+a);};function ma(){}ma.prototype.a=null;function na(a){var b;(b=a.a)||(b={},oa(a)&&(b[0]=!0,b[1]=!0),b=a.a=b);return b};function pa(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b}function qa(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b}var ra="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function sa(a,b){for(var c,d,e=1;e<arguments.length;e++){d=arguments[e];for(c in d)a[c]=d[c];for(var f=0;f<ra.length;f++)c=ra[f],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c])}};function ta(a){ta[" "](a);return a}ta[" "]=aa;function ua(a,b){for(var c=a.split("%s"),d="",e=Array.prototype.slice.call(arguments,1);e.length&&1<c.length;)d+=c.shift()+e.shift();return d+c.join("%s")}var va=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function wa(a,b){return a<b?-1:a>b?1:0};function xa(a,b){b.unshift(a);u.call(this,ua.apply(null,b));b.shift()}t(xa,u);xa.prototype.name="AssertionError";function ya(a,b){throw new xa("Failure"+(a?": "+a:""),Array.prototype.slice.call(arguments,1));};var z=Array.prototype,za=z.indexOf?function(a,b,c){return z.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(p(a))return p(b)&&1==b.length?a.indexOf(b,c):-1;for(;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},Aa=z.forEach?function(a,b,c){z.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=p(a)?a.split(""):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)};
function Ba(a){var b;a:{b=Ca;for(var c=a.length,d=p(a)?a.split(""):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a)){b=e;break a}b=-1}return 0>b?null:p(a)?a.charAt(b):a[b]};function Da(a){this.src=a;this.a={};this.b=0}function Ea(a,b,c,d,e){var f=b.toString();b=a.a[f];b||(b=a.a[f]=[],a.b++);var g=Fa(b,c,d,e);-1<g?(a=b[g],a.F=!1):(a=new ja(c,a.src,f,!!d,e),a.F=!1,b.push(a));return a}function Ga(a,b){var c=b.type;if(c in a.a){var d=a.a[c],e=za(d,b),f;(f=0<=e)&&z.splice.call(d,e,1);f&&(ka(b),0==a.a[c].length&&(delete a.a[c],a.b--))}}function Fa(a,b,c,d){for(var e=0;e<a.length;++e){var f=a[e];if(!f.u&&f.listener==b&&f.G==!!c&&f.I==d)return e}return-1};var A;a:{var Ha=k.navigator;if(Ha){var Ia=Ha.userAgent;if(Ia){A=Ia;break a}}A=""};var Ja;function Ka(){}t(Ka,ma);function La(a){return(a=oa(a))?new ActiveXObject(a):new XMLHttpRequest}function oa(a){if(!a.b&&"undefined"==typeof XMLHttpRequest&&"undefined"!=typeof ActiveXObject){for(var b=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],c=0;c<b.length;c++){var d=b[c];try{return new ActiveXObject(d),a.b=d}catch(e){}}throw Error("Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed");}return a.b}Ja=new Ka;function B(a,b){this.b={};this.a=[];this.g=this.f=0;var c=arguments.length;if(1<c){if(c%2)throw Error("Uneven number of arguments");for(var d=0;d<c;d+=2)C(this,arguments[d],arguments[d+1])}else if(a){a instanceof B?(c=a.A(),d=a.H()):(c=qa(a),d=pa(a));for(var e=0;e<c.length;e++)C(this,c[e],d[e])}}B.prototype.H=function(){Ma(this);for(var a=[],b=0;b<this.a.length;b++)a.push(this.b[this.a[b]]);return a};B.prototype.A=function(){Ma(this);return this.a.concat()};
B.prototype.clear=function(){this.b={};this.g=this.f=this.a.length=0};function Ma(a){if(a.f!=a.a.length){for(var b=0,c=0;b<a.a.length;){var d=a.a[b];Object.prototype.hasOwnProperty.call(a.b,d)&&(a.a[c++]=d);b++}a.a.length=c}if(a.f!=a.a.length){for(var e={},c=b=0;b<a.a.length;)d=a.a[b],Object.prototype.hasOwnProperty.call(e,d)||(a.a[c++]=d,e[d]=1),b++;a.a.length=c}}function C(a,b,c){Object.prototype.hasOwnProperty.call(a.b,b)||(a.f++,a.a.push(b),a.g++);a.b[b]=c}
B.prototype.forEach=function(a,b){for(var c=this.A(),d=0;d<c.length;d++){var e=c[d];a.call(b,Object.prototype.hasOwnProperty.call(this.b,e)?this.b[e]:void 0,e,this)}};B.prototype.clone=function(){return new B(this)};function Na(a){if("function"==typeof a.H)return a.H();if(p(a))return a.split("");if(n(a)){for(var b=[],c=a.length,d=0;d<c;d++)b.push(a[d]);return b}return pa(a)}function Oa(a,b){if("function"==typeof a.forEach)a.forEach(b,void 0);else if(n(a)||p(a))Aa(a,b,void 0);else{var c;if("function"==typeof a.A)c=a.A();else if("function"!=typeof a.H)if(n(a)||p(a)){c=[];for(var d=a.length,e=0;e<d;e++)c.push(e)}else c=qa(a);else c=void 0;for(var d=Na(a),e=d.length,f=0;f<e;f++)b.call(void 0,d[f],c&&c[f],a)}};var Pa=-1!=A.indexOf("Opera")||-1!=A.indexOf("OPR"),D=-1!=A.indexOf("Trident")||-1!=A.indexOf("MSIE"),E=-1!=A.indexOf("Gecko")&&-1==A.toLowerCase().indexOf("webkit")&&!(-1!=A.indexOf("Trident")||-1!=A.indexOf("MSIE")),F=-1!=A.toLowerCase().indexOf("webkit");function Qa(){var a=k.document;return a?a.documentMode:void 0}
var Ra=function(){var a="",b;if(Pa&&k.opera)return a=k.opera.version,q(a)?a():a;E?b=/rv\:([^\);]+)(\)|;)/:D?b=/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/:F&&(b=/WebKit\/(\S+)/);b&&(a=(a=b.exec(A))?a[1]:"");return D&&(b=Qa(),b>parseFloat(a))?String(b):a}(),Sa={};
function I(a){var b;if(!(b=Sa[a])){b=0;for(var c=va(String(Ra)).split("."),d=va(String(a)).split("."),e=Math.max(c.length,d.length),f=0;0==b&&f<e;f++){var g=c[f]||"",l=d[f]||"",R=RegExp("(\\d*)(\\D*)","g"),xb=RegExp("(\\d*)(\\D*)","g");do{var G=R.exec(g)||["","",""],H=xb.exec(l)||["","",""];if(0==G[0].length&&0==H[0].length)break;b=wa(0==G[1].length?0:parseInt(G[1],10),0==H[1].length?0:parseInt(H[1],10))||wa(0==G[2].length,0==H[2].length)||wa(G[2],H[2])}while(0==b)}b=Sa[a]=0<=b}return b}
var Ta=k.document,Ua=Ta&&D?Qa()||("CSS1Compat"==Ta.compatMode?parseInt(Ra,10):5):void 0;function Va(a){this.g=a;this.b=this.f=this.a=null}function J(a,b){this.name=a;this.value=b}J.prototype.toString=function(){return this.name};var Wa=new J("SEVERE",1E3),Xa=new J("CONFIG",700),Ya=new J("FINE",500);function Za(a){if(a.f)return a.f;if(a.a)return Za(a.a);ya("Root logger has no level set.");return null}
Va.prototype.log=function(a,b,c){if(a.value>=Za(this).value)for(q(b)&&(b=b()),a=new v(a,String(b),this.g),c&&(a.a=c),c="log:"+a.b,k.console&&(k.console.timeStamp?k.console.timeStamp(c):k.console.markTimeline&&k.console.markTimeline(c)),k.msWriteProfilerMark&&k.msWriteProfilerMark(c),c=this;c;)c=c.a};var $a={},K=null;
function ab(a){K||(K=new Va(""),$a[""]=K,K.f=Xa);var b;if(!(b=$a[a])){b=new Va(a);var c=a.lastIndexOf("."),d=a.substr(c+1),c=ab(a.substr(0,c));c.b||(c.b={});c.b[d]=b;b.a=c;$a[a]=b}return b};var bb;(bb=!D)||(bb=D&&9<=Ua);var cb=bb,db=D&&!I("9");!F||I("528");E&&I("1.9b")||D&&I("8")||Pa&&I("9.5")||F&&I("528");E&&!I("8")||D&&I("9");function L(a,b){x.call(this,a?a.type:"");this.f=this.a=this.target=null;if(a){this.type=a.type;this.target=a.target||a.srcElement;this.a=b;var c=a.relatedTarget;if(c&&E)try{ta(c.nodeName)}catch(d){}this.f=a;a.defaultPrevented&&this.b()}}t(L,x);L.prototype.b=function(){L.T.b.call(this);var a=this.f;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,db)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};var eb="closure_lm_"+(1E6*Math.random()|0),fb={},gb=0;function M(a,b,c,d,e){if("array"==m(b))for(var f=0;f<b.length;f++)M(a,b[f],c,d,e);else if(c=hb(c),a&&a[y])Ea(a.w,String(b),c,d,e);else{if(!b)throw Error("Invalid event type");var f=!!d,g=N(a);g||(a[eb]=g=new Da(a));c=Ea(g,b,c,d,e);c.a||(d=ib(),c.a=d,d.src=a,d.listener=c,a.addEventListener?a.addEventListener(b.toString(),d,f):a.attachEvent(jb(b.toString()),d),gb++)}}
function ib(){var a=kb,b=cb?function(c){return a.call(b.src,b.listener,c)}:function(c){c=a.call(b.src,b.listener,c);if(!c)return c};return b}function lb(a,b,c,d,e){if("array"==m(b))for(var f=0;f<b.length;f++)lb(a,b[f],c,d,e);else(c=hb(c),a&&a[y])?(a=a.w,b=String(b).toString(),b in a.a&&(f=a.a[b],c=Fa(f,c,d,e),-1<c&&(ka(f[c]),z.splice.call(f,c,1),0==f.length&&(delete a.a[b],a.b--)))):a&&(a=N(a))&&(b=a.a[b.toString()],a=-1,b&&(a=Fa(b,c,!!d,e)),(c=-1<a?b[a]:null)&&mb(c))}
function mb(a){if("number"!=typeof a&&a&&!a.u){var b=a.src;if(b&&b[y])Ga(b.w,a);else{var c=a.type,d=a.a;b.removeEventListener?b.removeEventListener(c,d,a.G):b.detachEvent&&b.detachEvent(jb(c),d);gb--;(c=N(b))?(Ga(c,a),0==c.b&&(c.src=null,b[eb]=null)):ka(a)}}}function jb(a){return a in fb?fb[a]:fb[a]="on"+a}function nb(a,b,c,d){var e=!0;if(a=N(a))if(b=a.a[b.toString()])for(b=b.concat(),a=0;a<b.length;a++){var f=b[a];f&&f.G==c&&!f.u&&(f=ob(f,d),e=e&&!1!==f)}return e}
function ob(a,b){var c=a.listener,d=a.I||a.src;a.F&&mb(a);return c.call(d,b)}
function kb(a,b){if(a.u)return!0;if(!cb){var c;if(!(c=b))a:{c=["window","event"];for(var d=k,e;e=c.shift();)if(null!=d[e])d=d[e];else{c=null;break a}c=d}e=c;c=new L(e,this);d=!0;if(!(0>e.keyCode||void 0!=e.returnValue)){a:{var f=!1;if(0==e.keyCode)try{e.keyCode=-1;break a}catch(R){f=!0}if(f||void 0==e.returnValue)e.returnValue=!0}e=[];for(f=c.a;f;f=f.parentNode)e.push(f);for(var f=a.type,g=e.length-1;0<=g;g--){c.a=e[g];var l=nb(e[g],f,!0,c),d=d&&l}for(g=0;g<e.length;g++)c.a=e[g],l=nb(e[g],f,!1,c),
d=d&&l}return d}return ob(a,new L(b,this))}function N(a){a=a[eb];return a instanceof Da?a:null}var pb="__closure_events_fn_"+(1E9*Math.random()>>>0);function hb(a){if(q(a))return a;a[pb]||(a[pb]=function(b){return a.handleEvent(b)});return a[pb]};function O(){w.call(this);this.w=new Da(this);this.N=this}t(O,w);O.prototype[y]=!0;O.prototype.addEventListener=function(a,b,c,d){M(this,a,b,c,d)};O.prototype.removeEventListener=function(a,b,c,d){lb(this,a,b,c,d)};function P(a,b){var c=a.N,d=b,e=d.type||d;if(p(d))d=new x(d,c);else if(d instanceof x)d.target=d.target||c;else{var f=d,d=new x(e,c);sa(d,f)}c=d.a=c;qb(c,e,!0,d);qb(c,e,!1,d)}
function qb(a,b,c,d){if(b=a.w.a[String(b)]){b=b.concat();for(var e=!0,f=0;f<b.length;++f){var g=b[f];if(g&&!g.u&&g.G==c){var l=g.listener,R=g.I||g.src;g.F&&Ga(a.w,g);e=!1!==l.call(R,d)&&e}}}};function Q(a,b){a&&a.log(Ya,b,void 0)};function rb(a,b,c){if(q(a))c&&(a=r(a,c));else if(a&&"function"==typeof a.handleEvent)a=r(a.handleEvent,a);else throw Error("Invalid listener argument");return 2147483647<b?-1:k.setTimeout(a,b||0)};var sb=/^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$/;function tb(a){if(ub){ub=!1;var b=k.location;if(b){var c=b.href;if(c&&(c=(c=tb(c)[3]||null)?decodeURI(c):c)&&c!=b.hostname)throw ub=!0,Error();}}return a.match(sb)}var ub=F;function S(a){O.call(this);this.O=new B;this.s=a||null;this.b=!1;this.o=this.c=null;this.a=this.L=this.j="";this.f=this.D=this.i=this.C=!1;this.g=0;this.l=null;this.J=vb;this.m=this.S=!1}t(S,O);var vb="",wb=S.prototype,yb=ab("goog.net.XhrIo");wb.h=yb;var zb=/^https?$/i,Ab=["POST","PUT"];
S.prototype.send=function(a,b,c,d){if(this.c)throw Error("[goog.net.XhrIo] Object is active with another request="+this.j+"; newUri="+a);b=b?b.toUpperCase():"GET";this.j=a;this.a="";this.L=b;this.C=!1;this.b=!0;this.c=this.s?La(this.s):La(Ja);this.o=this.s?na(this.s):na(Ja);this.c.onreadystatechange=r(this.M,this);try{Q(this.h,T(this,"Opening Xhr")),this.D=!0,this.c.open(b,String(a),!0),this.D=!1}catch(f){Q(this.h,T(this,"Error opening Xhr: "+f.message));Bb(this,f);return}a=c||"";var e=this.O.clone();
d&&Oa(d,function(a,b){C(e,b,a)});d=Ba(e.A());c=k.FormData&&a instanceof k.FormData;!(0<=za(Ab,b))||d||c||C(e,"Content-Type","application/x-www-form-urlencoded;charset=utf-8");e.forEach(function(a,b){this.c.setRequestHeader(b,a)},this);this.J&&(this.c.responseType=this.J);"withCredentials"in this.c&&(this.c.withCredentials=this.S);try{Cb(this),0<this.g&&(this.m=Db(this.c),Q(this.h,T(this,"Will abort after "+this.g+"ms if incomplete, xhr2 "+this.m)),this.m?(this.c.timeout=this.g,this.c.ontimeout=r(this.K,
this)):this.l=rb(this.K,this.g,this)),Q(this.h,T(this,"Sending request")),this.i=!0,this.c.send(a),this.i=!1}catch(f){Q(this.h,T(this,"Send error: "+f.message)),Bb(this,f)}};function Db(a){return D&&I(9)&&"number"==typeof a.timeout&&void 0!==a.ontimeout}function Ca(a){return"content-type"==a.toLowerCase()}
S.prototype.K=function(){"undefined"!=typeof h&&this.c&&(this.a="Timed out after "+this.g+"ms, aborting",Q(this.h,T(this,this.a)),P(this,"timeout"),this.c&&this.b&&(Q(this.h,T(this,"Aborting")),this.b=!1,this.f=!0,this.c.abort(),this.f=!1,P(this,"complete"),P(this,"abort"),Eb(this)))};function Bb(a,b){a.b=!1;a.c&&(a.f=!0,a.c.abort(),a.f=!1);a.a=b;Fb(a);Eb(a)}function Fb(a){a.C||(a.C=!0,P(a,"complete"),P(a,"error"))}S.prototype.M=function(){this.B||(this.D||this.i||this.f?Gb(this):this.R())};
S.prototype.R=function(){Gb(this)};function Gb(a){if(a.b&&"undefined"!=typeof h)if(a.o[1]&&4==U(a)&&2==V(a))Q(a.h,T(a,"Local request error detected and ignored"));else if(a.i&&4==U(a))rb(a.M,0,a);else if(P(a,"readystatechange"),4==U(a)){Q(a.h,T(a,"Request complete"));a.b=!1;try{if(Hb(a))P(a,"complete"),P(a,"success");else{var b;try{b=2<U(a)?a.c.statusText:""}catch(c){Q(a.h,"Can not get status: "+c.message),b=""}a.a=b+" ["+V(a)+"]";Fb(a)}}finally{Eb(a)}}}
function Eb(a){if(a.c){Cb(a);var b=a.c,c=a.o[0]?aa:null;a.c=null;a.o=null;P(a,"ready");try{b.onreadystatechange=c}catch(d){(a=a.h)&&a.log(Wa,"Problem encountered resetting onreadystatechange: "+d.message,void 0)}}}function Cb(a){a.c&&a.m&&(a.c.ontimeout=null);"number"==typeof a.l&&(k.clearTimeout(a.l),a.l=null)}
function Hb(a){var b=V(a),c;a:switch(b){case 200:case 201:case 202:case 204:case 206:case 304:case 1223:c=!0;break a;default:c=!1}if(!c){if(b=0===b)a=tb(String(a.j))[1]||null,!a&&self.location&&(a=self.location.protocol,a=a.substr(0,a.length-1)),b=!zb.test(a?a.toLowerCase():"");c=b}return c}function U(a){return a.c?a.c.readyState:0}function V(a){try{return 2<U(a)?a.c.status:-1}catch(b){return-1}}function T(a,b){return b+" ["+a.L+" "+a.j+" "+V(a)+"]"};function W(a){this.b=a||new S;this.a=[];a=document.getElementById("stat").textContent.split("\n");for(var b=0;b<a.length;++b){var c=a[b].split(":");2>c.length||this.a.push({name:c[0].trim(),value:c[1].trim()})}this.j=this.a.length;this.m={statsName:0};this.v={statsName:0};this.i="";this.l=this.f=this.g=!1;a=document.createElement("div");a.style.overflow="hidden";a.style.clear="both";b=document.createElement("div");b.id="ui-div";b.innerHTML='<table id="ui-table" border=1 style="float:left; border-collapse: collapse;border-color:silver;"><tr valign="center"><td>Auto refresh (every 5 seconds): <input type="checkbox" id="auto-refresh" '+
(this.g?"checked":"")+'></td><td>&nbsp;&nbsp;&nbsp;&nbsp;Filter: <input id="text-filter" type="text" size="70"></td></tr></table>';a.appendChild(b);b=document.createElement("div");b.id="num";b.className="pagespeed-show-number";a.appendChild(b);document.body.insertBefore(a,document.getElementById("stat"));Ib(this)}W.prototype.D=function(){this.g=!this.g};W.prototype.s=function(){this.f=!this.f;Jb(this)};W.prototype.C=function(a){this.i=a.value;Jb(this)};
function Ib(a,b){document.getElementById("num").textContent="The number of statistics: "+(void 0!=b?b:a.a.length).toString()+"/"+a.j}W.prototype.error=function(){var a=this.a;if("array"!=m(a))for(var b=a.length-1;0<=b;b--)delete a[b];this.j=a.length=0;Ib(this);document.getElementById("stat").textContent="Sorry, failed to update the statistics. Please wait and try again later."};
function Jb(a){a.f?Kb(a):a.a.sort(Lb);var b;var c=a.a,d=c.length;if(0<d){b=Array(d);for(var e=0;e<d;e++)b[e]=c[e]}else b=[];if(a.i)for(e=b.length-1;0<=e;--e)b[e].name&&-1!=b[e].name.toLowerCase().indexOf(a.i.toLowerCase())||b.splice(e,1);Ib(a,b.length);c=document.createElement("table");for(e=0;e<b.length;++e){var f=c.insertRow(-1),d=f.insertCell(0);d.textContent=b[e].name;d.className="pagespeed-stats-name";d=f.insertCell(1);d.textContent=b[e].value;d.className="pagespeed-stats-value";d=f.insertCell(2);
d.textContent=a.v[b[e].name].toString();d.className="pagespeed-stats-number-of-changes"}b=c.createTHead().insertRow(0);d=b.insertCell(0);d.innerHTML='Name <input type="checkbox" id="sort-alpha" title="Sort in alphabetical order."'+(a.f?"":"checked")+">";d.className="pagespeed-stats-first-column";b.insertCell(1).textContent="Value";d=b.insertCell(2);d.innerHTML='Number of changes <input type="checkbox" id="sort-freq" title="Sort by the number of changes(descending order)."'+(a.f?"checked":"")+">";
d.title="How many times the value changes during the auto-refresh.\nThe number of changes only accumulates when auto-refresh is on.";d.className="pagespeed-stats-third-column";d=document.getElementById("stat");d.innerHTML="";d.appendChild(c);M(document.getElementById("sort-freq"),"change",r(a.s,a));M(document.getElementById("sort-alpha"),"change",r(a.s,a))}function Lb(a,b){return a.name>b.name?1:a.name<b.name?-1:0}
function Kb(a){a.a.sort(r(function(a,c){var d=this.v[a.name],e=this.v[c.name];return e!=d?e-d:Lb(a,c)},a))}W.prototype.o=function(){if(!this.b.c&&(!this.l||this.g)){this.l=!0;var a=location.pathname,b=a.lastIndexOf("/",a.length-2);this.b.send(0<b?a.substring(0,b)+"/stats_json":a+"/stats_json")}};
W.prototype.B=function(){if(Hb(this.b)){var a;var b=this.b;a=b.c?la(b.c.responseText):void 0;b=a.variables;a=a.maxlength;if("object"!=m(b)||"number"!=m(a))this.error();else{a=[];for(var c in b)if("_"!=c[c.length-1]){var d=c.replace(/-/g,"_");"_"==d[0]&&(d=d.substring(1));a.push({name:d,value:b[c].toString()});var e=b[c],f=this.v[d];void 0==f?this.v[d]=e?1:0:e!=this.m[d]&&(this.v[d]=f+1);this.m[d]=e}this.a=a;this.j=a.length;Jb(this)}}else c=this.b,console.log(p(c.a)?c.a:String(c.a)),this.error()};
function Mb(){M(window,"load",function(){var a=new W,b=document.getElementById("text-filter");M(b,"keyup",r(a.C,a,b));M(document.getElementById("auto-refresh"),"change",r(a.D,a));setInterval(r(a.o,a),5E3);M(a.b,"complete",r(a.B,a));a.o()})}var X=["pagespeed","Statistics","Start"],Y=k;X[0]in Y||!Y.execScript||Y.execScript("var "+X[0]);for(var Z;X.length&&(Z=X.shift());)X.length||void 0===Mb?Y[Z]?Y=Y[Z]:Y=Y[Z]={}:Y[Z]=Mb;})();
