/*!
 * jQuery JavaScript Library v1.9.1
 * http://jquery.com/
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 *
 * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
 * Released under the MIT license
 * http://jquery.org/license
 *
 * Date: 2013-2-4
 */
(function(a3,aH){var aj,x,aD=typeof aH,l=a3.document,aM=a3.location,bj=a3.jQuery,I=a3.$,ab={},a7=[],t="1.9.1",aJ=a7.concat,ap=a7.push,a5=a7.slice,aN=a7.indexOf,A=ab.toString,W=ab.hasOwnProperty,aR=t.trim,bK=function(e,b4){return new bK.fn.init(e,b4,x)},bB=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ad=/\S+/g,D=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,bs=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,a=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,bi=/^[\],:{}\s]*$/,bl=/(?:^|:|,)(?:\s*\[)+/g,bH=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,a0=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,bT=/^-ms-/,aW=/-([\da-z])/gi,N=function(e,b4){return b4.toUpperCase()},bX=function(e){if(l.addEventListener||e.type==="load"||l.readyState==="complete"){bm();bK.ready()}},bm=function(){if(l.addEventListener){l.removeEventListener("DOMContentLoaded",bX,false);a3.removeEventListener("load",bX,false)}else{l.detachEvent("onreadystatechange",bX);a3.detachEvent("onload",bX)}};bK.fn=bK.prototype={jquery:t,constructor:bK,init:function(e,b6,b5){var b4,b7;if(!e){return this}if(typeof e==="string"){if(e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3){b4=[null,e,null]}else{b4=bs.exec(e)}if(b4&&(b4[1]||!b6)){if(b4[1]){b6=b6 instanceof bK?b6[0]:b6;bK.merge(this,bK.parseHTML(b4[1],b6&&b6.nodeType?b6.ownerDocument||b6:l,true));if(a.test(b4[1])&&bK.isPlainObject(b6)){for(b4 in b6){if(bK.isFunction(this[b4])){this[b4](b6[b4])}else{this.attr(b4,b6[b4])}}}return this}else{b7=l.getElementById(b4[2]);if(b7&&b7.parentNode){if(b7.id!==b4[2]){return b5.find(e)}this.length=1;this[0]=b7}this.context=l;this.selector=e;return this}}else{if(!b6||b6.jquery){return(b6||b5).find(e)}else{return this.constructor(b6).find(e)}}}else{if(e.nodeType){this.context=this[0]=e;this.length=1;return this}else{if(bK.isFunction(e)){return b5.ready(e)}}}if(e.selector!==aH){this.selector=e.selector;this.context=e.context}return bK.makeArray(e,this)},selector:"",length:0,size:function(){return this.length},toArray:function(){return a5.call(this)},get:function(e){return e==null?this.toArray():(e<0?this[this.length+e]:this[e])},pushStack:function(e){var b4=bK.merge(this.constructor(),e);b4.prevObject=this;b4.context=this.context;return b4},each:function(b4,e){return bK.each(this,b4,e)},ready:function(e){bK.ready.promise().done(e);return this},slice:function(){return this.pushStack(a5.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(b5){var e=this.length,b4=+b5+(b5<0?e:0);return this.pushStack(b4>=0&&b4<e?[this[b4]]:[])},map:function(e){return this.pushStack(bK.map(this,function(b5,b4){return e.call(b5,b4,b5)}))},end:function(){return this.prevObject||this.constructor(null)},push:ap,sort:[].sort,splice:[].splice};bK.fn.init.prototype=bK.fn;bK.extend=bK.fn.extend=function(){var e,b9,b4,b5,cc,ca,b8=arguments[0]||{},b7=1,b6=arguments.length,cb=false;if(typeof b8==="boolean"){cb=b8;b8=arguments[1]||{};b7=2}if(typeof b8!=="object"&&!bK.isFunction(b8)){b8={}}if(b6===b7){b8=this;--b7}for(;b7<b6;b7++){if((cc=arguments[b7])!=null){for(b5 in cc){e=b8[b5];b4=cc[b5];if(b8===b4){continue}if(cb&&b4&&(bK.isPlainObject(b4)||(b9=bK.isArray(b4)))){if(b9){b9=false;ca=e&&bK.isArray(e)?e:[]}else{ca=e&&bK.isPlainObject(e)?e:{}}b8[b5]=bK.extend(cb,ca,b4)}else{if(b4!==aH){b8[b5]=b4}}}}}return b8};bK.extend({noConflict:function(e){if(a3.$===bK){a3.$=I}if(e&&a3.jQuery===bK){a3.jQuery=bj}return bK},isReady:false,readyWait:1,holdReady:function(e){if(e){bK.readyWait++}else{bK.ready(true)}},ready:function(e){if(e===true?--bK.readyWait:bK.isReady){return}if(!l.body){return setTimeout(bK.ready)}bK.isReady=true;if(e!==true&&--bK.readyWait>0){return}aj.resolveWith(l,[bK]);if(bK.fn.trigger){bK(l).trigger("ready").off("ready")}},isFunction:function(e){return bK.type(e)==="function"},isArray:Array.isArray||function(e){return bK.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return !isNaN(parseFloat(e))&&isFinite(e)},type:function(e){if(e==null){return String(e)}return typeof e==="object"||typeof e==="function"?ab[A.call(e)]||"object":typeof e},isPlainObject:function(b6){if(!b6||bK.type(b6)!=="object"||b6.nodeType||bK.isWindow(b6)){return false}try{if(b6.constructor&&!W.call(b6,"constructor")&&!W.call(b6.constructor.prototype,"isPrototypeOf")){return false}}catch(b5){return false}var b4;for(b4 in b6){}return b4===aH||W.call(b6,b4)},isEmptyObject:function(b4){var e;for(e in b4){return false}return true},error:function(e){throw new Error(e)},parseHTML:function(b7,b5,b6){if(!b7||typeof b7!=="string"){return null}if(typeof b5==="boolean"){b6=b5;b5=false}b5=b5||l;var b4=a.exec(b7),e=!b6&&[];if(b4){return[b5.createElement(b4[1])]}b4=bK.buildFragment([b7],b5,e);if(e){bK(e).remove()}return bK.merge([],b4.childNodes)},parseJSON:function(e){if(a3.JSON&&a3.JSON.parse){return a3.JSON.parse(e)}if(e===null){return e}if(typeof e==="string"){e=bK.trim(e);if(e){if(bi.test(e.replace(bH,"@").replace(a0,"]").replace(bl,""))){return(new Function("return "+e))()}}}bK.error("Invalid JSON: "+e)},parseXML:function(b6){var b4,b5;if(!b6||typeof b6!=="string"){return null}try{if(a3.DOMParser){b5=new DOMParser();b4=b5.parseFromString(b6,"text/xml")}else{b4=new ActiveXObject("Microsoft.XMLDOM");b4.async="false";b4.loadXML(b6)}}catch(b7){b4=aH}if(!b4||!b4.documentElement||b4.getElementsByTagName("parsererror").length){bK.error("Invalid XML: "+b6)}return b4},noop:function(){},globalEval:function(e){if(e&&bK.trim(e)){(a3.execScript||function(b4){a3["eval"].call(a3,b4)})(e)}},camelCase:function(e){return e.replace(bT,"ms-").replace(aW,N)},nodeName:function(b4,e){return b4.nodeName&&b4.nodeName.toLowerCase()===e.toLowerCase()},each:function(b8,b9,b4){var b7,b5=0,b6=b8.length,e=ac(b8);if(b4){if(e){for(;b5<b6;b5++){b7=b9.apply(b8[b5],b4);if(b7===false){break}}}else{for(b5 in b8){b7=b9.apply(b8[b5],b4);if(b7===false){break}}}}else{if(e){for(;b5<b6;b5++){b7=b9.call(b8[b5],b5,b8[b5]);if(b7===false){break}}}else{for(b5 in b8){b7=b9.call(b8[b5],b5,b8[b5]);if(b7===false){break}}}}return b8},trim:aR&&!aR.call("\uFEFF\xA0")?function(e){return e==null?"":aR.call(e)}:function(e){return e==null?"":(e+"").replace(D,"")},makeArray:function(e,b5){var b4=b5||[];if(e!=null){if(ac(Object(e))){bK.merge(b4,typeof e==="string"?[e]:e)}else{ap.call(b4,e)}}return b4},inArray:function(b6,b4,b5){var e;if(b4){if(aN){return aN.call(b4,b6,b5)}e=b4.length;b5=b5?b5<0?Math.max(0,e+b5):b5:0;for(;b5<e;b5++){if(b5 in b4&&b4[b5]===b6){return b5}}}return -1},merge:function(b7,b5){var e=b5.length,b6=b7.length,b4=0;if(typeof e==="number"){for(;b4<e;b4++){b7[b6++]=b5[b4]}}else{while(b5[b4]!==aH){b7[b6++]=b5[b4++]}}b7.length=b6;return b7},grep:function(b4,b9,e){var b8,b5=[],b6=0,b7=b4.length;e=!!e;for(;b6<b7;b6++){b8=!!b9(b4[b6],b6);if(e!==b8){b5.push(b4[b6])}}return b5},map:function(b5,ca,e){var b9,b7=0,b8=b5.length,b4=ac(b5),b6=[];if(b4){for(;b7<b8;b7++){b9=ca(b5[b7],b7,e);if(b9!=null){b6[b6.length]=b9}}}else{for(b7 in b5){b9=ca(b5[b7],b7,e);if(b9!=null){b6[b6.length]=b9}}}return aJ.apply([],b6)},guid:1,proxy:function(b7,b6){var e,b5,b4;if(typeof b6==="string"){b4=b7[b6];b6=b7;b7=b4}if(!bK.isFunction(b7)){return aH}e=a5.call(arguments,2);b5=function(){return b7.apply(b6||this,e.concat(a5.call(arguments)))};b5.guid=b7.guid=b7.guid||bK.guid++;return b5},access:function(e,b8,ca,b9,b6,cc,cb){var b5=0,b4=e.length,b7=ca==null;if(bK.type(ca)==="object"){b6=true;for(b5 in ca){bK.access(e,b8,b5,ca[b5],true,cc,cb)}}else{if(b9!==aH){b6=true;if(!bK.isFunction(b9)){cb=true}if(b7){if(cb){b8.call(e,b9);b8=null}else{b7=b8;b8=function(ce,cd,cf){return b7.call(bK(ce),cf)}}}if(b8){for(;b5<b4;b5++){b8(e[b5],ca,cb?b9:b9.call(e[b5],b5,b8(e[b5],ca)))}}}}return b6?e:b7?b8.call(e):b4?b8(e[0],ca):cc},now:function(){return(new Date()).getTime()}});bK.ready.promise=function(b7){if(!aj){aj=bK.Deferred();if(l.readyState==="complete"){setTimeout(bK.ready)}else{if(l.addEventListener){l.addEventListener("DOMContentLoaded",bX,false);a3.addEventListener("load",bX,false)}else{l.attachEvent("onreadystatechange",bX);a3.attachEvent("onload",bX);var b6=false;try{b6=a3.frameElement==null&&l.documentElement}catch(b5){}if(b6&&b6.doScroll){(function b4(){if(!bK.isReady){try{b6.doScroll("left")}catch(b8){return setTimeout(b4,50)}bm();bK.ready()}})()}}}}return aj.promise(b7)};bK.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(b4,e){ab["[object "+e+"]"]=e.toLowerCase()});function ac(b5){var b4=b5.length,e=bK.type(b5);if(bK.isWindow(b5)){return false}if(b5.nodeType===1&&b4){return true}return e==="array"||e!=="function"&&(b4===0||typeof b4==="number"&&b4>0&&(b4-1) in b5)}x=bK(l);var bZ={};function af(b4){var e=bZ[b4]={};bK.each(b4.match(ad)||[],function(b6,b5){e[b5]=true});return e}bK.Callbacks=function(cd){cd=typeof cd==="string"?(bZ[cd]||af(cd)):bK.extend({},cd);var b7,b6,e,b8,b9,b5,ca=[],cb=!cd.once&&[],b4=function(ce){b6=cd.memory&&ce;e=true;b9=b5||0;b5=0;b8=ca.length;b7=true;for(;ca&&b9<b8;b9++){if(ca[b9].apply(ce[0],ce[1])===false&&cd.stopOnFalse){b6=false;break}}b7=false;if(ca){if(cb){if(cb.length){b4(cb.shift())}}else{if(b6){ca=[]}else{cc.disable()}}}},cc={add:function(){if(ca){var cf=ca.length;(function ce(cg){bK.each(cg,function(ci,ch){var cj=bK.type(ch);if(cj==="function"){if(!cd.unique||!cc.has(ch)){ca.push(ch)}}else{if(ch&&ch.length&&cj!=="string"){ce(ch)}}})})(arguments);if(b7){b8=ca.length}else{if(b6){b5=cf;b4(b6)}}}return this},remove:function(){if(ca){bK.each(arguments,function(cg,ce){var cf;while((cf=bK.inArray(ce,ca,cf))>-1){ca.splice(cf,1);if(b7){if(cf<=b8){b8--}if(cf<=b9){b9--}}}})}return this},has:function(ce){return ce?bK.inArray(ce,ca)>-1:!!(ca&&ca.length)},empty:function(){ca=[];return this},disable:function(){ca=cb=b6=aH;return this},disabled:function(){return !ca},lock:function(){cb=aH;if(!b6){cc.disable()}return this},locked:function(){return !cb},fireWith:function(cf,ce){ce=ce||[];ce=[cf,ce.slice?ce.slice():ce];if(ca&&(!e||cb)){if(b7){cb.push(ce)}else{b4(ce)}}return this},fire:function(){cc.fireWith(this,arguments);return this},fired:function(){return !!e}};return cc};bK.extend({Deferred:function(b5){var b4=[["resolve","done",bK.Callbacks("once memory"),"resolved"],["reject","fail",bK.Callbacks("once memory"),"rejected"],["notify","progress",bK.Callbacks("memory")]],b6="pending",b7={state:function(){return b6},always:function(){e.done(arguments).fail(arguments);return this},then:function(){var b8=arguments;return bK.Deferred(function(b9){bK.each(b4,function(cb,ca){var cd=ca[0],cc=bK.isFunction(b8[cb])&&b8[cb];e[ca[1]](function(){var ce=cc&&cc.apply(this,arguments);if(ce&&bK.isFunction(ce.promise)){ce.promise().done(b9.resolve).fail(b9.reject).progress(b9.notify)}else{b9[cd+"With"](this===b7?b9.promise():this,cc?[ce]:arguments)}})});b8=null}).promise()},promise:function(b8){return b8!=null?bK.extend(b8,b7):b7}},e={};b7.pipe=b7.then;bK.each(b4,function(b9,b8){var cb=b8[2],ca=b8[3];b7[b8[1]]=cb.add;if(ca){cb.add(function(){b6=ca},b4[b9^1][2].disable,b4[2][2].lock)}e[b8[0]]=function(){e[b8[0]+"With"](this===e?b7:this,arguments);return this};e[b8[0]+"With"]=cb.fireWith});b7.promise(e);if(b5){b5.call(e,e)}return e},when:function(b7){var b5=0,b9=a5.call(arguments),e=b9.length,b4=e!==1||(b7&&bK.isFunction(b7.promise))?e:0,cc=b4===1?b7:bK.Deferred(),b6=function(ce,cf,cd){return function(cg){cf[ce]=this;cd[ce]=arguments.length>1?a5.call(arguments):cg;if(cd===cb){cc.notifyWith(cf,cd)}else{if(!(--b4)){cc.resolveWith(cf,cd)}}}},cb,b8,ca;if(e>1){cb=new Array(e);b8=new Array(e);ca=new Array(e);for(;b5<e;b5++){if(b9[b5]&&bK.isFunction(b9[b5].promise)){b9[b5].promise().done(b6(b5,ca,b9)).fail(cc.reject).progress(b6(b5,b8,cb))}else{--b4}}}if(!b4){cc.resolveWith(ca,b9)}return cc.promise()}});bK.support=(function(){var cf,ce,cc,cb,cd,ca,b6,b8,b5,b7,b4=l.createElement("div");b4.setAttribute("className","t");b4.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";ce=b4.getElementsByTagName("*");cc=b4.getElementsByTagName("a")[0];if(!ce||!cc||!ce.length){return{}}cd=l.createElement("select");b6=cd.appendChild(l.createElement("option"));cb=b4.getElementsByTagName("input")[0];cc.style.cssText="top:1px;float:left;opacity:.5";cf={getSetAttribute:b4.className!=="t",leadingWhitespace:b4.firstChild.nodeType===3,tbody:!b4.getElementsByTagName("tbody").length,htmlSerialize:!!b4.getElementsByTagName("link").length,style:/top/.test(cc.getAttribute("style")),hrefNormalized:cc.getAttribute("href")==="/a",opacity:/^0.5/.test(cc.style.opacity),cssFloat:!!cc.style.cssFloat,checkOn:!!cb.value,optSelected:b6.selected,enctype:!!l.createElement("form").enctype,html5Clone:l.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",boxModel:l.compatMode==="CSS1Compat",deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true,boxSizingReliable:true,pixelPosition:false};cb.checked=true;cf.noCloneChecked=cb.cloneNode(true).checked;cd.disabled=true;cf.optDisabled=!b6.disabled;try{delete b4.test}catch(b9){cf.deleteExpando=false}cb=l.createElement("input");cb.setAttribute("value","");cf.input=cb.getAttribute("value")==="";cb.value="t";cb.setAttribute("type","radio");cf.radioValue=cb.value==="t";cb.setAttribute("checked","t");cb.setAttribute("name","t");ca=l.createDocumentFragment();ca.appendChild(cb);cf.appendChecked=cb.checked;cf.checkClone=ca.cloneNode(true).cloneNode(true).lastChild.checked;if(b4.attachEvent){b4.attachEvent("onclick",function(){cf.noCloneEvent=false});b4.cloneNode(true).click()}for(b7 in {submit:true,change:true,focusin:true}){b4.setAttribute(b8="on"+b7,"t");cf[b7+"Bubbles"]=b8 in a3||b4.attributes[b8].expando===false}b4.style.backgroundClip="content-box";b4.cloneNode(true).style.backgroundClip="";cf.clearCloneStyle=b4.style.backgroundClip==="content-box";bK(function(){var cg,cj,ci,ch="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",e=l.getElementsByTagName("body")[0];if(!e){return}cg=l.createElement("div");cg.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";e.appendChild(cg).appendChild(b4);b4.innerHTML="<table><tr><td></td><td>t</td></tr></table>";ci=b4.getElementsByTagName("td");ci[0].style.cssText="padding:0;margin:0;border:0;display:none";b5=(ci[0].offsetHeight===0);ci[0].style.display="";ci[1].style.display="none";cf.reliableHiddenOffsets=b5&&(ci[0].offsetHeight===0);b4.innerHTML="";b4.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";cf.boxSizing=(b4.offsetWidth===4);cf.doesNotIncludeMarginInBodyOffset=(e.offsetTop!==1);if(a3.getComputedStyle){cf.pixelPosition=(a3.getComputedStyle(b4,null)||{}).top!=="1%";cf.boxSizingReliable=(a3.getComputedStyle(b4,null)||{width:"4px"}).width==="4px";cj=b4.appendChild(l.createElement("div"));cj.style.cssText=b4.style.cssText=ch;cj.style.marginRight=cj.style.width="0";b4.style.width="1px";cf.reliableMarginRight=!parseFloat((a3.getComputedStyle(cj,null)||{}).marginRight)}if(typeof b4.style.zoom!==aD){b4.innerHTML="";b4.style.cssText=ch+"width:1px;padding:1px;display:inline;zoom:1";cf.inlineBlockNeedsLayout=(b4.offsetWidth===3);b4.style.display="block";b4.innerHTML="<div></div>";b4.firstChild.style.width="5px";cf.shrinkWrapBlocks=(b4.offsetWidth!==3);if(cf.inlineBlockNeedsLayout){e.style.zoom=1}}e.removeChild(cg);cg=b4=ci=cj=null});ce=cd=ca=b6=cc=cb=null;return cf})();var bx=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,aO=/([A-Z])/g;function bb(b6,b4,b8,b7){if(!bK.acceptData(b6)){return}var b9,cb,cc=bK.expando,ca=typeof b4==="string",cd=b6.nodeType,e=cd?bK.cache:b6,b5=cd?b6[cc]:b6[cc]&&cc;if((!b5||!e[b5]||(!b7&&!e[b5].data))&&ca&&b8===aH){return}if(!b5){if(cd){b6[cc]=b5=a7.pop()||bK.guid++}else{b5=cc}}if(!e[b5]){e[b5]={};if(!cd){e[b5].toJSON=bK.noop}}if(typeof b4==="object"||typeof b4==="function"){if(b7){e[b5]=bK.extend(e[b5],b4)}else{e[b5].data=bK.extend(e[b5].data,b4)}}b9=e[b5];if(!b7){if(!b9.data){b9.data={}}b9=b9.data}if(b8!==aH){b9[bK.camelCase(b4)]=b8}if(ca){cb=b9[b4];if(cb==null){cb=b9[bK.camelCase(b4)]}}else{cb=b9}return cb}function aa(b6,b4,b7){if(!bK.acceptData(b6)){return}var b9,b8,ca,cb=b6.nodeType,e=cb?bK.cache:b6,b5=cb?b6[bK.expando]:bK.expando;if(!e[b5]){return}if(b4){ca=b7?e[b5]:e[b5].data;if(ca){if(!bK.isArray(b4)){if(b4 in ca){b4=[b4]}else{b4=bK.camelCase(b4);if(b4 in ca){b4=[b4]}else{b4=b4.split(" ")}}}else{b4=b4.concat(bK.map(b4,bK.camelCase))}for(b9=0,b8=b4.length;b9<b8;b9++){delete ca[b4[b9]]}if(!(b7?O:bK.isEmptyObject)(ca)){return}}}if(!b7){delete e[b5].data;if(!O(e[b5])){return}}if(cb){bK.cleanData([b6],true)}else{if(bK.support.deleteExpando||e!=e.window){delete e[b5]}else{e[b5]=null}}}bK.extend({cache:{},expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?bK.cache[e[bK.expando]]:e[bK.expando];return !!e&&!O(e)},data:function(b4,e,b5){return bb(b4,e,b5)},removeData:function(b4,e){return aa(b4,e)},_data:function(b4,e,b5){return bb(b4,e,b5,true)},_removeData:function(b4,e){return aa(b4,e,true)},acceptData:function(b4){if(b4.nodeType&&b4.nodeType!==1&&b4.nodeType!==9){return false}var e=b4.nodeName&&bK.noData[b4.nodeName.toLowerCase()];return !e||e!==true&&b4.getAttribute("classid")===e}});bK.fn.extend({data:function(b6,b9){var b4,e,b7=this[0],b5=0,b8=null;if(b6===aH){if(this.length){b8=bK.data(b7);if(b7.nodeType===1&&!bK._data(b7,"parsedAttrs")){b4=b7.attributes;for(;b5<b4.length;b5++){e=b4[b5].name;if(!e.indexOf("data-")){e=bK.camelCase(e.slice(5));bz(b7,e,b8[e])}}bK._data(b7,"parsedAttrs",true)}}return b8}if(typeof b6==="object"){return this.each(function(){bK.data(this,b6)})}return bK.access(this,function(ca){if(ca===aH){return b7?bz(b7,b6,bK.data(b7,b6)):null}this.each(function(){bK.data(this,b6,ca)})},null,b9,arguments.length>1,null,true)},removeData:function(e){return this.each(function(){bK.removeData(this,e)})}});function bz(b6,b5,b7){if(b7===aH&&b6.nodeType===1){var b4="data-"+b5.replace(aO,"-$1").toLowerCase();b7=b6.getAttribute(b4);if(typeof b7==="string"){try{b7=b7==="true"?true:b7==="false"?false:b7==="null"?null:+b7+""===b7?+b7:bx.test(b7)?bK.parseJSON(b7):b7}catch(b8){}bK.data(b6,b5,b7)}else{b7=aH}}return b7}function O(b4){var e;for(e in b4){if(e==="data"&&bK.isEmptyObject(b4[e])){continue}if(e!=="toJSON"){return false}}return true}bK.extend({queue:function(b5,b4,b6){var e;if(b5){b4=(b4||"fx")+"queue";e=bK._data(b5,b4);if(b6){if(!e||bK.isArray(b6)){e=bK._data(b5,b4,bK.makeArray(b6))}else{e.push(b6)}}return e||[]}},dequeue:function(b8,b7){b7=b7||"fx";var b4=bK.queue(b8,b7),b9=b4.length,b6=b4.shift(),e=bK._queueHooks(b8,b7),b5=function(){bK.dequeue(b8,b7)};if(b6==="inprogress"){b6=b4.shift();b9--}e.cur=b6;if(b6){if(b7==="fx"){b4.unshift("inprogress")}delete e.stop;b6.call(b8,b5,e)}if(!b9&&e){e.empty.fire()}},_queueHooks:function(b5,b4){var e=b4+"queueHooks";return bK._data(b5,e)||bK._data(b5,e,{empty:bK.Callbacks("once memory").add(function(){bK._removeData(b5,b4+"queue");bK._removeData(b5,e)})})}});bK.fn.extend({queue:function(e,b4){var b5=2;if(typeof e!=="string"){b4=e;e="fx";b5--}if(arguments.length<b5){return bK.queue(this[0],e)}return b4===aH?this:this.each(function(){var b6=bK.queue(this,e,b4);bK._queueHooks(this,e);if(e==="fx"&&b6[0]!=="inprogress"){bK.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){bK.dequeue(this,e)})},delay:function(b4,e){b4=bK.fx?bK.fx.speeds[b4]||b4:b4;e=e||"fx";return this.queue(e,function(b6,b5){var b7=setTimeout(b6,b4);b5.stop=function(){clearTimeout(b7)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(b5,b9){var b4,b6=1,ca=bK.Deferred(),b8=this,e=this.length,b7=function(){if(!(--b6)){ca.resolveWith(b8,[b8])}};if(typeof b5!=="string"){b9=b5;b5=aH}b5=b5||"fx";while(e--){b4=bK._data(b8[e],b5+"queueHooks");if(b4&&b4.empty){b6++;b4.empty.add(b7)}}b7();return ca.promise(b9)}});var a9,b0,bN=/[\t\r\n]/g,al=/\r/g,aG=/^(?:input|select|textarea|button|object)$/i,E=/^(?:a|area)$/i,M=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,ar=/^(?:checked|selected)$/i,bQ=bK.support.getSetAttribute,bG=bK.support.input;bK.fn.extend({attr:function(e,b4){return bK.access(this,bK.attr,e,b4,arguments.length>1)},removeAttr:function(e){return this.each(function(){bK.removeAttr(this,e)})},prop:function(e,b4){return bK.access(this,bK.prop,e,b4,arguments.length>1)},removeProp:function(e){e=bK.propFix[e]||e;return this.each(function(){try{this[e]=aH;delete this[e]}catch(b4){}})},addClass:function(ca){var b4,e,cb,b7,b5,b6=0,b8=this.length,b9=typeof ca==="string"&&ca;if(bK.isFunction(ca)){return this.each(function(cc){bK(this).addClass(ca.call(this,cc,this.className))})}if(b9){b4=(ca||"").match(ad)||[];for(;b6<b8;b6++){e=this[b6];cb=e.nodeType===1&&(e.className?(" "+e.className+" ").replace(bN," "):" ");if(cb){b5=0;while((b7=b4[b5++])){if(cb.indexOf(" "+b7+" ")<0){cb+=b7+" "}}e.className=bK.trim(cb)}}}return this},removeClass:function(ca){var b4,e,cb,b7,b5,b6=0,b8=this.length,b9=arguments.length===0||typeof ca==="string"&&ca;if(bK.isFunction(ca)){return this.each(function(cc){bK(this).removeClass(ca.call(this,cc,this.className))})}if(b9){b4=(ca||"").match(ad)||[];for(;b6<b8;b6++){e=this[b6];cb=e.nodeType===1&&(e.className?(" "+e.className+" ").replace(bN," "):"");if(cb){b5=0;while((b7=b4[b5++])){while(cb.indexOf(" "+b7+" ")>=0){cb=cb.replace(" "+b7+" "," ")}}e.className=ca?bK.trim(cb):""}}}return this},toggleClass:function(b6,b4){var b5=typeof b6,e=typeof b4==="boolean";if(bK.isFunction(b6)){return this.each(function(b7){bK(this).toggleClass(b6.call(this,b7,this.className,b4),b4)})}return this.each(function(){if(b5==="string"){var b9,b8=0,b7=bK(this),ca=b4,cb=b6.match(ad)||[];while((b9=cb[b8++])){ca=e?ca:!b7.hasClass(b9);b7[ca?"addClass":"removeClass"](b9)}}else{if(b5===aD||b5==="boolean"){if(this.className){bK._data(this,"__className__",this.className)}this.className=this.className||b6===false?"":bK._data(this,"__className__")||""}}})},hasClass:function(e){var b6=" "+e+" ",b5=0,b4=this.length;for(;b5<b4;b5++){if(this[b5].nodeType===1&&(" "+this[b5].className+" ").replace(bN," ").indexOf(b6)>=0){return true}}return false},val:function(b6){var b4,e,b7,b5=this[0];if(!arguments.length){if(b5){e=bK.valHooks[b5.type]||bK.valHooks[b5.nodeName.toLowerCase()];if(e&&"get" in e&&(b4=e.get(b5,"value"))!==aH){return b4}b4=b5.value;return typeof b4==="string"?b4.replace(al,""):b4==null?"":b4}return}b7=bK.isFunction(b6);return this.each(function(b9){var ca,b8=bK(this);if(this.nodeType!==1){return}if(b7){ca=b6.call(this,b9,b8.val())}else{ca=b6}if(ca==null){ca=""}else{if(typeof ca==="number"){ca+=""}else{if(bK.isArray(ca)){ca=bK.map(ca,function(cb){return cb==null?"":cb+""})}}}e=bK.valHooks[this.type]||bK.valHooks[this.nodeName.toLowerCase()];if(!e||!("set" in e)||e.set(this,ca,"value")===aH){this.value=ca}})}});bK.extend({valHooks:{option:{get:function(e){var b4=e.attributes.value;return !b4||b4.specified?e.value:e.text}},select:{get:function(e){var b9,b5,cb=e.options,b7=e.selectedIndex,b6=e.type==="select-one"||b7<0,ca=b6?null:[],b8=b6?b7+1:cb.length,b4=b7<0?b8:b6?b7:0;for(;b4<b8;b4++){b5=cb[b4];if((b5.selected||b4===b7)&&(bK.support.optDisabled?!b5.disabled:b5.getAttribute("disabled")===null)&&(!b5.parentNode.disabled||!bK.nodeName(b5.parentNode,"optgroup"))){b9=bK(b5).val();if(b6){return b9}ca.push(b9)}}return ca},set:function(b4,b5){var e=bK.makeArray(b5);bK(b4).find("option").each(function(){this.selected=bK.inArray(bK(this).val(),e)>=0});if(!e.length){b4.selectedIndex=-1}return e}}},attr:function(b8,b6,b9){var e,b7,b5,b4=b8.nodeType;if(!b8||b4===3||b4===8||b4===2){return}if(typeof b8.getAttribute===aD){return bK.prop(b8,b6,b9)}b7=b4!==1||!bK.isXMLDoc(b8);if(b7){b6=b6.toLowerCase();e=bK.attrHooks[b6]||(M.test(b6)?b0:a9)}if(b9!==aH){if(b9===null){bK.removeAttr(b8,b6)}else{if(e&&b7&&"set" in e&&(b5=e.set(b8,b9,b6))!==aH){return b5}else{b8.setAttribute(b6,b9+"");return b9}}}else{if(e&&b7&&"get" in e&&(b5=e.get(b8,b6))!==null){return b5}else{if(typeof b8.getAttribute!==aD){b5=b8.getAttribute(b6)}return b5==null?aH:b5}}},removeAttr:function(b5,b7){var e,b6,b4=0,b8=b7&&b7.match(ad);if(b8&&b5.nodeType===1){while((e=b8[b4++])){b6=bK.propFix[e]||e;if(M.test(e)){if(!bQ&&ar.test(e)){b5[bK.camelCase("default-"+e)]=b5[b6]=false}else{b5[b6]=false}}else{bK.attr(b5,e,"")}b5.removeAttribute(bQ?e:b6)}}},attrHooks:{type:{set:function(e,b4){if(!bK.support.radioValue&&b4==="radio"&&bK.nodeName(e,"input")){var b5=e.value;e.setAttribute("type",b4);if(b5){e.value=b5}return b4}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(b8,b6,b9){var b5,e,b7,b4=b8.nodeType;if(!b8||b4===3||b4===8||b4===2){return}b7=b4!==1||!bK.isXMLDoc(b8);if(b7){b6=bK.propFix[b6]||b6;e=bK.propHooks[b6]}if(b9!==aH){if(e&&"set" in e&&(b5=e.set(b8,b9,b6))!==aH){return b5}else{return(b8[b6]=b9)}}else{if(e&&"get" in e&&(b5=e.get(b8,b6))!==null){return b5}else{return b8[b6]}}},propHooks:{tabIndex:{get:function(b4){var e=b4.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):aG.test(b4.nodeName)||E.test(b4.nodeName)&&b4.href?0:aH}}}});b0={get:function(b6,b4){var b7=bK.prop(b6,b4),e=typeof b7==="boolean"&&b6.getAttribute(b4),b5=typeof b7==="boolean"?bG&&bQ?e!=null:ar.test(b4)?b6[bK.camelCase("default-"+b4)]:!!e:b6.getAttributeNode(b4);return b5&&b5.value!==false?b4.toLowerCase():aH},set:function(b4,b5,e){if(b5===false){bK.removeAttr(b4,e)}else{if(bG&&bQ||!ar.test(e)){b4.setAttribute(!bQ&&bK.propFix[e]||e,e)}else{b4[bK.camelCase("default-"+e)]=b4[e]=true}}return e}};if(!bG||!bQ){bK.attrHooks.value={get:function(b5,b4){var e=b5.getAttributeNode(b4);return bK.nodeName(b5,"input")?b5.defaultValue:e&&e.specified?e.value:aH},set:function(b4,b5,e){if(bK.nodeName(b4,"input")){b4.defaultValue=b5}else{return a9&&a9.set(b4,b5,e)}}}}if(!bQ){a9=bK.valHooks.button={get:function(b5,b4){var e=b5.getAttributeNode(b4);return e&&(b4==="id"||b4==="name"||b4==="coords"?e.value!=="":e.specified)?e.value:aH},set:function(b5,b6,b4){var e=b5.getAttributeNode(b4);if(!e){b5.setAttributeNode((e=b5.ownerDocument.createAttribute(b4)))}e.value=b6+="";return b4==="value"||b6===b5.getAttribute(b4)?b6:aH}};bK.attrHooks.contenteditable={get:a9.get,set:function(b4,b5,e){a9.set(b4,b5===""?false:b5,e)}};bK.each(["width","height"],function(b4,e){bK.attrHooks[e]=bK.extend(bK.attrHooks[e],{set:function(b5,b6){if(b6===""){b5.setAttribute(e,"auto");return b6}}})})}if(!bK.support.hrefNormalized){bK.each(["href","src","width","height"],function(b4,e){bK.attrHooks[e]=bK.extend(bK.attrHooks[e],{get:function(b6){var b5=b6.getAttribute(e,2);return b5==null?aH:b5}})});bK.each(["href","src"],function(b4,e){bK.propHooks[e]={get:function(b5){return b5.getAttribute(e,4)}}})}if(!bK.support.style){bK.attrHooks.style={get:function(e){return e.style.cssText||aH},set:function(e,b4){return(e.style.cssText=b4+"")}}}if(!bK.support.optSelected){bK.propHooks.selected=bK.extend(bK.propHooks.selected,{get:function(b4){var e=b4.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!bK.support.enctype){bK.propFix.enctype="encoding"}if(!bK.support.checkOn){bK.each(["radio","checkbox"],function(){bK.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}bK.each(["radio","checkbox"],function(){bK.valHooks[this]=bK.extend(bK.valHooks[this],{set:function(e,b4){if(bK.isArray(b4)){return(e.checked=bK.inArray(bK(e).val(),b4)>=0)}}})});var bI=/^(?:input|select|textarea)$/i,a4=/^key/,bO=/^(?:mouse|contextmenu)|click/,bC=/^(?:focusinfocus|focusoutblur)$/,bv=/^([^.]*)(?:\.(.+)|)$/;function S(){return true}function Y(){return false}bK.event={global:{},add:function(b7,cc,ch,b9,b8){var ca,ci,cj,b5,ce,cb,cg,b6,cf,e,b4,cd=bK._data(b7);if(!cd){return}if(ch.handler){b5=ch;ch=b5.handler;b8=b5.selector}if(!ch.guid){ch.guid=bK.guid++}if(!(ci=cd.events)){ci=cd.events={}}if(!(cb=cd.handle)){cb=cd.handle=function(ck){return typeof bK!==aD&&(!ck||bK.event.triggered!==ck.type)?bK.event.dispatch.apply(cb.elem,arguments):aH};cb.elem=b7}cc=(cc||"").match(ad)||[""];cj=cc.length;while(cj--){ca=bv.exec(cc[cj])||[];cf=b4=ca[1];e=(ca[2]||"").split(".").sort();ce=bK.event.special[cf]||{};cf=(b8?ce.delegateType:ce.bindType)||cf;ce=bK.event.special[cf]||{};cg=bK.extend({type:cf,origType:b4,data:b9,handler:ch,guid:ch.guid,selector:b8,needsContext:b8&&bK.expr.match.needsContext.test(b8),namespace:e.join(".")},b5);if(!(b6=ci[cf])){b6=ci[cf]=[];b6.delegateCount=0;if(!ce.setup||ce.setup.call(b7,b9,e,cb)===false){if(b7.addEventListener){b7.addEventListener(cf,cb,false)}else{if(b7.attachEvent){b7.attachEvent("on"+cf,cb)}}}}if(ce.add){ce.add.call(b7,cg);if(!cg.handler.guid){cg.handler.guid=ch.guid}}if(b8){b6.splice(b6.delegateCount++,0,cg)}else{b6.push(cg)}bK.event.global[cf]=true}b7=null},remove:function(b6,cc,cj,b7,cb){var b9,cg,ca,b8,ci,ch,ce,b5,cf,e,b4,cd=bK.hasData(b6)&&bK._data(b6);if(!cd||!(ch=cd.events)){return}cc=(cc||"").match(ad)||[""];ci=cc.length;while(ci--){ca=bv.exec(cc[ci])||[];cf=b4=ca[1];e=(ca[2]||"").split(".").sort();if(!cf){for(cf in ch){bK.event.remove(b6,cf+cc[ci],cj,b7,true)}continue}ce=bK.event.special[cf]||{};cf=(b7?ce.delegateType:ce.bindType)||cf;b5=ch[cf]||[];ca=ca[2]&&new RegExp("(^|\\.)"+e.join("\\.(?:.*\\.|)")+"(\\.|$)");b8=b9=b5.length;while(b9--){cg=b5[b9];if((cb||b4===cg.origType)&&(!cj||cj.guid===cg.guid)&&(!ca||ca.test(cg.namespace))&&(!b7||b7===cg.selector||b7==="**"&&cg.selector)){b5.splice(b9,1);if(cg.selector){b5.delegateCount--}if(ce.remove){ce.remove.call(b6,cg)}}}if(b8&&!b5.length){if(!ce.teardown||ce.teardown.call(b6,e,cd.handle)===false){bK.removeEvent(b6,cf,cd.handle)}delete ch[cf]}}if(bK.isEmptyObject(ch)){delete cd.handle;bK._removeData(b6,"events")}},trigger:function(b4,cb,b7,ci){var cc,b6,cg,ch,ce,ca,b9,b8=[b7||l],cf=W.call(b4,"type")?b4.type:b4,b5=W.call(b4,"namespace")?b4.namespace.split("."):[];cg=ca=b7=b7||l;if(b7.nodeType===3||b7.nodeType===8){return}if(bC.test(cf+bK.event.triggered)){return}if(cf.indexOf(".")>=0){b5=cf.split(".");cf=b5.shift();b5.sort()}b6=cf.indexOf(":")<0&&"on"+cf;b4=b4[bK.expando]?b4:new bK.Event(cf,typeof b4==="object"&&b4);b4.isTrigger=true;b4.namespace=b5.join(".");b4.namespace_re=b4.namespace?new RegExp("(^|\\.)"+b5.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;b4.result=aH;if(!b4.target){b4.target=b7}cb=cb==null?[b4]:bK.makeArray(cb,[b4]);ce=bK.event.special[cf]||{};if(!ci&&ce.trigger&&ce.trigger.apply(b7,cb)===false){return}if(!ci&&!ce.noBubble&&!bK.isWindow(b7)){ch=ce.delegateType||cf;if(!bC.test(ch+cf)){cg=cg.parentNode}for(;cg;cg=cg.parentNode){b8.push(cg);ca=cg}if(ca===(b7.ownerDocument||l)){b8.push(ca.defaultView||ca.parentWindow||a3)}}b9=0;while((cg=b8[b9++])&&!b4.isPropagationStopped()){b4.type=b9>1?ch:ce.bindType||cf;cc=(bK._data(cg,"events")||{})[b4.type]&&bK._data(cg,"handle");if(cc){cc.apply(cg,cb)}cc=b6&&cg[b6];if(cc&&bK.acceptData(cg)&&cc.apply&&cc.apply(cg,cb)===false){b4.preventDefault()}}b4.type=cf;if(!ci&&!b4.isDefaultPrevented()){if((!ce._default||ce._default.apply(b7.ownerDocument,cb)===false)&&!(cf==="click"&&bK.nodeName(b7,"a"))&&bK.acceptData(b7)){if(b6&&b7[cf]&&!bK.isWindow(b7)){ca=b7[b6];if(ca){b7[b6]=null}bK.event.triggered=cf;try{b7[cf]()}catch(cd){}bK.event.triggered=aH;if(ca){b7[b6]=ca}}}}return b4.result},dispatch:function(e){e=bK.event.fix(e);var b7,b8,cc,b4,b6,cb=[],ca=a5.call(arguments),b5=(bK._data(this,"events")||{})[e.type]||[],b9=bK.event.special[e.type]||{};ca[0]=e;e.delegateTarget=this;if(b9.preDispatch&&b9.preDispatch.call(this,e)===false){return}cb=bK.event.handlers.call(this,e,b5);b7=0;while((b4=cb[b7++])&&!e.isPropagationStopped()){e.currentTarget=b4.elem;b6=0;while((cc=b4.handlers[b6++])&&!e.isImmediatePropagationStopped()){if(!e.namespace_re||e.namespace_re.test(cc.namespace)){e.handleObj=cc;e.data=cc.data;b8=((bK.event.special[cc.origType]||{}).handle||cc.handler).apply(b4.elem,ca);if(b8!==aH){if((e.result=b8)===false){e.preventDefault();e.stopPropagation()}}}}}if(b9.postDispatch){b9.postDispatch.call(this,e)}return e.result},handlers:function(e,b5){var b4,ca,b8,b7,b9=[],b6=b5.delegateCount,cb=e.target;if(b6&&cb.nodeType&&(!e.button||e.type!=="click")){for(;cb!=this;cb=cb.parentNode||this){if(cb.nodeType===1&&(cb.disabled!==true||e.type!=="click")){b8=[];for(b7=0;b7<b6;b7++){ca=b5[b7];b4=ca.selector+" ";if(b8[b4]===aH){b8[b4]=ca.needsContext?bK(b4,this).index(cb)>=0:bK.find(b4,this,null,[cb]).length}if(b8[b4]){b8.push(ca)}}if(b8.length){b9.push({elem:cb,handlers:b8})}}}}if(b6<b5.length){b9.push({elem:this,handlers:b5.slice(b6)})}return b9},fix:function(b6){if(b6[bK.expando]){return b6}var b4,b9,b8,b5=b6.type,e=b6,b7=this.fixHooks[b5];if(!b7){this.fixHooks[b5]=b7=bO.test(b5)?this.mouseHooks:a4.test(b5)?this.keyHooks:{}}b8=b7.props?this.props.concat(b7.props):this.props;b6=new bK.Event(e);b4=b8.length;while(b4--){b9=b8[b4];b6[b9]=e[b9]}if(!b6.target){b6.target=e.srcElement||l}if(b6.target.nodeType===3){b6.target=b6.target.parentNode}b6.metaKey=!!b6.metaKey;return b7.filter?b7.filter(b6,e):b6},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(b4,e){if(b4.which==null){b4.which=e.charCode!=null?e.charCode:e.keyCode}return b4}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(b6,b5){var e,b7,b8,b4=b5.button,b9=b5.fromElement;if(b6.pageX==null&&b5.clientX!=null){b7=b6.target.ownerDocument||l;b8=b7.documentElement;e=b7.body;b6.pageX=b5.clientX+(b8&&b8.scrollLeft||e&&e.scrollLeft||0)-(b8&&b8.clientLeft||e&&e.clientLeft||0);b6.pageY=b5.clientY+(b8&&b8.scrollTop||e&&e.scrollTop||0)-(b8&&b8.clientTop||e&&e.clientTop||0)}if(!b6.relatedTarget&&b9){b6.relatedTarget=b9===b6.target?b5.toElement:b9}if(!b6.which&&b4!==aH){b6.which=(b4&1?1:(b4&2?3:(b4&4?2:0)))}return b6}},special:{load:{noBubble:true},click:{trigger:function(){if(bK.nodeName(this,"input")&&this.type==="checkbox"&&this.click){this.click();return false}}},focus:{trigger:function(){if(this!==l.activeElement&&this.focus){try{this.focus();return false}catch(b4){}}},delegateType:"focusin"},blur:{trigger:function(){if(this===l.activeElement&&this.blur){this.blur();return false}},delegateType:"focusout"},beforeunload:{postDispatch:function(e){if(e.result!==aH){e.originalEvent.returnValue=e.result}}}},simulate:function(b5,b7,b6,b4){var b8=bK.extend(new bK.Event(),b6,{type:b5,isSimulated:true,originalEvent:{}});if(b4){bK.event.trigger(b8,null,b7)}else{bK.event.dispatch.call(b7,b8)}if(b8.isDefaultPrevented()){b6.preventDefault()}}};bK.removeEvent=l.removeEventListener?function(b4,e,b5){if(b4.removeEventListener){b4.removeEventListener(e,b5,false)}}:function(b5,b4,b6){var e="on"+b4;if(b5.detachEvent){if(typeof b5[e]===aD){b5[e]=null}b5.detachEvent(e,b6)}};bK.Event=function(b4,e){if(!(this instanceof bK.Event)){return new bK.Event(b4,e)}if(b4&&b4.type){this.originalEvent=b4;this.type=b4.type;this.isDefaultPrevented=(b4.defaultPrevented||b4.returnValue===false||b4.getPreventDefault&&b4.getPreventDefault())?S:Y}else{this.type=b4}if(e){bK.extend(this,e)}this.timeStamp=b4&&b4.timeStamp||bK.now();this[bK.expando]=true};bK.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var b4=this.originalEvent;this.isDefaultPrevented=S;if(!b4){return}if(b4.preventDefault){b4.preventDefault()}else{b4.returnValue=false}},stopPropagation:function(){var b4=this.originalEvent;this.isPropagationStopped=S;if(!b4){return}if(b4.stopPropagation){b4.stopPropagation()}b4.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=S;this.stopPropagation()}};bK.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(b4,e){bK.event.special[b4]={delegateType:e,bindType:e,handle:function(b7){var b5,b9=this,b8=b7.relatedTarget,b6=b7.handleObj;if(!b8||(b8!==b9&&!bK.contains(b9,b8))){b7.type=b6.origType;b5=b6.handler.apply(this,arguments);b7.type=e}return b5}}});if(!bK.support.submitBubbles){bK.event.special.submit={setup:function(){if(bK.nodeName(this,"form")){return false}bK.event.add(this,"click._submit keypress._submit",function(b6){var b5=b6.target,b4=bK.nodeName(b5,"input")||bK.nodeName(b5,"button")?b5.form:aH;if(b4&&!bK._data(b4,"submitBubbles")){bK.event.add(b4,"submit._submit",function(e){e._submit_bubble=true});bK._data(b4,"submitBubbles",true)}})},postDispatch:function(e){if(e._submit_bubble){delete e._submit_bubble;if(this.parentNode&&!e.isTrigger){bK.event.simulate("submit",this.parentNode,e,true)}}},teardown:function(){if(bK.nodeName(this,"form")){return false}bK.event.remove(this,"._submit")}}}if(!bK.support.changeBubbles){bK.event.special.change={setup:function(){if(bI.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){bK.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});bK.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false}bK.event.simulate("change",this,e,true)})}return false}bK.event.add(this,"beforeactivate._change",function(b5){var b4=b5.target;if(bI.test(b4.nodeName)&&!bK._data(b4,"changeBubbles")){bK.event.add(b4,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){bK.event.simulate("change",this.parentNode,e,true)}});bK._data(b4,"changeBubbles",true)}})},handle:function(b4){var e=b4.target;if(this!==e||b4.isSimulated||b4.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return b4.handleObj.handler.apply(this,arguments)}},teardown:function(){bK.event.remove(this,"._change");return !bI.test(this.nodeName)}}}if(!bK.support.focusinBubbles){bK.each({focus:"focusin",blur:"focusout"},function(b6,e){var b4=0,b5=function(b7){bK.event.simulate(e,b7.target,bK.event.fix(b7),true)};bK.event.special[e]={setup:function(){if(b4++===0){l.addEventListener(b6,b5,true)}},teardown:function(){if(--b4===0){l.removeEventListener(b6,b5,true)}}}})}bK.fn.extend({on:function(b5,e,b8,b7,b4){var b6,b9;if(typeof b5==="object"){if(typeof e!=="string"){b8=b8||e;e=aH}for(b6 in b5){this.on(b6,e,b8,b5[b6],b4)}return this}if(b8==null&&b7==null){b7=e;b8=e=aH}else{if(b7==null){if(typeof e==="string"){b7=b8;b8=aH}else{b7=b8;b8=e;e=aH}}}if(b7===false){b7=Y}else{if(!b7){return this}}if(b4===1){b9=b7;b7=function(ca){bK().off(ca);return b9.apply(this,arguments)};b7.guid=b9.guid||(b9.guid=bK.guid++)}return this.each(function(){bK.event.add(this,b5,b7,b8,e)})},one:function(b4,e,b6,b5){return this.on(b4,e,b6,b5,1)},off:function(b5,e,b7){var b4,b6;if(b5&&b5.preventDefault&&b5.handleObj){b4=b5.handleObj;bK(b5.delegateTarget).off(b4.namespace?b4.origType+"."+b4.namespace:b4.origType,b4.selector,b4.handler);return this}if(typeof b5==="object"){for(b6 in b5){this.off(b6,e,b5[b6])}return this}if(e===false||typeof e==="function"){b7=e;e=aH}if(b7===false){b7=Y}return this.each(function(){bK.event.remove(this,b5,b7,e)})},bind:function(e,b5,b4){return this.on(e,null,b5,b4)},unbind:function(e,b4){return this.off(e,null,b4)},delegate:function(e,b4,b6,b5){return this.on(b4,e,b6,b5)},undelegate:function(e,b4,b5){return arguments.length===1?this.off(e,"**"):this.off(b4,e||"**",b5)},trigger:function(e,b4){return this.each(function(){bK.event.trigger(e,b4,this)})},triggerHandler:function(e,b5){var b4=this[0];if(b4){return bK.event.trigger(e,b5,b4,true)}}});
/*!
 * Sizzle CSS Selector Engine
 * Copyright 2012 jQuery Foundation and other contributors
 * Released under the MIT license
 * http://sizzlejs.com/
 */
(function(db,ci){var cy,cc,co,cI,cK,cT,cU,dh,cW,cC,cp,ce,c0,dc,cb,cG,cE,c6="sizzle"+-(new Date()),cJ=db.document,de={},df=0,c1=0,b6=cA(),c5=cA(),cH=cA(),da=typeof ci,cO=1<<31,c8=[],c9=c8.pop,b5=c8.push,cn=c8.slice,ca=c8.indexOf||function(dj){var di=0,e=this.length;for(;di<e;di++){if(this[di]===dj){return di}}return -1},cq="[\\x20\\t\\r\\n\\f]",b4="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",cL=b4.replace("w","w#"),cj="([*^$|!~]?=)",c3="\\["+cq+"*("+b4+")"+cq+"*(?:"+cj+cq+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+cL+")|)|)"+cq+"*\\]",cl=":("+b4+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+c3.replace(3,8)+")*)|.*)\\)|)",cs=new RegExp("^"+cq+"+|((?:^|[^\\\\])(?:\\\\.)*)"+cq+"+$","g"),cv=new RegExp("^"+cq+"*,"+cq+"*"),cB=new RegExp("^"+cq+"*([\\x20\\t\\r\\n\\f>+~])"+cq+"*"),cQ=new RegExp(cl),cR=new RegExp("^"+cL+"$"),cZ={ID:new RegExp("^#("+b4+")"),CLASS:new RegExp("^\\.("+b4+")"),NAME:new RegExp("^\\[name=['\"]?("+b4+")['\"]?\\]"),TAG:new RegExp("^("+b4.replace("w","w*")+")"),ATTR:new RegExp("^"+c3),PSEUDO:new RegExp("^"+cl),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+cq+"*(even|odd|(([+-]|)(\\d*)n|)"+cq+"*(?:([+-]|)"+cq+"*(\\d+)|))"+cq+"*\\)|)","i"),needsContext:new RegExp("^"+cq+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+cq+"*((?:-\\d)?\\d*)"+cq+"*\\)|)(?=[^-]|$)","i")},cX=/[\x20\t\r\n\f]*[+~]/,cN=/^[^{]+\{\s*\[native code/,cP=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,b9=/^(?:input|select|textarea|button)$/i,cm=/^h\d$/i,cM=/'|\\/g,cu=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,ct=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,c2=function(e,dj){var di="0x"+dj-65536;return di!==di?dj:di<0?String.fromCharCode(di+65536):String.fromCharCode(di>>10|55296,di&1023|56320)};try{cn.call(cJ.documentElement.childNodes,0)[0].nodeType}catch(cD){cn=function(di){var dj,e=[];while((dj=this[di++])){e.push(dj)}return e}}function cF(e){return cN.test(e+"")}function cA(){var e,di=[];return(e=function(dj,dk){if(di.push(dj+=" ")>co.cacheLength){delete e[di.shift()]}return(e[dj]=dk)})}function ck(e){e[c6]=true;return e}function cd(di){var dk=cC.createElement("div");try{return di(dk)}catch(dj){return false}finally{dk=null}}function cw(dq,di,du,dw){var dv,dm,dn,ds,dt,dl,dk,e,dj,dr;if((di?di.ownerDocument||di:cJ)!==cC){cW(di)}di=di||cC;du=du||[];if(!dq||typeof dq!=="string"){return du}if((ds=di.nodeType)!==1&&ds!==9){return[]}if(!ce&&!dw){if((dv=cP.exec(dq))){if((dn=dv[1])){if(ds===9){dm=di.getElementById(dn);if(dm&&dm.parentNode){if(dm.id===dn){du.push(dm);return du}}else{return du}}else{if(di.ownerDocument&&(dm=di.ownerDocument.getElementById(dn))&&cG(di,dm)&&dm.id===dn){du.push(dm);return du}}}else{if(dv[2]){b5.apply(du,cn.call(di.getElementsByTagName(dq),0));return du}else{if((dn=dv[3])&&de.getByClassName&&di.getElementsByClassName){b5.apply(du,cn.call(di.getElementsByClassName(dn),0));return du}}}}if(de.qsa&&!c0.test(dq)){dk=true;e=c6;dj=di;dr=ds===9&&dq;if(ds===1&&di.nodeName.toLowerCase()!=="object"){dl=cg(dq);if((dk=di.getAttribute("id"))){e=dk.replace(cM,"\\$&")}else{di.setAttribute("id",e)}e="[id='"+e+"'] ";dt=dl.length;while(dt--){dl[dt]=e+ch(dl[dt])}dj=cX.test(dq)&&di.parentNode||di;dr=dl.join(",")}if(dr){try{b5.apply(du,cn.call(dj.querySelectorAll(dr),0));return du}catch(dp){}finally{if(!dk){di.removeAttribute("id")}}}}}return dd(dq.replace(cs,"$1"),di,du,dw)}cK=cw.isXML=function(e){var di=e&&(e.ownerDocument||e).documentElement;return di?di.nodeName!=="HTML":false};cW=cw.setDocument=function(e){var di=e?e.ownerDocument||e:cJ;if(di===cC||di.nodeType!==9||!di.documentElement){return cC}cC=di;cp=di.documentElement;ce=cK(di);de.tagNameNoComments=cd(function(dj){dj.appendChild(di.createComment(""));return !dj.getElementsByTagName("*").length});de.attributes=cd(function(dk){dk.innerHTML="<select></select>";var dj=typeof dk.lastChild.getAttribute("multiple");return dj!=="boolean"&&dj!=="string"});de.getByClassName=cd(function(dj){dj.innerHTML="<div class='hidden e'></div><div class='hidden'></div>";if(!dj.getElementsByClassName||!dj.getElementsByClassName("e").length){return false}dj.lastChild.className="e";return dj.getElementsByClassName("e").length===2});de.getByName=cd(function(dk){dk.id=c6+0;dk.innerHTML="<a name='"+c6+"'></a><div name='"+c6+"'></div>";cp.insertBefore(dk,cp.firstChild);var dj=di.getElementsByName&&di.getElementsByName(c6).length===2+di.getElementsByName(c6+0).length;de.getIdNotName=!di.getElementById(c6);cp.removeChild(dk);return dj});co.attrHandle=cd(function(dj){dj.innerHTML="<a href='#'></a>";return dj.firstChild&&typeof dj.firstChild.getAttribute!==da&&dj.firstChild.getAttribute("href")==="#"})?{}:{href:function(dj){return dj.getAttribute("href",2)},type:function(dj){return dj.getAttribute("type")}};if(de.getIdNotName){co.find.ID=function(dl,dk){if(typeof dk.getElementById!==da&&!ce){var dj=dk.getElementById(dl);return dj&&dj.parentNode?[dj]:[]}};co.filter.ID=function(dk){var dj=dk.replace(ct,c2);return function(dl){return dl.getAttribute("id")===dj}}}else{co.find.ID=function(dl,dk){if(typeof dk.getElementById!==da&&!ce){var dj=dk.getElementById(dl);return dj?dj.id===dl||typeof dj.getAttributeNode!==da&&dj.getAttributeNode("id").value===dl?[dj]:ci:[]}};co.filter.ID=function(dk){var dj=dk.replace(ct,c2);return function(dm){var dl=typeof dm.getAttributeNode!==da&&dm.getAttributeNode("id");return dl&&dl.value===dj}}}co.find.TAG=de.tagNameNoComments?function(dj,dk){if(typeof dk.getElementsByTagName!==da){return dk.getElementsByTagName(dj)}}:function(dj,dn){var dp,dm=[],dl=0,dk=dn.getElementsByTagName(dj);if(dj==="*"){while((dp=dk[dl++])){if(dp.nodeType===1){dm.push(dp)}}return dm}return dk};co.find.NAME=de.getByName&&function(dj,dk){if(typeof dk.getElementsByName!==da){return dk.getElementsByName(name)}};co.find.CLASS=de.getByClassName&&function(dk,dj){if(typeof dj.getElementsByClassName!==da&&!ce){return dj.getElementsByClassName(dk)}};dc=[];c0=[":focus"];if((de.qsa=cF(di.querySelectorAll))){cd(function(dj){dj.innerHTML="<select><option selected=''></option></select>";if(!dj.querySelectorAll("[selected]").length){c0.push("\\["+cq+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)")}if(!dj.querySelectorAll(":checked").length){c0.push(":checked")}});cd(function(dj){dj.innerHTML="<input type='hidden' i=''/>";if(dj.querySelectorAll("[i^='']").length){c0.push("[*^$]="+cq+"*(?:\"\"|'')")}if(!dj.querySelectorAll(":enabled").length){c0.push(":enabled",":disabled")}dj.querySelectorAll("*,:x");c0.push(",.*:")})}if((de.matchesSelector=cF((cb=cp.matchesSelector||cp.mozMatchesSelector||cp.webkitMatchesSelector||cp.oMatchesSelector||cp.msMatchesSelector)))){cd(function(dj){de.disconnectedMatch=cb.call(dj,"div");cb.call(dj,"[s!='']:x");dc.push("!=",cl)})}c0=new RegExp(c0.join("|"));dc=new RegExp(dc.join("|"));cG=cF(cp.contains)||cp.compareDocumentPosition?function(dk,dj){var dm=dk.nodeType===9?dk.documentElement:dk,dl=dj&&dj.parentNode;return dk===dl||!!(dl&&dl.nodeType===1&&(dm.contains?dm.contains(dl):dk.compareDocumentPosition&&dk.compareDocumentPosition(dl)&16))}:function(dk,dj){if(dj){while((dj=dj.parentNode)){if(dj===dk){return true}}}return false};cE=cp.compareDocumentPosition?function(dk,dj){var dl;if(dk===dj){cU=true;return 0}if((dl=dj.compareDocumentPosition&&dk.compareDocumentPosition&&dk.compareDocumentPosition(dj))){if(dl&1||dk.parentNode&&dk.parentNode.nodeType===11){if(dk===di||cG(cJ,dk)){return -1}if(dj===di||cG(cJ,dj)){return 1}return 0}return dl&4?-1:1}return dk.compareDocumentPosition?-1:1}:function(dk,dj){var dr,dn=0,dq=dk.parentNode,dm=dj.parentNode,dl=[dk],dp=[dj];if(dk===dj){cU=true;return 0}else{if(!dq||!dm){return dk===di?-1:dj===di?1:dq?-1:dm?1:0}else{if(dq===dm){return b7(dk,dj)}}}dr=dk;while((dr=dr.parentNode)){dl.unshift(dr)}dr=dj;while((dr=dr.parentNode)){dp.unshift(dr)}while(dl[dn]===dp[dn]){dn++}return dn?b7(dl[dn],dp[dn]):dl[dn]===cJ?-1:dp[dn]===cJ?1:0};cU=false;[0,0].sort(cE);de.detectDuplicates=cU;return cC};cw.matches=function(di,e){return cw(di,null,null,e)};cw.matchesSelector=function(dj,dl){if((dj.ownerDocument||dj)!==cC){cW(dj)}dl=dl.replace(cu,"='$1']");if(de.matchesSelector&&!ce&&(!dc||!dc.test(dl))&&!c0.test(dl)){try{var di=cb.call(dj,dl);if(di||de.disconnectedMatch||dj.document&&dj.document.nodeType!==11){return di}}catch(dk){}}return cw(dl,cC,null,[dj]).length>0};cw.contains=function(e,di){if((e.ownerDocument||e)!==cC){cW(e)}return cG(e,di)};cw.attr=function(di,e){var dj;if((di.ownerDocument||di)!==cC){cW(di)}if(!ce){e=e.toLowerCase()}if((dj=co.attrHandle[e])){return dj(di)}if(ce||de.attributes){return di.getAttribute(e)}return((dj=di.getAttributeNode(e))||di.getAttribute(e))&&di[e]===true?e:dj&&dj.specified?dj.value:null};cw.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};cw.uniqueSort=function(dj){var dk,dl=[],di=1,e=0;cU=!de.detectDuplicates;dj.sort(cE);if(cU){for(;(dk=dj[di]);di++){if(dk===dj[di-1]){e=dl.push(di)}}while(e--){dj.splice(dl[e],1)}}return dj};function b7(di,e){var dk=e&&di,dj=dk&&(~e.sourceIndex||cO)-(~di.sourceIndex||cO);if(dj){return dj}if(dk){while((dk=dk.nextSibling)){if(dk===e){return -1}}}return di?1:-1}function cx(e){return function(dj){var di=dj.nodeName.toLowerCase();return di==="input"&&dj.type===e}}function b8(e){return function(dj){var di=dj.nodeName.toLowerCase();return(di==="input"||di==="button")&&dj.type===e}}function c4(e){return ck(function(di){di=+di;return ck(function(dj,dn){var dl,dk=e([],dj.length,di),dm=dk.length;while(dm--){if(dj[(dl=dk[dm])]){dj[dl]=!(dn[dl]=dj[dl])}}})})}cI=cw.getText=function(dl){var dk,di="",dj=0,e=dl.nodeType;if(!e){for(;(dk=dl[dj]);dj++){di+=cI(dk)}}else{if(e===1||e===9||e===11){if(typeof dl.textContent==="string"){return dl.textContent}else{for(dl=dl.firstChild;dl;dl=dl.nextSibling){di+=cI(dl)}}}else{if(e===3||e===4){return dl.nodeValue}}}return di};co=cw.selectors={cacheLength:50,createPseudo:ck,match:cZ,find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){e[1]=e[1].replace(ct,c2);e[3]=(e[4]||e[5]||"").replace(ct,c2);if(e[2]==="~="){e[3]=" "+e[3]+" "}return e.slice(0,4)},CHILD:function(e){e[1]=e[1].toLowerCase();if(e[1].slice(0,3)==="nth"){if(!e[3]){cw.error(e[0])}e[4]=+(e[4]?e[5]+(e[6]||1):2*(e[3]==="even"||e[3]==="odd"));e[5]=+((e[7]+e[8])||e[3]==="odd")}else{if(e[3]){cw.error(e[0])}}return e},PSEUDO:function(di){var e,dj=!di[5]&&di[2];if(cZ.CHILD.test(di[0])){return null}if(di[4]){di[2]=di[4]}else{if(dj&&cQ.test(dj)&&(e=cg(dj,true))&&(e=dj.indexOf(")",dj.length-e)-dj.length)){di[0]=di[0].slice(0,e);di[2]=dj.slice(0,e)}}return di.slice(0,3)}},filter:{TAG:function(e){if(e==="*"){return function(){return true}}e=e.replace(ct,c2).toLowerCase();return function(di){return di.nodeName&&di.nodeName.toLowerCase()===e}},CLASS:function(e){var di=b6[e+" "];return di||(di=new RegExp("(^|"+cq+")"+e+"("+cq+"|$)"))&&b6(e,function(dj){return di.test(dj.className||(typeof dj.getAttribute!==da&&dj.getAttribute("class"))||"")})},ATTR:function(dj,di,e){return function(dl){var dk=cw.attr(dl,dj);if(dk==null){return di==="!="}if(!di){return true}dk+="";return di==="="?dk===e:di==="!="?dk!==e:di==="^="?e&&dk.indexOf(e)===0:di==="*="?e&&dk.indexOf(e)>-1:di==="$="?e&&dk.slice(-e.length)===e:di==="~="?(" "+dk+" ").indexOf(e)>-1:di==="|="?dk===e||dk.slice(0,e.length+1)===e+"-":false}},CHILD:function(di,dl,dk,dm,dj){var dp=di.slice(0,3)!=="nth",e=di.slice(-4)!=="last",dn=dl==="of-type";return dm===1&&dj===0?function(dq){return !!dq.parentNode}:function(dw,du,dz){var dq,dC,dx,dB,dy,dt,dv=dp!==e?"nextSibling":"previousSibling",dA=dw.parentNode,ds=dn&&dw.nodeName.toLowerCase(),dr=!dz&&!dn;if(dA){if(dp){while(dv){dx=dw;while((dx=dx[dv])){if(dn?dx.nodeName.toLowerCase()===ds:dx.nodeType===1){return false}}dt=dv=di==="only"&&!dt&&"nextSibling"}return true}dt=[e?dA.firstChild:dA.lastChild];if(e&&dr){dC=dA[c6]||(dA[c6]={});dq=dC[di]||[];dy=dq[0]===df&&dq[1];dB=dq[0]===df&&dq[2];dx=dy&&dA.childNodes[dy];while((dx=++dy&&dx&&dx[dv]||(dB=dy=0)||dt.pop())){if(dx.nodeType===1&&++dB&&dx===dw){dC[di]=[df,dy,dB];break}}}else{if(dr&&(dq=(dw[c6]||(dw[c6]={}))[di])&&dq[0]===df){dB=dq[1]}else{while((dx=++dy&&dx&&dx[dv]||(dB=dy=0)||dt.pop())){if((dn?dx.nodeName.toLowerCase()===ds:dx.nodeType===1)&&++dB){if(dr){(dx[c6]||(dx[c6]={}))[di]=[df,dB]}if(dx===dw){break}}}}}dB-=dj;return dB===dm||(dB%dm===0&&dB/dm>=0)}}},PSEUDO:function(dk,dj){var e,di=co.pseudos[dk]||co.setFilters[dk.toLowerCase()]||cw.error("unsupported pseudo: "+dk);if(di[c6]){return di(dj)}if(di.length>1){e=[dk,dk,"",dj];return co.setFilters.hasOwnProperty(dk.toLowerCase())?ck(function(dn,dq){var dm,dl=di(dn,dj),dp=dl.length;while(dp--){dm=ca.call(dn,dl[dp]);dn[dm]=!(dq[dm]=dl[dp])}}):function(dl){return di(dl,0,e)}}return di}},pseudos:{not:ck(function(e){var di=[],dj=[],dk=cT(e.replace(cs,"$1"));return dk[c6]?ck(function(dm,ds,dq,dn){var dr,dl=dk(dm,null,dn,[]),dp=dm.length;while(dp--){if((dr=dl[dp])){dm[dp]=!(ds[dp]=dr)}}}):function(dn,dm,dl){di[0]=dn;dk(di,null,dl,dj);return !dj.pop()}}),has:ck(function(e){return function(di){return cw(e,di).length>0}}),contains:ck(function(e){return function(di){return(di.textContent||di.innerText||cI(di)).indexOf(e)>-1}}),lang:ck(function(e){if(!cR.test(e||"")){cw.error("unsupported lang: "+e)}e=e.replace(ct,c2).toLowerCase();return function(dj){var di;do{if((di=ce?dj.getAttribute("xml:lang")||dj.getAttribute("lang"):dj.lang)){di=di.toLowerCase();return di===e||di.indexOf(e+"-")===0}}while((dj=dj.parentNode)&&dj.nodeType===1);return false}}),target:function(e){var di=db.location&&db.location.hash;return di&&di.slice(1)===e.id},root:function(e){return e===cp},focus:function(e){return e===cC.activeElement&&(!cC.hasFocus||cC.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===false},disabled:function(e){return e.disabled===true},checked:function(e){var di=e.nodeName.toLowerCase();return(di==="input"&&!!e.checked)||(di==="option"&&!!e.selected)},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling){if(e.nodeName>"@"||e.nodeType===3||e.nodeType===4){return false}}return true},parent:function(e){return !co.pseudos.empty(e)},header:function(e){return cm.test(e.nodeName)},input:function(e){return b9.test(e.nodeName)},button:function(di){var e=di.nodeName.toLowerCase();return e==="input"&&di.type==="button"||e==="button"},text:function(di){var e;return di.nodeName.toLowerCase()==="input"&&di.type==="text"&&((e=di.getAttribute("type"))==null||e.toLowerCase()===di.type)},first:c4(function(){return[0]}),last:c4(function(e,di){return[di-1]}),eq:c4(function(e,dj,di){return[di<0?di+dj:di]}),even:c4(function(e,dj){var di=0;for(;di<dj;di+=2){e.push(di)}return e}),odd:c4(function(e,dj){var di=1;for(;di<dj;di+=2){e.push(di)}return e}),lt:c4(function(e,dk,dj){var di=dj<0?dj+dk:dj;for(;--di>=0;){e.push(di)}return e}),gt:c4(function(e,dk,dj){var di=dj<0?dj+dk:dj;for(;++di<dk;){e.push(di)}return e})}};for(cy in {radio:true,checkbox:true,file:true,password:true,image:true}){co.pseudos[cy]=cx(cy)}for(cy in {submit:true,reset:true}){co.pseudos[cy]=b8(cy)}function cg(dl,dr){var di,dm,dp,dq,dn,dj,e,dk=c5[dl+" "];if(dk){return dr?0:dk.slice(0)}dn=dl;dj=[];e=co.preFilter;while(dn){if(!di||(dm=cv.exec(dn))){if(dm){dn=dn.slice(dm[0].length)||dn}dj.push(dp=[])}di=false;if((dm=cB.exec(dn))){di=dm.shift();dp.push({value:di,type:dm[0].replace(cs," ")});dn=dn.slice(di.length)}for(dq in co.filter){if((dm=cZ[dq].exec(dn))&&(!e[dq]||(dm=e[dq](dm)))){di=dm.shift();dp.push({value:di,type:dq,matches:dm});dn=dn.slice(di.length)}}if(!di){break}}return dr?dn.length:dn?cw.error(dl):c5(dl,dj).slice(0)}function ch(dk){var dj=0,di=dk.length,e="";for(;dj<di;dj++){e+=dk[dj].value}return e}function cr(dl,dj,dk){var e=dj.dir,dm=dk&&e==="parentNode",di=c1++;return dj.first?function(dq,dp,dn){while((dq=dq[e])){if(dq.nodeType===1||dm){return dl(dq,dp,dn)}}}:function(ds,dq,dp){var du,dn,dr,dt=df+" "+di;if(dp){while((ds=ds[e])){if(ds.nodeType===1||dm){if(dl(ds,dq,dp)){return true}}}}else{while((ds=ds[e])){if(ds.nodeType===1||dm){dr=ds[c6]||(ds[c6]={});if((dn=dr[e])&&dn[0]===dt){if((du=dn[1])===true||du===cc){return du===true}}else{dn=dr[e]=[dt];dn[1]=dl(ds,dq,dp)||cc;if(dn[1]===true){return true}}}}}}}function dg(e){return e.length>1?function(dl,dk,di){var dj=e.length;while(dj--){if(!e[dj](dl,dk,di)){return false}}return true}:e[0]}function cY(e,di,dj,dk,dn){var dl,dr=[],dm=0,dp=e.length,dq=di!=null;for(;dm<dp;dm++){if((dl=e[dm])){if(!dj||dj(dl,dk,dn)){dr.push(dl);if(dq){di.push(dm)}}}}return dr}function cf(dj,di,dl,dk,dm,e){if(dk&&!dk[c6]){dk=cf(dk)}if(dm&&!dm[c6]){dm=cf(dm,e)}return ck(function(dy,dv,dq,dx){var dA,dw,ds,dr=[],dz=[],dp=dv.length,dn=dy||cz(di||"*",dq.nodeType?[dq]:dq,[]),dt=dj&&(dy||!di)?cY(dn,dr,dj,dq,dx):dn,du=dl?dm||(dy?dj:dp||dk)?[]:dv:dt;if(dl){dl(dt,du,dq,dx)}if(dk){dA=cY(du,dz);dk(dA,[],dq,dx);dw=dA.length;while(dw--){if((ds=dA[dw])){du[dz[dw]]=!(dt[dz[dw]]=ds)}}}if(dy){if(dm||dj){if(dm){dA=[];dw=du.length;while(dw--){if((ds=du[dw])){dA.push((dt[dw]=ds))}}dm(null,(du=[]),dA,dx)}dw=du.length;while(dw--){if((ds=du[dw])&&(dA=dm?ca.call(dy,ds):dr[dw])>-1){dy[dA]=!(dv[dA]=ds)}}}}else{du=cY(du===dv?du.splice(dp,du.length):du);if(dm){dm(null,dv,du,dx)}else{b5.apply(dv,du)}}})}function c7(dn){var di,dl,dj,dm=dn.length,dr=co.relative[dn[0].type],ds=dr||co.relative[" "],dk=dr?1:0,dp=cr(function(dt){return dt===di},ds,true),dq=cr(function(dt){return ca.call(di,dt)>-1},ds,true),e=[function(dv,du,dt){return(!dr&&(dt||du!==dh))||((di=du).nodeType?dp(dv,du,dt):dq(dv,du,dt))}];for(;dk<dm;dk++){if((dl=co.relative[dn[dk].type])){e=[cr(dg(e),dl)]}else{dl=co.filter[dn[dk].type].apply(null,dn[dk].matches);if(dl[c6]){dj=++dk;for(;dj<dm;dj++){if(co.relative[dn[dj].type]){break}}return cf(dk>1&&dg(e),dk>1&&ch(dn.slice(0,dk-1)).replace(cs,"$1"),dl,dk<dj&&c7(dn.slice(dk,dj)),dj<dm&&c7((dn=dn.slice(dj))),dj<dm&&ch(dn))}e.push(dl)}}return dg(e)}function cV(dk,dj){var dm=0,e=dj.length>0,dl=dk.length>0,di=function(dx,dr,dw,dv,dD){var ds,dt,dy,dC=[],dB=0,du="0",dn=dx&&[],dz=dD!=null,dA=dh,dq=dx||dl&&co.find.TAG("*",dD&&dr.parentNode||dr),dp=(df+=dA==null?1:Math.random()||0.1);if(dz){dh=dr!==cC&&dr;cc=dm}for(;(ds=dq[du])!=null;du++){if(dl&&ds){dt=0;while((dy=dk[dt++])){if(dy(ds,dr,dw)){dv.push(ds);break}}if(dz){df=dp;cc=++dm}}if(e){if((ds=!dy&&ds)){dB--}if(dx){dn.push(ds)}}}dB+=du;if(e&&du!==dB){dt=0;while((dy=dj[dt++])){dy(dn,dC,dr,dw)}if(dx){if(dB>0){while(du--){if(!(dn[du]||dC[du])){dC[du]=c9.call(dv)}}}dC=cY(dC)}b5.apply(dv,dC);if(dz&&!dx&&dC.length>0&&(dB+dj.length)>1){cw.uniqueSort(dv)}}if(dz){df=dp;dh=dA}return dn};return e?ck(di):di}cT=cw.compile=function(e,dm){var dj,di=[],dl=[],dk=cH[e+" "];if(!dk){if(!dm){dm=cg(e)}dj=dm.length;while(dj--){dk=c7(dm[dj]);if(dk[c6]){di.push(dk)}else{dl.push(dk)}}dk=cH(e,cV(dl,di))}return dk};function cz(di,dl,dk){var dj=0,e=dl.length;for(;dj<e;dj++){cw(di,dl[dj],dk)}return dk}function dd(dj,e,dk,dn){var dl,dq,di,dr,dp,dm=cg(dj);if(!dn){if(dm.length===1){dq=dm[0]=dm[0].slice(0);if(dq.length>2&&(di=dq[0]).type==="ID"&&e.nodeType===9&&!ce&&co.relative[dq[1].type]){e=co.find.ID(di.matches[0].replace(ct,c2),e)[0];if(!e){return dk}dj=dj.slice(dq.shift().value.length)}dl=cZ.needsContext.test(dj)?0:dq.length;while(dl--){di=dq[dl];if(co.relative[(dr=di.type)]){break}if((dp=co.find[dr])){if((dn=dp(di.matches[0].replace(ct,c2),cX.test(dq[0].type)&&e.parentNode||e))){dq.splice(dl,1);dj=dn.length&&ch(dq);if(!dj){b5.apply(dk,cn.call(dn,0));return dk}break}}}}}cT(dj,dm)(dn,e,ce,dk,cX.test(dj));return dk}co.pseudos.nth=co.pseudos.eq;function cS(){}co.filters=cS.prototype=co.pseudos;co.setFilters=new cS();cW();cw.attr=bK.attr;bK.find=cw;bK.expr=cw.selectors;bK.expr[":"]=bK.expr.pseudos;bK.unique=cw.uniqueSort;bK.text=cw.getText;bK.isXMLDoc=cw.isXML;bK.contains=cw.contains})(a3);var ak=/Until$/,bu=/^(?:parents|prev(?:Until|All))/,ao=/^.[^:#\[\.,]*$/,z=bK.expr.match.needsContext,by={children:true,contents:true,next:true,prev:true};bK.fn.extend({find:function(b4){var b7,b6,b5,e=this.length;if(typeof b4!=="string"){b5=this;return this.pushStack(bK(b4).filter(function(){for(b7=0;b7<e;b7++){if(bK.contains(b5[b7],this)){return true}}}))}b6=[];for(b7=0;b7<e;b7++){bK.find(b4,this[b7],b6)}b6=this.pushStack(e>1?bK.unique(b6):b6);b6.selector=(this.selector?this.selector+" ":"")+b4;return b6},has:function(b6){var b5,b4=bK(b6,this),e=b4.length;return this.filter(function(){for(b5=0;b5<e;b5++){if(bK.contains(this,b4[b5])){return true}}})},not:function(e){return this.pushStack(aP(this,e,false))},filter:function(e){return this.pushStack(aP(this,e,true))},is:function(e){return !!e&&(typeof e==="string"?z.test(e)?bK(e,this.context).index(this[0])>=0:bK.filter(e,this).length>0:this.filter(e).length>0)},closest:function(b7,b6){var b8,b5=0,e=this.length,b4=[],b9=z.test(b7)||typeof b7!=="string"?bK(b7,b6||this.context):0;for(;b5<e;b5++){b8=this[b5];while(b8&&b8.ownerDocument&&b8!==b6&&b8.nodeType!==11){if(b9?b9.index(b8)>-1:bK.find.matchesSelector(b8,b7)){b4.push(b8);break}b8=b8.parentNode}}return this.pushStack(b4.length>1?bK.unique(b4):b4)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.first().prevAll().length:-1}if(typeof e==="string"){return bK.inArray(this[0],bK(e))}return bK.inArray(e.jquery?e[0]:e,this)},add:function(e,b4){var b6=typeof e==="string"?bK(e,b4):bK.makeArray(e&&e.nodeType?[e]:e),b5=bK.merge(this.get(),b6);return this.pushStack(bK.unique(b5))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}});bK.fn.andSelf=bK.fn.addBack;function aY(b4,e){do{b4=b4[e]}while(b4&&b4.nodeType!==1);return b4}bK.each({parent:function(b4){var e=b4.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return bK.dir(e,"parentNode")},parentsUntil:function(b4,e,b5){return bK.dir(b4,"parentNode",b5)},next:function(e){return aY(e,"nextSibling")},prev:function(e){return aY(e,"previousSibling")},nextAll:function(e){return bK.dir(e,"nextSibling")},prevAll:function(e){return bK.dir(e,"previousSibling")},nextUntil:function(b4,e,b5){return bK.dir(b4,"nextSibling",b5)},prevUntil:function(b4,e,b5){return bK.dir(b4,"previousSibling",b5)},siblings:function(e){return bK.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return bK.sibling(e.firstChild)},contents:function(e){return bK.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:bK.merge([],e.childNodes)}},function(e,b4){bK.fn[e]=function(b7,b5){var b6=bK.map(this,b4,b7);if(!ak.test(e)){b5=b7}if(b5&&typeof b5==="string"){b6=bK.filter(b5,b6)}b6=this.length>1&&!by[e]?bK.unique(b6):b6;if(this.length>1&&bu.test(e)){b6=b6.reverse()}return this.pushStack(b6)}});bK.extend({filter:function(b5,e,b4){if(b4){b5=":not("+b5+")"}return e.length===1?bK.find.matchesSelector(e[0],b5)?[e[0]]:[]:bK.find.matches(b5,e)},dir:function(b5,b4,b7){var e=[],b6=b5[b4];while(b6&&b6.nodeType!==9&&(b7===aH||b6.nodeType!==1||!bK(b6).is(b7))){if(b6.nodeType===1){e.push(b6)}b6=b6[b4]}return e},sibling:function(b5,b4){var e=[];for(;b5;b5=b5.nextSibling){if(b5.nodeType===1&&b5!==b4){e.push(b5)}}return e}});function aP(b6,b5,e){b5=b5||0;if(bK.isFunction(b5)){return bK.grep(b6,function(b8,b7){var b9=!!b5.call(b8,b7,b8);return b9===e})}else{if(b5.nodeType){return bK.grep(b6,function(b7){return(b7===b5)===e})}else{if(typeof b5==="string"){var b4=bK.grep(b6,function(b7){return b7.nodeType===1});if(ao.test(b5)){return bK.filter(b5,b4,!e)}else{b5=bK.filter(b5,b4)}}}}return bK.grep(b6,function(b7){return(bK.inArray(b7,b5)>=0)===e})}function B(e){var b5=d.split("|"),b4=e.createDocumentFragment();if(b4.createElement){while(b5.length){b4.createElement(b5.pop())}}return b4}var d="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",aB=/ jQuery\d+="(?:null|\d+)"/g,K=new RegExp("<(?:"+d+")[\\s/>]","i"),b3=/^\s+/,aE=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,m=/<([\w:]+)/,bY=/<tbody/i,J=/<|&#?\w+;/,am=/<(?:script|style|link)/i,r=/^(?:checkbox|radio)$/i,bV=/checked\s*(?:[^=]|=\s*.checked.)/i,bA=/^$|\/(?:java|ecma)script/i,at=/^true\/(.*)/,aL=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,U={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:bK.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},aT=B(l),j=aT.appendChild(l.createElement("div"));U.optgroup=U.option;U.tbody=U.tfoot=U.colgroup=U.caption=U.thead;U.th=U.td;bK.fn.extend({text:function(e){return bK.access(this,function(b4){return b4===aH?bK.text(this):this.empty().append((this[0]&&this[0].ownerDocument||l).createTextNode(b4))},null,e,arguments.length)},wrapAll:function(e){if(bK.isFunction(e)){return this.each(function(b5){bK(this).wrapAll(e.call(this,b5))})}if(this[0]){var b4=bK(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){b4.insertBefore(this[0])}b4.map(function(){var b5=this;while(b5.firstChild&&b5.firstChild.nodeType===1){b5=b5.firstChild}return b5}).append(this)}return this},wrapInner:function(e){if(bK.isFunction(e)){return this.each(function(b4){bK(this).wrapInner(e.call(this,b4))})}return this.each(function(){var b4=bK(this),b5=b4.contents();if(b5.length){b5.wrapAll(e)}else{b4.append(e)}})},wrap:function(e){var b4=bK.isFunction(e);return this.each(function(b5){bK(this).wrapAll(b4?e.call(this,b5):e)})},unwrap:function(){return this.parent().each(function(){if(!bK.nodeName(this,"body")){bK(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){this.insertBefore(e,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(e){if(this.parentNode){this.parentNode.insertBefore(e,this)}})},after:function(){return this.domManip(arguments,false,function(e){if(this.parentNode){this.parentNode.insertBefore(e,this.nextSibling)}})},remove:function(e,b6){var b5,b4=0;for(;(b5=this[b4])!=null;b4++){if(!e||bK.filter(e,[b5]).length>0){if(!b6&&b5.nodeType===1){bK.cleanData(k(b5))}if(b5.parentNode){if(b6&&bK.contains(b5.ownerDocument,b5)){bt(k(b5,"script"))}b5.parentNode.removeChild(b5)}}}return this},empty:function(){var b4,e=0;for(;(b4=this[e])!=null;e++){if(b4.nodeType===1){bK.cleanData(k(b4,false))}while(b4.firstChild){b4.removeChild(b4.firstChild)}if(b4.options&&bK.nodeName(b4,"select")){b4.options.length=0}}return this},clone:function(b4,e){b4=b4==null?false:b4;e=e==null?b4:e;return this.map(function(){return bK.clone(this,b4,e)})},html:function(e){return bK.access(this,function(b7){var b6=this[0]||{},b5=0,b4=this.length;if(b7===aH){return b6.nodeType===1?b6.innerHTML.replace(aB,""):aH}if(typeof b7==="string"&&!am.test(b7)&&(bK.support.htmlSerialize||!K.test(b7))&&(bK.support.leadingWhitespace||!b3.test(b7))&&!U[(m.exec(b7)||["",""])[1].toLowerCase()]){b7=b7.replace(aE,"<$1></$2>");try{for(;b5<b4;b5++){b6=this[b5]||{};if(b6.nodeType===1){bK.cleanData(k(b6,false));b6.innerHTML=b7}}b6=0}catch(b8){}}if(b6){this.empty().append(b7)}},null,e,arguments.length)},replaceWith:function(b4){var e=bK.isFunction(b4);if(!e&&typeof b4!=="string"){b4=bK(b4).not(this).detach()}return this.domManip([b4],true,function(b7){var b6=this.nextSibling,b5=this.parentNode;if(b5){bK(this).remove();b5.insertBefore(b7,b6)}})},detach:function(e){return this.remove(e,true)},domManip:function(cb,ch,cg){cb=aJ.apply([],cb);var b9,b5,e,b7,ce,ca,b8=0,b6=this.length,cd=this,cf=b6-1,cc=cb[0],b4=bK.isFunction(cc);if(b4||!(b6<=1||typeof cc!=="string"||bK.support.checkClone||!bV.test(cc))){return this.each(function(cj){var ci=cd.eq(cj);if(b4){cb[0]=cc.call(this,cj,ch?ci.html():aH)}ci.domManip(cb,ch,cg)})}if(b6){ca=bK.buildFragment(cb,this[0].ownerDocument,false,this);b9=ca.firstChild;if(ca.childNodes.length===1){ca=b9}if(b9){ch=ch&&bK.nodeName(b9,"tr");b7=bK.map(k(ca,"script"),u);e=b7.length;for(;b8<b6;b8++){b5=ca;if(b8!==cf){b5=bK.clone(b5,true,true);if(e){bK.merge(b7,k(b5,"script"))}}cg.call(ch&&bK.nodeName(this[b8],"table")?y(this[b8],"tbody"):this[b8],b5,b8)}if(e){ce=b7[b7.length-1].ownerDocument;bK.map(b7,bd);for(b8=0;b8<e;b8++){b5=b7[b8];if(bA.test(b5.type||"")&&!bK._data(b5,"globalEval")&&bK.contains(ce,b5)){if(b5.src){bK.ajax({url:b5.src,type:"GET",dataType:"script",async:false,global:false,"throws":true})}else{bK.globalEval((b5.text||b5.textContent||b5.innerHTML||"").replace(aL,""))}}}}ca=b9=null}}return this}});function y(b4,e){return b4.getElementsByTagName(e)[0]||b4.appendChild(b4.ownerDocument.createElement(e))}function u(b4){var e=b4.getAttributeNode("type");b4.type=(e&&e.specified)+"/"+b4.type;return b4}function bd(b4){var e=at.exec(b4.type);if(e){b4.type=e[1]}else{b4.removeAttribute("type")}return b4}function bt(e,b5){var b6,b4=0;for(;(b6=e[b4])!=null;b4++){bK._data(b6,"globalEval",!b5||bK._data(b5[b4],"globalEval"))}}function au(ca,b4){if(b4.nodeType!==1||!bK.hasData(ca)){return}var b7,b6,e,b9=bK._data(ca),b8=bK._data(b4,b9),b5=b9.events;if(b5){delete b8.handle;b8.events={};for(b7 in b5){for(b6=0,e=b5[b7].length;b6<e;b6++){bK.event.add(b4,b7,b5[b7][b6])}}}if(b8.data){b8.data=bK.extend({},b8.data)}}function R(b7,b4){var b8,b6,b5;if(b4.nodeType!==1){return}b8=b4.nodeName.toLowerCase();if(!bK.support.noCloneEvent&&b4[bK.expando]){b5=bK._data(b4);for(b6 in b5.events){bK.removeEvent(b4,b6,b5.handle)}b4.removeAttribute(bK.expando)}if(b8==="script"&&b4.text!==b7.text){u(b4).text=b7.text;bd(b4)}else{if(b8==="object"){if(b4.parentNode){b4.outerHTML=b7.outerHTML}if(bK.support.html5Clone&&(b7.innerHTML&&!bK.trim(b4.innerHTML))){b4.innerHTML=b7.innerHTML}}else{if(b8==="input"&&r.test(b7.type)){b4.defaultChecked=b4.checked=b7.checked;if(b4.value!==b7.value){b4.value=b7.value}}else{if(b8==="option"){b4.defaultSelected=b4.selected=b7.defaultSelected}else{if(b8==="input"||b8==="textarea"){b4.defaultValue=b7.defaultValue}}}}}}bK.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,b4){bK.fn[e]=function(b5){var b6,b8=0,b7=[],ca=bK(b5),b9=ca.length-1;for(;b8<=b9;b8++){b6=b8===b9?this:this.clone(true);bK(ca[b8])[b4](b6);ap.apply(b7,b6.get())}return this.pushStack(b7)}});function k(b6,e){var b4,b7,b5=0,b8=typeof b6.getElementsByTagName!==aD?b6.getElementsByTagName(e||"*"):typeof b6.querySelectorAll!==aD?b6.querySelectorAll(e||"*"):aH;if(!b8){for(b8=[],b4=b6.childNodes||b6;(b7=b4[b5])!=null;b5++){if(!e||bK.nodeName(b7,e)){b8.push(b7)}else{bK.merge(b8,k(b7,e))}}}return e===aH||e&&bK.nodeName(b6,e)?bK.merge([b6],b8):b8}function bW(e){if(r.test(e.type)){e.defaultChecked=e.checked}}bK.extend({clone:function(b4,b6,e){var b8,b5,cb,b7,b9,ca=bK.contains(b4.ownerDocument,b4);if(bK.support.html5Clone||bK.isXMLDoc(b4)||!K.test("<"+b4.nodeName+">")){cb=b4.cloneNode(true)}else{j.innerHTML=b4.outerHTML;j.removeChild(cb=j.firstChild)}if((!bK.support.noCloneEvent||!bK.support.noCloneChecked)&&(b4.nodeType===1||b4.nodeType===11)&&!bK.isXMLDoc(b4)){b8=k(cb);b9=k(b4);for(b7=0;(b5=b9[b7])!=null;++b7){if(b8[b7]){R(b5,b8[b7])}}}if(b6){if(e){b9=b9||k(b4);b8=b8||k(cb);for(b7=0;(b5=b9[b7])!=null;b7++){au(b5,b8[b7])}}else{au(b4,cb)}}b8=k(cb,"script");if(b8.length>0){bt(b8,!ca&&k(b4,"script"))}b8=b9=b5=null;return cb},buildFragment:function(b4,b6,cb,cg){var cc,b8,ca,cf,ch,ce,b5,b9=b4.length,b7=B(b6),e=[],cd=0;for(;cd<b9;cd++){b8=b4[cd];if(b8||b8===0){if(bK.type(b8)==="object"){bK.merge(e,b8.nodeType?[b8]:b8)}else{if(!J.test(b8)){e.push(b6.createTextNode(b8))}else{cf=cf||b7.appendChild(b6.createElement("div"));ch=(m.exec(b8)||["",""])[1].toLowerCase();b5=U[ch]||U._default;cf.innerHTML=b5[1]+b8.replace(aE,"<$1></$2>")+b5[2];cc=b5[0];while(cc--){cf=cf.lastChild}if(!bK.support.leadingWhitespace&&b3.test(b8)){e.push(b6.createTextNode(b3.exec(b8)[0]))}if(!bK.support.tbody){b8=ch==="table"&&!bY.test(b8)?cf.firstChild:b5[1]==="<table>"&&!bY.test(b8)?cf:0;cc=b8&&b8.childNodes.length;while(cc--){if(bK.nodeName((ce=b8.childNodes[cc]),"tbody")&&!ce.childNodes.length){b8.removeChild(ce)}}}bK.merge(e,cf.childNodes);cf.textContent="";while(cf.firstChild){cf.removeChild(cf.firstChild)}cf=b7.lastChild}}}}if(cf){b7.removeChild(cf)}if(!bK.support.appendChecked){bK.grep(k(e,"input"),bW)}cd=0;while((b8=e[cd++])){if(cg&&bK.inArray(b8,cg)!==-1){continue}ca=bK.contains(b8.ownerDocument,b8);cf=k(b7.appendChild(b8),"script");if(ca){bt(cf)}if(cb){cc=0;while((b8=cf[cc++])){if(bA.test(b8.type||"")){cb.push(b8)}}}}cf=null;return b7},cleanData:function(b4,cc){var b6,cb,b5,b7,b8=0,cd=bK.expando,e=bK.cache,b9=bK.support.deleteExpando,ca=bK.event.special;for(;(b6=b4[b8])!=null;b8++){if(cc||bK.acceptData(b6)){b5=b6[cd];b7=b5&&e[b5];if(b7){if(b7.events){for(cb in b7.events){if(ca[cb]){bK.event.remove(b6,cb)}else{bK.removeEvent(b6,cb,b7.handle)}}}if(e[b5]){delete e[b5];if(b9){delete b6[cd]}else{if(typeof b6.removeAttribute!==aD){b6.removeAttribute(cd)}else{b6[cd]=null}}a7.push(b5)}}}}}});var aF,bp,F,bh=/alpha\([^)]*\)/i,aU=/opacity\s*=\s*([^)]*)/,bo=/^(top|right|bottom|left)$/,G=/^(none|table(?!-c[ea]).+)/,aZ=/^margin/,ba=new RegExp("^("+bB+")(.*)$","i"),X=new RegExp("^("+bB+")(?!px)[a-z%]+$","i"),T=new RegExp("^([+-])=("+bB+")","i"),bk={BODY:"block"},bc={position:"absolute",visibility:"hidden",display:"block"},bD={letterSpacing:0,fontWeight:400},bU=["Top","Right","Bottom","Left"],aw=["Webkit","O","Moz","ms"];function b(b6,b4){if(b4 in b6){return b4}var b7=b4.charAt(0).toUpperCase()+b4.slice(1),e=b4,b5=aw.length;while(b5--){b4=aw[b5]+b7;if(b4 in b6){return b4}}return e}function Q(b4,e){b4=e||b4;return bK.css(b4,"display")==="none"||!bK.contains(b4.ownerDocument,b4)}function p(b9,e){var ca,b7,b8,b4=[],b5=0,b6=b9.length;for(;b5<b6;b5++){b7=b9[b5];if(!b7.style){continue}b4[b5]=bK._data(b7,"olddisplay");ca=b7.style.display;if(e){if(!b4[b5]&&ca==="none"){b7.style.display=""}if(b7.style.display===""&&Q(b7)){b4[b5]=bK._data(b7,"olddisplay",bF(b7.nodeName))}}else{if(!b4[b5]){b8=Q(b7);if(ca&&ca!=="none"||!b8){bK._data(b7,"olddisplay",b8?ca:bK.css(b7,"display"))}}}}for(b5=0;b5<b6;b5++){b7=b9[b5];if(!b7.style){continue}if(!e||b7.style.display==="none"||b7.style.display===""){b7.style.display=e?b4[b5]||"":"none"}}return b9}bK.fn.extend({css:function(e,b4){return bK.access(this,function(b9,b6,ca){var b5,b8,cb={},b7=0;if(bK.isArray(b6)){b8=bp(b9);b5=b6.length;for(;b7<b5;b7++){cb[b6[b7]]=bK.css(b9,b6[b7],false,b8)}return cb}return ca!==aH?bK.style(b9,b6,ca):bK.css(b9,b6)},e,b4,arguments.length>1)},show:function(){return p(this,true)},hide:function(){return p(this)},toggle:function(b4){var e=typeof b4==="boolean";return this.each(function(){if(e?b4:Q(this)){bK(this).show()}else{bK(this).hide()}})}});bK.extend({cssHooks:{opacity:{get:function(b5,b4){if(b4){var e=F(b5,"opacity");return e===""?"1":e}}}},cssNumber:{columnCount:true,fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":bK.support.cssFloat?"cssFloat":"styleFloat"},style:function(b6,b5,cc,b7){if(!b6||b6.nodeType===3||b6.nodeType===8||!b6.style){return}var ca,cb,cd,b8=bK.camelCase(b5),b4=b6.style;b5=bK.cssProps[b8]||(bK.cssProps[b8]=b(b4,b8));cd=bK.cssHooks[b5]||bK.cssHooks[b8];if(cc!==aH){cb=typeof cc;if(cb==="string"&&(ca=T.exec(cc))){cc=(ca[1]+1)*ca[2]+parseFloat(bK.css(b6,b5));cb="number"}if(cc==null||cb==="number"&&isNaN(cc)){return}if(cb==="number"&&!bK.cssNumber[b8]){cc+="px"}if(!bK.support.clearCloneStyle&&cc===""&&b5.indexOf("background")===0){b4[b5]="inherit"}if(!cd||!("set" in cd)||(cc=cd.set(b6,cc,b7))!==aH){try{b4[b5]=cc}catch(b9){}}}else{if(cd&&"get" in cd&&(ca=cd.get(b6,false,b7))!==aH){return ca}return b4[b5]}},css:function(b9,b7,b4,b8){var b6,ca,e,b5=bK.camelCase(b7);b7=bK.cssProps[b5]||(bK.cssProps[b5]=b(b9.style,b5));e=bK.cssHooks[b7]||bK.cssHooks[b5];if(e&&"get" in e){ca=e.get(b9,true,b4)}if(ca===aH){ca=F(b9,b7,b8)}if(ca==="normal"&&b7 in bD){ca=bD[b7]}if(b4===""||b4){b6=parseFloat(ca);return b4===true||bK.isNumeric(b6)?b6||0:ca}return ca},swap:function(b8,b7,b9,b6){var b5,b4,e={};for(b4 in b7){e[b4]=b8.style[b4];b8.style[b4]=b7[b4]}b5=b9.apply(b8,b6||[]);for(b4 in b7){b8.style[b4]=e[b4]}return b5}});if(a3.getComputedStyle){bp=function(e){return a3.getComputedStyle(e,null)};F=function(b7,b5,b9){var b6,b4,cb,b8=b9||bp(b7),ca=b8?b8.getPropertyValue(b5)||b8[b5]:aH,e=b7.style;if(b8){if(ca===""&&!bK.contains(b7.ownerDocument,b7)){ca=bK.style(b7,b5)}if(X.test(ca)&&aZ.test(b5)){b6=e.width;b4=e.minWidth;cb=e.maxWidth;e.minWidth=e.maxWidth=e.width=ca;ca=b8.width;e.width=b6;e.minWidth=b4;e.maxWidth=cb}}return ca}}else{if(l.documentElement.currentStyle){bp=function(e){return e.currentStyle};F=function(b6,b4,b9){var b5,b8,ca,b7=b9||bp(b6),cb=b7?b7[b4]:aH,e=b6.style;if(cb==null&&e&&e[b4]){cb=e[b4]}if(X.test(cb)&&!bo.test(b4)){b5=e.left;b8=b6.runtimeStyle;ca=b8&&b8.left;if(ca){b8.left=b6.currentStyle.left}e.left=b4==="fontSize"?"1em":cb;cb=e.pixelLeft+"px";e.left=b5;if(ca){b8.left=ca}}return cb===""?"auto":cb}}}function aK(e,b5,b6){var b4=ba.exec(b5);return b4?Math.max(0,b4[1]-(b6||0))+(b4[2]||"px"):b5}function ax(b7,b4,e,b9,b6){var b5=e===(b9?"border":"content")?4:b4==="width"?1:0,b8=0;for(;b5<4;b5+=2){if(e==="margin"){b8+=bK.css(b7,e+bU[b5],true,b6)}if(b9){if(e==="content"){b8-=bK.css(b7,"padding"+bU[b5],true,b6)}if(e!=="margin"){b8-=bK.css(b7,"border"+bU[b5]+"Width",true,b6)}}else{b8+=bK.css(b7,"padding"+bU[b5],true,b6);if(e!=="padding"){b8+=bK.css(b7,"border"+bU[b5]+"Width",true,b6)}}}return b8}function v(b7,b4,e){var b6=true,b8=b4==="width"?b7.offsetWidth:b7.offsetHeight,b5=bp(b7),b9=bK.support.boxSizing&&bK.css(b7,"boxSizing",false,b5)==="border-box";if(b8<=0||b8==null){b8=F(b7,b4,b5);if(b8<0||b8==null){b8=b7.style[b4]}if(X.test(b8)){return b8}b6=b9&&(bK.support.boxSizingReliable||b8===b7.style[b4]);b8=parseFloat(b8)||0}return(b8+ax(b7,b4,e||(b9?"border":"content"),b6,b5))+"px"}function bF(b5){var b4=l,e=bk[b5];if(!e){e=a2(b5,b4);if(e==="none"||!e){aF=(aF||bK("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(b4.documentElement);b4=(aF[0].contentWindow||aF[0].contentDocument).document;b4.write("<!doctype html><html><body>");b4.close();e=a2(b5,b4);aF.detach()}bk[b5]=e}return e}function a2(e,b6){var b4=bK(b6.createElement(e)).appendTo(b6.body),b5=bK.css(b4[0],"display");b4.remove();return b5}bK.each(["height","width"],function(b4,e){bK.cssHooks[e]={get:function(b7,b6,b5){if(b6){return b7.offsetWidth===0&&G.test(bK.css(b7,"display"))?bK.swap(b7,bc,function(){return v(b7,e,b5)}):v(b7,e,b5)}},set:function(b7,b8,b5){var b6=b5&&bp(b7);return aK(b7,b8,b5?ax(b7,e,b5,bK.support.boxSizing&&bK.css(b7,"boxSizing",false,b6)==="border-box",b6):0)}}});if(!bK.support.opacity){bK.cssHooks.opacity={get:function(b4,e){return aU.test((e&&b4.currentStyle?b4.currentStyle.filter:b4.style.filter)||"")?(0.01*parseFloat(RegExp.$1))+"":e?"1":""},set:function(b7,b8){var b6=b7.style,b4=b7.currentStyle,e=bK.isNumeric(b8)?"alpha(opacity="+b8*100+")":"",b5=b4&&b4.filter||b6.filter||"";b6.zoom=1;if((b8>=1||b8==="")&&bK.trim(b5.replace(bh,""))===""&&b6.removeAttribute){b6.removeAttribute("filter");if(b8===""||b4&&!b4.filter){return}}b6.filter=bh.test(b5)?b5.replace(bh,e):b5+" "+e}}}bK(function(){if(!bK.support.reliableMarginRight){bK.cssHooks.marginRight={get:function(b4,e){if(e){return bK.swap(b4,{display:"inline-block"},F,[b4,"marginRight"])}}}}if(!bK.support.pixelPosition&&bK.fn.position){bK.each(["top","left"],function(e,b4){bK.cssHooks[b4]={get:function(b6,b5){if(b5){b5=F(b6,b4);return X.test(b5)?bK(b6).position()[b4]+"px":b5}}}})}});if(bK.expr&&bK.expr.filters){bK.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0||(!bK.support.reliableHiddenOffsets&&((e.style&&e.style.display)||bK.css(e,"display"))==="none")};bK.expr.filters.visible=function(e){return !bK.expr.filters.hidden(e)}}bK.each({margin:"",padding:"",border:"Width"},function(e,b4){bK.cssHooks[e+b4]={expand:function(b7){var b6=0,b5={},b8=typeof b7==="string"?b7.split(" "):[b7];for(;b6<4;b6++){b5[e+bU[b6]+b4]=b8[b6]||b8[b6-2]||b8[0]}return b5}};if(!aZ.test(e)){bK.cssHooks[e+b4].set=aK}});var bw=/%20/g,aS=/\[\]$/,V=/\r?\n/g,c=/^(?:submit|button|image|reset|file)$/i,av=/^(?:input|select|textarea|keygen)/i;bK.fn.extend({serialize:function(){return bK.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=bK.prop(this,"elements");return e?bK.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!bK(this).is(":disabled")&&av.test(this.nodeName)&&!c.test(e)&&(this.checked||!r.test(e))}).map(function(e,b4){var b5=bK(this).val();return b5==null?null:bK.isArray(b5)?bK.map(b5,function(b6){return{name:b4.name,value:b6.replace(V,"\r\n")}}):{name:b4.name,value:b5.replace(V,"\r\n")}}).get()}});bK.param=function(e,b5){var b6,b4=[],b7=function(b8,b9){b9=bK.isFunction(b9)?b9():(b9==null?"":b9);b4[b4.length]=encodeURIComponent(b8)+"="+encodeURIComponent(b9)};if(b5===aH){b5=bK.ajaxSettings&&bK.ajaxSettings.traditional}if(bK.isArray(e)||(e.jquery&&!bK.isPlainObject(e))){bK.each(e,function(){b7(this.name,this.value)})}else{for(b6 in e){i(b6,e[b6],b5,b7)}}return b4.join("&").replace(bw,"+")};function i(b5,b7,b4,b6){var e;if(bK.isArray(b7)){bK.each(b7,function(b9,b8){if(b4||aS.test(b5)){b6(b5,b8)}else{i(b5+"["+(typeof b8==="object"?b9:"")+"]",b8,b4,b6)}})}else{if(!b4&&bK.type(b7)==="object"){for(e in b7){i(b5+"["+e+"]",b7[e],b4,b6)}}else{b6(b5,b7)}}}bK.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(b4,e){bK.fn[e]=function(b6,b5){return arguments.length>0?this.on(e,null,b6,b5):this.trigger(e)}});bK.fn.hover=function(e,b4){return this.mouseenter(e).mouseleave(b4||e)};var b2,Z,bP=bK.now(),aA=/\?/,aq=/#.*$/,P=/([?&])_=[^&]*/,ah=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,C=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,o=/^(?:GET|HEAD)$/,aI=/^\/\//,aV=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,b1=bK.fn.load,w={},a8={},aX="*/".concat("*");try{Z=aM.href}catch(bg){Z=l.createElement("a");Z.href="";Z=Z.href}b2=aV.exec(Z.toLowerCase())||[];function bM(e){return function(b7,b8){if(typeof b7!=="string"){b8=b7;b7="*"}var b4,b5=0,b6=b7.toLowerCase().match(ad)||[];if(bK.isFunction(b8)){while((b4=b6[b5++])){if(b4[0]==="+"){b4=b4.slice(1)||"*";(e[b4]=e[b4]||[]).unshift(b8)}else{(e[b4]=e[b4]||[]).push(b8)}}}}}function n(e,b5,b9,b6){var b4={},b7=(e===a8);function b8(ca){var cb;b4[ca]=true;bK.each(e[ca]||[],function(cd,cc){var ce=cc(b5,b9,b6);if(typeof ce==="string"&&!b7&&!b4[ce]){b5.dataTypes.unshift(ce);b8(ce);return false}else{if(b7){return !(cb=ce)}}});return cb}return b8(b5.dataTypes[0])||!b4["*"]&&b8("*")}function s(b5,b6){var e,b4,b7=bK.ajaxSettings.flatOptions||{};for(b4 in b6){if(b6[b4]!==aH){(b7[b4]?b5:(e||(e={})))[b4]=b6[b4]}}if(e){bK.extend(true,b5,e)}return b5}bK.fn.load=function(b6,b9,ca){if(typeof b6!=="string"&&b1){return b1.apply(this,arguments)}var e,b5,b7,b4=this,b8=b6.indexOf(" ");if(b8>=0){e=b6.slice(b8,b6.length);b6=b6.slice(0,b8)}if(bK.isFunction(b9)){ca=b9;b9=aH}else{if(b9&&typeof b9==="object"){b7="POST"}}if(b4.length>0){bK.ajax({url:b6,type:b7,dataType:"html",data:b9}).done(function(cb){b5=arguments;b4.html(e?bK("<div>").append(bK.parseHTML(cb)).find(e):cb)}).complete(ca&&function(cc,cb){b4.each(ca,b5||[cc.responseText,cb,cc])})}return this};bK.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,b4){bK.fn[b4]=function(b5){return this.on(b4,b5)}});bK.each(["get","post"],function(e,b4){bK[b4]=function(b5,b7,b8,b6){if(bK.isFunction(b7)){b6=b6||b8;b8=b7;b7=aH}return bK.ajax({url:b5,type:b4,dataType:b6,data:b7,success:b8})}});bK.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Z,type:"GET",isLocal:C.test(b2[1]),global:true,processData:true,async:true,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":aX,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a3.String,"text html":true,"text json":bK.parseJSON,"text xml":bK.parseXML},flatOptions:{url:true,context:true}},ajaxSetup:function(b4,e){return e?s(s(b4,bK.ajaxSettings),e):s(bK.ajaxSettings,b4)},ajaxPrefilter:bM(w),ajaxTransport:bM(a8),ajax:function(b8,b5){if(typeof b8==="object"){b5=b8;b8=aH}b5=b5||{};var ch,cj,b9,co,cd,b4,ck,b6,cc=bK.ajaxSetup({},b5),cq=cc.context||cc,cf=cc.context&&(cq.nodeType||cq.jquery)?bK(cq):bK.event,cp=bK.Deferred(),cm=bK.Callbacks("once memory"),ca=cc.statusCode||{},cg={},cn={},b7=0,cb="canceled",ci={readyState:0,getResponseHeader:function(cr){var e;if(b7===2){if(!b6){b6={};while((e=ah.exec(co))){b6[e[1].toLowerCase()]=e[2]}}e=b6[cr.toLowerCase()]}return e==null?null:e},getAllResponseHeaders:function(){return b7===2?co:null},setRequestHeader:function(cr,cs){var e=cr.toLowerCase();if(!b7){cr=cn[e]=cn[e]||cr;cg[cr]=cs}return this},overrideMimeType:function(e){if(!b7){cc.mimeType=e}return this},statusCode:function(cr){var e;if(cr){if(b7<2){for(e in cr){ca[e]=[ca[e],cr[e]]}}else{ci.always(cr[ci.status])}}return this},abort:function(cr){var e=cr||cb;if(ck){ck.abort(e)}ce(0,e);return this}};cp.promise(ci).complete=cm.add;ci.success=ci.done;ci.error=ci.fail;cc.url=((b8||cc.url||Z)+"").replace(aq,"").replace(aI,b2[1]+"//");cc.type=b5.method||b5.type||cc.method||cc.type;cc.dataTypes=bK.trim(cc.dataType||"*").toLowerCase().match(ad)||[""];if(cc.crossDomain==null){ch=aV.exec(cc.url.toLowerCase());cc.crossDomain=!!(ch&&(ch[1]!==b2[1]||ch[2]!==b2[2]||(ch[3]||(ch[1]==="http:"?80:443))!=(b2[3]||(b2[1]==="http:"?80:443))))}if(cc.data&&cc.processData&&typeof cc.data!=="string"){cc.data=bK.param(cc.data,cc.traditional)}n(w,cc,b5,ci);if(b7===2){return ci}b4=cc.global;if(b4&&bK.active++===0){bK.event.trigger("ajaxStart")}cc.type=cc.type.toUpperCase();cc.hasContent=!o.test(cc.type);b9=cc.url;if(!cc.hasContent){if(cc.data){b9=(cc.url+=(aA.test(b9)?"&":"?")+cc.data);delete cc.data}if(cc.cache===false){cc.url=P.test(b9)?b9.replace(P,"$1_="+bP++):b9+(aA.test(b9)?"&":"?")+"_="+bP++}}if(cc.ifModified){if(bK.lastModified[b9]){ci.setRequestHeader("If-Modified-Since",bK.lastModified[b9])}if(bK.etag[b9]){ci.setRequestHeader("If-None-Match",bK.etag[b9])}}if(cc.data&&cc.hasContent&&cc.contentType!==false||b5.contentType){ci.setRequestHeader("Content-Type",cc.contentType)}ci.setRequestHeader("Accept",cc.dataTypes[0]&&cc.accepts[cc.dataTypes[0]]?cc.accepts[cc.dataTypes[0]]+(cc.dataTypes[0]!=="*"?", "+aX+"; q=0.01":""):cc.accepts["*"]);for(cj in cc.headers){ci.setRequestHeader(cj,cc.headers[cj])}if(cc.beforeSend&&(cc.beforeSend.call(cq,ci,cc)===false||b7===2)){return ci.abort()}cb="abort";for(cj in {success:1,error:1,complete:1}){ci[cj](cc[cj])}ck=n(a8,cc,b5,ci);if(!ck){ce(-1,"No Transport")}else{ci.readyState=1;if(b4){cf.trigger("ajaxSend",[ci,cc])}if(cc.async&&cc.timeout>0){cd=setTimeout(function(){ci.abort("timeout")},cc.timeout)}try{b7=1;ck.send(cg,ce)}catch(cl){if(b7<2){ce(-1,cl)}else{throw cl}}}function ce(cv,cr,cw,ct){var e,cz,cx,cu,cy,cs=cr;if(b7===2){return}b7=2;if(cd){clearTimeout(cd)}ck=aH;co=ct||"";ci.readyState=cv>0?4:0;if(cw){cu=g(cc,ci,cw)}if(cv>=200&&cv<300||cv===304){if(cc.ifModified){cy=ci.getResponseHeader("Last-Modified");if(cy){bK.lastModified[b9]=cy}cy=ci.getResponseHeader("etag");if(cy){bK.etag[b9]=cy}}if(cv===204){e=true;cs="nocontent"}else{if(cv===304){e=true;cs="notmodified"}else{e=ag(cc,cu);cs=e.state;cz=e.data;cx=e.error;e=!cx}}}else{cx=cs;if(cv||!cs){cs="error";if(cv<0){cv=0}}}ci.status=cv;ci.statusText=(cr||cs)+"";if(e){cp.resolveWith(cq,[cz,cs,ci])}else{cp.rejectWith(cq,[ci,cs,cx])}ci.statusCode(ca);ca=aH;if(b4){cf.trigger(e?"ajaxSuccess":"ajaxError",[ci,cc,e?cz:cx])}cm.fireWith(cq,[ci,cs]);if(b4){cf.trigger("ajaxComplete",[ci,cc]);if(!(--bK.active)){bK.event.trigger("ajaxStop")}}}return ci},getScript:function(e,b4){return bK.get(e,aH,b4,"script")},getJSON:function(e,b4,b5){return bK.get(e,b4,b5,"json")}});function g(cc,cb,b8){var e,b7,b6,b9,b4=cc.contents,ca=cc.dataTypes,b5=cc.responseFields;for(b9 in b5){if(b9 in b8){cb[b5[b9]]=b8[b9]}}while(ca[0]==="*"){ca.shift();if(b7===aH){b7=cc.mimeType||cb.getResponseHeader("Content-Type")}}if(b7){for(b9 in b4){if(b4[b9]&&b4[b9].test(b7)){ca.unshift(b9);break}}}if(ca[0] in b8){b6=ca[0]}else{for(b9 in b8){if(!ca[0]||cc.converters[b9+" "+ca[0]]){b6=b9;break}if(!e){e=b9}}b6=b6||e}if(b6){if(b6!==ca[0]){ca.unshift(b6)}return b8[b6]}}function ag(ce,b6){var b4,ca,cc,b7,cd={},b8=0,cb=ce.dataTypes.slice(),b5=cb[0];if(ce.dataFilter){b6=ce.dataFilter(b6,ce.dataType)}if(cb[1]){for(cc in ce.converters){cd[cc.toLowerCase()]=ce.converters[cc]}}for(;(ca=cb[++b8]);){if(ca!=="*"){if(b5!=="*"&&b5!==ca){cc=cd[b5+" "+ca]||cd["* "+ca];if(!cc){for(b4 in cd){b7=b4.split(" ");if(b7[1]===ca){cc=cd[b5+" "+b7[0]]||cd["* "+b7[0]];if(cc){if(cc===true){cc=cd[b4]}else{if(cd[b4]!==true){ca=b7[0];cb.splice(b8--,0,ca)}}break}}}}if(cc!==true){if(cc&&ce["throws"]){b6=cc(b6)}else{try{b6=cc(b6)}catch(b9){return{state:"parsererror",error:cc?b9:"No conversion from "+b5+" to "+ca}}}}}b5=ca}}return{state:"success",data:b6}}bK.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){bK.globalEval(e);return e}}});bK.ajaxPrefilter("script",function(e){if(e.cache===aH){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});bK.ajaxTransport("script",function(b5){if(b5.crossDomain){var e,b4=l.head||bK("head")[0]||l.documentElement;return{send:function(b6,b7){e=l.createElement("script");e.async=true;if(b5.scriptCharset){e.charset=b5.scriptCharset}e.src=b5.url;e.onload=e.onreadystatechange=function(b9,b8){if(b8||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(e.parentNode){e.parentNode.removeChild(e)}e=null;if(!b8){b7(200,"success")}}};b4.insertBefore(e,b4.firstChild)},abort:function(){if(e){e.onload(aH,true)}}}}});var br=[],a6=/(=)\?(?=&|$)|\?\?/;bK.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=br.pop()||(bK.expando+"_"+(bP++));this[e]=true;return e}});bK.ajaxPrefilter("json jsonp",function(b6,e,b7){var b9,b4,b5,b8=b6.jsonp!==false&&(a6.test(b6.url)?"url":typeof b6.data==="string"&&!(b6.contentType||"").indexOf("application/x-www-form-urlencoded")&&a6.test(b6.data)&&"data");if(b8||b6.dataTypes[0]==="jsonp"){b9=b6.jsonpCallback=bK.isFunction(b6.jsonpCallback)?b6.jsonpCallback():b6.jsonpCallback;if(b8){b6[b8]=b6[b8].replace(a6,"$1"+b9)}else{if(b6.jsonp!==false){b6.url+=(aA.test(b6.url)?"&":"?")+b6.jsonp+"="+b9}}b6.converters["script json"]=function(){if(!b5){bK.error(b9+" was not called")}return b5[0]};b6.dataTypes[0]="json";b4=a3[b9];a3[b9]=function(){b5=arguments};b7.always(function(){a3[b9]=b4;if(b6[b9]){b6.jsonpCallback=e.jsonpCallback;br.push(b9)}if(b5&&bK.isFunction(b4)){b4(b5[0])}b5=b4=aH});return"script"}});var ai,ay,az=0,aQ=a3.ActiveXObject&&function(){var e;for(e in ai){ai[e](aH,true)}};function bE(){try{return new a3.XMLHttpRequest()}catch(b4){}}function be(){try{return new a3.ActiveXObject("Microsoft.XMLHTTP")}catch(b4){}}bK.ajaxSettings.xhr=a3.ActiveXObject?function(){return !this.isLocal&&bE()||be()}:bE;ay=bK.ajaxSettings.xhr();bK.support.cors=!!ay&&("withCredentials" in ay);ay=bK.support.ajax=!!ay;if(ay){bK.ajaxTransport(function(e){if(!e.crossDomain||bK.support.cors){var b4;return{send:function(ca,b5){var b8,b6,b9=e.xhr();if(e.username){b9.open(e.type,e.url,e.async,e.username,e.password)}else{b9.open(e.type,e.url,e.async)}if(e.xhrFields){for(b6 in e.xhrFields){b9[b6]=e.xhrFields[b6]}}if(e.mimeType&&b9.overrideMimeType){b9.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!ca["X-Requested-With"]){ca["X-Requested-With"]="XMLHttpRequest"}try{for(b6 in ca){b9.setRequestHeader(b6,ca[b6])}}catch(b7){}b9.send((e.hasContent&&e.data)||null);b4=function(cd,cc){var cb,ce,ch,cf;try{if(b4&&(cc||b9.readyState===4)){b4=aH;if(b8){b9.onreadystatechange=bK.noop;if(aQ){delete ai[b8]}}if(cc){if(b9.readyState!==4){b9.abort()}}else{cf={};cb=b9.status;ce=b9.getAllResponseHeaders();if(typeof b9.responseText==="string"){cf.text=b9.responseText}try{ch=b9.statusText}catch(cg){ch=""}if(!cb&&e.isLocal&&!e.crossDomain){cb=cf.text?200:404}else{if(cb===1223){cb=204}}}}}catch(ci){if(!cc){b5(-1,ci)}}if(cf){b5(cb,ch,cf,ce)}};if(!e.async){b4()}else{if(b9.readyState===4){setTimeout(b4)}else{b8=++az;if(aQ){if(!ai){ai={};bK(a3).unload(aQ)}ai[b8]=b4}b9.onreadystatechange=b4}}},abort:function(){if(b4){b4(aH,true)}}}}})}var L,ae,bS=/^(?:toggle|show|hide)$/,bL=new RegExp("^(?:([+-])=|)("+bB+")([a-z%]*)$","i"),bR=/queueHooks$/,aC=[h],a1={"*":[function(e,ca){var b6,cb,cc=this.createTween(e,ca),b7=bL.exec(ca),b8=cc.cur(),b4=+b8||0,b5=1,b9=20;if(b7){b6=+b7[2];cb=b7[3]||(bK.cssNumber[e]?"":"px");if(cb!=="px"&&b4){b4=bK.css(cc.elem,e,true)||b6||1;do{b5=b5||".5";b4=b4/b5;bK.style(cc.elem,e,b4+cb)}while(b5!==(b5=cc.cur()/b8)&&b5!==1&&--b9)}cc.unit=cb;cc.start=b4;cc.end=b7[1]?b4+(b7[1]+1)*b6:b6}return cc}]};function bn(){setTimeout(function(){L=aH});return(L=bK.now())}function bf(b4,e){bK.each(e,function(b9,b7){var b8=(a1[b9]||[]).concat(a1["*"]),b5=0,b6=b8.length;for(;b5<b6;b5++){if(b8[b5].call(b4,b9,b7)){return}}})}function f(b5,b9,cc){var cd,e,b8=0,b4=aC.length,cb=bK.Deferred().always(function(){delete b7.elem}),b7=function(){if(e){return false}var cj=L||bn(),cg=Math.max(0,b6.startTime+b6.duration-cj),ce=cg/b6.duration||0,ci=1-ce,cf=0,ch=b6.tweens.length;for(;cf<ch;cf++){b6.tweens[cf].run(ci)}cb.notifyWith(b5,[b6,ci,cg]);if(ci<1&&ch){return cg}else{cb.resolveWith(b5,[b6]);return false}},b6=cb.promise({elem:b5,props:bK.extend({},b9),opts:bK.extend(true,{specialEasing:{}},cc),originalProperties:b9,originalOptions:cc,startTime:L||bn(),duration:cc.duration,tweens:[],createTween:function(cg,ce){var cf=bK.Tween(b5,b6.opts,cg,ce,b6.opts.specialEasing[cg]||b6.opts.easing);b6.tweens.push(cf);return cf},stop:function(cf){var ce=0,cg=cf?b6.tweens.length:0;if(e){return this}e=true;for(;ce<cg;ce++){b6.tweens[ce].run(1)}if(cf){cb.resolveWith(b5,[b6,cf])}else{cb.rejectWith(b5,[b6,cf])}return this}}),ca=b6.props;an(ca,b6.opts.specialEasing);for(;b8<b4;b8++){cd=aC[b8].call(b6,b5,ca,b6.opts);if(cd){return cd}}bf(b6,ca);if(bK.isFunction(b6.opts.start)){b6.opts.start.call(b5,b6)}bK.fx.timer(bK.extend(b7,{elem:b5,anim:b6,queue:b6.opts.queue}));return b6.progress(b6.opts.progress).done(b6.opts.done,b6.opts.complete).fail(b6.opts.fail).always(b6.opts.always)}function an(b6,b8){var b7,b5,b4,b9,e;for(b4 in b6){b5=bK.camelCase(b4);b9=b8[b5];b7=b6[b4];if(bK.isArray(b7)){b9=b7[1];b7=b6[b4]=b7[0]}if(b4!==b5){b6[b5]=b7;delete b6[b4]}e=bK.cssHooks[b5];if(e&&"expand" in e){b7=e.expand(b7);delete b6[b5];for(b4 in b7){if(!(b4 in b6)){b6[b4]=b7[b4];b8[b4]=b9}}}else{b8[b5]=b9}}}bK.Animation=bK.extend(f,{tweener:function(b4,b7){if(bK.isFunction(b4)){b7=b4;b4=["*"]}else{b4=b4.split(" ")}var b6,e=0,b5=b4.length;for(;e<b5;e++){b6=b4[e];a1[b6]=a1[b6]||[];a1[b6].unshift(b7)}},prefilter:function(b4,e){if(e){aC.unshift(b4)}else{aC.push(b4)}}});function h(b7,cd,e){var b5,cc,b6,cf,cj,b9,ci,ch,cg,b8=this,b4=b7.style,ce={},cb=[],ca=b7.nodeType&&Q(b7);if(!e.queue){ch=bK._queueHooks(b7,"fx");if(ch.unqueued==null){ch.unqueued=0;cg=ch.empty.fire;ch.empty.fire=function(){if(!ch.unqueued){cg()}}}ch.unqueued++;b8.always(function(){b8.always(function(){ch.unqueued--;if(!bK.queue(b7,"fx").length){ch.empty.fire()}})})}if(b7.nodeType===1&&("height" in cd||"width" in cd)){e.overflow=[b4.overflow,b4.overflowX,b4.overflowY];if(bK.css(b7,"display")==="inline"&&bK.css(b7,"float")==="none"){if(!bK.support.inlineBlockNeedsLayout||bF(b7.nodeName)==="inline"){b4.display="inline-block"}else{b4.zoom=1}}}if(e.overflow){b4.overflow="hidden";if(!bK.support.shrinkWrapBlocks){b8.always(function(){b4.overflow=e.overflow[0];b4.overflowX=e.overflow[1];b4.overflowY=e.overflow[2]})}}for(cc in cd){cf=cd[cc];if(bS.exec(cf)){delete cd[cc];b9=b9||cf==="toggle";if(cf===(ca?"hide":"show")){continue}cb.push(cc)}}b6=cb.length;if(b6){cj=bK._data(b7,"fxshow")||bK._data(b7,"fxshow",{});if("hidden" in cj){ca=cj.hidden}if(b9){cj.hidden=!ca}if(ca){bK(b7).show()}else{b8.done(function(){bK(b7).hide()})}b8.done(function(){var ck;bK._removeData(b7,"fxshow");for(ck in ce){bK.style(b7,ck,ce[ck])}});for(cc=0;cc<b6;cc++){b5=cb[cc];ci=b8.createTween(b5,ca?cj[b5]:0);ce[b5]=cj[b5]||bK.style(b7,b5);if(!(b5 in cj)){cj[b5]=ci.start;if(ca){ci.end=ci.start;ci.start=b5==="width"||b5==="height"?1:0}}}}}function H(b5,b4,b7,e,b6){return new H.prototype.init(b5,b4,b7,e,b6)}bK.Tween=H;H.prototype={constructor:H,init:function(b6,b4,b8,e,b7,b5){this.elem=b6;this.prop=b8;this.easing=b7||"swing";this.options=b4;this.start=this.now=this.cur();this.end=e;this.unit=b5||(bK.cssNumber[b8]?"":"px")},cur:function(){var e=H.propHooks[this.prop];return e&&e.get?e.get(this):H.propHooks._default.get(this)},run:function(b5){var b4,e=H.propHooks[this.prop];if(this.options.duration){this.pos=b4=bK.easing[this.easing](b5,this.options.duration*b5,0,1,this.options.duration)}else{this.pos=b4=b5}this.now=(this.end-this.start)*b4+this.start;if(this.options.step){this.options.step.call(this.elem,this.now,this)}if(e&&e.set){e.set(this)}else{H.propHooks._default.set(this)}return this}};H.prototype.init.prototype=H.prototype;H.propHooks={_default:{get:function(b4){var e;if(b4.elem[b4.prop]!=null&&(!b4.elem.style||b4.elem.style[b4.prop]==null)){return b4.elem[b4.prop]}e=bK.css(b4.elem,b4.prop,"");return !e||e==="auto"?0:e},set:function(e){if(bK.fx.step[e.prop]){bK.fx.step[e.prop](e)}else{if(e.elem.style&&(e.elem.style[bK.cssProps[e.prop]]!=null||bK.cssHooks[e.prop])){bK.style(e.elem,e.prop,e.now+e.unit)}else{e.elem[e.prop]=e.now}}}}};H.propHooks.scrollTop=H.propHooks.scrollLeft={set:function(e){if(e.elem.nodeType&&e.elem.parentNode){e.elem[e.prop]=e.now}}};bK.each(["toggle","show","hide"],function(b4,e){var b5=bK.fn[e];bK.fn[e]=function(b6,b8,b7){return b6==null||typeof b6==="boolean"?b5.apply(this,arguments):this.animate(bJ(e,true),b6,b8,b7)}});bK.fn.extend({fadeTo:function(e,b6,b5,b4){return this.filter(Q).css("opacity",0).show().end().animate({opacity:b6},e,b5,b4)},animate:function(b9,b6,b8,b7){var b5=bK.isEmptyObject(b9),e=bK.speed(b6,b8,b7),b4=function(){var ca=f(this,bK.extend({},b9),e);b4.finish=function(){ca.stop(true)};if(b5||bK._data(this,"finish")){ca.stop(true)}};b4.finish=b4;return b5||e.queue===false?this.each(b4):this.queue(e.queue,b4)},stop:function(b5,b4,e){var b6=function(b7){var b8=b7.stop;delete b7.stop;b8(e)};if(typeof b5!=="string"){e=b4;b4=b5;b5=aH}if(b4&&b5!==false){this.queue(b5||"fx",[])}return this.each(function(){var ca=true,b7=b5!=null&&b5+"queueHooks",b9=bK.timers,b8=bK._data(this);if(b7){if(b8[b7]&&b8[b7].stop){b6(b8[b7])}}else{for(b7 in b8){if(b8[b7]&&b8[b7].stop&&bR.test(b7)){b6(b8[b7])}}}for(b7=b9.length;b7--;){if(b9[b7].elem===this&&(b5==null||b9[b7].queue===b5)){b9[b7].anim.stop(e);ca=false;b9.splice(b7,1)}}if(ca||!e){bK.dequeue(this,b5)}})},finish:function(e){if(e!==false){e=e||"fx"}return this.each(function(){var b6,b9=bK._data(this),b5=b9[e+"queue"],b4=b9[e+"queueHooks"],b8=bK.timers,b7=b5?b5.length:0;b9.finish=true;bK.queue(this,e,[]);if(b4&&b4.cur&&b4.cur.finish){b4.cur.finish.call(this)}for(b6=b8.length;b6--;){if(b8[b6].elem===this&&b8[b6].queue===e){b8[b6].anim.stop(true);b8.splice(b6,1)}}for(b6=0;b6<b7;b6++){if(b5[b6]&&b5[b6].finish){b5[b6].finish.call(this)}}delete b9.finish})}});function bJ(b5,b7){var b6,e={height:b5},b4=0;b7=b7?1:0;for(;b4<4;b4+=2-b7){b6=bU[b4];e["margin"+b6]=e["padding"+b6]=b5}if(b7){e.opacity=e.width=b5}return e}bK.each({slideDown:bJ("show"),slideUp:bJ("hide"),slideToggle:bJ("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,b4){bK.fn[e]=function(b5,b7,b6){return this.animate(b4,b5,b7,b6)}});bK.speed=function(b5,b6,b4){var e=b5&&typeof b5==="object"?bK.extend({},b5):{complete:b4||!b4&&b6||bK.isFunction(b5)&&b5,duration:b5,easing:b4&&b6||b6&&!bK.isFunction(b6)&&b6};e.duration=bK.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in bK.fx.speeds?bK.fx.speeds[e.duration]:bK.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(){if(bK.isFunction(e.old)){e.old.call(this)}if(e.queue){bK.dequeue(this,e.queue)}};return e};bK.easing={linear:function(e){return e},swing:function(e){return 0.5-Math.cos(e*Math.PI)/2}};bK.timers=[];bK.fx=H.prototype.init;bK.fx.tick=function(){var b5,b4=bK.timers,e=0;L=bK.now();for(;e<b4.length;e++){b5=b4[e];if(!b5()&&b4[e]===b5){b4.splice(e--,1)}}if(!b4.length){bK.fx.stop()}L=aH};bK.fx.timer=function(e){if(e()&&bK.timers.push(e)){bK.fx.start()}};bK.fx.interval=13;bK.fx.start=function(){if(!ae){ae=setInterval(bK.fx.tick,bK.fx.interval)}};bK.fx.stop=function(){clearInterval(ae);ae=null};bK.fx.speeds={slow:600,fast:200,_default:400};bK.fx.step={};if(bK.expr&&bK.expr.filters){bK.expr.filters.animated=function(e){return bK.grep(bK.timers,function(b4){return e===b4.elem}).length}}bK.fn.offset=function(b4){if(arguments.length){return b4===aH?this:this.each(function(b9){bK.offset.setOffset(this,b4,b9)})}var e,b8,b6={top:0,left:0},b5=this[0],b7=b5&&b5.ownerDocument;if(!b7){return}e=b7.documentElement;if(!bK.contains(e,b5)){return b6}if(typeof b5.getBoundingClientRect!==aD){b6=b5.getBoundingClientRect()}b8=bq(b7);return{top:b6.top+(b8.pageYOffset||e.scrollTop)-(e.clientTop||0),left:b6.left+(b8.pageXOffset||e.scrollLeft)-(e.clientLeft||0)}};bK.offset={setOffset:function(b6,cf,b9){var ca=bK.css(b6,"position");if(ca==="static"){b6.style.position="relative"}var b8=bK(b6),b4=b8.offset(),e=bK.css(b6,"top"),cd=bK.css(b6,"left"),ce=(ca==="absolute"||ca==="fixed")&&bK.inArray("auto",[e,cd])>-1,cc={},cb={},b5,b7;if(ce){cb=b8.position();b5=cb.top;b7=cb.left}else{b5=parseFloat(e)||0;b7=parseFloat(cd)||0}if(bK.isFunction(cf)){cf=cf.call(b6,b9,b4)}if(cf.top!=null){cc.top=(cf.top-b4.top)+b5}if(cf.left!=null){cc.left=(cf.left-b4.left)+b7}if("using" in cf){cf.using.call(b6,cc)}else{b8.css(cc)}}};bK.fn.extend({position:function(){if(!this[0]){return}var b5,b6,e={top:0,left:0},b4=this[0];if(bK.css(b4,"position")==="fixed"){b6=b4.getBoundingClientRect()}else{b5=this.offsetParent();b6=this.offset();if(!bK.nodeName(b5[0],"html")){e=b5.offset()}e.top+=bK.css(b5[0],"borderTopWidth",true);e.left+=bK.css(b5[0],"borderLeftWidth",true)}return{top:b6.top-e.top-bK.css(b4,"marginTop",true),left:b6.left-e.left-bK.css(b4,"marginLeft",true)}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||l.documentElement;while(e&&(!bK.nodeName(e,"html")&&bK.css(e,"position")==="static")){e=e.offsetParent}return e||l.documentElement})}});bK.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b5,b4){var e=/Y/.test(b4);bK.fn[b5]=function(b6){return bK.access(this,function(b7,ca,b9){var b8=bq(b7);if(b9===aH){return b8?(b4 in b8)?b8[b4]:b8.document.documentElement[ca]:b7[ca]}if(b8){b8.scrollTo(!e?b9:bK(b8).scrollLeft(),e?b9:bK(b8).scrollTop())}else{b7[ca]=b9}},b5,b6,arguments.length,null)}});function bq(e){return bK.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}bK.each({Height:"height",Width:"width"},function(e,b4){bK.each({padding:"inner"+e,content:b4,"":"outer"+e},function(b5,b6){bK.fn[b6]=function(ca,b9){var b8=arguments.length&&(b5||typeof ca!=="boolean"),b7=b5||(ca===true||b9===true?"margin":"border");return bK.access(this,function(cc,cb,cd){var ce;if(bK.isWindow(cc)){return cc.document.documentElement["client"+e]}if(cc.nodeType===9){ce=cc.documentElement;return Math.max(cc.body["scroll"+e],ce["scroll"+e],cc.body["offset"+e],ce["offset"+e],ce["client"+e])}return cd===aH?bK.css(cc,cb,b7):bK.style(cc,cb,cd,b7)},b4,b8?ca:aH,b8,null)}})});a3.jQuery=a3.$=bK;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return bK})}})(window);!function(a){a(function(){a.support.transition=(function(){var b=(function(){var e=document.createElement("bootstrap"),d={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},c;for(c in d){if(e.style[c]!==undefined){return d[c]}}}());return b&&{end:b}})()})}(window.jQuery);!function(d){var c='[data-dismiss="alert"]',b=function(e){d(e).on("click",c,this.close)};b.prototype.close=function(j){var i=d(this),g=i.attr("data-target"),h;if(!g){g=i.attr("href");g=g&&g.replace(/.*(?=#[^\s]*$)/,"")}h=d(g);j&&j.preventDefault();h.length||(h=i.hasClass("alert")?i:i.parent());h.trigger(j=d.Event("close"));if(j.isDefaultPrevented()){return}h.removeClass("in");function f(){h.trigger("closed").remove()}d.support.transition&&h.hasClass("fade")?h.on(d.support.transition.end,f):f()};var a=d.fn.alert;d.fn.alert=function(e){return this.each(function(){var g=d(this),f=g.data("alert");if(!f){g.data("alert",(f=new b(this)))}if(typeof e=="string"){f[e].call(g)}})};d.fn.alert.Constructor=b;d.fn.alert.noConflict=function(){d.fn.alert=a;return this};d(document).on("click.alert.data-api",c,b.prototype.close)}(window.jQuery);!function(c){var b=function(e,d){this.$element=c(e);this.options=c.extend({},c.fn.button.defaults,d)};b.prototype.setState=function(g){var i="disabled",e=this.$element,f=e.data(),h=e.is("input")?"val":"html";g=g+"Text";f.resetText||e.data("resetText",e[h]());e[h](f[g]||this.options[g]);setTimeout(function(){g=="loadingText"?e.addClass(i).attr(i,i):e.removeClass(i).removeAttr(i)},0)};b.prototype.toggle=function(){var d=this.$element.closest('[data-toggle="buttons-radio"]');d&&d.find(".active").removeClass("active");this.$element.toggleClass("active")};var a=c.fn.button;c.fn.button=function(d){return this.each(function(){var g=c(this),f=g.data("button"),e=typeof d=="object"&&d;if(!f){g.data("button",(f=new b(this,e)))}if(d=="toggle"){f.toggle()}else{if(d){f.setState(d)}}})};c.fn.button.defaults={loadingText:"loading..."};c.fn.button.Constructor=b;c.fn.button.noConflict=function(){c.fn.button=a;return this};c(document).on("click.button.data-api","[data-toggle^=button]",function(f){var d=c(f.target);if(!d.hasClass("btn")){d=d.closest(".btn")}d.button("toggle")})}(window.jQuery);!function(b){var c=function(e,d){this.$element=b(e);this.options=d;this.options.pause=="hover"&&this.$element.on("mouseenter",b.proxy(this.pause,this)).on("mouseleave",b.proxy(this.cycle,this))};c.prototype={cycle:function(d){if(!d){this.paused=false}this.options.interval&&!this.paused&&(this.interval=setInterval(b.proxy(this.next,this),this.options.interval));return this},to:function(h){var d=this.$element.find(".item.active"),e=d.parent().children(),f=e.index(d),g=this;if(h>(e.length-1)||h<0){return}if(this.sliding){return this.$element.one("slid",function(){g.to(h)})}if(f==h){return this.pause().cycle()}return this.slide(h>f?"next":"prev",b(e[h]))},pause:function(d){if(!d){this.paused=true}if(this.$element.find(".next, .prev").length&&b.support.transition.end){this.$element.trigger(b.support.transition.end);this.cycle()}clearInterval(this.interval);this.interval=null;return this},next:function(){if(this.sliding){return}return this.slide("next")},prev:function(){if(this.sliding){return}return this.slide("prev")},slide:function(k,f){var m=this.$element.find(".item.active"),d=f||m[k](),j=this.interval,l=k=="next"?"left":"right",g=k=="next"?"first":"last",h=this,i;this.sliding=true;j&&this.pause();d=d.length?d:this.$element.find(".item")[g]();i=b.Event("slide",{relatedTarget:d[0]});if(d.hasClass("active")){return}if(b.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(i);if(i.isDefaultPrevented()){return}d.addClass(k);d[0].offsetWidth;m.addClass(l);d.addClass(l);this.$element.one(b.support.transition.end,function(){d.removeClass([k,l].join(" ")).addClass("active");m.removeClass(["active",l].join(" "));h.sliding=false;setTimeout(function(){h.$element.trigger("slid")},0)})}else{this.$element.trigger(i);if(i.isDefaultPrevented()){return}m.removeClass("active");d.addClass("active");this.sliding=false;this.$element.trigger("slid")}j&&this.cycle();return this}};var a=b.fn.carousel;b.fn.carousel=function(d){return this.each(function(){var h=b(this),g=h.data("carousel"),e=b.extend({},b.fn.carousel.defaults,typeof d=="object"&&d),f=typeof d=="string"?d:e.slide;if(!g){h.data("carousel",(g=new c(this,e)))}if(typeof d=="number"){g.to(d)}else{if(f){g[f]()}else{if(e.interval){g.cycle()}}}})};b.fn.carousel.defaults={interval:5000,pause:"hover"};b.fn.carousel.Constructor=c;b.fn.carousel.noConflict=function(){b.fn.carousel=a;return this};b(document).on("click.carousel.data-api","[data-slide]",function(i){var h=b(this),f,d=b(h.attr("data-target")||(f=h.attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")),g=b.extend({},d.data(),h.data());d.carousel(g);i.preventDefault()})}(window.jQuery);!function(b){var c=function(e,d){this.$element=b(e);this.options=b.extend({},b.fn.collapse.defaults,d);if(this.options.parent){this.$parent=b(this.options.parent)}this.options.toggle&&this.toggle()};c.prototype={constructor:c,dimension:function(){var d=this.$element.hasClass("width");return d?"width":"height"},show:function(){var g,d,f,e;if(this.transitioning){return}g=this.dimension();d=b.camelCase(["scroll",g].join("-"));f=this.$parent&&this.$parent.find("> .accordion-group > .in");if(f&&f.length){e=f.data("collapse");if(e&&e.transitioning){return}f.collapse("hide");e||f.data("collapse",null)}this.$element[g](0);this.transition("addClass",b.Event("show"),"shown");b.support.transition&&this.$element[g](this.$element[0][d])},hide:function(){var d;if(this.transitioning){return}d=this.dimension();this.reset(this.$element[d]());this.transition("removeClass",b.Event("hide"),"hidden");this.$element[d](0)},reset:function(d){var e=this.dimension();this.$element.removeClass("collapse")[e](d||"auto")[0].offsetWidth;this.$element[d!==null?"addClass":"removeClass"]("collapse");return this},transition:function(h,e,f){var g=this,d=function(){if(e.type=="show"){g.reset()}g.transitioning=0;g.$element.trigger(f)};this.$element.trigger(e);if(e.isDefaultPrevented()){return}this.transitioning=1;this.$element[h]("in");b.support.transition&&this.$element.hasClass("collapse")?this.$element.one(b.support.transition.end,d):d()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var a=b.fn.collapse;b.fn.collapse=function(d){return this.each(function(){var g=b(this),f=g.data("collapse"),e=typeof d=="object"&&d;if(!f){g.data("collapse",(f=new c(this,e)))}if(typeof d=="string"){f[d]()}})};b.fn.collapse.defaults={toggle:true};b.fn.collapse.Constructor=c;b.fn.collapse.noConflict=function(){b.fn.collapse=a;return this};b(document).on("click.collapse.data-api","[data-toggle=collapse]",function(i){var h=b(this),d,g=h.attr("data-target")||i.preventDefault()||(d=h.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=b(g).data("collapse")?"toggle":h.data();h[b(g).hasClass("in")?"addClass":"removeClass"]("collapsed");b(g).collapse(f)})}(window.jQuery);!function(f){var b="[data-toggle=dropdown]",a=function(h){var g=f(h).on("click.dropdown.data-api",this.toggle);f("html").on("click.dropdown.data-api",function(){g.parent().removeClass("open")})};a.prototype={constructor:a,toggle:function(j){var i=f(this),h,g;if(i.is(".disabled, :disabled")){return}h=e(i);g=h.hasClass("open");d();if(!g){h.toggleClass("open")}i.focus();return false},keydown:function(l){var k,m,g,j,i,h;if(!/(38|40|27)/.test(l.keyCode)){return}k=f(this);l.preventDefault();l.stopPropagation();if(k.is(".disabled, :disabled")){return}j=e(k);i=j.hasClass("open");if(!i||(i&&l.keyCode==27)){return k.click()}m=f("[role=menu] li:not(.divider):visible a",j);if(!m.length){return}h=m.index(m.filter(":focus"));if(l.keyCode==38&&h>0){h--}if(l.keyCode==40&&h<m.length-1){h++}if(!~h){h=0}m.eq(h).focus()}};function d(){f(b).each(function(){e(f(this)).removeClass("open")})}function e(i){var g=i.attr("data-target"),h;if(!g){g=i.attr("href");g=g&&/#/.test(g)&&g.replace(/.*(?=#[^\s]*$)/,"")}h=f(g);h.length||(h=i.parent());return h}var c=f.fn.dropdown;f.fn.dropdown=function(g){return this.each(function(){var i=f(this),h=i.data("dropdown");if(!h){i.data("dropdown",(h=new a(this)))}if(typeof g=="string"){h[g].call(i)}})};f.fn.dropdown.Constructor=a;f.fn.dropdown.noConflict=function(){f.fn.dropdown=c;return this};f(document).on("click.dropdown.data-api touchstart.dropdown.data-api",d).on("click.dropdown touchstart.dropdown.data-api",".dropdown form",function(g){g.stopPropagation()}).on("touchstart.dropdown.data-api",".dropdown-menu",function(g){g.stopPropagation()}).on("click.dropdown.data-api touchstart.dropdown.data-api",b,a.prototype.toggle).on("keydown.dropdown.data-api touchstart.dropdown.data-api",b+", [role=menu]",a.prototype.keydown)}(window.jQuery);!function(c){var b=function(e,d){this.options=d;this.$element=c(e).delegate('[data-dismiss="modal"]',"click.dismiss.modal",c.proxy(this.hide,this));this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};b.prototype={constructor:b,toggle:function(){return this[!this.isShown?"show":"hide"]()},show:function(){var d=this,f=c.Event("show");this.$element.trigger(f);if(this.isShown||f.isDefaultPrevented()){return}this.isShown=true;this.escape();this.backdrop(function(){var e=c.support.transition&&d.$element.hasClass("fade");if(!d.$element.parent().length){d.$element.appendTo(document.body)}d.$element.show();if(e){d.$element[0].offsetWidth}d.$element.addClass("in").attr("aria-hidden",false);d.enforceFocus();e?d.$element.one(c.support.transition.end,function(){d.$element.focus().trigger("shown")}):d.$element.focus().trigger("shown")})},hide:function(f){f&&f.preventDefault();var d=this;f=c.Event("hide");this.$element.trigger(f);if(!this.isShown||f.isDefaultPrevented()){return}this.isShown=false;this.escape();c(document).off("focusin.modal");this.$element.removeClass("in").attr("aria-hidden",true);c.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var d=this;c(document).on("focusin.modal",function(f){if(d.$element[0]!==f.target&&!d.$element.has(f.target).length){d.$element.focus()}})},escape:function(){var d=this;if(this.isShown&&this.options.keyboard){this.$element.on("keyup.dismiss.modal",function(f){f.which==27&&d.hide()})}else{if(!this.isShown){this.$element.off("keyup.dismiss.modal")}}},hideWithTransition:function(){var d=this,e=setTimeout(function(){d.$element.off(c.support.transition.end);d.hideModal()},500);this.$element.one(c.support.transition.end,function(){clearTimeout(e);d.hideModal()})},hideModal:function(d){this.$element.hide().trigger("hidden");this.backdrop()},removeBackdrop:function(){this.$backdrop.remove();this.$backdrop=null},backdrop:function(g){var f=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=c.support.transition&&e;this.$backdrop=c('<div class="modal-backdrop '+e+'" />').appendTo(document.body);this.$backdrop.click(this.options.backdrop=="static"?c.proxy(this.$element[0].focus,this.$element[0]):c.proxy(this.hide,this));if(d){this.$backdrop[0].offsetWidth}this.$backdrop.addClass("in");d?this.$backdrop.one(c.support.transition.end,g):g()}else{if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");c.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(c.support.transition.end,c.proxy(this.removeBackdrop,this)):this.removeBackdrop()}else{if(g){g()}}}}};var a=c.fn.modal;c.fn.modal=function(d){return this.each(function(){var g=c(this),f=g.data("modal"),e=c.extend({},c.fn.modal.defaults,g.data(),typeof d=="object"&&d);if(!f){g.data("modal",(f=new b(this,e)))}if(typeof d=="string"){f[d]()}else{if(e.show){f.show()}}})};c.fn.modal.defaults={backdrop:true,keyboard:true,show:true};c.fn.modal.Constructor=b;c.fn.modal.noConflict=function(){c.fn.modal=a;return this};c(document).on("click.modal.data-api",'[data-toggle="modal"]',function(i){var h=c(this),f=h.attr("href"),d=c(h.attr("data-target")||(f&&f.replace(/.*(?=#[^\s]+$)/,""))),g=d.data("modal")?"toggle":c.extend({remote:!/#/.test(f)&&f},d.data(),h.data());i.preventDefault();d.modal(g).one("hide",function(){h.focus()})})}(window.jQuery);!function(c){var b=function(e,d){this.init("tooltip",e,d)};b.prototype={constructor:b,init:function(g,f,e){var h,d;this.type=g;this.$element=c(f);this.options=this.getOptions(e);this.enabled=true;if(this.options.trigger=="click"){this.$element.on("click."+this.type,this.options.selector,c.proxy(this.toggle,this))}else{if(this.options.trigger!="manual"){h=this.options.trigger=="hover"?"mouseenter":"focus";d=this.options.trigger=="hover"?"mouseleave":"blur";this.$element.on(h+"."+this.type,this.options.selector,c.proxy(this.enter,this));this.$element.on(d+"."+this.type,this.options.selector,c.proxy(this.leave,this))}}this.options.selector?(this._options=c.extend({},this.options,{trigger:"manual",selector:""})):this.fixTitle()},getOptions:function(d){d=c.extend({},c.fn[this.type].defaults,d,this.$element.data());if(d.delay&&typeof d.delay=="number"){d.delay={show:d.delay,hide:d.delay}}return d},enter:function(f){var d=c(f.currentTarget)[this.type](this._options).data(this.type);if(!d.options.delay||!d.options.delay.show){return d.show()}clearTimeout(this.timeout);d.hoverState="in";this.timeout=setTimeout(function(){if(d.hoverState=="in"){d.show()}},d.options.delay.show)},leave:function(f){var d=c(f.currentTarget)[this.type](this._options).data(this.type);if(this.timeout){clearTimeout(this.timeout)}if(!d.options.delay||!d.options.delay.hide){return d.hide()}d.hoverState="out";this.timeout=setTimeout(function(){if(d.hoverState=="out"){d.hide()}},d.options.delay.hide)},show:function(){var h,d,j,f,i,e,g;if(this.hasContent()&&this.enabled){h=this.tip();this.setContent();if(this.options.animation){h.addClass("fade")}e=typeof this.options.placement=="function"?this.options.placement.call(this,h[0],this.$element[0]):this.options.placement;d=/in/.test(e);h.detach().css({top:0,left:0,display:"block"}).insertAfter(this.$element);j=this.getPosition(d);f=h[0].offsetWidth;i=h[0].offsetHeight;switch(d?e.split(" ")[1]:e){case"bottom":g={top:j.top+j.height,left:j.left+j.width/2-f/2};break;case"top":g={top:j.top-i,left:j.left+j.width/2-f/2};break;case"left":g={top:j.top+j.height/2-i/2,left:j.left-f};break;case"right":g={top:j.top+j.height/2-i/2,left:j.left+j.width};break}h.offset(g).addClass(e).addClass("in")}},setContent:function(){var e=this.tip(),d=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](d);e.removeClass("fade in top bottom left right")},hide:function(){var d=this,e=this.tip();e.removeClass("in");function f(){var g=setTimeout(function(){e.off(c.support.transition.end).detach()},500);e.one(c.support.transition.end,function(){clearTimeout(g);e.detach()})}c.support.transition&&this.$tip.hasClass("fade")?f():e.detach();return this},fixTitle:function(){var d=this.$element;if(d.attr("title")||typeof(d.attr("data-original-title"))!="string"){d.attr("data-original-title",d.attr("title")||"").removeAttr("title")}},hasContent:function(){return this.getTitle()},getPosition:function(d){return c.extend({},(d?{top:0,left:0}:this.$element.offset()),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var f,d=this.$element,e=this.options;f=d.attr("data-original-title")||(typeof e.title=="function"?e.title.call(d[0]):e.title);return f},tip:function(){return this.$tip=this.$tip||c(this.options.template)},validate:function(){if(!this.$element[0].parentNode){this.hide();this.$element=null;this.options=null}},enable:function(){this.enabled=true},disable:function(){this.enabled=false},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(f){var d=c(f.currentTarget)[this.type](this._options).data(this.type);d[d.tip().hasClass("in")?"hide":"show"]()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var a=c.fn.tooltip;c.fn.tooltip=function(d){return this.each(function(){var g=c(this),f=g.data("tooltip"),e=typeof d=="object"&&d;if(!f){g.data("tooltip",(f=new b(this,e)))}if(typeof d=="string"){f[d]()}})};c.fn.tooltip.Constructor=b;c.fn.tooltip.defaults={animation:true,placement:"top",selector:false,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover",title:"",delay:0,html:false};c.fn.tooltip.noConflict=function(){c.fn.tooltip=a;return this}}(window.jQuery);!function(c){var b=function(e,d){this.init("popover",e,d)};b.prototype=c.extend({},c.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var f=this.tip(),e=this.getTitle(),d=this.getContent();f.find(".popover-title")[this.options.html?"html":"text"](e);f.find(".popover-content")[this.options.html?"html":"text"](d);f.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,d=this.$element,f=this.options;e=d.attr("data-content")||(typeof f.content=="function"?f.content.call(d[0]):f.content);return e},tip:function(){if(!this.$tip){this.$tip=c(this.options.template)}return this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var a=c.fn.popover;c.fn.popover=function(d){return this.each(function(){var g=c(this),f=g.data("popover"),e=typeof d=="object"&&d;if(!f){g.data("popover",(f=new b(this,e)))}if(typeof d=="string"){f[d]()}})};c.fn.popover.Constructor=b;c.fn.popover.defaults=c.extend({},c.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"></div></div></div>'});c.fn.popover.noConflict=function(){c.fn.popover=a;return this}}(window.jQuery);!function(c){function b(g,f){var h=c.proxy(this.process,this),d=c(g).is("body")?c(window):c(g),e;this.options=c.extend({},c.fn.scrollspy.defaults,f);this.$scrollElement=d.on("scroll.scroll-spy.data-api",h);this.selector=(this.options.target||((e=c(g).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,""))||"")+" .nav li > a";this.$body=c("body");this.refresh();this.process()}b.prototype={constructor:b,refresh:function(){var d=this,e;this.offsets=c([]);this.targets=c([]);e=this.$body.find(this.selector).map(function(){var g=c(this),f=g.data("target")||g.attr("href"),h=/^#\w/.test(f)&&c(f);return(h&&h.length&&[[h.position().top+d.$scrollElement.scrollTop(),f]])||null}).sort(function(g,f){return g[0]-f[0]}).each(function(){d.offsets.push(this[0]);d.targets.push(this[1])})},process:function(){var j=this.$scrollElement.scrollTop()+this.options.offset,f=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,h=f-this.$scrollElement.height(),g=this.offsets,d=this.targets,k=this.activeTarget,e;if(j>=h){return k!=(e=d.last()[0])&&this.activate(e)}for(e=g.length;e--;){k!=d[e]&&j>=g[e]&&(!g[e+1]||j<=g[e+1])&&this.activate(d[e])}},activate:function(f){var e,d;this.activeTarget=f;c(this.selector).parent(".active").removeClass("active");d=this.selector+'[data-target="'+f+'"],'+this.selector+'[href="'+f+'"]';e=c(d).parent("li").addClass("active");if(e.parent(".dropdown-menu").length){e=e.closest("li.dropdown").addClass("active")}e.trigger("activate")}};var a=c.fn.scrollspy;c.fn.scrollspy=function(d){return this.each(function(){var g=c(this),f=g.data("scrollspy"),e=typeof d=="object"&&d;if(!f){g.data("scrollspy",(f=new b(this,e)))}if(typeof d=="string"){f[d]()}})};c.fn.scrollspy.Constructor=b;c.fn.scrollspy.defaults={offset:10};c.fn.scrollspy.noConflict=function(){c.fn.scrollspy=a;return this};c(window).on("load",function(){c('[data-spy="scroll"]').each(function(){var d=c(this);d.scrollspy(d.data())})})}(window.jQuery);!function(c){var b=function(d){this.element=c(d)};b.prototype={constructor:b,show:function(){var j=this.element,g=j.closest("ul:not(.dropdown-menu)"),f=j.attr("data-target"),h,d,i;if(!f){f=j.attr("href");f=f&&f.replace(/.*(?=#[^\s]*$)/,"")}if(j.parent("li").hasClass("active")){return}h=g.find(".active:last a")[0];i=c.Event("show",{relatedTarget:h});j.trigger(i);if(i.isDefaultPrevented()){return}d=c(f);this.activate(j.parent("li"),g);this.activate(d,d.parent(),function(){j.trigger({type:"shown",relatedTarget:h})})},activate:function(f,e,i){var d=e.find("> .active"),h=i&&c.support.transition&&d.hasClass("fade");function g(){d.removeClass("active").find("> .dropdown-menu > .active").removeClass("active");f.addClass("active");if(h){f[0].offsetWidth;f.addClass("in")}else{f.removeClass("fade")}if(f.parent(".dropdown-menu")){f.closest("li.dropdown").addClass("active")}i&&i()}h?d.one(c.support.transition.end,g):g();d.removeClass("in")}};var a=c.fn.tab;c.fn.tab=function(d){return this.each(function(){var f=c(this),e=f.data("tab");if(!e){f.data("tab",(e=new b(this)))}if(typeof d=="string"){e[d]()}})};c.fn.tab.Constructor=b;c.fn.tab.noConflict=function(){c.fn.tab=a;return this};c(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(d){d.preventDefault();c(this).tab("show")})}(window.jQuery);!function(b){var c=function(e,d){this.$element=b(e);this.options=b.extend({},b.fn.typeahead.defaults,d);this.matcher=this.options.matcher||this.matcher;this.sorter=this.options.sorter||this.sorter;this.highlighter=this.options.highlighter||this.highlighter;this.updater=this.options.updater||this.updater;this.source=this.options.source;this.$menu=b(this.options.menu);this.shown=false;this.listen()};c.prototype={constructor:c,select:function(){var d=this.$menu.find(".active").attr("data-value");this.$element.val(this.updater(d)).change();return this.hide()},updater:function(d){return d},show:function(){var d=b.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});this.$menu.insertAfter(this.$element).css({top:d.top+d.height,left:d.left}).show();this.shown=true;return this},hide:function(){this.$menu.hide();this.shown=false;return this},lookup:function(e){var d;this.query=this.$element.val();if(!this.query||this.query.length<this.options.minLength){return this.shown?this.hide():this}d=b.isFunction(this.source)?this.source(this.query,b.proxy(this.process,this)):this.source;return d?this.process(d):this},process:function(d){var e=this;d=b.grep(d,function(f){return e.matcher(f)});d=this.sorter(d);if(!d.length){return this.shown?this.hide():this}return this.render(d.slice(0,this.options.items)).show()},matcher:function(d){return ~d.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(f){var g=[],e=[],d=[],h;while(h=f.shift()){if(!h.toLowerCase().indexOf(this.query.toLowerCase())){g.push(h)}else{if(~h.indexOf(this.query)){e.push(h)}else{d.push(h)}}}return g.concat(e,d)},highlighter:function(d){var e=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return d.replace(new RegExp("("+e+")","ig"),function(f,g){return"<strong>"+g+"</strong>"})},render:function(d){var e=this;d=b(d).map(function(f,g){f=b(e.options.item).attr("data-value",g);f.find("a").html(e.highlighter(g));return f[0]});d.first().addClass("active");this.$menu.html(d);return this},next:function(e){var f=this.$menu.find(".active").removeClass("active"),d=f.next();if(!d.length){d=b(this.$menu.find("li")[0])}d.addClass("active")},prev:function(e){var f=this.$menu.find(".active").removeClass("active"),d=f.prev();if(!d.length){d=this.$menu.find("li").last()}d.addClass("active")},listen:function(){this.$element.on("blur",b.proxy(this.blur,this)).on("keypress",b.proxy(this.keypress,this)).on("keyup",b.proxy(this.keyup,this));if(this.eventSupported("keydown")){this.$element.on("keydown",b.proxy(this.keydown,this))}this.$menu.on("click",b.proxy(this.click,this)).on("mouseenter","li",b.proxy(this.mouseenter,this))},eventSupported:function(d){var e=d in this.$element;if(!e){this.$element.setAttribute(d,"return;");e=typeof this.$element[d]==="function"}return e},move:function(d){if(!this.shown){return}switch(d.keyCode){case 9:case 13:case 27:d.preventDefault();break;case 38:d.preventDefault();this.prev();break;case 40:d.preventDefault();this.next();break}d.stopPropagation()},keydown:function(d){this.suppressKeyPressRepeat=~b.inArray(d.keyCode,[40,38,9,13,27]);this.move(d)},keypress:function(d){if(this.suppressKeyPressRepeat){return}this.move(d)},keyup:function(d){switch(d.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown){return}this.select();break;case 27:if(!this.shown){return}this.hide();break;default:this.lookup()}d.stopPropagation();d.preventDefault()},blur:function(f){var d=this;setTimeout(function(){d.hide()},150)},click:function(d){d.stopPropagation();d.preventDefault();this.select()},mouseenter:function(d){this.$menu.find(".active").removeClass("active");b(d.currentTarget).addClass("active")}};var a=b.fn.typeahead;b.fn.typeahead=function(d){return this.each(function(){var g=b(this),f=g.data("typeahead"),e=typeof d=="object"&&d;if(!f){g.data("typeahead",(f=new c(this,e)))}if(typeof d=="string"){f[d]()}})};b.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1};b.fn.typeahead.Constructor=c;b.fn.typeahead.noConflict=function(){b.fn.typeahead=a;return this};b(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(f){var d=b(this);if(d.data("typeahead")){return}f.preventDefault();d.typeahead(d.data())})}(window.jQuery);!function(c){var b=function(e,d){this.options=c.extend({},c.fn.affix.defaults,d);this.$window=c(window).on("scroll.affix.data-api",c.proxy(this.checkPosition,this)).on("click.affix.data-api",c.proxy(function(){setTimeout(c.proxy(this.checkPosition,this),1)},this));this.$element=c(e);this.checkPosition()};b.prototype.checkPosition=function(){if(!this.$element.is(":visible")){return}var h=c(document).height(),j=this.$window.scrollTop(),d=this.$element.offset(),k=this.options.offset,f=k.bottom,g=k.top,i="affix affix-top affix-bottom",e;if(typeof k!="object"){f=g=k}if(typeof g=="function"){g=k.top()}if(typeof f=="function"){f=k.bottom()}e=this.unpin!=null&&(j+this.unpin<=d.top)?false:f!=null&&(d.top+this.$element.height()>=h-f)?"bottom":g!=null&&j<=g?"top":false;if(this.affixed===e){return}this.affixed=e;this.unpin=e=="bottom"?d.top-j:null;this.$element.removeClass(i).addClass("affix"+(e?"-"+e:""))};var a=c.fn.affix;c.fn.affix=function(d){return this.each(function(){var g=c(this),f=g.data("affix"),e=typeof d=="object"&&d;if(!f){g.data("affix",(f=new b(this,e)))}if(typeof d=="string"){f[d]()}})};c.fn.affix.Constructor=b;c.fn.affix.defaults={offset:0};c.fn.affix.noConflict=function(){c.fn.affix=a;return this};c(window).on("load",function(){c('[data-spy="affix"]').each(function(){var e=c(this),d=e.data();d.offset=d.offset||{};d.offsetBottom&&(d.offset.bottom=d.offsetBottom);d.offsetTop&&(d.offset.top=d.offsetTop);e.affix(d)})})}(window.jQuery);var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;(function(){function d(F){function w(J){var K=J.charCodeAt(0);if(K!==92){return K}var I=J.charAt(1);return(K=k[I])?K:"0"<=I&&I<="7"?parseInt(J.substring(1),8):I==="u"||I==="x"?parseInt(J.substring(2),16):J.charCodeAt(1)}function C(I){if(I<32){return(I<16?"\\x0":"\\x")+I.toString(16)}I=String.fromCharCode(I);if(I==="\\"||I==="-"||I==="["||I==="]"){I="\\"+I}return I}function A(J){for(var M=J.substring(1,J.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),J=[],I=[],O=M[0]==="^",P=O?1:0,L=M.length;P<L;++P){var K=M[P];if(/\\[bdsw]/i.test(K)){J.push(K)}else{var K=w(K),N;P+2<L&&"-"===M[P+1]?(N=w(M[P+2]),P+=2):N=K;I.push([K,N]);N<65||K>122||(N<65||K>90||I.push([Math.max(65,K)|32,Math.min(N,90)|32]),N<97||K>122||I.push([Math.max(97,K)&-33,Math.min(N,122)&-33]))}}I.sort(function(Q,R){return Q[0]-R[0]||R[1]-Q[1]});M=[];K=[NaN,NaN];for(P=0;P<I.length;++P){L=I[P],L[0]<=K[1]+1?K[1]=Math.max(K[1],L[1]):M.push(K=L)}I=["["];O&&I.push("^");I.push.apply(I,J);for(P=0;P<M.length;++P){L=M[P],I.push(C(L[0])),L[1]>L[0]&&(L[1]+1>L[0]&&I.push("-"),I.push(C(L[1])))}I.push("]");return I.join("")}function E(J){for(var M=J.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),I=M.length,N=[],O=0,L=0;O<I;++O){var K=M[O];K==="("?++L:"\\"===K.charAt(0)&&(K=+K.substring(1))&&K<=L&&(N[K]=-1)}for(O=1;O<N.length;++O){-1===N[O]&&(N[O]=++G)}for(L=O=0;O<I;++O){K=M[O],K==="("?(++L,N[L]===void 0&&(M[O]="(?:")):"\\"===K.charAt(0)&&(K=+K.substring(1))&&K<=L&&(M[O]="\\"+N[L])}for(L=O=0;O<I;++O){"^"===M[O]&&"^"!==M[O+1]&&(M[O]="")}if(J.ignoreCase&&H){for(O=0;O<I;++O){K=M[O],J=K.charAt(0),K.length>=2&&J==="["?M[O]=A(K):J!=="\\"&&(M[O]=K.replace(/[A-Za-z]/g,function(P){P=P.charCodeAt(0);return"["+String.fromCharCode(P&-33,P|32)+"]"}))}}return M.join("")}for(var G=0,H=!1,x=!1,u=0,D=F.length;u<D;++u){var B=F[u];if(B.ignoreCase){x=!0}else{if(/[a-z]/i.test(B.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){H=!0;x=!1;break}}}for(var k={b:8,t:9,n:10,v:11,f:12,r:13},v=[],u=0,D=F.length;u<D;++u){B=F[u];if(B.global||B.multiline){throw Error(""+B)}v.push("(?:"+E(B)+")")}return RegExp(v.join("|"),x?"gi":"g")}function c(B){function u(E){switch(E.nodeType){case 1:if(x.test(E.className)){break}for(var F=E.firstChild;F;F=F.nextSibling){u(F)}F=E.nodeName;if("BR"===F||"LI"===F){w[D]="\n",C[D<<1]=A++,C[D++<<1|1]=E}break;case 3:case 4:F=E.nodeValue,F.length&&(F=k?F.replace(/\r\n?/g,"\n"):F.replace(/[\t\n\r ]+/g," "),w[D]=F,C[D<<1]=A,A+=F.length,C[D++<<1|1]=E)}}var x=/(?:^|\s)nocode(?:\s|$)/,w=[],A=0,C=[],D=0,v;B.currentStyle?v=B.currentStyle.whiteSpace:window.getComputedStyle&&(v=document.defaultView.getComputedStyle(B,q).getPropertyValue("white-space"));var k=v&&"pre"===v.substring(0,3);u(B);return{a:w.join("").replace(/\n$/,""),c:C}}function t(u,k,w,v){k&&(u={a:k,d:u},w(u),v.push.apply(v,u.e))}function h(u,k){function x(P){for(var F=P.d,C=[F,"pln"],L=0,J=P.a.match(A)||[],B={},E=0,N=J.length;E<N;++E){var K=J[E],O=B[K],D=void 0,M;if(typeof O==="string"){M=!1}else{var I=w[K.charAt(0)];if(I){D=K.match(I[1]),O=I[0]}else{for(M=0;M<v;++M){if(I=k[M],D=K.match(I[1])){O=I[0];break}}D||(O="pln")}if((M=O.length>=5&&"lang-"===O.substring(0,5))&&!(D&&typeof D[1]==="string")){M=!1,O="src"}M||(B[K]=O)}I=L;L+=K.length;if(M){M=D[1];var H=K.indexOf(M),G=H+M.length;D[2]&&(G=K.length-D[2].length,H=G-M.length);O=O.substring(5);t(F+I,K.substring(0,H),x,C);t(F+I+H,M,s(O,M),C);t(F+I+G,K.substring(G),x,C)}else{C.push(F+I,O)}}P.e=C}var w={},A;(function(){for(var G=u.concat(k),B=[],F={},H=0,E=G.length;H<E;++H){var D=G[H],I=D[3];if(I){for(var C=I.length;--C>=0;){w[I.charAt(C)]=D}}D=D[1];I=""+D;F.hasOwnProperty(I)||(B.push(D),F[I]=q)}B.push(/[\S\s]/);A=d(B)})();var v=k.length;return x}function o(u){var k=[],w=[];u.tripleQuotedStrings?k.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):u.multiLineStrings?k.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,q,"'\"`"]):k.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);u.verbatimStrings&&w.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var v=u.hashComments;v&&(u.cStyleComments?(v>1?k.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):k.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),w.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):k.push(["com",/^#[^\n\r]*/,q,"#"]));u.cStyleComments&&(w.push(["com",/^\/\/[^\n\r]*/,q]),w.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));u.regexLiterals&&w.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(v=u.types)&&w.push(["typ",v]);u=(""+u.keywords).replace(/^ | $/g,"");u.length&&w.push(["kwd",RegExp("^(?:"+u.replace(/[\s,]+/g,"|")+")\\b"),q]);k.push(["pln",/^\s+/,q," \r\n\t\xa0"]);w.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return h(k,w)}function r(H,x){function E(K){switch(K.nodeType){case 1:if(B.test(K.className)){break}if("BR"===K.nodeName){C(K),K.parentNode&&K.parentNode.removeChild(K)}else{for(K=K.firstChild;K;K=K.nextSibling){E(K)}}break;case 3:case 4:if(v){var k=K.nodeValue,L=k.match(I);if(L){var M=k.substring(0,L.index);K.nodeValue=M;(k=k.substring(L.index+L[0].length))&&K.parentNode.insertBefore(J.createTextNode(k),K.nextSibling);C(K);M||K.parentNode.removeChild(K)}}}}function C(K){function k(M,R){var Q=R?M.cloneNode(!1):M,P=M.parentNode;if(P){var P=k(P,1),O=M.nextSibling;P.appendChild(Q);for(var N=O;N;N=O){O=N.nextSibling,P.appendChild(N)}}return Q}for(;!K.nextSibling;){if(K=K.parentNode,!K){return}}for(var K=k(K.nextSibling,0),L;(L=K.parentNode)&&L.nodeType===1;){K=L}F.push(K)}var B=/(?:^|\s)nocode(?:\s|$)/,I=/\r\n?|\n/,J=H.ownerDocument,A;H.currentStyle?A=H.currentStyle.whiteSpace:window.getComputedStyle&&(A=J.defaultView.getComputedStyle(H,q).getPropertyValue("white-space"));var v=A&&"pre"===A.substring(0,3);for(A=J.createElement("LI");H.firstChild;){A.appendChild(H.firstChild)}for(var F=[A],D=0;D<F.length;++D){E(F[D])}x===(x|0)&&F[0].setAttribute("value",x);var u=J.createElement("OL");u.className="linenums";for(var w=Math.max(0,x-1|0)||0,D=0,G=F.length;D<G;++D){A=F[D],A.className="L"+(D+w)%10,A.firstChild||A.appendChild(J.createTextNode("\xa0")),u.appendChild(A)}H.appendChild(u)}function z(u,k){for(var w=k.length;--w>=0;){var v=k[w];y.hasOwnProperty(v)?window.console&&console.warn("cannot override language handler %s",v):y[v]=u}}function s(u,k){if(!u||!y.hasOwnProperty(u)){u=/^\s*</.test(k)?"default-markup":"default-code"}return y[u]}function p(X){var L=X.g;try{var T=c(X.h),Q=T.a;X.a=Q;X.c=T.c;X.d=0;s(L,Q)(X);var N=/\bMSIE\b/.test(navigator.userAgent),L=/\n/g,F=X.a,G=F.length,T=0,M=X.c,I=M.length,Q=0,U=X.e,R=U.length,X=0;U[R]=G;var H,K;for(K=H=0;K<R;){U[K]!==U[K+2]?(U[H++]=U[K++],U[H++]=U[K++]):K+=2}R=H;for(K=H=0;K<R;){for(var A=U[K],S=U[K+1],W=K+2;W+2<=R&&U[W+1]===S;){W+=2}U[H++]=A;U[H++]=S;K=W}for(U.length=H;Q<I;){var J=M[Q+2]||G,V=U[X+2]||G,W=Math.min(J,V),P=M[Q+1],O;if(P.nodeType!==1&&(O=F.substring(T,W))){N&&(O=O.replace(L,"\r"));P.nodeValue=O;var E=P.ownerDocument,D=E.createElement("SPAN");D.className=U[X+1];var B=P.parentNode;B.replaceChild(D,P);D.appendChild(P);T<J&&(M[Q+1]=P=E.createTextNode(F.substring(W,J)),B.insertBefore(P,D.nextSibling))}T=W;T>=J&&(Q+=2);T>=V&&(X+=2)}}catch(C){"console" in window&&console.log(C&&C.stack?C.stack:C)}}var m=["break,continue,do,else,for,if,return,while"],j=[[m,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],n=[j,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],l=[j,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],i=[l,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],j=[j,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],g=[m,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],f=[m,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],m=[m,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,b=/\S/,a=o({keywords:[n,i,j,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+g,f,m],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),y={};z(a,["default-code"]);z(h([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);z(h([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);z(h([],[["atv",/^[\S\s]+/]]),["uq.val"]);z(o({keywords:n,hashComments:!0,cStyleComments:!0,types:e}),["c","cc","cpp","cxx","cyc","m"]);z(o({keywords:"null,true,false"}),["json"]);z(o({keywords:i,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:e}),["cs"]);z(o({keywords:l,cStyleComments:!0}),["java"]);z(o({keywords:m,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);z(o({keywords:g,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py"]);z(o({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);z(o({keywords:f,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);z(o({keywords:j,cStyleComments:!0,regexLiterals:!0}),["js"]);z(o({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);z(h([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(u,k,w){var v=document.createElement("PRE");v.innerHTML=u;w&&r(v,w);p({g:k,i:w,h:v});return v.innerHTML};window.prettyPrint=function(E){function v(){for(var L=window.PR_SHOULD_USE_CONTINUATION?w.now()+250:Infinity;u<A.length&&w.now()<L;u++){var O=A[u],I=O.className;if(I.indexOf("prettyprint")>=0){var I=I.match(B),K,H;if(H=!I){H=O;for(var M=void 0,N=H.firstChild;N;N=N.nextSibling){var J=N.nodeType,M=J===1?M?H:N:J===3?b.test(N.nodeValue)?H:M:M}H=(K=M===H?void 0:M)&&"CODE"===K.tagName}H&&(I=K.className.match(B));I&&(I=I[1]);H=!1;for(M=O.parentNode;M;M=M.parentNode){if((M.tagName==="pre"||M.tagName==="code"||M.tagName==="xmp")&&M.className&&M.className.indexOf("prettyprint")>=0){H=!0;break}}H||((H=(H=O.className.match(/\blinenums\b(?::(\d+))?/))?H[1]&&H[1].length?+H[1]:!0:!1)&&r(O,H),D={g:I,h:O,i:H},p(D))}}u<A.length?setTimeout(v,250):E&&E()}for(var C=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],A=[],x=0;x<C.length;++x){for(var F=0,G=C[x].length;F<G;++F){A.push(C[x][F])}}var C=q,w=Date;w.now||(w={now:function(){return +new Date}});var u=0,D,B=/\blang(?:uage)?-([\w.]+)(?!\S)/;v()};window.PR={createSimpleLexer:h,registerLangHandler:z,sourceDecorator:o,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();jQuery(document).ready(function(){$(".topbar").dropdown();prettyPrint()});