1import{s as k,a as $,r as u,N as T,u as A,b as z,c as se,D as le,i as D,d as Q,p as ue,e as ce,f as fe,g as Z,h as F,k as de,l as B,m as me,R as he,V as pe,n as G,A as K,w as Se,o as we,q as ge,j as m,O as ye,t as xe}from"./components-DZP3uNYy.js";import{F as Ee,e as X,u as Le,m as Re,P as Ce,M as be,L as ve,S as Te}from"./errorBoundaries-wFlsKK9i.js";import{C as ee}from"./index-Cr9PnSxe.js";import{g as Ae,L as Ne,S as ke,D as te,e as _e,f as Ie,s as Oe}from"./index-ZhkFHCHQ.js";import{S as Pe,a as De,b as Fe}from"./meta-CF0a-nbd.js";import{u as W,t as je,T as He,I as Me}from"./index-DlhJzqRw.js";const P="application/x-www-form-urlencoded";function j(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement}function $e(e){return j(e)&&e.tagName.toLowerCase()==="button"}function Be(e){return j(e)&&e.tagName.toLowerCase()==="form"}function Ue(e){return j(e)&&e.tagName.toLowerCase()==="input"}function Je(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function We(e,r){return e.button===0&&(!r||r==="_self")&&!Je(e)}let I=null;function qe(){if(I===null)try{new FormData(document.createElement("form"),0),I=!1}catch{I=!0}return I}const Ve=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function M(e){return e!=null&&!Ve.has(e)?($(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${P}"`),null):e}function Ye(e,r){let t,n,s,o,a;if(Be(e)){let l=e.getAttribute("action");n=l?k(l,r):null,t=e.getAttribute("method")||"get",s=M(e.getAttribute("enctype"))||P,o=new FormData(e)}else if($e(e)||Ue(e)&&(e.type==="submit"||e.type==="image")){let l=e.form;if(l==null)throw new Error('Cannot submit a <button> or <input type="submit"> without a <form>');let c=e.getAttribute("formaction")||l.getAttribute("action");if(n=c?k(c,r):null,t=e.getAttribute("formmethod")||l.getAttribute("method")||"get",s=M(e.getAttribute("formenctype"))||M(l.getAttribute("enctype"))||P,o=new FormData(l,e),!qe()){let{name:i,type:f,value:d}=e;if(f==="image"){let g=i?`${i}.`:"";o.append(`${g}x`,"0"),o.append(`${g}y`,"0")}else i&&o.append(i,d)}}else{if(j(e))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');t="get",n=null,s=P,a=e}return o&&s==="text/plain"&&(a=o,o=void 0),{action:n,method:t.toLowerCase(),encType:s,formData:o,body:a}}const Ge=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";try{Ge&&(window.__reactRouterVersion="8.3.0")}catch{}const ne=u.forwardRef(function({onClick:r,discover:t="render",prefetch:n="none",relative:s,reloadDocument:o,replace:a,mask:l,state:c,target:i,to:f,preventScrollReset:d,viewTransition:g,defaultShouldRevalidate:S,...y},x){let{basename:E,navigator:p,useTransitions:L}=u.useContext(T),h=typeof f=="string"&&K.test(f),R=ue(f,E);f=R.to;let w=ce(f,{relative:s}),C=A(),b=null;if(l){let v=fe(l,[],C.mask?C.mask.pathname:"/",!0);E!=="/"&&(v.pathname=v.pathname==="/"?E:Z([E,v.pathname])),b=p.createHref(v)}let[N,_,H]=Le(n,y),ae=Ze(f,{replace:a,mask:l,state:c,target:i,preventScrollReset:d,relative:s,viewTransition:g,defaultShouldRevalidate:S,useTransitions:L});function ie(v){r&&r(v),v.defaultPrevented||ae(v)}let V=!(R.isExternal||o),Y=u.createElement("a",{...y,...H,href:(V?b:void 0)||R.absoluteURL||w,onClick:V?ie:r,ref:Re(x,_),target:i,"data-discover":!h&&t==="render"?"true":void 0});return N&&!h?u.createElement(u.Fragment,null,Y,u.createElement(Ce,{page:w})):Y});
1ne.displayName="Link";const Xe=u.forwardRef(function({"aria-current":r="page",caseSensitive:t=!1,className:n="",end:s=!1,style:o,to:a,viewTransition:l,children:c,...i},f){let d=F(a,{relative:i.relative}),g=A(),S=u.useContext(Q),{navigator:y,basename:x}=u.useContext(T),E=S!=null&&at(d)&&l===!0,p=y.encodeLocation?y.encodeLocation(d).pathname:d.pathname,L=g.pathname,h=S&&S.navigation&&S.navigation.location?S.navigation.location.pathname:null;t||(L=L.toLowerCase(),h=h?h.toLowerCase():null,p=p.toLowerCase()),h&&x&&(h=k(h,x)||h);const R=p!=="/"&&p.endsWith("/")?p.length-1:p.length;let w=L===p||!s&&L.startsWith(p)&&L.charAt(R)==="/",C=h!=null&&(h===p||!s&&h.startsWith(p)&&h.charAt(R)==="/"),b={isActive:w,isPending:C,isTransitioning:E},N=w?r:void 0,_;typeof n=="function"?_=n(b):_=[n,w?"active":null,C?"pending":null,E?"transitioning":null].filter(Boolean).join(" ");let H=typeof o=="function"?o(b):o;return u.createElement(ne,{...i,"aria-current":N,className:_,ref:f,style:H,to:a,viewTransition:l},typeof c=="function"?c(b):c)});Xe.displayName="NavLink";const ze=u.forwardRef(({discover:e="render",fetcherKey:r,navigate:t,reloadDocument:n,replace:s,state:o,method:a="get",action:l,onSubmit:c,relative:i,preventScrollReset:f,viewTransition:d,defaultShouldRevalidate:g,...S},y)=>{let{useTransitions:x}=u.useContext(T),E=tt(),p=nt(l,{relative:i}),L=a.toLowerCase()==="get"?"get":"post",h=typeof l=="string"&&K.test(l),R=w=>{if(c&&c(w),w.defaultPrevented)return;w.preventDefault();let C=w.nativeEvent.submitter,b=C?.getAttribute("formmethod")||a,N=()=>E(C||w.currentTarget,{fetcherKey:r,method:b,navigate:t,replace:s,state:o,relative:i,preventScrollReset:f,viewTransition:d,defaultShouldRevalidate:g});x&&t!==!1?u.startTransition(()=>N()):N()};return u.createElement("form",{ref:y,method:L,action:p,onSubmit:n?c:R,...S,"data-discover":!h&&e==="render"?"true":void 0})});ze.displayName="Form";function re({getKey:e,storageKey:r,...t}){let n=u.useContext(Ee),{basename:s}=u.useContext(T),o=A(),a=z();rt({getKey:e,storageKey:r});let l=u.useMemo(()=>{if(!n||!e)return null;let i=J(o,a,s,e);return i!==o.key?i:null},[]);if(!n||n.isSpaMode)return null;let c=((i,f)=>{if(!window.history.state||!window.history.state.key){let d=Math.random().toString(32).slice(2);window.history.replaceState({key:d},"")}try{let d=JSON.parse(sessionStorage.getItem(i)||"{}")[f||window.history.state.key];typeof d=="number"&&window.scrollTo(0,d)}catch(d){console.error(d),sessionStorage.removeItem(i)}}).toString();return t.nonce==null&&n?.nonce&&(t.nonce=n.nonce),u.createElement("script",{...t,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:`(${c})(${X(JSON.stringify(r||U))}, ${X(JSON.stringify(l))})`}})}re.displayName="ScrollRestoration";function oe(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function q(e){let r=u.useContext(le);return D(r,oe(e)),r}function Qe(e){let r=u.useContext(Q);return D(r,oe(e)),r}function Ze(e,{target:r,replace:t,mask:n,state:s,preventScrollReset:o,relative:a,viewTransition:l,defaultShouldRevalidate:c,useTransitions:i}={}){let f=de(),d=A(),g=F(e,{relative:a});return u.useCallback(S=>{if(We(S,r)){S.preventDefault();let y=t!==void 0?t:B(d)===B(g),x=()=>f(e,{replace:y,mask:n,state:s,preventScrollReset:o,relative:a,viewTransition:l,defaultShouldRevalidate:c});i?u.startTransition(()=>x()):x()}},[d,f,g,t,n,s,r,e,o,a,l,c,i])}let Ke=0,et=()=>`__${String(++Ke)}__`;function tt(){let{router:e}=q("useSubmit"),{basename:r}=u.useContext(T),t=me(),n=e.fetch,s=e.navigate;return u.useCallback(async(o,a={})=>{let{action:l,method:c,encType:i,formData:f,body:d}=Ye(o,r);a.navigate===!1?await n(a.fetcherKey||et(),t,a.action||l,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:f,body:d,formMethod:a.method||c,formEncType:a.encType||i,flushSync:a.flushSync}):await s(a.action||l,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:f,body:d,formMethod:a.method||c,formEncType:a.encType||i,replace:a.replace,state:a.state,fromRouteId:t,flushSync:a.flushSync,viewTransition:a.viewTransition})},[n,s,r,t])}function nt(e,{relative:r}={}){let{basename:t}=u.useContext(T),n=u.useContext(he);D(n,"useFormAction must be used inside a RouteContext");let[s]=n.matches.slice(-1),o={...F(e||".",{relative:r})},a=A();if(e==null){o.search=a.search;let l=new URLSearchParams(o.search),c=l.getAll("index");if(c.some(i=>i==="")){l.delete("index"),c.filter(f=>f).forEach(f=>l.append("index",f));let i=l.toString();o.search=i?`?${i}`:""}}return(!e||e===".")&&s.route.index&&(o.search=o.search?o.search.replace(/^\?/,"?index&"):"?index"),t!=="/"&&(o.pathname=o.pathname==="/"?t:Z([t,o.pathname])),B(o)}const U="react-router-scroll-positions";let O={};function J(e,r,t,n){let s=null;return n&&(t!=="/"?s=n({...e,pathname:k(e.pathname,t)||e.pathname},r):s=n(e,r)),s==null&&(s=e.key),s}function rt({getKey:e,storageKey:r}={}){let{router:t}=q("useScrollRestoration"),{restoreScrollPosition:n,preventScrollReset:s}
1=Qe("useScrollRestoration"),{basename:o}=u.useContext(T),a=A(),l=z(),c=se();u.useEffect(()=>(window.history.scrollRestoration="manual",()=>{window.history.scrollRestoration="auto"}),[]),ot(u.useCallback(()=>{if(c.state==="idle"){let i=J(a,l,o,e);O[i]=window.scrollY}try{sessionStorage.setItem(r||U,JSON.stringify(O))}catch(i){$(!1,`Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${i}).`)}window.history.scrollRestoration="auto"},[c.state,e,o,a,l,r])),typeof document<"u"&&(u.useLayoutEffect(()=>{try{let i=sessionStorage.getItem(r||U);i&&(O=JSON.parse(i))}catch{}},[r]),u.useLayoutEffect(()=>{let i=t?.enableScrollRestoration(O,()=>window.scrollY,e?(f,d)=>J(f,d,o,e):void 0);return()=>i&&i()},[t,o,e]),u.useLayoutEffect(()=>{if(n!==!1){if(typeof n=="number"){window.scrollTo(0,n);return}try{if(a.hash){let i=document.getElementById(decodeURIComponent(a.hash.slice(1)));if(i){i.scrollIntoView();return}}}catch{$(!1,`"${a.hash.slice(1)}" is not a decodable element ID. The view will not scroll to it.`)}s!==!0&&window.scrollTo(0,0)}},[a,n,s]))}function ot(e,r){let{capture:t}={};u.useEffect(()=>{let n=t!=null?{capture:t}:void 0;return window.addEventListener("pagehide",e,n),()=>{window.removeEventListener("pagehide",e,n)}},[e,t])}function at(e,{relative:r}={}){let t=u.useContext(pe);D(t!=null,"`useViewTransitionState` must be used within `react-router/dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:n}=q("useViewTransitionState"),s=F(e,{relative:r});if(!t.isTransitioning)return!1;let o=k(t.currentLocation.pathname,n)||t.currentLocation.pathname,a=k(t.nextLocation.pathname,n)||t.nextLocation.pathname;return G(s.pathname,a)!=null||G(s.pathname,o)!=null}const it="https://schema.org",st={"@type":"Organization",name:"Cloudflare",url:"https://www.cloudflare.com"};function lt({locale:e,pathname:r,description:t}){return{"@context":it,"@type":"WebApplication",name:Pe,url:De(r,e),description:t,inLanguage:Ae(e),applicationCategory:"UtilitiesApplication",operatingSystem:"Any",browserRequirements:"Requires JavaScript.",isAccessibleForFree:!0,offers:{"@type":"Offer",price:"0",priceCurrency:"USD"},publisher:st}}const gt=e=>{if(!e.loaderData)return[];const{locale:r,title:t,description:n,imageAlt:s}=e.loaderData;if(e.error)return[{title:t}];const o=e.location.pathname;return Fe({locale:r,title:t,description:n,imageAlt:s,pathname:o,structuredData:Oe(o)==="/"?lt({locale:r,pathname:o,description:n}):void 0})},yt=()=>[],ut=`try{const l=localStorage.getItem(${JSON.stringify(Ne)});if(${JSON.stringify(ke)}.includes(l)&&l!==${JSON.stringify(te)}){location.replace(location.origin+"/"+l.toLowerCase()+(location.pathname==="/"?"":location.pathname)+location.search+location.hash)}}catch{}`,ct=`let c="required";try{if(localStorage.getItem(${JSON.stringify(ee)})!==null)c="accepted"}catch{}document.documentElement.dataset.consent=c`;function ft(){try{return typeof localStorage>"u"||localStorage.getItem(ee)===null?"required":"accepted"}catch{return"required"}}function xt({children:e}){const{i18n:r}=W(),t=A(),n=r.language||te,s=_e(t.pathname)===void 0,o=ge("root")?.turnstileEnabled,a=ft();return m.jsxs("html",{lang:n,dir:Ie(n),"data-consent":a,suppressHydrationWarning:!0,className:"h-full",children:[m.jsxs("head",{children:[m.jsx("script",{dangerouslySetInnerHTML:{__html:je}}),m.jsx("script",{dangerouslySetInnerHTML:{__html:ct}}),s&&m.jsx("script",{dangerouslySetInnerHTML:{__html:ut}}),m.jsx("meta",{charSet:"utf-8"}),m.jsx("meta",{name:"viewport",content:"width=device-width, initial-scale=1"}),o&&m.jsxs(m.Fragment,{children:[m.jsx("link",{rel:"preconnect",href:"https://challenges.cloudflare.com"}),m.jsx("script",{id:"turnstile-api",src:"https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit",defer:!0})]}),m.jsx(be,{}),m.jsx(ve,{})]}),m.jsxs("body",{className:"h-full px-4 lg:px-6",children:[m.jsx(He,{children:e}),m.jsx(re,{}),m.jsx(Te,{})]})]})}const Et=Se(function({loaderData:r}){const{i18n:t}=W(),n=r?.locale;return u.useEffect(()=>{n&&t.language!==n&&t.changeLanguage(n)},[n,t]),m.jsx(ye,{})}),Lt=we(function({error:r}){const{t}=W();let n=t("error.generic.title"),s=t("error.generic.description"),o;if(xe(r)){const a=r.status===404;n=t(a?"error.not-found.title":"error.title"),s=a?t("error.not-found.description"):s}return m.jsxs(Me,{title:t("common.speed-test"),running:!1,maxWidth:960,children:[m.jsx("h1",{children:n}),m.jsx("p",{children:s}),o]})});export{Lt as ErrorBoundary,xt as Layout,Et as default,yt as links,gt as meta};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.