{let c=m.title;""===XF.pageTitleCache&&(XF.pageTitleCache=c);c!==XF.pageTitleCache&&"("===c.charAt(0)&&(c=XF.pageTitleCache);a=(XF.shouldCountBeShown(a)?
"("+a+") ":"")+c;a!==m.title&&(m.title=a)},favIconAlertShown:!1,faviconUpdate:a=>{const c=XF.shouldCountBeShown(a);if(c!==XF.favIconAlertShown){var b=m.querySelectorAll('link[rel~="icon"]');b.length&&(XF.favIconAlertShown=c,b.forEach(f=>{const d=f.getAttribute("href"),e=f.dataset.originalHref;if(XF.shouldCountBeShown(a)){e||(f.dataset.originalHref=d);const g=new Image;XF.on(g,"load",()=>{const h=XF.faviconDraw(g);h&&f.setAttribute("href",h)});g.src=d}else e&&(f.setAttribute("href",e),delete f.dataset.originalHref)}))}},
faviconDraw:a=>{const c=a.naturalWidth,b=XF.createElement("canvas",{width:c,height:a.naturalHeight}),f=b.getContext("2d"),d=c/(32/6),e=2*Math.PI;f.drawImage(a,0,0);f.beginPath();f.arc(d,d,d,0,e,!1);f.fillStyle="#E03030";f.fill();f.lineWidth=c/16;f.strokeStyle="#EAEAEA";f.stroke();f.closePath();try{return b.toDataURL("image/png")}catch(g){return null}},appBadgeUpdate:a=>{"setAppBadge"in navigator&&!navigator.webdriver&&!navigator.userAgent.match(/Chrome-Lighthouse|Googlebot|AdsBot-Google|Mediapartners-Google/i)&&
(a=parseInt(String(a).replace(/[,. ]/g,"")),navigator.setAppBadge(a))},unparseBbCode:a=>{const c=XF.createElement("div",{innerHTML:a||""});c.querySelectorAll(".js-noSelectToQuote").forEach(b=>b.remove());["B","I","U","S"].forEach(b=>{c.querySelectorAll(b).forEach(f=>{f.outerHTML=`[${b.toLowerCase()}]${f.innerHTML}[/${b.toLowerCase()}]`})});c.querySelectorAll(".bbCodeBlock--quote").forEach(b=>{const f=b.querySelector(".bbCodeBlock-expandContent");f?b.outerHTML=`[QUOTE]${f.innerHTML}[/QUOTE]
`:
f.querySelector(".bbCodeBlock-expand").remove()});c.querySelectorAll(".bbCodeBlock--code").forEach(b=>{const f=b.querySelector(".bbCodeCode code");if(!f)return!0;var d=f.className;d=(d=d?d.match(/language-(\S+)/):null)?d[1]:null;f.removeAttribute("class");b.outerHTML=f.outerHTML;f.setAttribute("data-language",d||"none")});c.querySelectorAll(".bbCodeBlock--unfurl").forEach(b=>{b.outerHTML="[URL unfurl=true]"+b.dataset.url+"[/URL]"});c.querySelectorAll('div[style*="text-align"]').forEach(b=>{const f=
q.getComputedStyle(b).textAlign.toUpperCase();b.outerHTML=`[${f}]${b.innerHTML}[/${f}]`});c.querySelectorAll("div[data-media-site-id][data-media-key], form[data-media-site-id][data-media-key]").forEach(b=>{const f=b.dataset.mediaSiteId,d=b.dataset.mediaKey;if(!f||!d)return!0;b.outerHTML=`[MEDIA=${f}]${d}[/MEDIA]`});c.querySelectorAll(".bbCodeSpoiler").forEach(b=>{var f=b.querySelector(".bbCodeSpoiler-button");if(f){const d=b.querySelector(".bbCodeSpoiler-content").innerHTML;let e="";(f=f.querySelector(".bbCodeSpoiler-button-title"))&&
(e=`="${f.textContent}"`);b.outerHTML=`[SPOILER${e}]${d}[/SPOILER]`}});c.querySelectorAll(".bbCodeInlineSpoiler").forEach(b=>{b.outerHTML=`[ISPOILER]${b.innerHTML}[/ISPOILER]`});return c.innerHTML},hideOverlays:()=>{Object.values(XF.Overlay.cache).forEach(a=>{a.hide()})},hideTooltips:()=>{Object.values(XF.TooltipTrigger.cache).forEach(a=>a.hide())},hideParentOverlay:a=>{(a=a.closest(".overlay-container"))&&(a=XF.DataStore.get(a,"overlay"))&&a.hide()},getStickyHeaderOffset:()=>{let a,c=0;for(a=0;a<
XF.StickyHeader.cache.length;a++){const b=XF.StickyHeader.cache[a];b.target.classList.contains(b.options.stickyClass)&&(c+=b.target.offsetHeight)}return c},loadedScripts:{},loadScript:(a,c)=>{if(XF.hasOwn(XF.loadedScripts,a))return!1;XF.loadedScripts[a]=!0;a=XF.createElement("script",{src:a,onload:c});m.head.appendChild(a);return!0},loadScripts:(a,c)=>{var b=m.scripts[0];const f="async"in b;b=b.readyState;const d=m.head;let e=a.length;const g=[],h=()=>{e--;0===e&&c&&c()},k=()=>{let l;for(;g[0]&&"loaded"===
g[0].readyState;)l=g.shift(),l.onreadystatechange=null,l.onerror=null,d.appendChild(l),h()};for(const l of a)if(!XF.loadedScripts[l])if(XF.loadedScripts[l]=!0,f)XF.createElement("script",{src:l,async:!1,onload:h,onerror:h},d);else if(b){const p=XF.createElement("script",{onreadystatechange:k,onerror:()=>{p.onreadystatechange=null;p.onerror=null;h()},url:l});g.push(p)}else{const p=new XMLHttpRequest;p.open("GET",l,!0);p.onload=()=>{200<=p.status&&400>p.status&&XF.createElement("script",{text:p.response},
d);h()};p.onerror=h;p.send()}!e&&c&&c()},async ajax(a,c,b={},f,d={}){"function"===typeof b&&void 0===f&&(f=b,b={});b instanceof HTMLFormElement&&(b=new FormData(b));let e=!0,g=!0,h=!0,k=!0;d.skipDefault&&(g=e=!1,delete d.skipDefault);d.skipDefaultSuccessError&&(g=!1,delete d.skipDefaultSuccessError);d.skipDefaultSuccess&&(e=!1,delete d.skipDefaultSuccess);d.skipError&&(h=!1,delete d.skipError);void 0!==d.global&&(k=d.global?!0:!1,delete d.global);const l=(r,u,y)=>{XF.trigger(m,XF.customEvent("ajax:before-success",
{request:r,response:u,status:u.status,data:y}));g&&XF.defaultAjaxSuccessError(y,u.status,u,r)||e&&XF.defaultAjaxSuccess(y,u.status,u,r)||f&&f(y,u.status,u,r)},p=(r,u,y,z=null)=>{h&&XF.defaultAjaxError(y,null==u?void 0:u.status,u,r,z)},n={"X-Requested-With":"XMLHttpRequest"};let t;var w=d.dataType||"json";delete d.dataType;let v;switch(w){case "html":v=r=>r.text();n.Accept="text/html";break;case "json":v=r=>r.json();n.Accept="application/json";break;case "xml":v=r=>r.text();n.Accept="application/xml";
break;default:throw Error(`Unsupported dataType: ${w}`);}"json"!==w&&(e=!1);b=XF.dataPush(b,"_xfResponseType",w);b=XF.dataPush(b,"_xfWithData",1);b=XF.dataPush(b,"_xfRequestUri",q.location.pathname+q.location.search);XF.config.csrf&&(b=XF.dataPush(b,"_xfToken",XF.config.csrf));"GET"===a.toUpperCase()?c+=(c.includes("?")?"&":"?")+(new URLSearchParams(b)).toString():b instanceof FormData?t=b:Array.isArray(b)?(t=XF.Serializer.serializeFormData(b),n["Content-Type"]="application/x-www-form-urlencoded"):
(t=JSON.stringify(b),n["Content-Type"]="application/json");const x=new AbortController;b=x.signal;d.signal&&d.signal.addEventListener("abort",()=>{x.abort()});delete d.signal;w="GET"===a.toUpperCase()?3E4:6E4;w=setTimeout(()=>{x.abort(new DOMException("_XF_TIMEOUT","AbortError"))},d.timeout||w);delete d.timeout;a=new Request(c,{method:a,headers:n,body:t,signal:b,...d});XF.trigger(m,XF.customEvent("ajax:send",{request:a}));k&&XF.trigger(m,"xf:action-start");try{const r=await fetch(a);let u;if(r.ok)u=
await v(r),l(a,r,u);else{u=await r.text();try{u=JSON.parse(u),l(a,r,u)}catch(y){p(a,r,u)}}XF.trigger(m,XF.customEvent("ajax:complete",{request:a,response:r,data:u}));return{request:a,response:r,data:u}}catch(r){return p(a,null,null,r),XF.trigger(m,XF.customEvent("ajax:complete",{request:a,error:r})),{request:a,error:r}}finally{clearTimeout(w),k&&XF.trigger(m,"xf:action-stop")}},ajaxAbortable(a,c,b={},f,d={}){const e=new AbortController;d.signal=e.signal;return{ajax:XF.ajax(a,c,b,f,d),controller:e}},
dataPush:(a,c,b)=>{a&&"string"!==typeof a?void 0!==a[0]?a.push({name:c,value:b}):a instanceof FormData?a.append(c,b):a[c]=b:(a=String(a),a+="&"+encodeURIComponent(c)+"="+encodeURIComponent(b));return a},defaultAjaxSuccessError:(a,c,b,f)=>{if("object"!==typeof a)return XF.alert("Response was not JSON."),!0;a.html&&a.html.templateErrors&&(c="Errors were triggered when rendering this template:",a.html.templateErrorDetails&&(c+="\n* "+a.html.templateErrorDetails.join("\n* ")),console.error(c));return a.errorHtml?
(XF.setupHtmlInsert(a.errorHtml,(d,e)=>{e=e.h1||e.title||XF.phrase("oops_we_ran_into_some_problems");XF.overlayMessage(e,d)}),!0):a.errors?(XF.alert(a.errors),!0):a.exception?(XF.alert(a.exception),!0):!1},defaultAjaxSuccess:(a,c,b,f)=>{a&&"ok"===a.status&&a.message&&XF.flashMessage(a.message,3E3);return!1},defaultAjaxError:(a,c,b,f,d)=>{if(d instanceof DOMException&&"AbortError"===d.name)"_XF_TIMEOUT"===d.message&&XF.alert(XF.phrase("server_did_not_respond_in_time_try_again"));else{if(d instanceof
Error)throw d;console.error("Error: "+a);XF.alert(XF.phrase("oops_we_ran_into_some_problems_more_details_console"))}},activate:a=>{XF.addExtraPhrases(a);XF.IgnoreWatcher.refresh(a);XF.Element.initialize(a);XF.DynamicDate.refresh(a);XF.ExpandableContent.checkSizing(a);XF.UnfurlLoader.activateContainer(a);XF.KeyboardShortcuts.initializeElements(a);XF.FormInputValidation.initializeElements(a);XF.LazyHandlerLoader.loadLazyHandlers(a);if(q.FB){const c=a instanceof Document?a.body:a;setTimeout(()=>FB.XFBML.parse(c),
0)}XF.trigger(m,XF.customEvent("xf:reinit",{element:a}))},activateAll:a=>{Array.from(a).forEach(c=>XF.activate(c))},getDefaultFormData:(a,c,b,f)=>{let d,e;c&&c.hasAttribute("name")&&(e=c.getAttribute("name"));b&&"multipart/form-data"===a.getAttribute("enctype")&&console.error("JSON serialized forms do not support the file upload-style enctype.");if(q.FormData&&!b)d=new FormData(a),e&&d.append(e,c.getAttribute("value")||e),a.querySelectorAll('input[type="file"]').forEach(g=>{const h=g.files;if("undefined"!==
typeof h&&0===h.length)try{d.delete(g.getAttribute("name"))}catch(k){}});else{if(b){a=a.elements;let g;const h=[],k=[];if(f){"string"===typeof f&&(f=f.split(","));const l=[];f.forEach((p,n)=>{"number"===typeof n?l.push(XF.regexQuote(p.trim())):l.push(XF.regexQuote(n.trim()))});l.length&&(g=new RegExp("^("+l.join("|")+")(\\[|$)"))}Array.from(a).forEach(l=>{const p=l.name;p&&"_xf"!==p.substring(0,3)?!g||g.test(p)?h.push(l):k.push(l):k.push(l)});d=XF.Serializer.serializeArray(k);f=XF.Serializer.serializeJSON(h);
d.unshift({name:b,value:JSON.stringify(f)})}else d=XF.Serializer.serializeArray(a);e&&d.push({name:e,value:e})}return d},scriptMatchRegex:/