diff --git a/404.html b/404.html index ae6cfcd..6c07ef2 100644 --- a/404.html +++ b/404.html @@ -11,9 +11,9 @@

404 Page Not Found

This page could not be found.

- - - + + + \ No newline at end of file diff --git a/assets/chunks/chunk-5b43f735.js b/assets/chunks/chunk-f1b9f6a2.js similarity index 53% rename from assets/chunks/chunk-5b43f735.js rename to assets/chunks/chunk-f1b9f6a2.js index 1cc591f..5e5d241 100644 --- a/assets/chunks/chunk-5b43f735.js +++ b/assets/chunks/chunk-f1b9f6a2.js @@ -1 +1 @@ -const c={context:void 0,registry:void 0};function zM(M){c.context=M}function _M(){return{...c.context,id:`${c.context.id}${c.context.count++}-`,count:0}}const qM=(M,I)=>M===I,E=Symbol("solid-proxy"),iM=Symbol("solid-track"),V={equals:qM};let MI=UM;const h=1,F=2,OM={owned:null,cleanups:null,context:null,owner:null};var A=null;let IM=null,z=null,s=null,m=null,_=0;function J(M,I){const N=z,i=A,j=M.length===0,e=I===void 0?i:I,t=j?OM:{owned:null,cleanups:null,context:e?e.context:null,owner:e},g=j?M:()=>M(()=>w(()=>MM(t)));A=t,z=null;try{return p(g,!0)}finally{z=N,A=i}}function dM(M,I){I=I?Object.assign({},V,I):V;const N={value:M,observers:null,observerSlots:null,comparator:I.equals||void 0},i=j=>(typeof j=="function"&&(j=j(N.value)),mM(N,j));return[bM.bind(N),i]}function Q(M,I,N){const i=QM(M,I,!1,h);q(i)}function o(M,I,N){N=N?Object.assign({},V,N):V;const i=QM(M,I,!0,0);return i.observers=null,i.observerSlots=null,i.comparator=N.equals||void 0,q(i),bM.bind(i)}function jM(M){return p(M,!1)}function w(M){if(z===null)return M();const I=z;z=null;try{return M()}finally{z=I}}function II(M){return A===null||(A.cleanups===null?A.cleanups=[M]:A.cleanups.push(M)),M}function eM(){return z}function YM(M,I){const N=Symbol("context");return{id:N,Provider:tI(N),defaultValue:M}}function fM(M){return A&&A.context&&A.context[M.id]!==void 0?A.context[M.id]:M.defaultValue}function NI(M){const I=o(M),N=o(()=>tM(I()));return N.toArray=()=>{const i=N();return Array.isArray(i)?i:i!=null?[i]:[]},N}function bM(){if(this.sources&&this.state)if(this.state===h)q(this);else{const M=s;s=null,p(()=>X(this),!1),s=M}if(z){const M=this.observers?this.observers.length:0;z.sources?(z.sources.push(this),z.sourceSlots.push(M)):(z.sources=[this],z.sourceSlots=[M]),this.observers?(this.observers.push(z),this.observerSlots.push(z.sources.length-1)):(this.observers=[z],this.observerSlots=[z.sources.length-1])}return this.value}function mM(M,I,N){let i=M.value;return(!M.comparator||!M.comparator(i,I))&&(M.value=I,M.observers&&M.observers.length&&p(()=>{for(let j=0;j1e6)throw s=[],new Error},!1)),I}function q(M){if(!M.fn)return;MM(M);const I=A,N=z,i=_;z=A=M,iI(M,M.value,i),z=N,A=I}function iI(M,I,N){let i;try{i=M.fn(I)}catch(j){return M.pure&&(M.state=h,M.owned&&M.owned.forEach(MM),M.owned=null),M.updatedAt=N+1,kM(j)}(!M.updatedAt||M.updatedAt<=N)&&(M.updatedAt!=null&&"observers"in M?mM(M,i):M.value=i,M.updatedAt=N)}function QM(M,I,N,i=h,j){const e={fn:M,state:i,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:I,owner:A,context:A?A.context:null,pure:N};return A===null||A!==OM&&(A.owned?A.owned.push(e):A.owned=[e]),e}function hM(M){if(M.state===0)return;if(M.state===F)return X(M);if(M.suspense&&w(M.suspense.inFallback))return M.suspense.effects.push(M);const I=[M];for(;(M=M.owner)&&(!M.updatedAt||M.updatedAt<_);)M.state&&I.push(M);for(let N=I.length-1;N>=0;N--)if(M=I[N],M.state===h)q(M);else if(M.state===F){const i=s;s=null,p(()=>X(M,I[0]),!1),s=i}}function p(M,I){if(s)return M();let N=!1;I||(s=[]),m?N=!0:m=[],_++;try{const i=M();return jI(N),i}catch(i){N||(m=null),s=null,kM(i)}}function jI(M){if(s&&(UM(s),s=null),M)return;const I=m;m=null,I.length&&p(()=>MI(I),!1)}function UM(M){for(let I=0;I=0;I--)MM(M.owned[I]);M.owned=null}if(M.cleanups){for(I=M.cleanups.length-1;I>=0;I--)M.cleanups[I]();M.cleanups=null}M.state=0}function eI(M){return M instanceof Error?M:new Error(typeof M=="string"?M:"Unknown error",{cause:M})}function kM(M,I=A){throw eI(M)}function tM(M){if(typeof M=="function"&&!M.length)return tM(M());if(Array.isArray(M)){const I=[];for(let N=0;Nj=w(()=>(A.context={...A.context,[M]:i.value},NI(()=>i.children))),void 0),j}}const gI=Symbol("fallback");function lM(M){for(let I=0;I1?[]:null;return II(()=>lM(e)),()=>{let L=M()||[],D,u;return L[iM],w(()=>{let T=L.length,n,l,x,a,O,r,S,d,U;if(T===0)t!==0&&(lM(e),e=[],i=[],j=[],t=0,g&&(g=[])),N.fallback&&(i=[gI],j[0]=J(KM=>(e[0]=KM,N.fallback())),t=1);else if(t===0){for(j=new Array(T),u=0;u=r&&d>=r&&i[S]===L[d];S--,d--)x[d]=j[S],a[d]=e[S],g&&(O[d]=g[S]);for(n=new Map,l=new Array(d+1),u=d;u>=r;u--)U=L[u],D=n.get(U),l[u]=D===void 0?-1:D,n.set(U,u);for(D=r;D<=S;D++)U=i[D],u=n.get(U),u!==void 0&&u!==-1?(x[u]=j[D],a[u]=e[D],g&&(O[u]=g[D]),u=l[u],n.set(U,u)):e[D]();for(u=r;uM(I||{}));return zM(N),i}return w(()=>M(I||{}))}function B(){return!0}const gM={get(M,I,N){return I===E?N:M.get(I)},has(M,I){return I===E?!0:M.has(I)},set:B,deleteProperty:B,getOwnPropertyDescriptor(M,I){return{configurable:!0,enumerable:!0,get(){return M.get(I)},set:B,deleteProperty:B}},ownKeys(M){return M.keys()}};function NM(M){return(M=typeof M=="function"?M():M)?M:{}}function LI(){for(let M=0,I=this.length;M=0;t--){const g=NM(M[t])[e];if(g!==void 0)return g}},has(e){for(let t=M.length-1;t>=0;t--)if(e in NM(M[t]))return!0;return!1},keys(){const e=[];for(let t=0;t=0;e--){const t=M[e];if(!t)continue;const g=Object.getOwnPropertyNames(t);for(let L=0,D=g.length;Ly.value):N[u]===void 0&&(N[u]=y.value)}}}return N}function TI(M,...I){if(E in M){const j=new Set(I.length>1?I.flat():I[0]),e=I.map(t=>new Proxy({get(g){return t.includes(g)?M[g]:void 0},has(g){return t.includes(g)&&g in M},keys(){return t.filter(g=>g in M)}},gM));return e.push(new Proxy({get(t){return j.has(t)?void 0:M[t]},has(t){return j.has(t)?!1:t in M},keys(){return Object.keys(M).filter(t=>!j.has(t))}},gM)),e}const N={},i=I.map(()=>({}));for(const j of Object.getOwnPropertyNames(M)){const e=Object.getOwnPropertyDescriptor(M,j),t=!e.get&&!e.set&&e.enumerable&&e.writable&&e.configurable;let g=!1,L=0;for(const D of I)D.includes(j)&&(g=!0,t?i[L][j]=e.value:Object.defineProperty(i[L],j,e)),++L;g||(t?N[j]=e.value:Object.defineProperty(N,j,e))}return[...i,N]}const cI=M=>`Stale read from <${M}>.`;function LN(M){const I="fallback"in M&&{fallback:()=>M.fallback};return o(uI(()=>M.each,M.children,I||void 0))}function yN(M){const I=M.keyed,N=o(()=>M.when,void 0,{equals:(i,j)=>I?i===j:!i==!j});return o(()=>{const i=N();if(i){const j=M.children;return typeof j=="function"&&j.length>0?w(()=>j(I?i:()=>{if(!w(N))throw cI("Show");return M.when})):j}return M.fallback},void 0,void 0)}const nI=["allowfullscreen","async","autofocus","autoplay","checked","controls","default","disabled","formnovalidate","hidden","indeterminate","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","seamless","selected"],AI=new Set(["className","value","readOnly","formNoValidate","isMap","noModule","playsInline",...nI]),zI=new Set(["innerHTML","textContent","innerText","children"]),lI=Object.assign(Object.create(null),{className:"class",htmlFor:"for"}),sI=Object.assign(Object.create(null),{class:"className",formnovalidate:{$:"formNoValidate",BUTTON:1,INPUT:1},ismap:{$:"isMap",IMG:1},nomodule:{$:"noModule",SCRIPT:1},playsinline:{$:"playsInline",VIDEO:1},readonly:{$:"readOnly",INPUT:1,TEXTAREA:1}});function oI(M,I){const N=sI[M];return typeof N=="object"?N[I]?N.$:void 0:N}const xI=new Set(["beforeinput","click","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"]),CI=new Set(["altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignObject","g","glyph","glyphRef","hkern","image","line","linearGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","set","stop","svg","switch","symbol","text","textPath","tref","tspan","use","view","vkern"]),EI={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"};function wI(M,I,N){let i=N.length,j=I.length,e=i,t=0,g=0,L=I[j-1].nextSibling,D=null;for(;tu-g){const l=I[t];for(;g{j=e,I===document?M():nM(I,M(),I.firstChild?null:void 0,N)},i.owner),()=>{j(),I.textContent=""}}function cM(M,I,N){let i;const j=()=>{const t=document.createElement("template");return t.innerHTML=M,N?t.content.firstChild.firstChild:t.content.firstChild},e=I?()=>w(()=>document.importNode(i||(i=j()),!0)):()=>(i||(i=j())).cloneNode(!0);return e.cloneNode=e,e}function aI(M,I=window.document){const N=I[sM]||(I[sM]=new Set);for(let i=0,j=M.length;ij.call(M,N[1],e))}else M.addEventListener(I,N)}function dI(M,I,N={}){const i=Object.keys(I||{}),j=Object.keys(N);let e,t;for(e=0,t=j.length;ej.children=G(M,I.children,j.children)),Q(()=>I.ref&&I.ref(M)),Q(()=>bI(M,I,N,!0,j,!0)),j}function cN(M,I,N){return w(()=>M(I,N))}function nM(M,I,N,i){if(N!==void 0&&!i&&(i=[]),typeof I!="function")return G(M,I,i,N);Q(j=>G(M,I(),j,N),i)}function bI(M,I,N,i,j={},e=!1){I||(I={});for(const t in j)if(!(t in I)){if(t==="children")continue;j[t]=xM(M,t,null,j[t],N,e)}for(const t in I){if(t==="children"){i||G(M,I.children);continue}const g=I[t];j[t]=xM(M,t,g,j[t],N,e)}}function mI(M,I,N={}){c.completed=globalThis._$HY.completed,c.events=globalThis._$HY.events,c.load=j=>globalThis._$HY.r[j],c.has=j=>j in globalThis._$HY.r,c.gather=j=>EM(I,j),c.registry=new Map,c.context={id:N.renderId||"",count:0},EM(I,N.renderId);const i=GM(M,I,[...I.childNodes],N);return c.context=null,i}function $(M){let I,N;return!c.context||!(I=c.registry.get(N=hI()))?M():(c.completed&&c.completed.add(I),c.registry.delete(N),I)}function nN(M){let I=M,N=0,i=[];if(c.context)for(;I;){if(I.nodeType===8){const j=I.nodeValue;if(j==="$")N++;else if(j==="/"){if(N===0)return[I,i];N--}}i.push(I),I=I.nextSibling}return[I,i]}function AN(){c.events&&!c.events.queued&&(queueMicrotask(()=>{const{completed:M,events:I}=c;for(I.queued=!1;I.length;){const[N,i]=I[0];if(!M.has(N))return;PM(i),I.shift()}}),c.events.queued=!0)}function QI(M){return M.toLowerCase().replace(/-([a-z])/g,(I,N)=>N.toUpperCase())}function oM(M,I,N){const i=I.trim().split(/\s+/);for(let j=0,e=i.length;j-1&&EI[I.split(":")[0]];y?rI(M,y,I,N):uM(M,lI[I]||I,N)}return N}function PM(M){const I=`$$${M.type}`;let N=M.composedPath&&M.composedPath()[0]||M.target;for(M.target!==N&&Object.defineProperty(M,"target",{configurable:!0,value:N}),Object.defineProperty(M,"currentTarget",{configurable:!0,get(){return N||document}}),c.registry&&!c.done&&(c.done=_$HY.done=!0);N;){const i=N[I];if(i&&!N.disabled){const j=N[`${I}Data`];if(j!==void 0?i.call(N,j,M):i.call(N,M),M.cancelBubble)return}N=N._$host||N.parentNode||N.host}}function G(M,I,N,i,j){if(c.context){!N&&(N=[...M.childNodes]);let g=[];for(let L=0;L{let g=I();for(;typeof g=="function";)g=g();N=G(M,g,N,i)}),()=>N;if(Array.isArray(I)){const g=[],L=N&&Array.isArray(N);if(DM(g,I,N,j))return Q(()=>N=G(M,g,N,i,!0)),()=>N;if(c.context){if(!g.length)return N;if(i===void 0)return[...M.childNodes];let D=g[0],u=[D];for(;(D=D.nextSibling)!==i;)u.push(D);return N=u}if(g.length===0){if(N=Z(M,N,i),t)return N}else L?N.length===0?CM(M,g,i):wI(M,N,g):(N&&Z(M),CM(M,g));N=g}else if(I.nodeType){if(c.context&&I.parentNode)return N=t?[I]:I;if(Array.isArray(N)){if(t)return N=Z(M,N,i,I);Z(M,N,null,I)}else N==null||N===""||!M.firstChild?M.appendChild(I):M.replaceChild(I,M.firstChild);N=I}}return N}function DM(M,I,N,i){let j=!1;for(let e=0,t=I.length;e=0;t--){const g=I[t];if(j!==g){const L=g.parentNode===M;!e&&!t?L?M.replaceChild(j,g):M.insertBefore(j,N):L&&g.remove()}else e=!0}}else M.insertBefore(j,N);return[j]}function EM(M,I){const N=M.querySelectorAll("*[data-hk]");for(let i=0;i(DI(),mI(...M));function pM(M){const[I,N]=TI(M,["component"]),i=o(()=>I.component);return o(()=>{const j=i();switch(typeof j){case"function":return w(()=>j(N));case"string":const e=CI.has(j),t=c.context?$():ZI(j,e);return fI(t,N,e),t}})}function WI(M,I){const N=globalThis.__vite_plugin_ssr=globalThis.__vite_plugin_ssr||{};return N[M]=N[M]||I}const{Context:RM}=WI("PageContextProvider.ts",{Context:YM()});function GI(M){if(!M.pageContext)throw new Error("Argument pageContext missing");return f(RM.Provider,{get value(){return M.pageContext},get children(){return M.children}})}function HM(){const M=fM(RM);if(!M)throw new Error(" is needed for being able to use usePageContext()");return M}const LM=Symbol("store-raw"),W=Symbol("store-node"),Y=Symbol("store-has"),BM=Symbol("store-self");function vM(M){let I=M[E];if(!I&&(Object.defineProperty(M,E,{value:I=new Proxy(M,RI)}),!Array.isArray(M))){const N=Object.keys(M),i=Object.getOwnPropertyDescriptors(M);for(let j=0,e=N.length;jM[E][I]),N}function JM(M){eM()&&H(K(M,W),BM)()}function pI(M){return JM(M),Reflect.ownKeys(M)}const RI={get(M,I,N){if(I===LM)return M;if(I===E)return N;if(I===iM)return JM(M),N;const i=K(M,W),j=i[I];let e=j?j():M[I];if(I===W||I===Y||I==="__proto__")return e;if(!j){const t=Object.getOwnPropertyDescriptor(M,I);eM()&&(typeof e!="function"||M.hasOwnProperty(I))&&!(t&&t.get)&&(e=H(i,I,e)())}return b(e)?vM(e):e},has(M,I){return I===LM||I===E||I===iM||I===W||I===Y||I==="__proto__"?!0:(eM()&&H(K(M,Y),I)(),I in M)},set(){return!0},deleteProperty(){return!0},ownKeys:pI,getOwnPropertyDescriptor:PI};function C(M,I,N,i=!1){if(!i&&M[I]===N)return;const j=M[I],e=M.length;N===void 0?(delete M[I],M[Y]&&M[Y][I]&&j!==void 0&&M[Y][I].$()):(M[I]=N,M[Y]&&M[Y][I]&&j===void 0&&M[Y][I].$());let t=K(M,W),g;if((g=H(t,I,j))&&g.$(()=>N),Array.isArray(M)&&M.length!==e){for(let L=M.length;L1){i=I.shift();const t=typeof i,g=Array.isArray(M);if(Array.isArray(i)){for(let L=0;L1){R(M[i],I,[i].concat(N));return}j=M[i],N=[i].concat(N)}let e=I[0];typeof e=="function"&&(e=e(j,N),e===j)||i===void 0&&e==null||(e=P(e),i===void 0||b(j)&&b(e)&&!Array.isArray(e)?VM(j,e):C(M,i,e))}function FM(...[M,I]){const N=P(M||{}),i=Array.isArray(N),j=vM(N);function e(...t){jM(()=>{i&&t.length===1?HI(N,t[0]):R(N,t)})}return[j,e]}const yM=Symbol("store-root");function k(M,I,N,i,j){const e=I[N];if(M===e)return;if(N!==yM&&(!b(M)||!b(e)||j&&M[j]!==e[j])){C(I,N,M);return}if(Array.isArray(M)){if(M.length&&e.length&&(!i||j&&M[0]&&M[0][j]!=null)){let L,D,u,y,T,n,l,x;for(u=0,y=Math.min(e.length,M.length);u=u&&T>=u&&(e[y]===M[T]||j&&e[u]&&M[u]&&e[y][j]===M[T][j]);y--,T--)a[T]=e[y];if(u>T||u>y){for(D=u;D<=T;D++)C(e,D,M[D]);for(;DM.length&&C(e,"length",M.length);return}for(l=new Array(T+1),D=T;D>=u;D--)n=M[D],x=j&&n?n[j]:n,L=O.get(x),l[D]=L===void 0?-1:L,O.set(x,D);for(L=u;L<=y;L++)n=e[L],x=j&&n?n[j]:n,D=O.get(x),D!==void 0&&D!==-1&&(a[D]=e[L],D=l[D],O.set(x,D));for(D=u;DM.length&&C(e,"length",M.length);return}const t=Object.keys(M);for(let L=0,D=t.length;L{if(!b(e)||!b(j))return j;const t=k(j,{[yM]:e},yM,N,i);return t===void 0?e:t}}function vI(M){var j;if(M.title!==void 0)return M.title;const I=(j=M.configEntries.title)==null?void 0:j[0];if(!I)return null;const N=I.configValue;if(typeof N=="string")return N;if(!N)return null;const{configDefinedAt:i}=I;if(typeof N=="function"){const e=N(M);if(typeof e=="string")return e;if(e)throw new Error(i+" should return a string")}throw new Error(i+" should be a string or a function returning a string")}function wM(M){return f(GI,{pageContext:M,get children(){return f(JI,{get children(){return f(VI,{})}})}})}function JI(M){const I=HM();return f(pM,{get component(){return I.config.Layout??FI},get children(){return M.children}})}function VI(){const M=HM();return f(pM,yI({get component(){return M.Page}},()=>M.pageProps??{}))}function FI(M){return o(()=>M.children)}const[aM,rM]=FM({});let v,SM=!1;const zN=async M=>{if(SM){rM(BI(M));const I=vI(M);document.title=I||""}else{v&&v(),rM(M);const I=document.getElementById("page-view");I.innerHTML!==""&&M.isHydration?v=kI(()=>wM(aM),I):v=GM(()=>wM(aM),I),SM=!0}};var AM=[{category:"Framework",label:"SolidJS",flag:"solid",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjA4ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIyNTYgMjM5IDI1NiAyMzkiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ibG9nb3NTb2xpZGpzSWNvbjAiIHgxPSIyNy41IiB4Mj0iMTUyIiB5MT0iMyIgeTI9IjYzLjUiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQ5LjU2IDIzMy4xMikgc2NhbGUoMS42MTAwNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii4xIiBzdG9wLWNvbG9yPSIjNzZiM2UxIi8+PHN0b3Agb2Zmc2V0PSIuMyIgc3RvcC1jb2xvcj0iI2RjZjJmZCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzc2YjNlMSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsb2dvc1NvbGlkanNJY29uMSIgeDE9Ijk1LjgiIHgyPSI3NCIgeTE9IjMyLjYiIHkyPSIxMDUuMiIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgyNDkuNTYgMjMzLjEyKSBzY2FsZSgxLjYxMDA2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzc2YjNlMSIvPjxzdG9wIG9mZnNldD0iLjUiIHN0b3AtY29sb3I9IiM0Mzc3YmIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMxZjNiNzciLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibG9nb3NTb2xpZGpzSWNvbjIiIHgxPSIxOC40IiB4Mj0iMTQ0LjMiIHkxPSI2NC4yIiB5Mj0iMTQ5LjgiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQ5LjU2IDIzMy4xMikgc2NhbGUoMS42MTAwNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzMTVhYTkiLz48c3RvcCBvZmZzZXQ9Ii41IiBzdG9wLWNvbG9yPSIjNTE4YWM4Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMzE1YWE5Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxvZ29zU29saWRqc0ljb24zIiB4MT0iNzUuMiIgeDI9IjI0LjQiIHkxPSI3NC41IiB5Mj0iMjYwLjgiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQ5LjU2IDIzMy4xMikgc2NhbGUoMS42MTAwNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM0Mzc3YmIiLz48c3RvcCBvZmZzZXQ9Ii41IiBzdG9wLWNvbG9yPSIjMWEzMzZiIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMWEzMzZiIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBhdGggZmlsbD0iIzc2YjNlMSIgZD0iTTUxMiAyODkuNDcycy04NS4zMzMtNjIuNzkxLTE1MS4zNDctNDguMzAxbC00LjgyOSAxLjYxYy05LjY2IDMuMjIxLTE3LjcxMSA4LjA1LTIyLjU0MiAxNC40OTFsLTMuMjE5IDQuODI5bC0yNC4xNTIgNDEuODYybDQxLjg2MyA4LjA1MWMxNy43MSAxMS4yNyA0MC4yNTEgMTYuMTAxIDYxLjE4MiAxMS4yN2w3NC4wNjMgMTQuNDkxTDUxMiAyODkuNDcyWiIvPjxwYXRoIGZpbGw9InVybCgjbG9nb3NTb2xpZGpzSWNvbjApIiBkPSJNNTEyIDI4OS40NzJzLTg1LjMzMy02Mi43OTEtMTUxLjM0Ny00OC4zMDFsLTQuODI5IDEuNjFjLTkuNjYgMy4yMjEtMTcuNzExIDguMDUtMjIuNTQyIDE0LjQ5MWwtMy4yMTkgNC44MjlsLTI0LjE1MiA0MS44NjJsNDEuODYzIDguMDUxYzE3LjcxIDExLjI3IDQwLjI1MSAxNi4xMDEgNjEuMTgyIDExLjI3bDc0LjA2MyAxNC40OTFMNTEyIDI4OS40NzJaIiBvcGFjaXR5PSIuMyIvPjxwYXRoIGZpbGw9IiM1MThhYzgiIGQ9Im0zMzMuMjgyIDI4OS40NzJsLTYuNDM5IDEuNjExYy0yNy4zNzEgOC4wNS0zNS40MjEgMzMuODExLTIwLjkzMiA1Ni4zNTJjMTYuMTAxIDIwLjkzMSA0OS45MTMgMzIuMjAxIDc3LjI4NCAyNC4xNTFsOTkuODI0LTMzLjgxMXMtODUuMzM0LTYyLjc5Mi0xNDkuNzM3LTQ4LjMwM1oiLz48cGF0aCBmaWxsPSJ1cmwoI2xvZ29zU29saWRqc0ljb24xKSIgZD0ibTMzMy4yODIgMjg5LjQ3MmwtNi40MzkgMS42MTFjLTI3LjM3MSA4LjA1LTM1LjQyMSAzMy44MTEtMjAuOTMyIDU2LjM1MmMxNi4xMDEgMjAuOTMxIDQ5LjkxMyAzMi4yMDEgNzcuMjg0IDI0LjE1MWw5OS44MjQtMzMuODExcy04NS4zMzQtNjIuNzkyLTE0OS43MzctNDguMzAzWiIgb3BhY2l0eT0iLjMiLz48cGF0aCBmaWxsPSJ1cmwoI2xvZ29zU29saWRqc0ljb24yKSIgZD0iTTQ2NS4zMDggMzYxLjkyNWMtMTguNDM5LTIzLjAzNi00OS4wMDgtMzIuNTg4LTc3LjI4My0yNC4xNWwtOTkuODIzIDMyLjIwMUwyNTYgNDI2LjMyOGwxODAuMzI3IDMwLjU5MmwzMi4yMDEtNTcuOTYzYzYuNDQxLTExLjI3MSA0LjgzMS0yNC4xNS0zLjIyLTM3LjAzMloiLz48cGF0aCBmaWxsPSJ1cmwoI2xvZ29zU29saWRqc0ljb24zKSIgZD0iTTQzMy4xMDYgNDE4LjI3N2MtMTguNDM5LTIzLjAzNi00OS4wMDYtMzIuNTg4LTc3LjI4Mi0yNC4xNUwyNTYgNDI2LjMyOHM4NS4zMzMgNjQuNDAyIDE1MS4zNDYgNDguMzAzbDQuODMtMS42MTJjMjcuMzcxLTguMDQ5IDM3LjAzMS0zMy44MSAyMC45My01NC43NDJaIi8+PC9zdmc+",url:"https://www.solidjs.com"},{category:"Framework",label:"React",flag:"react",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjEzZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyOCI+PHBhdGggZmlsbD0iIzAwRDhGRiIgZD0iTTIxMC40ODMgNzMuODI0YTE3MS40OSAxNzEuNDkgMCAwIDAtOC4yNC0yLjU5N2MuNDY1LTEuOS44OTMtMy43NzcgMS4yNzMtNS42MjFjNi4yMzgtMzAuMjgxIDIuMTYtNTQuNjc2LTExLjc2OS02Mi43MDhjLTEzLjM1NS03LjctMzUuMTk2LjMyOS01Ny4yNTQgMTkuNTI2YTE3MS4yMyAxNzEuMjMgMCAwIDAtNi4zNzUgNS44NDhhMTU1Ljg2NiAxNTUuODY2IDAgMCAwLTQuMjQxLTMuOTE3QzEwMC43NTkgMy44MjkgNzcuNTg3LTQuODIyIDYzLjY3MyAzLjIzM0M1MC4zMyAxMC45NTcgNDYuMzc5IDMzLjg5IDUxLjk5NSA2Mi41ODhhMTcwLjk3NCAxNzAuOTc0IDAgMCAwIDEuODkyIDguNDhjLTMuMjguOTMyLTYuNDQ1IDEuOTI0LTkuNDc0IDIuOThDMTcuMzA5IDgzLjQ5OCAwIDk4LjMwNyAwIDExMy42NjhjMCAxNS44NjUgMTguNTgyIDMxLjc3OCA0Ni44MTIgNDEuNDI3YTE0NS41MiAxNDUuNTIgMCAwIDAgNi45MjEgMi4xNjVhMTY3LjQ2NyAxNjcuNDY3IDAgMCAwLTIuMDEgOS4xMzhjLTUuMzU0IDI4LjItMS4xNzMgNTAuNTkxIDEyLjEzNCA1OC4yNjZjMTMuNzQ0IDcuOTI2IDM2LjgxMi0uMjIgNTkuMjczLTE5Ljg1NWExNDUuNTY3IDE0NS41NjcgMCAwIDAgNS4zNDItNC45MjNhMTY4LjA2NCAxNjguMDY0IDAgMCAwIDYuOTIgNi4zMTRjMjEuNzU4IDE4LjcyMiA0My4yNDYgMjYuMjgyIDU2LjU0IDE4LjU4NmMxMy43MzEtNy45NDkgMTguMTk0LTMyLjAwMyAxMi40LTYxLjI2OGExNDUuMDE2IDE0NS4wMTYgMCAwIDAtMS41MzUtNi44NDJjMS42Mi0uNDggMy4yMS0uOTc0IDQuNzYtMS40ODhjMjkuMzQ4LTkuNzIzIDQ4LjQ0My0yNS40NDMgNDguNDQzLTQxLjUyYzAtMTUuNDE3LTE3Ljg2OC0zMC4zMjYtNDUuNTE3LTM5Ljg0NFptLTYuMzY1IDcwLjk4NGMtMS40LjQ2My0yLjgzNi45MS00LjMgMS4zNDVjLTMuMjQtMTAuMjU3LTcuNjEyLTIxLjE2My0xMi45NjMtMzIuNDMyYzUuMTA2LTExIDkuMzEtMjEuNzY3IDEyLjQ1OS0zMS45NTdjMi42MTkuNzU4IDUuMTYgMS41NTcgNy42MSAyLjRjMjMuNjkgOC4xNTYgMzguMTQgMjAuMjEzIDM4LjE0IDI5LjUwNGMwIDkuODk2LTE1LjYwNiAyMi43NDMtNDAuOTQ2IDMxLjE0Wm0tMTAuNTE0IDIwLjgzNGMyLjU2MiAxMi45NCAyLjkyNyAyNC42NCAxLjIzIDMzLjc4N2MtMS41MjQgOC4yMTktNC41OSAxMy42OTgtOC4zODIgMTUuODkzYy04LjA2NyA0LjY3LTI1LjMyLTEuNC00My45MjctMTcuNDEyYTE1Ni43MjYgMTU2LjcyNiAwIDAgMS02LjQzNy01Ljg3YzcuMjE0LTcuODg5IDE0LjQyMy0xNy4wNiAyMS40NTktMjcuMjQ2YzEyLjM3Ni0xLjA5OCAyNC4wNjgtMi44OTQgMzQuNjcxLTUuMzQ1YTEzNC4xNyAxMzQuMTcgMCAwIDEgMS4zODYgNi4xOTNaTTg3LjI3NiAyMTQuNTE1Yy03Ljg4MiAyLjc4My0xNC4xNiAyLjg2My0xNy45NTUuNjc1Yy04LjA3NS00LjY1Ny0xMS40MzItMjIuNjM2LTYuODUzLTQ2Ljc1MmExNTYuOTIzIDE1Ni45MjMgMCAwIDEgMS44NjktOC40OTljMTAuNDg2IDIuMzIgMjIuMDkzIDMuOTg4IDM0LjQ5OCA0Ljk5NGM3LjA4NCA5Ljk2NyAxNC41MDEgMTkuMTI4IDIxLjk3NiAyNy4xNWExMzQuNjY4IDEzNC42NjggMCAwIDEtNC44NzcgNC40OTJjLTkuOTMzIDguNjgyLTE5Ljg4NiAxNC44NDItMjguNjU4IDE3Ljk0Wk01MC4zNSAxNDQuNzQ3Yy0xMi40ODMtNC4yNjctMjIuNzkyLTkuODEyLTI5Ljg1OC0xNS44NjNjLTYuMzUtNS40MzctOS41NTUtMTAuODM2LTkuNTU1LTE1LjIxNmMwLTkuMzIyIDEzLjg5Ny0yMS4yMTIgMzcuMDc2LTI5LjI5M2MyLjgxMy0uOTggNS43NTctMS45MDUgOC44MTItMi43NzNjMy4yMDQgMTAuNDIgNy40MDYgMjEuMzE1IDEyLjQ3NyAzMi4zMzJjLTUuMTM3IDExLjE4LTkuMzk5IDIyLjI0OS0xMi42MzQgMzIuNzkyYTEzNC43MTggMTM0LjcxOCAwIDAgMS02LjMxOC0xLjk3OVptMTIuMzc4LTg0LjI2Yy00LjgxMS0yNC41ODctMS42MTYtNDMuMTM0IDYuNDI1LTQ3Ljc4OWM4LjU2NC00Ljk1OCAyNy41MDIgMi4xMTEgNDcuNDYzIDE5LjgzNWExNDQuMzE4IDE0NC4zMTggMCAwIDEgMy44NDEgMy41NDVjLTcuNDM4IDcuOTg3LTE0Ljc4NyAxNy4wOC0yMS44MDggMjYuOTg4Yy0xMi4wNCAxLjExNi0yMy41NjUgMi45MDgtMzQuMTYxIDUuMzA5YTE2MC4zNDIgMTYwLjM0MiAwIDAgMS0xLjc2LTcuODg3Wm0xMTAuNDI3IDI3LjI2OGEzNDcuOCAzNDcuOCAwIDAgMC03Ljc4NS0xMi44MDNjOC4xNjggMS4wMzMgMTUuOTk0IDIuNDA0IDIzLjM0MyA0LjA4Yy0yLjIwNiA3LjA3Mi00Ljk1NiAxNC40NjUtOC4xOTMgMjIuMDQ1YTM4MS4xNTEgMzgxLjE1MSAwIDAgMC03LjM2NS0xMy4zMjJabS00NS4wMzItNDMuODYxYzUuMDQ0IDUuNDY1IDEwLjA5NiAxMS41NjYgMTUuMDY1IDE4LjE4NmEzMjIuMDQgMzIyLjA0IDAgMCAwLTMwLjI1Ny0uMDA2YzQuOTc0LTYuNTU5IDEwLjA2OS0xMi42NTIgMTUuMTkyLTE4LjE4Wk04Mi44MDIgODcuODNhMzIzLjE2NyAzMjMuMTY3IDAgMCAwLTcuMjI3IDEzLjIzOGMtMy4xODQtNy41NTMtNS45MDktMTQuOTgtOC4xMzQtMjIuMTUyYzcuMzA0LTEuNjM0IDE1LjA5My0yLjk3IDIzLjIwOS0zLjk4NGEzMjEuNTI0IDMyMS41MjQgMCAwIDAtNy44NDggMTIuODk3Wm04LjA4MSA2NS4zNTJjLTguMzg1LS45MzYtMTYuMjkxLTIuMjAzLTIzLjU5My0zLjc5M2MyLjI2LTcuMyA1LjA0NS0xNC44ODUgOC4yOTgtMjIuNmEzMjEuMTg3IDMyMS4xODcgMCAwIDAgNy4yNTcgMTMuMjQ2YzIuNTk0IDQuNDggNS4yOCA4Ljg2OCA4LjAzOCAxMy4xNDdabTM3LjU0MiAzMS4wM2MtNS4xODQtNS41OTItMTAuMzU0LTExLjc3OS0xNS40MDMtMTguNDMzYzQuOTAyLjE5MiA5Ljg5OS4yOSAxNC45NzguMjljNS4yMTggMCAxMC4zNzYtLjExNyAxNS40NTMtLjM0M2MtNC45ODUgNi43NzQtMTAuMDE4IDEyLjk3LTE1LjAyOCAxOC40ODZabTUyLjE5OC01Ny44MTdjMy40MjIgNy44IDYuMzA2IDE1LjM0NSA4LjU5NiAyMi41MmMtNy40MjIgMS42OTQtMTUuNDM2IDMuMDU4LTIzLjg4IDQuMDcxYTM4Mi40MTcgMzgyLjQxNyAwIDAgMCA3Ljg1OS0xMy4wMjZhMzQ3LjQwMyAzNDcuNDAzIDAgMCAwIDcuNDI1LTEzLjU2NVptLTE2Ljg5OCA4LjEwMWEzNTguNTU3IDM1OC41NTcgMCAwIDEtMTIuMjgxIDE5LjgxNWEzMjkuNCAzMjkuNCAwIDAgMS0yMy40NDQuODIzYy03Ljk2NyAwLTE1LjcxNi0uMjQ4LTIzLjE3OC0uNzMyYTMxMC4yMDIgMzEwLjIwMiAwIDAgMS0xMi41MTMtMTkuODQ2aC4wMDFhMzA3LjQxIDMwNy40MSAwIDAgMS0xMC45MjMtMjAuNjI3YTMxMC4yNzggMzEwLjI3OCAwIDAgMSAxMC44OS0yMC42MzdsLS4wMDEuMDAxYTMwNy4zMTggMzA3LjMxOCAwIDAgMSAxMi40MTMtMTkuNzYxYzcuNjEzLS41NzYgMTUuNDItLjg3NiAyMy4zMS0uODc2SDEyOGM3LjkyNiAwIDE1Ljc0My4zMDMgMjMuMzU0Ljg4M2EzMjkuMzU3IDMyOS4zNTcgMCAwIDEgMTIuMzM1IDE5LjY5NWEzNTguNDg5IDM1OC40ODkgMCAwIDEgMTEuMDM2IDIwLjU0YTMyOS40NzIgMzI5LjQ3MiAwIDAgMS0xMSAyMC43MjJabTIyLjU2LTEyMi4xMjRjOC41NzIgNC45NDQgMTEuOTA2IDI0Ljg4MSA2LjUyIDUxLjAyNmMtLjM0NCAxLjY2OC0uNzMgMy4zNjctMS4xNSA1LjA5Yy0xMC42MjItMi40NTItMjIuMTU1LTQuMjc1LTM0LjIzLTUuNDA4Yy03LjAzNC0xMC4wMTctMTQuMzIzLTE5LjEyNC0yMS42NC0yNy4wMDhhMTYwLjc4OSAxNjAuNzg5IDAgMCAxIDUuODg4LTUuNGMxOC45LTE2LjQ0NyAzNi41NjQtMjIuOTQxIDQ0LjYxMi0xOC4zWk0xMjggOTAuODA4YzEyLjYyNSAwIDIyLjg2IDEwLjIzNSAyMi44NiAyMi44NnMtMTAuMjM1IDIyLjg2LTIyLjg2IDIyLjg2cy0yMi44Ni0xMC4yMzUtMjIuODYtMjIuODZzMTAuMjM1LTIyLjg2IDIyLjg2LTIyLjg2WiIvPjwvc3ZnPg==",url:"https://react.dev"},{category:"Framework",label:"Vue",flag:"vue",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjE2ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyMSI+PHBhdGggZmlsbD0iIzQxQjg4MyIgZD0iTTIwNC44IDBIMjU2TDEyOCAyMjAuOEwwIDBoOTcuOTJMMTI4IDUxLjJMMTU3LjQ0IDBoNDcuMzZaIi8+PHBhdGggZmlsbD0iIzQxQjg4MyIgZD0ibTAgMGwxMjggMjIwLjhMMjU2IDBoLTUxLjJMMTI4IDEzMi40OEw1MC41NiAwSDBaIi8+PHBhdGggZmlsbD0iIzM1NDk1RSIgZD0iTTUwLjU2IDBMMTI4IDEzMy4xMkwyMDQuOCAwaC00Ny4zNkwxMjggNTEuMkw5Ny45MiAwSDUwLjU2WiIvPjwvc3ZnPg==",url:"https://vuejs.org"},{category:"CSS",label:"TailwindCSS",flag:"tailwindcss",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjY3ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDE1NCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJsb2dvc1RhaWx3aW5kY3NzSWNvbjAiIHgxPSItMi43NzglIiB4Mj0iMTAwJSIgeTE9IjMyJSIgeTI9IjY3LjU1NiUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiMyMjk4QkQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwRUQ3QjUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cGF0aCBmaWxsPSJ1cmwoI2xvZ29zVGFpbHdpbmRjc3NJY29uMCkiIGQ9Ik0xMjggMEM5My44NjcgMCA3Mi41MzMgMTcuMDY3IDY0IDUxLjJDNzYuOCAzNC4xMzMgOTEuNzMzIDI3LjczMyAxMDguOCAzMmM5LjczNyAyLjQzNCAxNi42OTcgOS40OTkgMjQuNDAxIDE3LjMxOEMxNDUuNzUxIDYyLjA1NyAxNjAuMjc1IDc2LjggMTkyIDc2LjhjMzQuMTMzIDAgNTUuNDY3LTE3LjA2NyA2NC01MS4yYy0xMi44IDE3LjA2Ny0yNy43MzMgMjMuNDY3LTQ0LjggMTkuMmMtOS43MzctMi40MzQtMTYuNjk3LTkuNDk5LTI0LjQwMS0xNy4zMThDMTc0LjI0OSAxNC43NDMgMTU5LjcyNSAwIDEyOCAwWk02NCA3Ni44QzI5Ljg2NyA3Ni44IDguNTMzIDkzLjg2NyAwIDEyOGMxMi44LTE3LjA2NyAyNy43MzMtMjMuNDY3IDQ0LjgtMTkuMmM5LjczNyAyLjQzNCAxNi42OTcgOS40OTkgMjQuNDAxIDE3LjMxOEM4MS43NTEgMTM4Ljg1NyA5Ni4yNzUgMTUzLjYgMTI4IDE1My42YzM0LjEzMyAwIDU1LjQ2Ny0xNy4wNjcgNjQtNTEuMmMtMTIuOCAxNy4wNjctMjcuNzMzIDIzLjQ2Ny00NC44IDE5LjJjLTkuNzM3LTIuNDM0LTE2LjY5Ny05LjQ5OS0yNC40MDEtMTcuMzE4QzExMC4yNDkgOTEuNTQzIDk1LjcyNSA3Ni44IDY0IDc2LjhaIi8+PC9zdmc+",url:"https://tailwindcss.com"},{category:"Auth",label:"Auth.js",flag:"authjs",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0iIzg4ODg4OCIgZD0ibTUwLjAyNyAxMC40NTlsLS4wMTgtLjAzMmwtMzMuNjA2IDE5LjQwNGwuMDc2LjEzMnYyMi44OTNoLjAxNGMuMjg2IDE5LjExMSAxNC44NTkgMzQuNzU1IDMzLjUxOSAzNi43MThjMTguNjYtMS45NjIgMzMuMjM0LTE3LjYwNiAzMy41MTktMzYuNzE4VjI5Ljk1M2wuMDY2LS4xMTRsLTMzLjU3LTE5LjM4em0tLjAxNSA2OS4wOTdWNTEuNjc3SDI2LjQzNVYzNS42NTFMNTAuMDEyIDIyLjA0djI5LjYzN2gyMy41NjN2MS4xNzloLjAxN2MtLjI3OCAxMy41OTMtMTAuNDM5IDI0Ljc5OC0yMy41OCAyNi43eiIvPjwvc3ZnPg==",url:"https://authjs.dev"},{category:"Auth",label:"Auth0",flag:"auth0",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjllbSIgaGVpZ2h0PSIxZW0iIHZpZXdCb3g9IjAgMCAyNTYgMjg1Ij48cGF0aCBkPSJNMjIwLjQxMiAwaC05Mi40MTVsMjguNTYyIDg5LjAwNmg5Mi40MTZsLTc0Ljc3IDUzLjA3N2wyOC41NyA4OS41MTFjNDguMTI4LTM1LjA2IDYzLjg1NC04OC4xMiA0Ni4yMDgtMTQyLjU4OEwyMjAuNDEzIDBaTTcuMDE4IDg5LjAwNmg5Mi40MTZMMTI3Ljk5NyAwSDM1LjU4OUw3LjAxOSA4OS4wMDZjLTE3LjY1NSA1NC40NjgtMS45MiAxMDcuNTI5IDQ2LjIwNyAxNDIuNTg4bDI4LjU2My04OS41MWwtNzQuNzctNTMuMDc4Wm00Ni4yMDggMTQyLjU4OGw3NC43NyA1Mi45N2w3NC43Ny01Mi45N2wtNzQuNzctNTMuODQ3bC03NC43NyA1My44NDdaIi8+PC9zdmc+",url:"https://auth0.com",disabled:!0},{category:"Auth",label:"Firebase",flag:"firebase",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjczZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDM1MSI+PGRlZnM+PGZpbHRlciBpZD0ibG9nb3NGaXJlYmFzZTAiIHdpZHRoPSIyMDAlIiBoZWlnaHQ9IjIwMCUiIHg9Ii01MCUiIHk9Ii01MCUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCI+PGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dCbHVySW5uZXIxIiBzdGREZXZpYXRpb249IjE3LjUiLz48ZmVPZmZzZXQgaW49InNoYWRvd0JsdXJJbm5lcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0SW5uZXIxIi8+PGZlQ29tcG9zaXRlIGluPSJzaGFkb3dPZmZzZXRJbm5lcjEiIGluMj0iU291cmNlQWxwaGEiIGsyPSItMSIgazM9IjEiIG9wZXJhdG9yPSJhcml0aG1ldGljIiByZXN1bHQ9InNoYWRvd0lubmVySW5uZXIxIi8+PGZlQ29sb3JNYXRyaXggaW49InNoYWRvd0lubmVySW5uZXIxIiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMDYgMCIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImxvZ29zRmlyZWJhc2UxIiB3aWR0aD0iMjAwJSIgaGVpZ2h0PSIyMDAlIiB4PSItNTAlIiB5PSItNTAlIiBmaWx0ZXJVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPjxmZUdhdXNzaWFuQmx1ciBpbj0iU291cmNlQWxwaGEiIHJlc3VsdD0ic2hhZG93Qmx1cklubmVyMSIgc3RkRGV2aWF0aW9uPSIzLjUiLz48ZmVPZmZzZXQgZHg9IjEiIGR5PSItOSIgaW49InNoYWRvd0JsdXJJbm5lcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0SW5uZXIxIi8+PGZlQ29tcG9zaXRlIGluPSJzaGFkb3dPZmZzZXRJbm5lcjEiIGluMj0iU291cmNlQWxwaGEiIGsyPSItMSIgazM9IjEiIG9wZXJhdG9yPSJhcml0aG1ldGljIiByZXN1bHQ9InNoYWRvd0lubmVySW5uZXIxIi8+PGZlQ29sb3JNYXRyaXggaW49InNoYWRvd0lubmVySW5uZXIxIiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMDkgMCIvPjwvZmlsdGVyPjxwYXRoIGlkPSJsb2dvc0ZpcmViYXNlMiIgZD0ibTEuMjUzIDI4MC43MzJsMS42MDUtMy4xMzFsOTkuMzUzLTE4OC41MThsLTQ0LjE1LTgzLjQ3NUM1NC4zOTItMS4yODMgNDUuMDc0LjQ3NCA0My44NyA4LjE4OEwxLjI1MyAyODAuNzMyWiIvPjxwYXRoIGlkPSJsb2dvc0ZpcmViYXNlMyIgZD0ibTEzNC40MTcgMTQ4Ljk3NGwzMi4wMzktMzIuODEybC0zMi4wMzktNjEuMDA3Yy0zLjA0Mi01Ljc5MS0xMC40MzMtNi4zOTgtMTMuNDQzLS41OWwtMTcuNzA1IDM0LjEwOWwtLjUzIDEuNzQ0bDMxLjY3OCA1OC41NTZaIi8+PC9kZWZzPjxwYXRoIGZpbGw9IiNGRkMyNEEiIGQ9Im0wIDI4Mi45OThsMi4xMjMtMi45NzJMMTAyLjUyNyA4OS41MTJsLjIxMi0yLjAxN0w1OC40OCA0LjM1OEM1NC43Ny0yLjYwNiA0NC4zMy0uODQ1IDQzLjExNCA2Ljk1MUwwIDI4Mi45OThaIi8+PHVzZSBmaWxsPSIjRkZBNzEyIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhyZWY9IiNsb2dvc0ZpcmViYXNlMiIvPjx1c2UgZmlsdGVyPSJ1cmwoI2xvZ29zRmlyZWJhc2UwKSIgaHJlZj0iI2xvZ29zRmlyZWJhc2UyIi8+PHBhdGggZmlsbD0iI0Y0QkQ2MiIgZD0ibTEzNS4wMDUgMTUwLjM4bDMyLjk1NS0zMy43NWwtMzIuOTY1LTYyLjkzYy0zLjEyOS01Ljk1Ny0xMS44NjYtNS45NzUtMTQuOTYyIDBMMTAyLjQyIDg3LjI4N3YyLjg2bDMyLjU4NCA2MC4yMzNaIi8+PHVzZSBmaWxsPSIjRkZBNTBFIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhyZWY9IiNsb2dvc0ZpcmViYXNlMyIvPjx1c2UgZmlsdGVyPSJ1cmwoI2xvZ29zRmlyZWJhc2UxKSIgaHJlZj0iI2xvZ29zRmlyZWJhc2UzIi8+PHBhdGggZmlsbD0iI0Y2ODIwQyIgZD0ibTAgMjgyLjk5OGwuOTYyLS45NjhsMy40OTYtMS40MmwxMjguNDc3LTEyOGwxLjYyOC00LjQzMWwtMzIuMDUtNjEuMDc0eiIvPjxwYXRoIGZpbGw9IiNGREUwNjgiIGQ9Im0xMzkuMTIxIDM0Ny41NTFsMTE2LjI3NS02NC44NDdsLTMzLjIwNC0yMDQuNDk1Yy0xLjAzOS02LjM5OC04Ljg4OC04LjkyNy0xMy40NjgtNC4zNEwwIDI4Mi45OThsMTE1LjYwOCA2NC41NDhhMjQuMTI2IDI0LjEyNiAwIDAgMCAyMy41MTMuMDA1Ii8+PHBhdGggZmlsbD0iI0ZDQ0EzRiIgZD0iTTI1NC4zNTQgMjgyLjE2TDIyMS40MDIgNzkuMjE4Yy0xLjAzLTYuMzUtNy41NTgtOC45NzctMTIuMTAzLTQuNDI0TDEuMjkgMjgyLjZsMTE0LjMzOSA2My45MDhhMjMuOTQzIDIzLjk0MyAwIDAgMCAyMy4zMzQuMDA2bDExNS4zOTItNjQuMzU1WiIvPjxwYXRoIGZpbGw9IiNFRUFCMzciIGQ9Ik0xMzkuMTIgMzQ1LjY0YTI0LjEyNiAyNC4xMjYgMCAwIDEtMjMuNTEyLS4wMDVMLjkzMSAyODIuMDE1bC0uOTMuOTgzbDExNS42MDcgNjQuNTQ4YTI0LjEyNiAyNC4xMjYgMCAwIDAgMjMuNTEzLjAwNWwxMTYuMjc1LTY0Ljg0N2wtLjI4NS0xLjc1MmwtMTE1Ljk5IDY0LjY4OVoiLz48L3N2Zz4=",url:"https://firebase.google.com",disabled:!0},{category:"RPC",label:"Telefunc",flag:"telefunc",image:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDcuMDIiIGhlaWdodD0iNDcuMDIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQ3LjAyIDQ3LjAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGNpcmNsZSBjeD0iMjMuNTEiIGN5PSIyMy41MSIgcj0iMjEuOTUiIGZpbGw9IiNmN2UwMTgiIHN0cm9rZT0iIzMxMzQzZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzLjEyIiBzdHlsZT0icGFpbnQtb3JkZXI6bm9ybWFsIi8+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTU1MDMgMCAwIC45NTUwMyAuMzQ0MDUgMS4wMTE3KSIgZmlsbD0iIzMxMzQzZCIgc2hhcGUtcmVuZGVyaW5nPSJhdXRvIj4KICA8cGF0aCBkPSJtMjEuODA0IDEzLjkxMyA2LjQzMzMgOS42NDU4LTYuNDMzMyA5LjY0NDFoNS44ODI0bDMuNDkzLTUuMjM1MiAzLjQ5MTMgNS4yMzUyaDUuODgyNGwtMTIuODY3LTE5LjI5eiIgY29sb3I9IiMwMDAwMDAiIGNvbG9yLXJlbmRlcmluZz0iYXV0byIgZG9taW5hbnQtYmFzZWxpbmU9ImF1dG8iIGltYWdlLXJlbmRlcmluZz0iYXV0byIgc29saWQtY29sb3I9IiMwMDAwMDAiIHN0eWxlPSJmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWFudC1hbHRlcm5hdGVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtdmFyaWFudC1wb3NpdGlvbjpub3JtYWw7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NoYXBlLXBhZGRpbmc6MDt0ZXh0LWRlY29yYXRpb24tY29sb3I6IzAwMDAwMDt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lO3RleHQtZGVjb3JhdGlvbi1zdHlsZTpzb2xpZDt0ZXh0LWluZGVudDowO3RleHQtb3JpZW50YXRpb246bWl4ZWQ7dGV4dC10cmFuc2Zvcm06bm9uZTt3aGl0ZS1zcGFjZTpub3JtYWwiLz4KICA8cGF0aCBkPSJtMTQuODgyIDEzLjkxMyA2LjQzMzMgOS42NDU4LTYuNDMzMyA5LjY0NDFoNS44ODI0YzIuMDg1NS0zLjI5MTEgNC4wNDUyLTYuMjk1OSA2LjIyMjEtOS45NjE4bC02LjIyMjEtOS4zMjgxeiIgY29sb3I9IiMwMDAwMDAiIGNvbG9yLXJlbmRlcmluZz0iYXV0byIgZG9taW5hbnQtYmFzZWxpbmU9ImF1dG8iIGZpbGwtb3BhY2l0eT0iLjU3MzE1IiBpbWFnZS1yZW5kZXJpbmc9ImF1dG8iIHNvbGlkLWNvbG9yPSIjMDAwMDAwIiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtYWx0ZXJuYXRlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LXZhcmlhbnQtcG9zaXRpb246bm9ybWFsO2lzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtzaGFwZS1wYWRkaW5nOjA7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1pbmRlbnQ6MDt0ZXh0LW9yaWVudGF0aW9uOm1peGVkO3RleHQtdHJhbnNmb3JtOm5vbmU7d2hpdGUtc3BhY2U6bm9ybWFsIi8+CiAgPHBhdGggZD0ibTcuOTYwNCAxMy45MTMgNi40MzMzIDkuNjQ1OC02LjQzMzMgOS42NDQxaDUuODgyNGMyLjA4NTUtMy4yOTExIDQuMDQ1Mi02LjI5NTkgNi4yMjIxLTkuOTYxOGwtNi4yMjIxLTkuMzI4MXoiIGNvbG9yPSIjMDAwMDAwIiBjb2xvci1yZW5kZXJpbmc9ImF1dG8iIGRvbWluYW50LWJhc2VsaW5lPSJhdXRvIiBmaWxsLW9wYWNpdHk9Ii4yNzY1NSIgaW1hZ2UtcmVuZGVyaW5nPSJhdXRvIiBzb2xpZC1jb2xvcj0iIzAwMDAwMCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWFsdGVybmF0ZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXBzOm5vcm1hbDtmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWw7Zm9udC12YXJpYW50LXBvc2l0aW9uOm5vcm1hbDtpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c2hhcGUtcGFkZGluZzowO3RleHQtZGVjb3JhdGlvbi1jb2xvcjojMDAwMDAwO3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmU7dGV4dC1kZWNvcmF0aW9uLXN0eWxlOnNvbGlkO3RleHQtaW5kZW50OjA7dGV4dC1vcmllbnRhdGlvbjptaXhlZDt0ZXh0LXRyYW5zZm9ybTpub25lO3doaXRlLXNwYWNlOm5vcm1hbCIvPgogPC9nPgo8L3N2Zz4K",url:"https://telefunc.com"},{category:"RPC",label:"tRPC",flag:"trpc",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjg0ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDMwNSI+PHBhdGggZmlsbD0iIzM5OENDQiIgZD0iTTI4LjU3IDI0NC40ODRoMjEuOTgydjExLjE1M0gyOC41NzF2MjUuMzA4YTE2Ljg4IDE2Ljg4IDAgMCAwIC43MzggNS4zNjRhOC4xNTIgOC4xNTIgMCAwIDAgMi4wODggMy40YTcuODE1IDcuODE1IDAgMCAwIDMuMyAxLjg1MWMxLjIzNS4zMyAyLjUwNC41MSAzLjc4LjUzNmwuNTQ3LjAwMmMxLjE1IDAgMi4zMzggMCAzLjU2My0uMTYybC43MjctLjA5bDEuNDA5LS4xNmMuNDYxLS4wNTQuOTE1LS4xMTMgMS4zNjYtLjE4OGwuNjYtLjEwNWwxLjI0LS4xODRjLjQwMS0uMDYuNzktLjEyNCAxLjE3NS0uMTk5bC45MTgtLjE4NGwuNDI3LS4wOWwuNzktLjE3NmwuMzY2LS4wODdsMS40NzYgMTAuMzlhMTguNTA1IDE4LjUwNSAwIDAgMS0zLjc1MiAxLjZhMzUuOSAzNS45IDAgMCAxLTQuNTEzIDEuMTEzYy0xLjYuMy0zLjI2NC41MjYtNS4wMDIuNjg4YTU0LjI4IDU0LjI4IDAgMCAxLTUuMDg5LjIzOGEyOC4zOTYgMjguMzk2IDAgMCAxLTguNzUyLTEuMjVhMTYuODMgMTYuODMgMCAwIDEtNi43MjctNC4wMDJhMTcuMzQzIDE3LjM0MyAwIDAgMS00LjMwMi02Ljg1MmEyOS4xOTYgMjkuMTk2IDAgMCAxLTEuNTI1LTEwLjAwM3YtMjYuNzU4SDB2LTExLjE1M2gxMy40NDF2LTE0LjQxN2gxNS4xM3YxNC40MTdabTUzLjg4IDI5LjI3MXYyOS42MDlINjcuMTU2di03OS4yMzZoMjYuNjJhNDIuNTIgNDIuNTIgMCAwIDEgMTEuOTE2IDEuNTVhMjYuNjcgMjYuNjcgMCAwIDEgOS4xNCA0LjU1MmExOS44OCAxOS44OCAwIDAgMSA1Ljc5IDcuNTAyYTI0LjU3IDI0LjU3IDAgMCAxIDIuMDUgMTAuMzRhMjYuNzIgMjYuNzIgMCAwIDEtMS4wMTIgNy42NGEyMC4zMzEgMjAuMzMxIDAgMCAxLTcuNDAzIDEwLjgwNGEzMC4wOTYgMzAuMDk2IDAgMCAxLTUuOTAxIDMuNDg4bDE3LjAzIDMyLjY5N3YuNzEzaC0xNi40NDNMOTQuMDQgMjczLjc1NUg4Mi40NVptLjAxMi0xMi40MjhoMTEuMzE1YTE3Ljg2OCAxNy44NjggMCAwIDAgNi4yNTItMWExMC44NjYgMTAuODY2IDAgMCAwIDQuMzktMi45MTRhMTAuNTI4IDEwLjUyOCAwIDAgMCAyLjExMi0zLjU4OWMuNDQ4LTEuMzU4LjY5Mi0yLjc3NS43MjMtNC4yMDNsLjAwMi0uNTM2YTE1LjEwNCAxNS4xMDQgMCAwIDAtLjk1LTUuNTc2YTkuODY1IDkuODY1IDAgMCAwLTIuODUtNC4wMDFhMTIuMDY2IDEyLjA2NiAwIDAgMC00LjE0LTIuMTc2YTE5LjE0MyAxOS4xNDMgMCAwIDAtNC45Ny0uNzZsLTExLjg4NC0uMDAzdjI0Ljc1OFptNjcuODQ1IDQyLjAzN0gxMzUuMDR2LTc5LjIzNmgyNy4wOTVhMzQuNDEgMzQuNDEgMCAwIDEgMTEuNzAzIDEuODc2YTI2LjYzMyAyNi42MzMgMCAwIDEgOC45MjggNS4yMDFhMjMuMzA3IDIzLjMwNyAwIDAgMSA1LjYyNyA4LjA1M2EyNi4zNTggMjYuMzU4IDAgMCAxIDEuOTg4IDkuNzIzdi42NjdhMjQuMTcgMjQuMTcgMCAwIDEtMS45ODggOS44NTNhMjIuNTA3IDIyLjUwNyAwIDAgMS01LjYyNyA3Ljc3N2EyNi4zNyAyNi4zNyAwIDAgMS04Ljk2NSA1LjE3N2EzNC43MjMgMzQuNzIzIDAgMCAxLTExLjcwNCAxLjg1aC0xMS44MDNsLjAxMyAyOS4wNTlabTAtNDEuNDYyaDExLjgwM2ExNS4wMDQgMTUuMDA0IDAgMCAwIDUuNjY0LS45ODhhMTEuNTUzIDExLjU1MyAwIDAgMCA0LjAyNi0yLjY2M2ExMS4xNzggMTEuMTc4IDAgMCAwIDIuMzY0LTMuODg5Yy41My0xLjQ3Ni44LTMuMDMzLjgtNC42MDFhMTYuMzY3IDE2LjM2NyAwIDAgMC0uOC01LjE2NGExMS45NjYgMTEuOTY2IDAgMCAwLTIuMzY0LTQuMjAyYTExLjU5IDExLjU5IDAgMCAwLTQuMDI2LTIuODI1YTE0LjI2NyAxNC4yNjcgMCAwIDAtNS42NjQtMS4wMzhoLTExLjgwM3YyNS4zN1ptMTAzLjA0MiAyNy40MmEyNS4zMDcgMjUuMzA3IDAgMCAxLTUuOTAyIDguMTY1YTI2LjA0NSAyNi4wNDUgMCAwIDEtOC44MTUgNS4yMDJhMzMuNjQ3IDMzLjY0NyAwIDAgMS0xMC41NTggMS44MTRsLS43Ny0uMDAxYTMwLjc1OSAzMC43NTkgMCAwIDEtOS4wNTMtMS4yNWEyNS4zNDUgMjUuMzQ1IDAgMCAxLTcuNTAyLTMuNjc3YTI1LjcwNyAyNS43MDcgMCAwIDEtNS40MTQtNS4zODlhMzMuNjcyIDMzLjY3MiAwIDAgMS00LjAwMS02Ljk2NGE0MS41NzUgNDEuNTc1IDAgMCAxLTIuNDEzLTguMzc4YTUzLjQwOCA1My40MDggMCAwIDEtLjg1MS05LjY5di0xMC42NjZhNTMuNDMgNTMuNDMgMCAwIDEgLjc2My05LjExNWEzOS40MTEgMzkuNDExIDAgMCAxIDEuOTUtNy4xNjFsLjMzOC0uODY2YTMwLjQwOSAzMC40MDkgMCAwIDEgNC41NzctOC4wNTNhMjkuMjcxIDI5LjI3MSAwIDAgMSA2LjQxNC01Ljk3NmEyNi4xNTggMjYuMTU4IDAgMCAxIDcuMDUyLTMuMTg5YTI5LjEwOCAyOS4xMDggMCAwIDEgNy40OC0xLjExbC43Ni0uMDAzYTMzLjc2IDMzLjc2IDAgMCAxIDExLjYxNiAxLjg1YTIzLjc1NyAyMy43NTcgMCAwIDEgMTQuMzQyIDEzLjY1NWEzNy40MTEgMzcuNDExIDAgMCAxIDIuNjEzIDExLjE1M2gtMTUuMjNjLS4wOS0yLjEyLS40NDItNC4yMi0xLjA1LTYuMjUyYTEyLjM1NCAxMi4zNTQgMCAwIDAtMi40MjUtNC40NjNhMTAuNDE2IDEwLjQxNiAwIDAgMC00LjA1Mi0yLjYzOWExNi43MyAxNi43MyAwIDAgMC01LjgwMS0uOWExNC4yNDIgMTQuMjQyIDAgMCAwLTMuMzUxLjM4OGMtMSAuMjQzLTEuOTU5LjYyNi0yLjg1MSAxLjEzN2ExMS4zMjggMTEuMzI4IDAgMCAwLTMuNzUxIDMuNzUyYTIxLjk2OSAyMS45NjkgMCAwIDAtMi41MDEgNS42MzlhMzQuMDEgMzQuMDEgMCAwIDAtMS4wMjUgNS41MjZhNTguNzY3IDU4Ljc2NyAwIDAgMC0uMzI1IDYuNTAydjEwLjc2NmE2MS4yOCA2MS4yOCAwIDAgMCAuNTEyIDguNDY1YTI4LjkyIDI4LjkyIDAgMCAwIDEuNiA2LjUwMmExNS45OTIgMTUuOTkyIDAgMCAwIDEuODI2IDMuMzc2Yy42NjcuOTYgMS40ODcgMS44MDQgMi40MjYgMi41YTEwLjAwMyAxMC4wMDMgMCAwIDAgMy4yODggMS42YTE0LjU2IDE0LjU2IDAgMCAwIDQuMDUyLjUyNmExNy45MTggMTcuOTE4IDAgMCAwIDUuMzg5LS43NjNhMTAuMzAzIDEwLjMwMyAwIDAgMCA0LjA4OC0yLjRhMTEuMjUzIDExLjI1MyAwIDAgMCAyLjY2NC00LjE5YTIwLjk2OSAyMC45NjkgMCAwIDAgMS4yNS02LjE1SDI1NmEzMC4zOTYgMzAuMzk2IDAgMCAxLTIuNjUgMTAuNzI3Wk0xODYuMzggOTIuNDAybDM4LjQ4NiAyMi4yMnY0NC40NjJsLTM4LjQ4NiAyMi4yMmwtMTcuMDg1LTkuODgxbC00MS41NDUgMjMuOTg0bC00MS4yOTYtMjMuODQ3bC0xNi44NDYgOS43NDNsLTM4LjQ4Ni0yMi4yNTZWMTE0LjYybDM4LjQ4Ni0yMi4yMTlsMzguNDg2IDIyLjIydjQ0LjQyNWwtMTEuNjQzIDYuNzMzbDMxLjI5OSAxOC4wNzRsMzEuNTQ4LTE4LjIxMmwtMTEuNDA1LTYuNTk1VjExNC42MmwzOC40ODctMjIuMjE5Wk0xNTcuODk2IDEyNi4ydjI3LjEybDIzLjQ4MiAxMy41NTV2LTI3LjEyTDE1Ny44OTYgMTI2LjJabTU2Ljk2Ny0uMDM3bC0yMy40ODIgMTMuNTU0djI3LjE1OGwyMy40ODItMTMuNTkydi0yNy4xMlptLTE3My43MzggMHYyNy4xMmwyMy40ODEgMTMuNTU0di0yNy4xMmwtMjMuNDgxLTEzLjU1NFptNTYuOTY2IDBMNzQuNjEgMTM5LjcxNnYyNy4xMmwyMy40ODItMTMuNTU0di0yNy4xMlptODguMjg5LTIyLjE4MmwtMjMuNDgyIDEzLjU1NGwyMy40ODIgMTMuNTY3bDIzLjQ4MS0xMy41NjdsLTIzLjQ4MS0xMy41NTRabS0xMTYuNzcyLS4wMzdsLTIzLjQ4MiAxMy41OTFsMjMuNDgyIDEzLjUzbDIzLjQ4Mi0xMy41M2wtMjMuNDgyLTEzLjU5MVptMTkuMTQzLTY4LjkydjExLjU0bC0zNS42MSAyMC41N3YzNC43NzJsLTEwLjAwMyA1Ljc3N1Y2MS4zNTVMODguNzUgMzUuMDIzWk0xMjcuMjM3IDBsMzguNTEyIDIyLjIxOXYxMi4yMTlsNDYuNjEzIDI2LjkxN3Y0Ni4wMzlsLTEwLjAwMy01Ljc3N1Y2Ny4xMzJsLTM2LjYxLTIxLjE0MXYyMC42NjZsLTM4LjQ4NyAyMi4yMTlsLTM4LjQ4Ni0yMi4yMTlWMjIuMjE5TDEyNy4yMzcgMFpNOTguNzggMzMuNzZ2MjcuMTJsMjMuNDU3IDEzLjU1NFY0Ny4zMjZMOTguNzc5IDMzLjc2Wm01Ni45NDIgMGwtMjMuNDU3IDEzLjU2NnYyNy4wOTZMMTU1LjcyIDYwLjg4VjMzLjc2Wm0tMjguNDg0LTIyLjIwN0wxMDMuNzggMjUuMTA3bDIzLjQ1NyAxMy41NTRsMjMuNDgyLTEzLjU1NGwtMjMuNDgyLTEzLjU1NFoiLz48L3N2Zz4=",url:"https://trpc.io",disabled:!0},{category:"Server",label:"H3",flag:"h3",url:"https://github.com/unjs/h3"},{category:"Server",label:"Express",flag:"express",url:"https://expressjs.com"},{category:"Server",label:"HatTip",flag:"hattip",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMjYzIDIyOCIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoyOyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBpZD0iSGF0VGlwTG9nbyIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgMSwgMC43MTcxMDUsIDcuODg4MTU4KSI+CiAgICA8cGF0aCBkPSJNMzQuNjMsMTYyLjMxMWMtMCwwIC0xMi4xNjEsLTYxLjc4IC0xMi42NzksLTgxLjAxOGMwLC0wIDEuODkyLC01My4zNDIgNzUuMDU3LC02OC41OGMwLDAgNzkuMTcxLC0zMC4wNzYgMTA1LjUzOCwyNC4zMzZjMCwtMCAyMy4wNDMsNTcuMzIzIDI1LjM0LDc2Ljg5Yy0wLC0wIC01NC40NywzOS4wNzMgLTE5MS44MjEsNTQuMzY3bC0xLjQzNSwtNS45OTVaIiBzdHlsZT0iZmlsbDojMjMzNjNmO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPHBhdGggZD0iTTM5LjI3NywxODEuNjkybC0zLjIxMiwtMTMuMzg2YzAsMCAxMjEuOTM0LC0xMS4yMzUgMTkxLjgyMSwtNTQuMzY3bDMuODg3LDE2LjIwNGMtMCwwIC04OS4xLDU5LjYzNyAtMTkyLjQ5Niw1MS41NDlaIiBzdHlsZT0iZmlsbDojMDRiNTc4O2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPHBhdGggZD0iTTMzLjg1MiwxNTguMDI0bDUuNDI1LDIzLjY2OGMtMCwtMCA4OS4wNTksMTEuMTM3IDE5Mi40OTYsLTUxLjU0OWwtMy44ODcsLTE2LjIwNGwyNC44ODksLTEyLjAwNmMwLDAgNy4yMzEsLTMuOTczIDQuNTI0LDcuNDgxYy0wLC0wIDEuNjM5LDU3Ljk1MyAtMTMwLjI1MSw4Ny4zMTRjLTEyNi43NTQsMjguMjE4IC0xMzEuMzg1LC0zMi41NzUgLTExNy4wOTQsLTM1LjYxM2wyMy44OTgsLTMuMDkxWiIgc3R5bGU9ImZpbGw6IzIzMzY0MDtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICA8L2c+Cjwvc3ZnPg==",url:"https://github.com/hattipjs/hattip"},{category:"Database",label:"Prisma",flag:"prisma",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjgzZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDMxMCI+PHBhdGggZD0iTTI1NC4zMTMgMjM1LjUxOUwxNDggOS43NDlBMTcuMDYzIDE3LjA2MyAwIDAgMCAxMzMuNDczLjAzN2ExNi44NyAxNi44NyAwIDAgMC0xNS41MzMgOC4wNTJMMi42MzMgMTk0Ljg0OGExNy40NjUgMTcuNDY1IDAgMCAwIC4xOTMgMTguNzQ3TDU5LjIgMzAwLjg5NmExOC4xMyAxOC4xMyAwIDAgMCAyMC4zNjMgNy40ODlsMTYzLjU5OS00OC4zOTJhMTcuOTI5IDE3LjkyOSAwIDAgMCAxMS4yNi05LjcyMmExNy41NDIgMTcuNTQyIDAgMCAwLS4xMDEtMTQuNzZsLS4wMDguMDA4Wm0tMjMuODAyIDkuNjgzbC0xMzguODIzIDQxLjA1Yy00LjIzNSAxLjI2LTguMy0yLjQxMS03LjQxOS02LjY4NWw0OS41OTgtMjM3LjQ4NGMuOTI3LTQuNDQzIDcuMDYzLTUuMTQ3IDkuMDAzLTEuMDM1bDkxLjgxNCAxOTQuOTczYTYuNjMgNi42MyAwIDAgMS00LjE4IDkuMThoLjAwN1oiLz48L3N2Zz4=",url:"https://www.prisma.io"},{category:"Database",label:"EdgeDB",flag:"edgedb",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyLjIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgNTEyIDIzMi43MjciPjxwYXRoIGZpbGw9IiM0RDRENEQiIGQ9Ik00MzMuNjY3IDExNS4yMzhjMCAzNS4zMzMtMTQuMTY3IDQxLjY2Ni0zMC4wMDIgNDEuNjY2SDM3MFY3My41NzFoMzMuNjY2YzE1LjgzNSAwIDMwLjAwMiA2LjMzNCAzMC4wMDIgNDEuNjY3Wm0tMTcuMTY3LjAwNGMwLTI0LjY2Ny03LjUtMjUuODMzLTE4LjMzMy0yNS44MzNoLTEwLjQ5OXY1MS42NjZoMTAuNWMxMC44MzMgMCAxOC4zMzItMS4xNjcgMTguMzMyLTI1LjgzM1ptLTE3OC4zMzYgNDEuNjYyVjczLjU3MWg1My4wMDF2MTUuODM0aC0zNS4zMzR2MTdoMjYuNjY2djE1LjY2NmgtMjYuNjY2djE5aDM1LjMzNHYxNS44MzNoLTUzWk0zMjAgMjMyLjcyN2gxNy40NTVWMEgzMjB2MjMyLjcyN1pNNDY4Ljk5NSAxMTkuOTF2MjEuMTY2aDE0LjY2OGM5LjE2NiAwIDExLjUtNiAxMS41LTEwLjVjMC0zLjUtMS42NjgtMTAuNjY2LTE0LjE2OC0xMC42NjZoLTEyWm0wLTMwLjUwMnYxNS44MzNoMTJjNi44MzMgMCAxMC44MzMtMyAxMC44MzMtOHMtNC03LjgzMy0xMC44MzMtNy44MzNoLTEyWk00NTEuMzM0IDczLjU3aDMzLjk5OGMxNy44MzYgMCAyMy4xNjggMTIuNSAyMy4xNjggMjEuNWMwIDguMzM0LTUuMzMyIDE0LjMzNC05IDE2YzEwLjY2NyA1LjE2NyAxMi41IDE1LjY2NyAxMi41IDIxYzAgNy0zLjUgMjQuODMzLTI2LjY2OCAyNC44MzNoLTMzLjk5OFY3My41NzFabS0zMTQuNjY1IDQxLjY2N2MwIDM1LjMzMy0xNC4xNjcgNDEuNjY2LTMwIDQxLjY2Nkg3My4wMDJWNzMuNTcxaDMzLjY2N2MxNS44MzMgMCAzMCA2LjMzNCAzMCA0MS42NjdabTUxLjk5NyAyNi41MDdjOSAwIDEzLjY2Ni0zIDE1LjMzMy01di05LjE2NmgtMTQuMzM0di0xNC4zMzRoMjguNXYzMy4xNjdjLTIuNSAzLjgzMy0xNi4xNjYgMTEuMzMzLTI4LjY2NiAxMS4zMzNjLTIwLjUgMC0zNy44MzMtOC0zNy44MzMtNDMuMzMzczE3LjUtNDEuNjY2IDMzLjMzMy00MS42NjZjMjQuODMzIDAgMzEgMTMgMzMgMjQuNWwtMTQuNjY3IDMuMzMzYy0uODMzLTUuMzM0LTUuNS0xMi0xNi4xNjYtMTJjLTEwLjgzNCAwLTE4LjMzNCAxLjE2Ni0xOC4zMzQgMjUuODMzYzAgMjQuNjY3IDcuODM0IDI3LjMzMyAxOS44MzQgMjcuMzMzWk0xMTkuNSAxMTUuMjQyYzAtMjQuNjY3LTcuNS0yNS44MzMtMTguMzMzLTI1LjgzM2gtMTAuNXY1MS42NjZoMTAuNWMxMC44MzMgMCAxOC4zMzMtMS4xNjcgMTguMzMzLTI1LjgzM1pNMCAxNTYuOTA0VjczLjU3MWg1M3YxNS44MzRIMTcuNjY3djE3aDI2LjY2NnYxNS42NjZIMTcuNjY3djE5SDUzdjE1LjgzM0gwWiIvPjwvc3ZnPg==",url:"https://www.edgedb.com"},{category:"Analytics",label:"Plausible.io",flag:"plausible.io",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8dGl0bGU+bG9nbzwvdGl0bGU+CiAgICA8ZGVmcz4KICAgICAgICA8cmFkaWFsR3JhZGllbnQgY3g9Ijc5LjEzMDUyNjMlIiBjeT0iODcuNjQ0ODE1OCUiIGZ4PSI3OS4xMzA1MjYzJSIgZnk9Ijg3LjY0NDgxNTglIiByPSI5Ni45ODk3NzYzJSIgaWQ9InJhZGlhbEdyYWRpZW50LTEiPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjMjQ0MEU2IiBvZmZzZXQ9IjAlIj48L3N0b3A+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiM1NjYxQjMiIG9mZnNldD0iMTAwJSI+PC9zdG9wPgogICAgICAgIDwvcmFkaWFsR3JhZGllbnQ+CiAgICAgICAgPHJhZGlhbEdyYWRpZW50IGN4PSIxLjUwNjEwNDU3ZS0wNSUiIGN5PSIzMC4yMTk4OTQxJSIgZng9IjEuNTA2MTA0NTdlLTA1JSIgZnk9IjMwLjIxOTg5NDElIiByPSI2Mi4yNjg4NzczJSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwwLjMwMjE5OSksc2NhbGUoMS4wMDAwMDAsMC43MjI1MTkpLHJvdGF0ZSg2MS43MzQ1MjIpLHRyYW5zbGF0ZSgtMC4wMDAwMDAsLTAuMzAyMTk5KSIgaWQ9InJhZGlhbEdyYWRpZW50LTIiPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNjU3NENEIiBzdG9wLW9wYWNpdHk9IjAuNSIgb2Zmc2V0PSIwJSI+PC9zdG9wPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNjU3NENEIiBvZmZzZXQ9IjEwMCUiPjwvc3RvcD4KICAgICAgICA8L3JhZGlhbEdyYWRpZW50PgogICAgPC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9ImxvZ28iPgogICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlIiB4PSIwIiB5PSIwIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiPjwvcmVjdD4KICAgICAgICAgICAgPGcgaWQ9IkJpdG1hcCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMi41MzEwMTcsIDAuMDQ5NjI4KSIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNy40Njg5ODMsIDkuOTY3NTIzKSBzY2FsZSgtMSwgMSkgcm90YXRlKC0xODAuMDAwMDAwKSB0cmFuc2xhdGUoLTcuNDY4OTgzLCAtOS45Njc1MjMpIHRyYW5zbGF0ZSgwLjAwMDAwMCwgMC4wMDAwMDApIj4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBmaWxsPSJ1cmwoI3JhZGlhbEdyYWRpZW50LTEpIiBjeD0iNy40Njg5ODI2NCIgY3k9IjEyLjQ2NjA2MjciIHI9IjcuNDY4OTgyNjQiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjE4ODU4NTYyLDE5Ljg1MTExNjYgQzQuNjQ1MTYxMywxOS41ODMxMjY2IDMuMzQ0OTEzMTgsMTguOTI4MDM5NyAyLjI2Nzk5MDEsMTcuODc1OTMwNSBDMS4xNjEyOTAzNCwxNi43OTQwNDQ3IDAuNDc2NDI2ODE4LDE1LjUzMzQ5ODggMC4xNDM5MjA2MTUsMTMuOTYwMjk3OCBMMC4wMjk3NzY2OTQsMTMuNDI0MzE3NiBMMC4wMTQ4ODgzNTY2LDYuNzE0NjQwMTkgTDEuOTE2MDAwMDNlLTA4LC00LjkyOTM5MDIzZS0xNiBMMC4xMzg5NTc4MzYsLTQuOTI5MzkwMjNlLTE2IEMwLjIxODM2MjMwMiwtNC45MjkzOTAyM2UtMTYgMC40NzE0NjQwNCwwLjAyNDgxMzg5NTggMC42OTk3NTE4OCwwLjA0OTYyNzc5MTYgQzIuNjUwMTI0MDgsMC4yODc4NDExOTEgNC4zMDc2OTIzMiwxLjQ2ODk4MjYzIDUuMjEwOTE4MTQsMy4yNjA1NDU5MSBDNS40MzkyMDU5OCwzLjcxNzEyMTU5IDUuNjAyOTc3NjgsNC4yNDMxNzYxNyA1LjcxNzEyMTYsNC44OTgyNjMwMyBDNS44MTE0MTQ0Miw1LjQ1NDA5NDI5IDUuODE2Mzc3Miw1LjYzNzcxNzEzIDUuODAxNDg4ODYsOC41MzU5ODAxNSBMNS43ODY2MDA1MiwxMS41ODgwODkzIEw1LjkwNTcwNzIyLDExLjg4NTg1NjEgQzYuMDY5NDc4OTIsMTIuMjkyODA0IDYuNTIxMDkxODQsMTIuNzQ0NDE2OSA2LjkyODAzOTcyLDEyLjkwODE4ODYgTDcuMjI1ODA2NDgsMTMuMDI3Mjk1MyBMMTAuMDA0OTYyOCwxMy4wMzIyNTgxIEMxMS41MzM0OTg4LDEzLjAzMjI1ODEgMTIuODczNDQ5MiwxMy4wNTIxMDkyIDEyLjk3NzY2NzUsMTMuMDcxOTYwMyBDMTMuNDY0MDE5OSwxMy4xNjYyNTMxIDEzLjk4NTExMTcsMTMuNTczMjAxIDE0LjE5MzU0ODQsMTQuMDI0ODEzOSBDMTQuMjUzMTAxOCwxNC4xNDg4ODM0IDE0LjMzMjUwNjIsMTQuMzkyMDU5NiAxNC4zNjcyNDU3LDE0LjU1NTgzMTMgQzE0LjQyMTgzNjIsMTQuODI4Nzg0MSAxNC40MTY4NzM1LDE0LjkwMzIyNTggMTQuMzM3NDY5LDE1LjIxMDkxODEgQzE0LjA4OTMzLDE2LjEyNDA2OTUgMTMuMjE1ODgwOSwxNy4zODk1NzgyIDEyLjMyMjU4MDcsMTguMTI5MDMyMyBDMTEuMzEwMTczNywxOC45Njc3NDE5IDEwLjE5MzU0ODQsMTkuNTI4NTM2IDguOTg3NTkzMDgsMTkuODExNDE0NCBDOC4zNTIzNTczNCwxOS45NTUzMzUgNi45MTMxNTEzOCwxOS45ODAxNDg5IDYuMTg4NTg1NjIsMTkuODUxMTE2NiBaIiBpZD0iUGF0aCIgZmlsbD0idXJsKCNyYWRpYWxHcmFkaWVudC0yKSI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=",url:"https://plausible.io"},{category:"Analytics",label:"Google Analytics",flag:"google-analytics",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjkxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDI4NCI+PHBhdGggZmlsbD0iI0Y5QUIwMCIgZD0iTTI1Ni4wMDMgMjQ3LjkzM2EzNS4yMjQgMzUuMjI0IDAgMCAxLTM5LjM3NiAzNS4xNjFjLTE4LjA0NC0yLjY3LTMxLjI2Ni0xOC4zNzEtMzAuODI2LTM2LjYwNlYzNi44NDVDMTg1LjM2NSAxOC41OTEgMTk4LjYyIDIuODgxIDIxNi42ODcuMjRhMzUuMjIxIDM1LjIyMSAwIDAgMSAzOS4zMTYgMzUuMTZ2MjEyLjUzM1oiLz48cGF0aCBmaWxsPSIjRTM3NDAwIiBkPSJNMzUuMTAxIDIxMy4xOTNjMTkuMzg2IDAgMzUuMTAxIDE1LjcxNiAzNS4xMDEgMzUuMTAxYzAgMTkuMzg2LTE1LjcxNSAzNS4xMDEtMzUuMTAxIDM1LjEwMVMwIDI2Ny42OCAwIDI0OC4yOTVjMC0xOS4zODYgMTUuNzE1LTM1LjEwMiAzNS4xMDEtMzUuMTAyWm05Mi4zNTgtMTA2LjM4N2MtMTkuNDc3IDEuMDY4LTM0LjU5IDE3LjQwNi0zNC4xMzcgMzYuOTA4djk0LjI4NWMwIDI1LjU4OCAxMS4yNTkgNDEuMTIyIDI3Ljc1NSA0NC40MzNhMzUuMTYxIDM1LjE2MSAwIDAgMCA0Mi4xNDYtMzQuNTZWMTQyLjA4OWEzNS4yMjIgMzUuMjIyIDAgMCAwLTM1Ljc2NC0zNS4yODJaIi8+PC9zdmc+",url:"https://360suite.google.com/",disabled:!0},{category:"Analytics",label:"Segment",flag:"segment",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjk3ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDI2NSI+PHBhdGggZmlsbD0iIzRGQjU4QiIgZD0ibTIzMy41NiAxNDEuOTI3bC4xNy4wMTNsMTcuODkyIDEuODdhNC45MjcgNC45MjcgMCAwIDEgMy4yMjUgMS43MDdsLjEzMy4xNjNsLS4xNy4wODVhNC45MyA0LjkzIDAgMCAxIDEuMDIgMy43NGExMzMuMjcyIDEzMy4yNzIgMCAwIDEtNDEuNjA0IDgxLjA4M2ExMjguODYgMTI4Ljg2IDAgMCAxLTg3LjYyOSAzNC4zOGExMjcuNDg4IDEyNy40ODggMCAwIDEtNDYuMTU2LTguNTdsLS44MDItLjMxMmE0LjcxNiA0LjcxNiAwIDAgMS0yLjY4Ni0yLjUzM2wtLjA3Ny0uMTg3YTQuODkxIDQuODkxIDAgMCAxLS4wODMtMy42Nmw3LjA2Mi0xNy4yM2E0Ljg0NiA0Ljg0NiAwIDAgMSA2LjExOC0yLjc5OWwuMTYzLjA2YzM2LjA5NyAxMy45MzkgNzYuOTggNi4wODkgMTA1LjM0OS0yMC4yMjdhMTA0LjQ1NSAxMDQuNDU1IDAgMCAwIDMyLjg5MS02My4zMmE0LjkzIDQuOTMgMCAwIDEgNS4wMTMtNC4yN2wuMTcuMDA3Wm0tMTkwLjA4IDY0LjMxbC4yNTEtLjAwMmwuMjUzLjAwMmM4LjEyLjA5MyAxNC42NTggNi42NTkgMTQuNzQ2IDE0Ljc0OXYuMjUzYzAgLjA4NCAwIC4xNjgtLjAwMi4yNTJjLS4xNDEgOC4yODQtNi45NyAxNC44ODYtMTUuMjU0IDE0Ljc0NWMtOC4yODQtLjE0MS0xNC44ODUtNi45Ny0xNC43NDUtMTUuMjU0Yy4xMzktOC4xMTUgNi42OTUtMTQuNjE1IDE0Ljc1LTE0Ljc0NVpNNC45MyAxNDcuMDgyaDE0Ni4zMTZhNC45NzMgNC45NzMgMCAwIDEgNC45MjggNC44NDRsLjAwMi4xNzF2MTguMzE2YTQuOTc0IDQuOTc0IDAgMCAxLTQuNzYgNS4wMWwtLjE3LjAwNUg0LjkzQTQuOTc1IDQuOTc1IDAgMCAxIDAgMTcwLjU4NHYtMTguNjU5YTQuOTc1IDQuOTc1IDAgMCAxIDQuNzU1LTQuODM4bC4xNzUtLjAwNVpNMTY5LjU2IDcuMzExYTQuOTc0IDQuOTc0IDAgMCAxIDIuODQ4IDIuNjM1YTUuMDk2IDUuMDk2IDAgMCAxIDAgMy44NjdsLTYuMzc1IDE2Ljk5OWE0Ljg0NSA0Ljg0NSAwIDAgMS02LjE2MiAyLjk3NEExMDEuMjI4IDEwMS4yMjggMCAwIDAgNjIuMTMgNTEuMjUyYTEwNS4yNjcgMTA1LjI2NyAwIDAgMC0zNC41MDcgNTQuOTlhNC45MyA0LjkzIDAgMCAxLTQuNzYgMy42OThoLTEuMTA1TDQuMjUgMTA1LjczM2E0Ljg4NiA0Ljg4NiAwIDAgMS0zLjEwMy0yLjI5NWgtLjA4NUE0LjkyOSA0LjkyOSAwIDAgMSAuNTEgOTkuNTdhMTMzLjM5MyAxMzMuMzkzIDAgMCAxIDQ0LjQxLTcwLjIwNEM3OS43MzkuNyAxMjcuMDE5LTcuNjY2IDE2OS41NiA3LjMxMVptLTY0LjgwNyA3My40MzRIMjUxLjA3YTQuOTcyIDQuOTcyIDAgMCAxIDQuOTIyIDQuNjdsLjAwOC4xNzR2MTguMzE3YTQuOTczIDQuOTczIDAgMCAxLTQuNzYgNS4wMWwtLjE3LjAwNUgxMDQuNzU0YTQuOTcyIDQuOTcyIDAgMCAxLTQuODg2LTQuODQybC0uMDAyLS4xNzNWODUuNzU5YTQuOTcyIDQuOTcyIDAgMCAxIDQuNzE1LTUuMDA4bC4xNzMtLjAwNlptMTAxLjU3Mi01NS44ODNsLjI1Mi0uMDAybC4yNTMuMDAyYzguMTIuMDkzIDE0LjY1OCA2LjY1OSAxNC43NDYgMTQuNzQ4di4yNTNjMCAuMDg1IDAgLjE3LS4wMDIuMjUzYy0uMTQgOC4yODQtNi45NyAxNC44ODUtMTUuMjU0IDE0Ljc0NGMtOC4yODQtLjE0LTE0Ljg4NS02Ljk3LTE0Ljc0NC0xNS4yNTNjLjEzOC04LjExNiA2LjY5NC0xNC42MTYgMTQuNzQ5LTE0Ljc0NVoiLz48L3N2Zz4=",url:"https://segment.com",disabled:!0},{category:"Hosting",label:"Vercel",flag:"vercel",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjE2ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyMiI+PHBhdGggZD0ibTEyOCAwbDEyOCAyMjEuNzA1SDB6Ii8+PC9zdmc+",url:"https://vercel.com"},{category:"Hosting",label:"Netlify",flag:"netlify",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjE0ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyNiI+PHBhdGggZmlsbD0iIzA1QkRCQSIgZD0iTTY5LjE4MSAxODguMDg3aC0yLjQxN2wtMTIuMDY1LTEyLjA2NXYtMi40MTdsMTguNDQ0LTE4LjQ0NGgxMi43NzhsMS43MDQgMS43MDR2MTIuNzc4ek01NC42OTkgNTEuNjI4di0yLjQxN2wxMi4wNjUtMTIuMDY1aDIuNDE3TDg3LjYyNSA1NS41OXYxMi43NzhsLTEuNzA0IDEuNzA0SDczLjE0M3oiLz48cGF0aCBmaWxsPSIjMDE0ODQ3IiBkPSJNMTYwLjkwNiAxNDkuMTk4aC0xNy41NTJsLTEuNDY2LTEuNDY2di00MS4wODljMC03LjMxLTIuODczLTEyLjk3Ni0xMS42ODktMTMuMTc0Yy00LjUzNy0uMTE5LTkuNzI3IDAtMTUuMjc0LjIxOGwtLjgzMy44NTJ2NTMuMTczbC0xLjQ2NiAxLjQ2Nkg5NS4wNzRsLTEuNDY2LTEuNDY2di03MC4xOWwxLjQ2Ni0xLjQ2N2gzOS41MDNjMTUuMzU0IDAgMjcuNzk1IDEyLjQ0MSAyNy43OTUgMjcuNzk1djQzLjg4MmwtMS40NjYgMS40NjZaIi8+PHBhdGggZmlsbD0iIzA1QkRCQSIgZD0iTTcxLjY3NyAxMjIuODg5SDEuNDY2TDAgMTIxLjQyM1YxMDMuODNsMS40NjYtMS40NjZoNzAuMjExbDEuNDY2IDEuNDY2djE3LjU5M3ptMTgyLjg1NyAwaC03MC4yMTFsLTEuNDY2LTEuNDY2VjEwMy44M2wxLjQ2Ni0xLjQ2Nmg3MC4yMTFMMjU2IDEwMy44M3YxNy41OTN6TTExNy44NzYgNTQuMTI0VjEuNDY2TDExOS4zNDIgMGgxNy41OTNsMS40NjYgMS40NjZ2NTIuNjU4bC0xLjQ2NiAxLjQ2NmgtMTcuNTkzem0wIDE2OS42NjN2LTUyLjY1OGwxLjQ2Ni0xLjQ2NmgxNy41OTNsMS40NjYgMS40NjZ2NTIuNjU4bC0xLjQ2NiAxLjQ2NWgtMTcuNTkzeiIvPjwvc3ZnPg==",url:"https://www.netlify.com",disabled:!0},{category:"Linter",label:"ESLint",flag:"eslint",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjE0ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyNSI+PHBhdGggZmlsbD0iIzgwODBGMiIgZD0ibTc3Ljk2NSA4MC41NjhsNDguNTctMjguMDQyYTMuOTI5IDMuOTI5IDAgMCAxIDMuOTMgMGw0OC41NyAyOC4wNDJBMy45MzIgMy45MzIgMCAwIDEgMTgxIDgzLjk3MXY1Ni4wODRjMCAxLjQwMy0uNzUgMi43LTEuOTY1IDMuNDAzbC00OC41NyAyOC4wNDJhMy45MjkgMy45MjkgMCAwIDEtMy45MyAwbC00OC41Ny0yOC4wNDJBMy45MzEgMy45MzEgMCAwIDEgNzYgMTQwLjA1NVY4My45N2MuMDAxLTEuNDA0Ljc1LTIuNyAxLjk2NS0zLjQwMyIvPjxwYXRoIGZpbGw9IiM0QjMyQzMiIGQ9Ik0yNTQuNDE3IDEwNy40MTdMMTk2LjMyMyA2LjM1QzE5NC4yMTMgMi42OTYgMTkwLjMxNSAwIDE4Ni4wOTUgMEg2OS45MDZjLTQuMjIgMC04LjEyIDIuNjk2LTEwLjIzIDYuMzVMMS41ODMgMTA3LjE5NGMtMi4xMSAzLjY1NS0yLjExIDguMjY4IDAgMTEuOTIzbDU4LjA5MyAxMDAuMjM5YzIuMTEgMy42NTQgNi4wMSA1LjUyMiAxMC4yMyA1LjUyMmgxMTYuMTg4YzQuMjIgMCA4LjExOS0xLjgxMiAxMC4yMjgtNS40NjdsNTguMDk0LTEwMC40MDJjMi4xMTItMy42NTMgMi4xMTItNy45MzggMC0xMS41OTJabS00OC4xMDUgNDguNmMwIDEuNDg1LS44OTQgMi44Ni0yLjE4MiAzLjYwNGwtNzMuOTk5IDQyLjY5M2E0LjIxIDQuMjEgMCAwIDEtNC4xODYgMGwtNzQuMDU2LTQyLjY5M2MtMS4yODctLjc0NC0yLjE4OC0yLjExOC0yLjE4OC0zLjYwNVY3MC42MjhjMC0xLjQ4Ny44ODgtMi44NiAyLjE3Ni0zLjYwNGw3My45OTUtNDIuNjk0YTQuMjAyIDQuMjAyIDAgMCAxIDQuMTg1IDBsNzQuMDYgNDIuNjk0YzEuMjg5Ljc0NCAyLjE5NSAyLjExNyAyLjE5NSAzLjYwNHY4NS4zODhaIi8+PC9zdmc+",url:"https://eslint.org"},{category:"Linter",label:"Prettier",flag:"prettier",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDI1NiI+PHJlY3Qgd2lkdGg9IjI0LjM4MSIgaGVpZ2h0PSIxMi4xOSIgeD0iMTgyLjg1NyIgeT0iNDguNzYyIiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI3My4xNDMiIGhlaWdodD0iMTIuMTkiIHk9IjI0My44MSIgZmlsbD0iI0VBNUU1RSIgcng9IjUiLz48cmVjdCB3aWR0aD0iNDguNzYyIiBoZWlnaHQ9IjEyLjE5IiB4PSIxNDYuMjg2IiB5PSIxNDYuMjg2IiBmaWxsPSIjQkY4NUJGIiByeD0iNSIvPjxyZWN0IHdpZHRoPSI2MC45NTIiIGhlaWdodD0iMTIuMTkiIHg9IjczLjE0MyIgeT0iMTQ2LjI4NiIgZmlsbD0iI0VBNUU1RSIgcng9IjUiLz48cmVjdCB3aWR0aD0iNjAuOTUyIiBoZWlnaHQ9IjEyLjE5IiB5PSIxNDYuMjg2IiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI3My4xNDMiIGhlaWdodD0iMTIuMTkiIHk9IjE5NS4wNDgiIGZpbGw9IiNCRjg1QkYiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjczLjE0MyIgaGVpZ2h0PSIxMi4xOSIgeT0iOTcuNTI0IiBmaWxsPSIjQkY4NUJGIiByeD0iNSIvPjxyZWN0IHdpZHRoPSIxMzQuMDk1IiBoZWlnaHQ9IjEyLjE5IiB4PSI2MC45NTIiIHk9IjI0LjM4MSIgZmlsbD0iI0Y3QkEzRSIgcng9IjUiLz48cmVjdCB3aWR0aD0iNDguNzYyIiBoZWlnaHQ9IjEyLjE5IiB5PSIyNC4zODEiIGZpbGw9IiNFQTVFNUUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjI0LjM4MSIgaGVpZ2h0PSIxMi4xOSIgeD0iNDguNzYyIiB5PSIyMTkuNDI5IiBmaWxsPSIjRjdCQTNFIiByeD0iNSIvPjxyZWN0IHdpZHRoPSIyNC4zODEiIGhlaWdodD0iMTIuMTkiIHg9IjQ4Ljc2MiIgeT0iNzMuMTQzIiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIzNi41NzEiIGhlaWdodD0iMTIuMTkiIHk9IjIxOS40MjkiIGZpbGw9IiM1NkIzQjQiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjM2LjU3MSIgaGVpZ2h0PSIxMi4xOSIgeT0iNzMuMTQzIiBmaWxsPSIjRjdCQTNFIiByeD0iNSIvPjxyZWN0IHdpZHRoPSIyNC4zODEiIGhlaWdodD0iMTIuMTkiIHg9IjE1OC40NzYiIHk9IjIxOS40MjkiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI2MC45NTIiIGhlaWdodD0iMTIuMTkiIHg9Ijg1LjMzMyIgeT0iMjE5LjQyOSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjYwLjk1MiIgaGVpZ2h0PSIxMi4xOSIgeD0iMTk1LjA0OCIgeT0iMjE5LjQyOSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjEwOS43MTQiIGhlaWdodD0iMTIuMTkiIHg9Ijk3LjUyNCIgeT0iMTIxLjkwNSIgZmlsbD0iIzU2QjNCNCIgcng9IjUiLz48cmVjdCB3aWR0aD0iNDguNzYyIiBoZWlnaHQ9IjEyLjE5IiB4PSIzNi41NzEiIHk9IjEyMS45MDUiIGZpbGw9IiNGN0JBM0UiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjI0LjM4MSIgaGVpZ2h0PSIxMi4xOSIgeT0iMTIxLjkwNSIgZmlsbD0iI0VBNUU1RSIgcng9IjUiLz48cmVjdCB3aWR0aD0iNjAuOTUyIiBoZWlnaHQ9IjEyLjE5IiB4PSIxMDkuNzE0IiB5PSI0OC43NjIiIGZpbGw9IiNCRjg1QkYiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9Ijk3LjUyNCIgaGVpZ2h0PSIxMi4xOSIgeT0iNDguNzYyIiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIxMjEuOTA1IiBoZWlnaHQ9IjEyLjE5IiB4PSIzNi41NzEiIHk9IjE3MC42NjciIGZpbGw9IiNGN0JBM0UiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjI0LjM4MSIgaGVpZ2h0PSIxMi4xOSIgeT0iMTcwLjY2NyIgZmlsbD0iI0JGODVCRiIgcng9IjUiLz48cmVjdCB3aWR0aD0iNzMuMTQzIiBoZWlnaHQ9IjEyLjE5IiB4PSIxNDYuMjg2IiB5PSI3My4xNDMiIGZpbGw9IiNFQTVFNUUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjczLjE0MyIgaGVpZ2h0PSIxMi4xOSIgeD0iMTQ2LjI4NiIgeT0iOTcuNTI0IiBmaWxsPSIjRjdCQTNFIiByeD0iNSIvPjxyZWN0IHdpZHRoPSIxNTguNDc2IiBoZWlnaHQ9IjEyLjE5IiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI4NS4zMzMiIGhlaWdodD0iMTIuMTkiIHg9IjE3MC42NjciIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIzNi41NzEiIGhlaWdodD0iMTIuMTkiIHg9IjE3MC42NjciIHk9IjE3MC42NjciIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIzNi41NzEiIGhlaWdodD0iMTIuMTkiIHg9IjIxOS40MjkiIHk9IjE3MC42NjciIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI0OC43NjIiIGhlaWdodD0iMTIuMTkiIHg9IjIwNy4yMzgiIHk9IjE0Ni4yODYiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI0OC43NjIiIGhlaWdodD0iMTIuMTkiIHg9IjIwNy4yMzgiIHk9IjI0LjM4MSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjM2LjU3MSIgaGVpZ2h0PSIxMi4xOSIgeD0iMjE5LjQyOSIgeT0iMTIxLjkwNSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjM2LjU3MSIgaGVpZ2h0PSIxMi4xOSIgeD0iMjE5LjQyOSIgeT0iNDguNzYyIiBmaWxsPSIjRDBENEQ4IiBvcGFjaXR5PSIuNSIgcng9IjUiLz48cmVjdCB3aWR0aD0iMjQuMzgxIiBoZWlnaHQ9IjEyLjE5IiB4PSIyMzEuNjE5IiB5PSI3My4xNDMiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIyNC4zODEiIGhlaWdodD0iMTIuMTkiIHg9IjIzMS42MTkiIHk9Ijk3LjUyNCIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjEyMS45MDUiIGhlaWdodD0iMTIuMTkiIHg9IjEzNC4wOTUiIHk9IjE5NS4wNDgiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIzNi41NzEiIGhlaWdodD0iMTIuMTkiIHg9Ijg1LjMzMyIgeT0iMTk1LjA0OCIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjczLjE0MyIgaGVpZ2h0PSIxMi4xOSIgeD0iMTgyLjg1NyIgeT0iMjQzLjgxIiBmaWxsPSIjRDBENEQ4IiBvcGFjaXR5PSIuNSIgcng9IjUiLz48cmVjdCB3aWR0aD0iODUuMzMzIiBoZWlnaHQ9IjEyLjE5IiB4PSI4NS4zMzMiIHk9IjI0My44MSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjQ4Ljc2MiIgaGVpZ2h0PSIxMi4xOSIgeD0iODUuMzMzIiB5PSI3My4xNDMiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI0OC43NjIiIGhlaWdodD0iMTIuMTkiIHg9Ijg1LjMzMyIgeT0iOTcuNTI0IiBmaWxsPSIjRDBENEQ4IiBvcGFjaXR5PSIuNSIgcng9IjUiLz48L3N2Zz4=",url:"https://prettier.io"},{category:"Error tracking",label:"Sentry",flag:"sentry",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjEzZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyNyI+PHBhdGggZmlsbD0iIzM2MkQ1OSIgZD0iTTE0OC4zNjggMTIuNDAzYTIzLjkzNSAyMy45MzUgMCAwIDAtNDEuMDAzIDBMNzMuNjQgNzAuMTY1YzUyLjQyNiAyNi4xNzQgODcuMDUgNzguMTc3IDkwLjk3NSAxMzYuNjQyaC0yMy42NzljLTMuOTE4LTUwLjExMy0zNC4wNjEtOTQuNDEtNzkuMjM4LTExNi40NDhsLTMxLjIxMyA1My45N2E4MS41OTUgODEuNTk1IDAgMCAxIDQ3LjMwNyA2Mi4zNzVoLTU0LjM4YTMuODk1IDMuODk1IDAgMCAxLTMuMTc4LTUuNjlsMTUuMDY5LTI1LjYyNmE1NS4wNDYgNTUuMDQ2IDAgMCAwLTE3LjIyMS05LjczOEwzLjE2NyAxOTEuMjc3YTIzLjI2OSAyMy4yNjkgMCAwIDAgOC42NjIgMzEuOTgyYTIzLjg4NCAyMy44ODQgMCAwIDAgMTEuNTgzIDMuMDc1aDc0LjQ3MWE5OS40MzIgOTkuNDMyIDAgMCAwLTQxLjAwMy04OC43MmwxMS44NC0yMC41YzM1LjY3OSAyNC41MDQgNTUuNzU0IDY2LjAzOCA1Mi43OSAxMDkuMjJoNjMuMDk0YzIuOTktNjUuNDMtMjkuMDQ3LTEyNy41MTItODQuMTA3LTE2Mi45ODZsMjMuOTM1LTQxLjAwMmEzLjk0NyAzLjk0NyAwIDAgMSA1LjM4Mi0xLjM4NGMyLjcxNiAxLjQ4NiAxMDMuOTkzIDE3OC4yMDggMTA1Ljg5IDE4MC4yNThhMy44OTUgMy44OTUgMCAwIDEtMy40ODYgNS43OTJoLTI0LjM5NmMuMzA3IDYuNTI2LjMwNyAxMy4wMzUgMCAxOS41MjhoMjQuNDk5QTIzLjUyOCAyMy41MjggMCAwIDAgMjU2IDIwMi45MWEyMy4wMTUgMjMuMDE1IDAgMCAwLTMuMTc4LTExLjY4NUwxNDguMzY4IDEyLjQwM1oiLz48L3N2Zz4=",url:"https://sentry.io",disabled:!0},{category:"Error tracking",label:"Logrocket",flag:"logrocket",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAuMDAgMC4wMCAxMTQ2LjAwIDE3ODMuMDAiPgo8cGF0aCBmaWxsPSIjNzE1MmExIiBkPSIKICBNIDM3Mi4yNCAxMjc5Ljc3CiAgUSAzNDYuNTQgMTI5OC44OCAzMjIuMTggMTMxOS42OAogIEMgMjkyLjkwIDEzNDQuNjYgMjYzLjgwIDEzNjkuNzYgMjM0LjEzIDEzOTQuMjkKICBDIDIwMi45MyAxNDIwLjA5IDE3NS40MyAxNDU1LjExIDEzMC4zNCAxNDQ3LjYyCiAgQyAxMDEuNDYgMTQ0Mi44MyA3NS4xMCAxNDIzLjM2IDY4LjE3IDEzOTMuOTYKICBDIDQ3LjM2IDEzMDUuNzggMjYuNDMgMTIxNy42MiA2LjQ0IDExMjkuMjUKICBRIDMuNjAgMTExNi42OCAyLjU1IDExMDkuNjQKICBDIC04Ljg3IDEwMzIuNDMgMjMuMTAgOTU1LjU1IDgzLjQ3IDkwNi44OQogIFEgMTM0Ljk3IDg2NS4zOCAxODcuNTMgODI1LjIxCiAgQyAxOTEuNDkgODIyLjE4IDE5My4yMSA4MTkuMDYgMTkyLjkxIDgxNC4yNQogIEMgMTc5LjY3IDYwMy40MyAyNDguMjYgMzk5LjYwIDM2MS40NiAyMjQuMjAKICBDIDM4My43MiAxODkuNjkgNDA4LjY2IDE1Ni40NyA0MzUuMDcgMTIzLjU3CiAgQyA0NzMuODUgNzUuMjQgNTE3LjU1IDMyLjM2IDU3MC42NiAwLjYwCiAgQSAwLjgxIDAuODAgLTQ1LjMgMCAxIDU3MS41MCAwLjU5CiAgQyA2NDguNjkgNDYuMTcgNzA1LjA0IDExNi4wMCA3NTYuNzcgMTg4LjU0CiAgUSA3NjIuODYgMTk3LjA3IDc2OC4yMSAyMDQuOTUKICBDIDg4OS44MiAzODQuMTEgOTY0LjI0IDYwMC4xNyA5NDkuNTkgODE4LjczCiAgQSAwLjk5IDAuOTggMjEuNSAwIDAgOTQ5Ljk1IDgxOS41NQogIEMgOTkyLjA4IDg1My4zOSAxMDM4LjgyIDg4OC43OSAxMDcyLjIxIDkxNy4wMwogIFEgMTA4OC4xMCA5MzAuNDYgMTEwMy42MyA5NTIuMzQKICBRIDExNDYuNzYgMTAxMy4wOSAxMTQ1LjI5IDEwODcuMjQKICBDIDExNDUuMDIgMTEwMS4wNiAxMTQyLjgyIDExMTQuMTUgMTEzOS42OCAxMTI5LjQ4CiAgQyAxMTIxLjQzIDEyMTguNzMgMTEwMi4yMSAxMzE1LjQ2IDEwODMuOTMgMTM5Ni45MwogIEMgMTA3My41NCAxNDQzLjIwIDEwMTMuNzMgMTQ2My4wMiA5NzQuNjAgMTQ0Mi4xMwogIFEgOTY4LjY2IDE0MzguOTYgOTU4LjcwIDE0MzAuODMKICBDIDg5Ni40OCAxMzc5Ljk2IDgzNC42MiAxMzI4LjcwIDc3Mi40OSAxMjc3Ljg5CiAgQSAwLjg1IDAuODQgNDMuMyAwIDAgNzcxLjM4IDEyNzcuOTIKICBDIDcxOS4xMSAxMzI1LjgyIDY1Mi4zMyAxMzU0Ljg4IDU4MS40NSAxMzU3LjY4CiAgQyA1MDUuMTMgMTM2MC42OSA0MzAuMjkgMTMzMC43MyAzNzMuMTQgMTI3OS44MQogIEEgMC43MSAwLjcxIDAuMCAwIDAgMzcyLjI0IDEyNzkuNzcKICBaCiAgTSA0MDkuOTcgNTkyLjcwCiAgQyA0MjEuNDggNjg1LjIxIDUwNy45OSA3NDIuODggNTk5LjI0IDcyOC40NgogIEMgNjM1LjgyIDcyMi42OCA2NjguMDcgNzA1LjQ4IDY5Mi45NCA2NzguNDQKICBDIDc1MC40OCA2MTUuODUgNzQ2LjQ4IDUyMC4yNiA2ODQuMTkgNDYyLjU1CiAgUSA2MzkuMjEgNDIwLjg5IDU3Ni4wMSA0MTguNjEKICBDIDQ4MC42NyA0MTUuMTggMzk3Ljg4IDQ5NS40NSA0MDkuOTcgNTkyLjcwCiAgWiIKLz4KPGVsbGlwc2UgZmlsbD0iIzcxNTJhMSIgY3g9IjAuMDAiIGN5PSIwLjAwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1NjkuODYsNTc2LjU1KSByb3RhdGUoLTAuMSkiIHJ4PSI3OS41MCIgcnk9Ijc2LjQ1Ii8+CjxwYXRoIGZpbGw9IiM3MTUyYTEiIGQ9IgogIE0gNDYyLjgzIDE2MTkuNzkKICBBIDAuNzAgMC43MCAwLjAgMCAwIDQ2MS43MiAxNjE5LjYyCiAgUSA0NDguMTIgMTYzMy4wMCA0MzQuMzYgMTY0Ni4zNgogIFEgNDIwLjc0IDE2NTkuNTcgNDEzLjQ0IDE2NjUuMTkKICBDIDM5NC4yMCAxNjc5Ljk5IDM1OS43NCAxNjY3LjIxIDM1NC43NyAxNjQzLjI1CiAgUSAzNTQuMDYgMTYzOS44MyAzNTQuMDIgMTYzMy4yMQogIFEgMzUzLjUwIDE1NTIuNTQgMzU0LjA4IDE0NzEuODcKICBRIDM1NC4xNCAxNDYyLjk2IDM1NS41NiAxNDU4LjQzCiAgUSAzNTguMzEgMTQ0OS42OSAzNjUuMTYgMTQ0My45MAogIFEgMzg3LjA4IDE0MjUuMzggNDEyLjEyIDE0MzguMDgKICBDIDUwOS4xMSAxNDg3LjI5IDYzMi4zMyAxNDg2LjE0IDcyOS41MyAxNDM4LjUzCiAgUSA3MzYuNjkgMTQzNS4wMiA3NDEuMDEgMTQzNC4xMAogIEMgNzU4Ljk2IDE0MzAuMjcgNzgwLjcyIDE0MzkuNTggNzg2LjY1IDE0NTguMTQKICBRIDc4OC4yMCAxNDYzLjAwIDc4OC4yOCAxNDc0LjUzCiAgUSA3ODkuMDMgMTU5Mi4yMyA3ODguMzAgMTYzOS43NQogIFEgNzg4LjI2IDE2NDIuNjIgNzg2LjQ4IDE2NDcuMzkKICBDIDc3OS4xOCAxNjY3LjA2IDc1Mi4wNSAxNjc3LjQwIDczMy4zNyAxNjY3Ljc4CiAgQyA3MjguMTkgMTY2NS4xMSA3MjEuNTYgMTY1OS4wMCA3MTcuNjkgMTY1NS4zMQogIFEgNjk4Ljg2IDE2MzcuMzkgNjgwLjI4IDE2MTkuMzYKICBBIDAuNTAgMC41MCAwLjAgMCAwIDY3OS40OSAxNjE5LjQ5CiAgQyA2NTUuODUgMTY2NC42MSA2MzIuODkgMTcxMC4yMCA2MDguNzcgMTc1NS4xMwogIFEgNjAyLjU0IDE3NjYuNzQgNjAyLjM3IDE3NjYuOTkKICBDIDU5MC4yNCAxNzg1LjQzIDU1OS41NiAxNzg2LjkyIDU0NC4yNSAxNzcxLjg5CiAgUSA1NDAuODcgMTc2OC41OCA1MzYuNDIgMTc2MC4yNwogIEMgNTExLjQ0IDE3MTMuNjUgNDg3LjU5IDE2NjYuNDQgNDYyLjgzIDE2MTkuNzkKICBaIgovPgo8L3N2Zz4K",url:"https://logrocket.com",disabled:!0}],XI=AM.map(M=>M.flag),$I=(M=>(M.Frontend="Frontend",M.Backend="Backend",M.Tools="Tools",M))($I||{}),KI=[{label:"Framework",group:"Frontend"},{label:"CSS",group:"Frontend"},{label:"Auth",group:"Backend"},{label:"RPC",group:"Backend"},{label:"Server",group:"Backend"},{label:"Database",group:"Backend"},{label:"Hosting",group:"Backend"},{label:"Linter",multiple:!0,group:"Tools"},{label:"Analytics",group:"Tools"},{label:"Error tracking",group:"Tools"}],TM=(M=>(M[M.ERROR_AUTH_R_SERVER=0]="ERROR_AUTH_R_SERVER",M[M.INFO_HATTIP=1]="INFO_HATTIP",M))(TM||{});function _I(M,I,N){const i=Array.from(XM(N));return j=>j.has(I)&&!i.every(e=>j.has(e))&&M}function qI(M,I){return N=>N.has(I)&&M}function XM(M){const I=new Set;for(const N of M)XI.includes(N)&&I.add(AM.find(i=>i.flag===N).category),I.add(N);return I}var MN=[_I(0,"Auth",["Server"]),qI(1,"hattip")];function IN(M,I){const N=XM(M),i=[];for(const j of MN){const e=j(N);typeof e=="number"&&(e in I?i.push(I[e]):console.warn("No handler defined for rule",e))}return i}const NN=cM('A Server is required when using Auth. Check Vike documentation.
  • Either pick a server (Express.js / H3 / ...) or unselect '),iN=cM("HatTip is an experimental project. Prefer H3 or Express for production use");function jN(M){return{type:"error",value:M}}function eN(M){return{type:"info",value:M}}const tN={[TM.ERROR_AUTH_R_SERVER]:jN(()=>{const{selectedFeatures:M}=fM($M),I=o(()=>{var N;return(N=M().filter(i=>i.category==="Auth"))==null?void 0:N[0].label});return(()=>{const N=$(NN),i=N.firstChild,j=i.nextSibling,e=j.nextSibling,t=e.nextSibling,g=t.nextSibling,L=g.nextSibling,D=L.nextSibling,u=D.firstChild,y=u.firstChild,T=y.nextSibling;return nM(T,I),N})()}),[TM.INFO_HATTIP]:eN(()=>$(iN))};function gN(){const M=AM.map(D=>({...D,alt:D.disabled?"Coming soon":void 0,selected:!1})),[I,N]=FM(M);function i(D,u,y){var n;((n=KI.find(l=>l.label===D))==null?void 0:n.multiple)||jM(()=>N(l=>l.category===D,"selected",!1)),N(l=>l.flag===u,"selected",y)}const j=o(()=>I.filter(D=>D.selected)),e=o(()=>j().map(D=>D.flag));function t(D){jM(()=>{for(const u of M)if(D.includes(u.category)){const y=M.findIndex(T=>T.category===u.category);N(T=>T.category===u.category,"selected",(T,[n,l])=>l===y)}else D.includes(u.flag)?N(y=>y.flag===u.flag,"selected",!0):N(y=>y.flag===u.flag,"selected",!1)})}const g=o(()=>j().map(D=>D.flag)),L=o(()=>{const D=IN(g(),tN);return{size:D.length,error:D.filter(u=>u.type==="error").map(u=>u.value),warning:D.filter(u=>u.type==="warning").map(u=>u.value),info:D.filter(u=>u.type==="info").map(u=>u.value)}});return{selectedFeaturesFlags:e,selectFeature:i,selectedFeatures:j,currentFeatures:I,selectPreset:t,selectedFlags:g,rules:L}}const $M=YM(void 0);function uN(M){const I=gN();return f($M.Provider,{value:I,get children(){return M.children}})}const DN=cM('
    ');function lN(M){return f(uN,{get children(){const I=$(DN);return nM(I,()=>M.children),I}})}export{pM as D,LN as F,lN as L,$M as S,SI as a,II as b,Q as c,o as d,f as e,nN as f,$ as g,cN as h,nM as i,YI as j,dI as k,$I as l,KI as m,TN as n,zN as o,yN as p,aI as q,AN as r,uM as s,cM as t,fM as u}; +const c={context:void 0,registry:void 0};function zM(M){c.context=M}function _M(){return{...c.context,id:`${c.context.id}${c.context.count++}-`,count:0}}const qM=(M,I)=>M===I,E=Symbol("solid-proxy"),iM=Symbol("solid-track"),V={equals:qM};let MI=UM;const h=1,F=2,OM={owned:null,cleanups:null,context:null,owner:null};var A=null;let IM=null,z=null,s=null,m=null,_=0;function J(M,I){const N=z,i=A,j=M.length===0,e=I===void 0?i:I,g=j?OM:{owned:null,cleanups:null,context:e?e.context:null,owner:e},t=j?M:()=>M(()=>w(()=>MM(g)));A=g,z=null;try{return p(t,!0)}finally{z=N,A=i}}function dM(M,I){I=I?Object.assign({},V,I):V;const N={value:M,observers:null,observerSlots:null,comparator:I.equals||void 0},i=j=>(typeof j=="function"&&(j=j(N.value)),mM(N,j));return[bM.bind(N),i]}function Q(M,I,N){const i=QM(M,I,!1,h);q(i)}function o(M,I,N){N=N?Object.assign({},V,N):V;const i=QM(M,I,!0,0);return i.observers=null,i.observerSlots=null,i.comparator=N.equals||void 0,q(i),bM.bind(i)}function jM(M){return p(M,!1)}function w(M){if(z===null)return M();const I=z;z=null;try{return M()}finally{z=I}}function II(M){return A===null||(A.cleanups===null?A.cleanups=[M]:A.cleanups.push(M)),M}function eM(){return z}function YM(M,I){const N=Symbol("context");return{id:N,Provider:gI(N),defaultValue:M}}function fM(M){return A&&A.context&&A.context[M.id]!==void 0?A.context[M.id]:M.defaultValue}function NI(M){const I=o(M),N=o(()=>gM(I()));return N.toArray=()=>{const i=N();return Array.isArray(i)?i:i!=null?[i]:[]},N}function bM(){if(this.sources&&this.state)if(this.state===h)q(this);else{const M=s;s=null,p(()=>X(this),!1),s=M}if(z){const M=this.observers?this.observers.length:0;z.sources?(z.sources.push(this),z.sourceSlots.push(M)):(z.sources=[this],z.sourceSlots=[M]),this.observers?(this.observers.push(z),this.observerSlots.push(z.sources.length-1)):(this.observers=[z],this.observerSlots=[z.sources.length-1])}return this.value}function mM(M,I,N){let i=M.value;return(!M.comparator||!M.comparator(i,I))&&(M.value=I,M.observers&&M.observers.length&&p(()=>{for(let j=0;j1e6)throw s=[],new Error},!1)),I}function q(M){if(!M.fn)return;MM(M);const I=A,N=z,i=_;z=A=M,iI(M,M.value,i),z=N,A=I}function iI(M,I,N){let i;try{i=M.fn(I)}catch(j){return M.pure&&(M.state=h,M.owned&&M.owned.forEach(MM),M.owned=null),M.updatedAt=N+1,kM(j)}(!M.updatedAt||M.updatedAt<=N)&&(M.updatedAt!=null&&"observers"in M?mM(M,i):M.value=i,M.updatedAt=N)}function QM(M,I,N,i=h,j){const e={fn:M,state:i,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:I,owner:A,context:A?A.context:null,pure:N};return A===null||A!==OM&&(A.owned?A.owned.push(e):A.owned=[e]),e}function hM(M){if(M.state===0)return;if(M.state===F)return X(M);if(M.suspense&&w(M.suspense.inFallback))return M.suspense.effects.push(M);const I=[M];for(;(M=M.owner)&&(!M.updatedAt||M.updatedAt<_);)M.state&&I.push(M);for(let N=I.length-1;N>=0;N--)if(M=I[N],M.state===h)q(M);else if(M.state===F){const i=s;s=null,p(()=>X(M,I[0]),!1),s=i}}function p(M,I){if(s)return M();let N=!1;I||(s=[]),m?N=!0:m=[],_++;try{const i=M();return jI(N),i}catch(i){N||(m=null),s=null,kM(i)}}function jI(M){if(s&&(UM(s),s=null),M)return;const I=m;m=null,I.length&&p(()=>MI(I),!1)}function UM(M){for(let I=0;I=0;I--)MM(M.owned[I]);M.owned=null}if(M.cleanups){for(I=M.cleanups.length-1;I>=0;I--)M.cleanups[I]();M.cleanups=null}M.state=0}function eI(M){return M instanceof Error?M:new Error(typeof M=="string"?M:"Unknown error",{cause:M})}function kM(M,I=A){throw eI(M)}function gM(M){if(typeof M=="function"&&!M.length)return gM(M());if(Array.isArray(M)){const I=[];for(let N=0;Nj=w(()=>(A.context={...A.context,[M]:i.value},NI(()=>i.children))),void 0),j}}const tI=Symbol("fallback");function lM(M){for(let I=0;I1?[]:null;return II(()=>lM(e)),()=>{let L=M()||[],D,u;return L[iM],w(()=>{let T=L.length,n,l,x,a,O,r,S,d,U;if(T===0)g!==0&&(lM(e),e=[],i=[],j=[],g=0,t&&(t=[])),N.fallback&&(i=[tI],j[0]=J(KM=>(e[0]=KM,N.fallback())),g=1);else if(g===0){for(j=new Array(T),u=0;u=r&&d>=r&&i[S]===L[d];S--,d--)x[d]=j[S],a[d]=e[S],t&&(O[d]=t[S]);for(n=new Map,l=new Array(d+1),u=d;u>=r;u--)U=L[u],D=n.get(U),l[u]=D===void 0?-1:D,n.set(U,u);for(D=r;D<=S;D++)U=i[D],u=n.get(U),u!==void 0&&u!==-1?(x[u]=j[D],a[u]=e[D],t&&(O[u]=t[D]),u=l[u],n.set(U,u)):e[D]();for(u=r;uM(I||{}));return zM(N),i}return w(()=>M(I||{}))}function B(){return!0}const tM={get(M,I,N){return I===E?N:M.get(I)},has(M,I){return I===E?!0:M.has(I)},set:B,deleteProperty:B,getOwnPropertyDescriptor(M,I){return{configurable:!0,enumerable:!0,get(){return M.get(I)},set:B,deleteProperty:B}},ownKeys(M){return M.keys()}};function NM(M){return(M=typeof M=="function"?M():M)?M:{}}function LI(){for(let M=0,I=this.length;M=0;g--){const t=NM(M[g])[e];if(t!==void 0)return t}},has(e){for(let g=M.length-1;g>=0;g--)if(e in NM(M[g]))return!0;return!1},keys(){const e=[];for(let g=0;g=0;e--){const g=M[e];if(!g)continue;const t=Object.getOwnPropertyNames(g);for(let L=0,D=t.length;Ly.value):N[u]===void 0&&(N[u]=y.value)}}}return N}function TI(M,...I){if(E in M){const j=new Set(I.length>1?I.flat():I[0]),e=I.map(g=>new Proxy({get(t){return g.includes(t)?M[t]:void 0},has(t){return g.includes(t)&&t in M},keys(){return g.filter(t=>t in M)}},tM));return e.push(new Proxy({get(g){return j.has(g)?void 0:M[g]},has(g){return j.has(g)?!1:g in M},keys(){return Object.keys(M).filter(g=>!j.has(g))}},tM)),e}const N={},i=I.map(()=>({}));for(const j of Object.getOwnPropertyNames(M)){const e=Object.getOwnPropertyDescriptor(M,j),g=!e.get&&!e.set&&e.enumerable&&e.writable&&e.configurable;let t=!1,L=0;for(const D of I)D.includes(j)&&(t=!0,g?i[L][j]=e.value:Object.defineProperty(i[L],j,e)),++L;t||(g?N[j]=e.value:Object.defineProperty(N,j,e))}return[...i,N]}const cI=M=>`Stale read from <${M}>.`;function LN(M){const I="fallback"in M&&{fallback:()=>M.fallback};return o(uI(()=>M.each,M.children,I||void 0))}function yN(M){const I=M.keyed,N=o(()=>M.when,void 0,{equals:(i,j)=>I?i===j:!i==!j});return o(()=>{const i=N();if(i){const j=M.children;return typeof j=="function"&&j.length>0?w(()=>j(I?i:()=>{if(!w(N))throw cI("Show");return M.when})):j}return M.fallback},void 0,void 0)}const nI=["allowfullscreen","async","autofocus","autoplay","checked","controls","default","disabled","formnovalidate","hidden","indeterminate","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","seamless","selected"],AI=new Set(["className","value","readOnly","formNoValidate","isMap","noModule","playsInline",...nI]),zI=new Set(["innerHTML","textContent","innerText","children"]),lI=Object.assign(Object.create(null),{className:"class",htmlFor:"for"}),sI=Object.assign(Object.create(null),{class:"className",formnovalidate:{$:"formNoValidate",BUTTON:1,INPUT:1},ismap:{$:"isMap",IMG:1},nomodule:{$:"noModule",SCRIPT:1},playsinline:{$:"playsInline",VIDEO:1},readonly:{$:"readOnly",INPUT:1,TEXTAREA:1}});function oI(M,I){const N=sI[M];return typeof N=="object"?N[I]?N.$:void 0:N}const xI=new Set(["beforeinput","click","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"]),CI=new Set(["altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignObject","g","glyph","glyphRef","hkern","image","line","linearGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","set","stop","svg","switch","symbol","text","textPath","tref","tspan","use","view","vkern"]),EI={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"};function wI(M,I,N){let i=N.length,j=I.length,e=i,g=0,t=0,L=I[j-1].nextSibling,D=null;for(;gu-t){const l=I[g];for(;t{j=e,I===document?M():nM(I,M(),I.firstChild?null:void 0,N)},i.owner),()=>{j(),I.textContent=""}}function cM(M,I,N){let i;const j=()=>{const g=document.createElement("template");return g.innerHTML=M,N?g.content.firstChild.firstChild:g.content.firstChild},e=I?()=>w(()=>document.importNode(i||(i=j()),!0)):()=>(i||(i=j())).cloneNode(!0);return e.cloneNode=e,e}function aI(M,I=window.document){const N=I[sM]||(I[sM]=new Set);for(let i=0,j=M.length;ij.call(M,N[1],e))}else M.addEventListener(I,N)}function dI(M,I,N={}){const i=Object.keys(I||{}),j=Object.keys(N);let e,g;for(e=0,g=j.length;ej.children=G(M,I.children,j.children)),Q(()=>I.ref&&I.ref(M)),Q(()=>bI(M,I,N,!0,j,!0)),j}function cN(M,I,N){return w(()=>M(I,N))}function nM(M,I,N,i){if(N!==void 0&&!i&&(i=[]),typeof I!="function")return G(M,I,i,N);Q(j=>G(M,I(),j,N),i)}function bI(M,I,N,i,j={},e=!1){I||(I={});for(const g in j)if(!(g in I)){if(g==="children")continue;j[g]=xM(M,g,null,j[g],N,e)}for(const g in I){if(g==="children"){i||G(M,I.children);continue}const t=I[g];j[g]=xM(M,g,t,j[g],N,e)}}function mI(M,I,N={}){c.completed=globalThis._$HY.completed,c.events=globalThis._$HY.events,c.load=j=>globalThis._$HY.r[j],c.has=j=>j in globalThis._$HY.r,c.gather=j=>EM(I,j),c.registry=new Map,c.context={id:N.renderId||"",count:0},EM(I,N.renderId);const i=GM(M,I,[...I.childNodes],N);return c.context=null,i}function $(M){let I,N;return!c.context||!(I=c.registry.get(N=hI()))?M():(c.completed&&c.completed.add(I),c.registry.delete(N),I)}function nN(M){let I=M,N=0,i=[];if(c.context)for(;I;){if(I.nodeType===8){const j=I.nodeValue;if(j==="$")N++;else if(j==="/"){if(N===0)return[I,i];N--}}i.push(I),I=I.nextSibling}return[I,i]}function AN(){c.events&&!c.events.queued&&(queueMicrotask(()=>{const{completed:M,events:I}=c;for(I.queued=!1;I.length;){const[N,i]=I[0];if(!M.has(N))return;PM(i),I.shift()}}),c.events.queued=!0)}function QI(M){return M.toLowerCase().replace(/-([a-z])/g,(I,N)=>N.toUpperCase())}function oM(M,I,N){const i=I.trim().split(/\s+/);for(let j=0,e=i.length;j-1&&EI[I.split(":")[0]];y?rI(M,y,I,N):uM(M,lI[I]||I,N)}return N}function PM(M){const I=`$$${M.type}`;let N=M.composedPath&&M.composedPath()[0]||M.target;for(M.target!==N&&Object.defineProperty(M,"target",{configurable:!0,value:N}),Object.defineProperty(M,"currentTarget",{configurable:!0,get(){return N||document}}),c.registry&&!c.done&&(c.done=_$HY.done=!0);N;){const i=N[I];if(i&&!N.disabled){const j=N[`${I}Data`];if(j!==void 0?i.call(N,j,M):i.call(N,M),M.cancelBubble)return}N=N._$host||N.parentNode||N.host}}function G(M,I,N,i,j){if(c.context){!N&&(N=[...M.childNodes]);let t=[];for(let L=0;L{let t=I();for(;typeof t=="function";)t=t();N=G(M,t,N,i)}),()=>N;if(Array.isArray(I)){const t=[],L=N&&Array.isArray(N);if(DM(t,I,N,j))return Q(()=>N=G(M,t,N,i,!0)),()=>N;if(c.context){if(!t.length)return N;if(i===void 0)return[...M.childNodes];let D=t[0],u=[D];for(;(D=D.nextSibling)!==i;)u.push(D);return N=u}if(t.length===0){if(N=Z(M,N,i),g)return N}else L?N.length===0?CM(M,t,i):wI(M,N,t):(N&&Z(M),CM(M,t));N=t}else if(I.nodeType){if(c.context&&I.parentNode)return N=g?[I]:I;if(Array.isArray(N)){if(g)return N=Z(M,N,i,I);Z(M,N,null,I)}else N==null||N===""||!M.firstChild?M.appendChild(I):M.replaceChild(I,M.firstChild);N=I}}return N}function DM(M,I,N,i){let j=!1;for(let e=0,g=I.length;e=0;g--){const t=I[g];if(j!==t){const L=t.parentNode===M;!e&&!g?L?M.replaceChild(j,t):M.insertBefore(j,N):L&&t.remove()}else e=!0}}else M.insertBefore(j,N);return[j]}function EM(M,I){const N=M.querySelectorAll("*[data-hk]");for(let i=0;i(DI(),mI(...M));function pM(M){const[I,N]=TI(M,["component"]),i=o(()=>I.component);return o(()=>{const j=i();switch(typeof j){case"function":return w(()=>j(N));case"string":const e=CI.has(j),g=c.context?$():ZI(j,e);return fI(g,N,e),g}})}function WI(M,I){const N=globalThis.__vite_plugin_ssr=globalThis.__vite_plugin_ssr||{};return N[M]=N[M]||I}const{Context:RM}=WI("PageContextProvider.ts",{Context:YM()});function GI(M){if(!M.pageContext)throw new Error("Argument pageContext missing");return f(RM.Provider,{get value(){return M.pageContext},get children(){return M.children}})}function HM(){const M=fM(RM);if(!M)throw new Error(" is needed for being able to use usePageContext()");return M}const LM=Symbol("store-raw"),W=Symbol("store-node"),Y=Symbol("store-has"),BM=Symbol("store-self");function vM(M){let I=M[E];if(!I&&(Object.defineProperty(M,E,{value:I=new Proxy(M,RI)}),!Array.isArray(M))){const N=Object.keys(M),i=Object.getOwnPropertyDescriptors(M);for(let j=0,e=N.length;jM[E][I]),N}function JM(M){eM()&&H(K(M,W),BM)()}function pI(M){return JM(M),Reflect.ownKeys(M)}const RI={get(M,I,N){if(I===LM)return M;if(I===E)return N;if(I===iM)return JM(M),N;const i=K(M,W),j=i[I];let e=j?j():M[I];if(I===W||I===Y||I==="__proto__")return e;if(!j){const g=Object.getOwnPropertyDescriptor(M,I);eM()&&(typeof e!="function"||M.hasOwnProperty(I))&&!(g&&g.get)&&(e=H(i,I,e)())}return b(e)?vM(e):e},has(M,I){return I===LM||I===E||I===iM||I===W||I===Y||I==="__proto__"?!0:(eM()&&H(K(M,Y),I)(),I in M)},set(){return!0},deleteProperty(){return!0},ownKeys:pI,getOwnPropertyDescriptor:PI};function C(M,I,N,i=!1){if(!i&&M[I]===N)return;const j=M[I],e=M.length;N===void 0?(delete M[I],M[Y]&&M[Y][I]&&j!==void 0&&M[Y][I].$()):(M[I]=N,M[Y]&&M[Y][I]&&j===void 0&&M[Y][I].$());let g=K(M,W),t;if((t=H(g,I,j))&&t.$(()=>N),Array.isArray(M)&&M.length!==e){for(let L=M.length;L1){i=I.shift();const g=typeof i,t=Array.isArray(M);if(Array.isArray(i)){for(let L=0;L1){R(M[i],I,[i].concat(N));return}j=M[i],N=[i].concat(N)}let e=I[0];typeof e=="function"&&(e=e(j,N),e===j)||i===void 0&&e==null||(e=P(e),i===void 0||b(j)&&b(e)&&!Array.isArray(e)?VM(j,e):C(M,i,e))}function FM(...[M,I]){const N=P(M||{}),i=Array.isArray(N),j=vM(N);function e(...g){jM(()=>{i&&g.length===1?HI(N,g[0]):R(N,g)})}return[j,e]}const yM=Symbol("store-root");function k(M,I,N,i,j){const e=I[N];if(M===e)return;if(N!==yM&&(!b(M)||!b(e)||j&&M[j]!==e[j])){C(I,N,M);return}if(Array.isArray(M)){if(M.length&&e.length&&(!i||j&&M[0]&&M[0][j]!=null)){let L,D,u,y,T,n,l,x;for(u=0,y=Math.min(e.length,M.length);u=u&&T>=u&&(e[y]===M[T]||j&&e[u]&&M[u]&&e[y][j]===M[T][j]);y--,T--)a[T]=e[y];if(u>T||u>y){for(D=u;D<=T;D++)C(e,D,M[D]);for(;DM.length&&C(e,"length",M.length);return}for(l=new Array(T+1),D=T;D>=u;D--)n=M[D],x=j&&n?n[j]:n,L=O.get(x),l[D]=L===void 0?-1:L,O.set(x,D);for(L=u;L<=y;L++)n=e[L],x=j&&n?n[j]:n,D=O.get(x),D!==void 0&&D!==-1&&(a[D]=e[L],D=l[D],O.set(x,D));for(D=u;DM.length&&C(e,"length",M.length);return}const g=Object.keys(M);for(let L=0,D=g.length;L{if(!b(e)||!b(j))return j;const g=k(j,{[yM]:e},yM,N,i);return g===void 0?e:g}}function vI(M){var j;if(M.title!==void 0)return M.title;const I=(j=M.configEntries.title)==null?void 0:j[0];if(!I)return null;const N=I.configValue;if(typeof N=="string")return N;if(!N)return null;const{configDefinedAt:i}=I;if(typeof N=="function"){const e=N(M);if(typeof e=="string")return e;if(e)throw new Error(i+" should return a string")}throw new Error(i+" should be a string or a function returning a string")}function wM(M){return f(GI,{pageContext:M,get children(){return f(JI,{get children(){return f(VI,{})}})}})}function JI(M){const I=HM();return f(pM,{get component(){return I.config.Layout??FI},get children(){return M.children}})}function VI(){const M=HM();return f(pM,yI({get component(){return M.Page}},()=>M.pageProps??{}))}function FI(M){return o(()=>M.children)}const[aM,rM]=FM({});let v,SM=!1;const zN=async M=>{if(SM){rM(BI(M));const I=vI(M);document.title=I||""}else{v&&v(),rM(M);const I=document.getElementById("page-view");I.innerHTML!==""&&M.isHydration?v=kI(()=>wM(aM),I):v=GM(()=>wM(aM),I),SM=!0}};var AM=[{category:"Framework",label:"SolidJS",flag:"solid",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjA4ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIyNTYgMjM5IDI1NiAyMzkiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ibG9nb3NTb2xpZGpzSWNvbjAiIHgxPSIyNy41IiB4Mj0iMTUyIiB5MT0iMyIgeTI9IjYzLjUiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQ5LjU2IDIzMy4xMikgc2NhbGUoMS42MTAwNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii4xIiBzdG9wLWNvbG9yPSIjNzZiM2UxIi8+PHN0b3Agb2Zmc2V0PSIuMyIgc3RvcC1jb2xvcj0iI2RjZjJmZCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzc2YjNlMSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsb2dvc1NvbGlkanNJY29uMSIgeDE9Ijk1LjgiIHgyPSI3NCIgeTE9IjMyLjYiIHkyPSIxMDUuMiIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgyNDkuNTYgMjMzLjEyKSBzY2FsZSgxLjYxMDA2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzc2YjNlMSIvPjxzdG9wIG9mZnNldD0iLjUiIHN0b3AtY29sb3I9IiM0Mzc3YmIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMxZjNiNzciLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibG9nb3NTb2xpZGpzSWNvbjIiIHgxPSIxOC40IiB4Mj0iMTQ0LjMiIHkxPSI2NC4yIiB5Mj0iMTQ5LjgiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQ5LjU2IDIzMy4xMikgc2NhbGUoMS42MTAwNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzMTVhYTkiLz48c3RvcCBvZmZzZXQ9Ii41IiBzdG9wLWNvbG9yPSIjNTE4YWM4Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMzE1YWE5Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxvZ29zU29saWRqc0ljb24zIiB4MT0iNzUuMiIgeDI9IjI0LjQiIHkxPSI3NC41IiB5Mj0iMjYwLjgiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQ5LjU2IDIzMy4xMikgc2NhbGUoMS42MTAwNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM0Mzc3YmIiLz48c3RvcCBvZmZzZXQ9Ii41IiBzdG9wLWNvbG9yPSIjMWEzMzZiIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMWEzMzZiIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBhdGggZmlsbD0iIzc2YjNlMSIgZD0iTTUxMiAyODkuNDcycy04NS4zMzMtNjIuNzkxLTE1MS4zNDctNDguMzAxbC00LjgyOSAxLjYxYy05LjY2IDMuMjIxLTE3LjcxMSA4LjA1LTIyLjU0MiAxNC40OTFsLTMuMjE5IDQuODI5bC0yNC4xNTIgNDEuODYybDQxLjg2MyA4LjA1MWMxNy43MSAxMS4yNyA0MC4yNTEgMTYuMTAxIDYxLjE4MiAxMS4yN2w3NC4wNjMgMTQuNDkxTDUxMiAyODkuNDcyWiIvPjxwYXRoIGZpbGw9InVybCgjbG9nb3NTb2xpZGpzSWNvbjApIiBkPSJNNTEyIDI4OS40NzJzLTg1LjMzMy02Mi43OTEtMTUxLjM0Ny00OC4zMDFsLTQuODI5IDEuNjFjLTkuNjYgMy4yMjEtMTcuNzExIDguMDUtMjIuNTQyIDE0LjQ5MWwtMy4yMTkgNC44MjlsLTI0LjE1MiA0MS44NjJsNDEuODYzIDguMDUxYzE3LjcxIDExLjI3IDQwLjI1MSAxNi4xMDEgNjEuMTgyIDExLjI3bDc0LjA2MyAxNC40OTFMNTEyIDI4OS40NzJaIiBvcGFjaXR5PSIuMyIvPjxwYXRoIGZpbGw9IiM1MThhYzgiIGQ9Im0zMzMuMjgyIDI4OS40NzJsLTYuNDM5IDEuNjExYy0yNy4zNzEgOC4wNS0zNS40MjEgMzMuODExLTIwLjkzMiA1Ni4zNTJjMTYuMTAxIDIwLjkzMSA0OS45MTMgMzIuMjAxIDc3LjI4NCAyNC4xNTFsOTkuODI0LTMzLjgxMXMtODUuMzM0LTYyLjc5Mi0xNDkuNzM3LTQ4LjMwM1oiLz48cGF0aCBmaWxsPSJ1cmwoI2xvZ29zU29saWRqc0ljb24xKSIgZD0ibTMzMy4yODIgMjg5LjQ3MmwtNi40MzkgMS42MTFjLTI3LjM3MSA4LjA1LTM1LjQyMSAzMy44MTEtMjAuOTMyIDU2LjM1MmMxNi4xMDEgMjAuOTMxIDQ5LjkxMyAzMi4yMDEgNzcuMjg0IDI0LjE1MWw5OS44MjQtMzMuODExcy04NS4zMzQtNjIuNzkyLTE0OS43MzctNDguMzAzWiIgb3BhY2l0eT0iLjMiLz48cGF0aCBmaWxsPSJ1cmwoI2xvZ29zU29saWRqc0ljb24yKSIgZD0iTTQ2NS4zMDggMzYxLjkyNWMtMTguNDM5LTIzLjAzNi00OS4wMDgtMzIuNTg4LTc3LjI4My0yNC4xNWwtOTkuODIzIDMyLjIwMUwyNTYgNDI2LjMyOGwxODAuMzI3IDMwLjU5MmwzMi4yMDEtNTcuOTYzYzYuNDQxLTExLjI3MSA0LjgzMS0yNC4xNS0zLjIyLTM3LjAzMloiLz48cGF0aCBmaWxsPSJ1cmwoI2xvZ29zU29saWRqc0ljb24zKSIgZD0iTTQzMy4xMDYgNDE4LjI3N2MtMTguNDM5LTIzLjAzNi00OS4wMDYtMzIuNTg4LTc3LjI4Mi0yNC4xNUwyNTYgNDI2LjMyOHM4NS4zMzMgNjQuNDAyIDE1MS4zNDYgNDguMzAzbDQuODMtMS42MTJjMjcuMzcxLTguMDQ5IDM3LjAzMS0zMy44MSAyMC45My01NC43NDJaIi8+PC9zdmc+",url:"https://www.solidjs.com"},{category:"Framework",label:"React",flag:"react",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjEzZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyOCI+PHBhdGggZmlsbD0iIzAwRDhGRiIgZD0iTTIxMC40ODMgNzMuODI0YTE3MS40OSAxNzEuNDkgMCAwIDAtOC4yNC0yLjU5N2MuNDY1LTEuOS44OTMtMy43NzcgMS4yNzMtNS42MjFjNi4yMzgtMzAuMjgxIDIuMTYtNTQuNjc2LTExLjc2OS02Mi43MDhjLTEzLjM1NS03LjctMzUuMTk2LjMyOS01Ny4yNTQgMTkuNTI2YTE3MS4yMyAxNzEuMjMgMCAwIDAtNi4zNzUgNS44NDhhMTU1Ljg2NiAxNTUuODY2IDAgMCAwLTQuMjQxLTMuOTE3QzEwMC43NTkgMy44MjkgNzcuNTg3LTQuODIyIDYzLjY3MyAzLjIzM0M1MC4zMyAxMC45NTcgNDYuMzc5IDMzLjg5IDUxLjk5NSA2Mi41ODhhMTcwLjk3NCAxNzAuOTc0IDAgMCAwIDEuODkyIDguNDhjLTMuMjguOTMyLTYuNDQ1IDEuOTI0LTkuNDc0IDIuOThDMTcuMzA5IDgzLjQ5OCAwIDk4LjMwNyAwIDExMy42NjhjMCAxNS44NjUgMTguNTgyIDMxLjc3OCA0Ni44MTIgNDEuNDI3YTE0NS41MiAxNDUuNTIgMCAwIDAgNi45MjEgMi4xNjVhMTY3LjQ2NyAxNjcuNDY3IDAgMCAwLTIuMDEgOS4xMzhjLTUuMzU0IDI4LjItMS4xNzMgNTAuNTkxIDEyLjEzNCA1OC4yNjZjMTMuNzQ0IDcuOTI2IDM2LjgxMi0uMjIgNTkuMjczLTE5Ljg1NWExNDUuNTY3IDE0NS41NjcgMCAwIDAgNS4zNDItNC45MjNhMTY4LjA2NCAxNjguMDY0IDAgMCAwIDYuOTIgNi4zMTRjMjEuNzU4IDE4LjcyMiA0My4yNDYgMjYuMjgyIDU2LjU0IDE4LjU4NmMxMy43MzEtNy45NDkgMTguMTk0LTMyLjAwMyAxMi40LTYxLjI2OGExNDUuMDE2IDE0NS4wMTYgMCAwIDAtMS41MzUtNi44NDJjMS42Mi0uNDggMy4yMS0uOTc0IDQuNzYtMS40ODhjMjkuMzQ4LTkuNzIzIDQ4LjQ0My0yNS40NDMgNDguNDQzLTQxLjUyYzAtMTUuNDE3LTE3Ljg2OC0zMC4zMjYtNDUuNTE3LTM5Ljg0NFptLTYuMzY1IDcwLjk4NGMtMS40LjQ2My0yLjgzNi45MS00LjMgMS4zNDVjLTMuMjQtMTAuMjU3LTcuNjEyLTIxLjE2My0xMi45NjMtMzIuNDMyYzUuMTA2LTExIDkuMzEtMjEuNzY3IDEyLjQ1OS0zMS45NTdjMi42MTkuNzU4IDUuMTYgMS41NTcgNy42MSAyLjRjMjMuNjkgOC4xNTYgMzguMTQgMjAuMjEzIDM4LjE0IDI5LjUwNGMwIDkuODk2LTE1LjYwNiAyMi43NDMtNDAuOTQ2IDMxLjE0Wm0tMTAuNTE0IDIwLjgzNGMyLjU2MiAxMi45NCAyLjkyNyAyNC42NCAxLjIzIDMzLjc4N2MtMS41MjQgOC4yMTktNC41OSAxMy42OTgtOC4zODIgMTUuODkzYy04LjA2NyA0LjY3LTI1LjMyLTEuNC00My45MjctMTcuNDEyYTE1Ni43MjYgMTU2LjcyNiAwIDAgMS02LjQzNy01Ljg3YzcuMjE0LTcuODg5IDE0LjQyMy0xNy4wNiAyMS40NTktMjcuMjQ2YzEyLjM3Ni0xLjA5OCAyNC4wNjgtMi44OTQgMzQuNjcxLTUuMzQ1YTEzNC4xNyAxMzQuMTcgMCAwIDEgMS4zODYgNi4xOTNaTTg3LjI3NiAyMTQuNTE1Yy03Ljg4MiAyLjc4My0xNC4xNiAyLjg2My0xNy45NTUuNjc1Yy04LjA3NS00LjY1Ny0xMS40MzItMjIuNjM2LTYuODUzLTQ2Ljc1MmExNTYuOTIzIDE1Ni45MjMgMCAwIDEgMS44NjktOC40OTljMTAuNDg2IDIuMzIgMjIuMDkzIDMuOTg4IDM0LjQ5OCA0Ljk5NGM3LjA4NCA5Ljk2NyAxNC41MDEgMTkuMTI4IDIxLjk3NiAyNy4xNWExMzQuNjY4IDEzNC42NjggMCAwIDEtNC44NzcgNC40OTJjLTkuOTMzIDguNjgyLTE5Ljg4NiAxNC44NDItMjguNjU4IDE3Ljk0Wk01MC4zNSAxNDQuNzQ3Yy0xMi40ODMtNC4yNjctMjIuNzkyLTkuODEyLTI5Ljg1OC0xNS44NjNjLTYuMzUtNS40MzctOS41NTUtMTAuODM2LTkuNTU1LTE1LjIxNmMwLTkuMzIyIDEzLjg5Ny0yMS4yMTIgMzcuMDc2LTI5LjI5M2MyLjgxMy0uOTggNS43NTctMS45MDUgOC44MTItMi43NzNjMy4yMDQgMTAuNDIgNy40MDYgMjEuMzE1IDEyLjQ3NyAzMi4zMzJjLTUuMTM3IDExLjE4LTkuMzk5IDIyLjI0OS0xMi42MzQgMzIuNzkyYTEzNC43MTggMTM0LjcxOCAwIDAgMS02LjMxOC0xLjk3OVptMTIuMzc4LTg0LjI2Yy00LjgxMS0yNC41ODctMS42MTYtNDMuMTM0IDYuNDI1LTQ3Ljc4OWM4LjU2NC00Ljk1OCAyNy41MDIgMi4xMTEgNDcuNDYzIDE5LjgzNWExNDQuMzE4IDE0NC4zMTggMCAwIDEgMy44NDEgMy41NDVjLTcuNDM4IDcuOTg3LTE0Ljc4NyAxNy4wOC0yMS44MDggMjYuOTg4Yy0xMi4wNCAxLjExNi0yMy41NjUgMi45MDgtMzQuMTYxIDUuMzA5YTE2MC4zNDIgMTYwLjM0MiAwIDAgMS0xLjc2LTcuODg3Wm0xMTAuNDI3IDI3LjI2OGEzNDcuOCAzNDcuOCAwIDAgMC03Ljc4NS0xMi44MDNjOC4xNjggMS4wMzMgMTUuOTk0IDIuNDA0IDIzLjM0MyA0LjA4Yy0yLjIwNiA3LjA3Mi00Ljk1NiAxNC40NjUtOC4xOTMgMjIuMDQ1YTM4MS4xNTEgMzgxLjE1MSAwIDAgMC03LjM2NS0xMy4zMjJabS00NS4wMzItNDMuODYxYzUuMDQ0IDUuNDY1IDEwLjA5NiAxMS41NjYgMTUuMDY1IDE4LjE4NmEzMjIuMDQgMzIyLjA0IDAgMCAwLTMwLjI1Ny0uMDA2YzQuOTc0LTYuNTU5IDEwLjA2OS0xMi42NTIgMTUuMTkyLTE4LjE4Wk04Mi44MDIgODcuODNhMzIzLjE2NyAzMjMuMTY3IDAgMCAwLTcuMjI3IDEzLjIzOGMtMy4xODQtNy41NTMtNS45MDktMTQuOTgtOC4xMzQtMjIuMTUyYzcuMzA0LTEuNjM0IDE1LjA5My0yLjk3IDIzLjIwOS0zLjk4NGEzMjEuNTI0IDMyMS41MjQgMCAwIDAtNy44NDggMTIuODk3Wm04LjA4MSA2NS4zNTJjLTguMzg1LS45MzYtMTYuMjkxLTIuMjAzLTIzLjU5My0zLjc5M2MyLjI2LTcuMyA1LjA0NS0xNC44ODUgOC4yOTgtMjIuNmEzMjEuMTg3IDMyMS4xODcgMCAwIDAgNy4yNTcgMTMuMjQ2YzIuNTk0IDQuNDggNS4yOCA4Ljg2OCA4LjAzOCAxMy4xNDdabTM3LjU0MiAzMS4wM2MtNS4xODQtNS41OTItMTAuMzU0LTExLjc3OS0xNS40MDMtMTguNDMzYzQuOTAyLjE5MiA5Ljg5OS4yOSAxNC45NzguMjljNS4yMTggMCAxMC4zNzYtLjExNyAxNS40NTMtLjM0M2MtNC45ODUgNi43NzQtMTAuMDE4IDEyLjk3LTE1LjAyOCAxOC40ODZabTUyLjE5OC01Ny44MTdjMy40MjIgNy44IDYuMzA2IDE1LjM0NSA4LjU5NiAyMi41MmMtNy40MjIgMS42OTQtMTUuNDM2IDMuMDU4LTIzLjg4IDQuMDcxYTM4Mi40MTcgMzgyLjQxNyAwIDAgMCA3Ljg1OS0xMy4wMjZhMzQ3LjQwMyAzNDcuNDAzIDAgMCAwIDcuNDI1LTEzLjU2NVptLTE2Ljg5OCA4LjEwMWEzNTguNTU3IDM1OC41NTcgMCAwIDEtMTIuMjgxIDE5LjgxNWEzMjkuNCAzMjkuNCAwIDAgMS0yMy40NDQuODIzYy03Ljk2NyAwLTE1LjcxNi0uMjQ4LTIzLjE3OC0uNzMyYTMxMC4yMDIgMzEwLjIwMiAwIDAgMS0xMi41MTMtMTkuODQ2aC4wMDFhMzA3LjQxIDMwNy40MSAwIDAgMS0xMC45MjMtMjAuNjI3YTMxMC4yNzggMzEwLjI3OCAwIDAgMSAxMC44OS0yMC42MzdsLS4wMDEuMDAxYTMwNy4zMTggMzA3LjMxOCAwIDAgMSAxMi40MTMtMTkuNzYxYzcuNjEzLS41NzYgMTUuNDItLjg3NiAyMy4zMS0uODc2SDEyOGM3LjkyNiAwIDE1Ljc0My4zMDMgMjMuMzU0Ljg4M2EzMjkuMzU3IDMyOS4zNTcgMCAwIDEgMTIuMzM1IDE5LjY5NWEzNTguNDg5IDM1OC40ODkgMCAwIDEgMTEuMDM2IDIwLjU0YTMyOS40NzIgMzI5LjQ3MiAwIDAgMS0xMSAyMC43MjJabTIyLjU2LTEyMi4xMjRjOC41NzIgNC45NDQgMTEuOTA2IDI0Ljg4MSA2LjUyIDUxLjAyNmMtLjM0NCAxLjY2OC0uNzMgMy4zNjctMS4xNSA1LjA5Yy0xMC42MjItMi40NTItMjIuMTU1LTQuMjc1LTM0LjIzLTUuNDA4Yy03LjAzNC0xMC4wMTctMTQuMzIzLTE5LjEyNC0yMS42NC0yNy4wMDhhMTYwLjc4OSAxNjAuNzg5IDAgMCAxIDUuODg4LTUuNGMxOC45LTE2LjQ0NyAzNi41NjQtMjIuOTQxIDQ0LjYxMi0xOC4zWk0xMjggOTAuODA4YzEyLjYyNSAwIDIyLjg2IDEwLjIzNSAyMi44NiAyMi44NnMtMTAuMjM1IDIyLjg2LTIyLjg2IDIyLjg2cy0yMi44Ni0xMC4yMzUtMjIuODYtMjIuODZzMTAuMjM1LTIyLjg2IDIyLjg2LTIyLjg2WiIvPjwvc3ZnPg==",url:"https://react.dev"},{category:"Framework",label:"Vue",flag:"vue",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjE2ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyMSI+PHBhdGggZmlsbD0iIzQxQjg4MyIgZD0iTTIwNC44IDBIMjU2TDEyOCAyMjAuOEwwIDBoOTcuOTJMMTI4IDUxLjJMMTU3LjQ0IDBoNDcuMzZaIi8+PHBhdGggZmlsbD0iIzQxQjg4MyIgZD0ibTAgMGwxMjggMjIwLjhMMjU2IDBoLTUxLjJMMTI4IDEzMi40OEw1MC41NiAwSDBaIi8+PHBhdGggZmlsbD0iIzM1NDk1RSIgZD0iTTUwLjU2IDBMMTI4IDEzMy4xMkwyMDQuOCAwaC00Ny4zNkwxMjggNTEuMkw5Ny45MiAwSDUwLjU2WiIvPjwvc3ZnPg==",url:"https://vuejs.org"},{category:"CSS",label:"TailwindCSS",flag:"tailwindcss",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjY3ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDE1NCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJsb2dvc1RhaWx3aW5kY3NzSWNvbjAiIHgxPSItMi43NzglIiB4Mj0iMTAwJSIgeTE9IjMyJSIgeTI9IjY3LjU1NiUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiMyMjk4QkQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwRUQ3QjUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cGF0aCBmaWxsPSJ1cmwoI2xvZ29zVGFpbHdpbmRjc3NJY29uMCkiIGQ9Ik0xMjggMEM5My44NjcgMCA3Mi41MzMgMTcuMDY3IDY0IDUxLjJDNzYuOCAzNC4xMzMgOTEuNzMzIDI3LjczMyAxMDguOCAzMmM5LjczNyAyLjQzNCAxNi42OTcgOS40OTkgMjQuNDAxIDE3LjMxOEMxNDUuNzUxIDYyLjA1NyAxNjAuMjc1IDc2LjggMTkyIDc2LjhjMzQuMTMzIDAgNTUuNDY3LTE3LjA2NyA2NC01MS4yYy0xMi44IDE3LjA2Ny0yNy43MzMgMjMuNDY3LTQ0LjggMTkuMmMtOS43MzctMi40MzQtMTYuNjk3LTkuNDk5LTI0LjQwMS0xNy4zMThDMTc0LjI0OSAxNC43NDMgMTU5LjcyNSAwIDEyOCAwWk02NCA3Ni44QzI5Ljg2NyA3Ni44IDguNTMzIDkzLjg2NyAwIDEyOGMxMi44LTE3LjA2NyAyNy43MzMtMjMuNDY3IDQ0LjgtMTkuMmM5LjczNyAyLjQzNCAxNi42OTcgOS40OTkgMjQuNDAxIDE3LjMxOEM4MS43NTEgMTM4Ljg1NyA5Ni4yNzUgMTUzLjYgMTI4IDE1My42YzM0LjEzMyAwIDU1LjQ2Ny0xNy4wNjcgNjQtNTEuMmMtMTIuOCAxNy4wNjctMjcuNzMzIDIzLjQ2Ny00NC44IDE5LjJjLTkuNzM3LTIuNDM0LTE2LjY5Ny05LjQ5OS0yNC40MDEtMTcuMzE4QzExMC4yNDkgOTEuNTQzIDk1LjcyNSA3Ni44IDY0IDc2LjhaIi8+PC9zdmc+",url:"https://tailwindcss.com"},{category:"Auth",label:"Auth.js",flag:"authjs",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0iIzg4ODg4OCIgZD0ibTUwLjAyNyAxMC40NTlsLS4wMTgtLjAzMmwtMzMuNjA2IDE5LjQwNGwuMDc2LjEzMnYyMi44OTNoLjAxNGMuMjg2IDE5LjExMSAxNC44NTkgMzQuNzU1IDMzLjUxOSAzNi43MThjMTguNjYtMS45NjIgMzMuMjM0LTE3LjYwNiAzMy41MTktMzYuNzE4VjI5Ljk1M2wuMDY2LS4xMTRsLTMzLjU3LTE5LjM4em0tLjAxNSA2OS4wOTdWNTEuNjc3SDI2LjQzNVYzNS42NTFMNTAuMDEyIDIyLjA0djI5LjYzN2gyMy41NjN2MS4xNzloLjAxN2MtLjI3OCAxMy41OTMtMTAuNDM5IDI0Ljc5OC0yMy41OCAyNi43eiIvPjwvc3ZnPg==",url:"https://authjs.dev"},{category:"Auth",label:"Auth0",flag:"auth0",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjllbSIgaGVpZ2h0PSIxZW0iIHZpZXdCb3g9IjAgMCAyNTYgMjg1Ij48cGF0aCBkPSJNMjIwLjQxMiAwaC05Mi40MTVsMjguNTYyIDg5LjAwNmg5Mi40MTZsLTc0Ljc3IDUzLjA3N2wyOC41NyA4OS41MTFjNDguMTI4LTM1LjA2IDYzLjg1NC04OC4xMiA0Ni4yMDgtMTQyLjU4OEwyMjAuNDEzIDBaTTcuMDE4IDg5LjAwNmg5Mi40MTZMMTI3Ljk5NyAwSDM1LjU4OUw3LjAxOSA4OS4wMDZjLTE3LjY1NSA1NC40NjgtMS45MiAxMDcuNTI5IDQ2LjIwNyAxNDIuNTg4bDI4LjU2My04OS41MWwtNzQuNzctNTMuMDc4Wm00Ni4yMDggMTQyLjU4OGw3NC43NyA1Mi45N2w3NC43Ny01Mi45N2wtNzQuNzctNTMuODQ3bC03NC43NyA1My44NDdaIi8+PC9zdmc+",url:"https://auth0.com",disabled:!0},{category:"Auth",label:"Firebase",flag:"firebase",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjczZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDM1MSI+PGRlZnM+PGZpbHRlciBpZD0ibG9nb3NGaXJlYmFzZTAiIHdpZHRoPSIyMDAlIiBoZWlnaHQ9IjIwMCUiIHg9Ii01MCUiIHk9Ii01MCUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCI+PGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dCbHVySW5uZXIxIiBzdGREZXZpYXRpb249IjE3LjUiLz48ZmVPZmZzZXQgaW49InNoYWRvd0JsdXJJbm5lcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0SW5uZXIxIi8+PGZlQ29tcG9zaXRlIGluPSJzaGFkb3dPZmZzZXRJbm5lcjEiIGluMj0iU291cmNlQWxwaGEiIGsyPSItMSIgazM9IjEiIG9wZXJhdG9yPSJhcml0aG1ldGljIiByZXN1bHQ9InNoYWRvd0lubmVySW5uZXIxIi8+PGZlQ29sb3JNYXRyaXggaW49InNoYWRvd0lubmVySW5uZXIxIiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMDYgMCIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImxvZ29zRmlyZWJhc2UxIiB3aWR0aD0iMjAwJSIgaGVpZ2h0PSIyMDAlIiB4PSItNTAlIiB5PSItNTAlIiBmaWx0ZXJVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPjxmZUdhdXNzaWFuQmx1ciBpbj0iU291cmNlQWxwaGEiIHJlc3VsdD0ic2hhZG93Qmx1cklubmVyMSIgc3RkRGV2aWF0aW9uPSIzLjUiLz48ZmVPZmZzZXQgZHg9IjEiIGR5PSItOSIgaW49InNoYWRvd0JsdXJJbm5lcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0SW5uZXIxIi8+PGZlQ29tcG9zaXRlIGluPSJzaGFkb3dPZmZzZXRJbm5lcjEiIGluMj0iU291cmNlQWxwaGEiIGsyPSItMSIgazM9IjEiIG9wZXJhdG9yPSJhcml0aG1ldGljIiByZXN1bHQ9InNoYWRvd0lubmVySW5uZXIxIi8+PGZlQ29sb3JNYXRyaXggaW49InNoYWRvd0lubmVySW5uZXIxIiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMDkgMCIvPjwvZmlsdGVyPjxwYXRoIGlkPSJsb2dvc0ZpcmViYXNlMiIgZD0ibTEuMjUzIDI4MC43MzJsMS42MDUtMy4xMzFsOTkuMzUzLTE4OC41MThsLTQ0LjE1LTgzLjQ3NUM1NC4zOTItMS4yODMgNDUuMDc0LjQ3NCA0My44NyA4LjE4OEwxLjI1MyAyODAuNzMyWiIvPjxwYXRoIGlkPSJsb2dvc0ZpcmViYXNlMyIgZD0ibTEzNC40MTcgMTQ4Ljk3NGwzMi4wMzktMzIuODEybC0zMi4wMzktNjEuMDA3Yy0zLjA0Mi01Ljc5MS0xMC40MzMtNi4zOTgtMTMuNDQzLS41OWwtMTcuNzA1IDM0LjEwOWwtLjUzIDEuNzQ0bDMxLjY3OCA1OC41NTZaIi8+PC9kZWZzPjxwYXRoIGZpbGw9IiNGRkMyNEEiIGQ9Im0wIDI4Mi45OThsMi4xMjMtMi45NzJMMTAyLjUyNyA4OS41MTJsLjIxMi0yLjAxN0w1OC40OCA0LjM1OEM1NC43Ny0yLjYwNiA0NC4zMy0uODQ1IDQzLjExNCA2Ljk1MUwwIDI4Mi45OThaIi8+PHVzZSBmaWxsPSIjRkZBNzEyIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhyZWY9IiNsb2dvc0ZpcmViYXNlMiIvPjx1c2UgZmlsdGVyPSJ1cmwoI2xvZ29zRmlyZWJhc2UwKSIgaHJlZj0iI2xvZ29zRmlyZWJhc2UyIi8+PHBhdGggZmlsbD0iI0Y0QkQ2MiIgZD0ibTEzNS4wMDUgMTUwLjM4bDMyLjk1NS0zMy43NWwtMzIuOTY1LTYyLjkzYy0zLjEyOS01Ljk1Ny0xMS44NjYtNS45NzUtMTQuOTYyIDBMMTAyLjQyIDg3LjI4N3YyLjg2bDMyLjU4NCA2MC4yMzNaIi8+PHVzZSBmaWxsPSIjRkZBNTBFIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhyZWY9IiNsb2dvc0ZpcmViYXNlMyIvPjx1c2UgZmlsdGVyPSJ1cmwoI2xvZ29zRmlyZWJhc2UxKSIgaHJlZj0iI2xvZ29zRmlyZWJhc2UzIi8+PHBhdGggZmlsbD0iI0Y2ODIwQyIgZD0ibTAgMjgyLjk5OGwuOTYyLS45NjhsMy40OTYtMS40MmwxMjguNDc3LTEyOGwxLjYyOC00LjQzMWwtMzIuMDUtNjEuMDc0eiIvPjxwYXRoIGZpbGw9IiNGREUwNjgiIGQ9Im0xMzkuMTIxIDM0Ny41NTFsMTE2LjI3NS02NC44NDdsLTMzLjIwNC0yMDQuNDk1Yy0xLjAzOS02LjM5OC04Ljg4OC04LjkyNy0xMy40NjgtNC4zNEwwIDI4Mi45OThsMTE1LjYwOCA2NC41NDhhMjQuMTI2IDI0LjEyNiAwIDAgMCAyMy41MTMuMDA1Ii8+PHBhdGggZmlsbD0iI0ZDQ0EzRiIgZD0iTTI1NC4zNTQgMjgyLjE2TDIyMS40MDIgNzkuMjE4Yy0xLjAzLTYuMzUtNy41NTgtOC45NzctMTIuMTAzLTQuNDI0TDEuMjkgMjgyLjZsMTE0LjMzOSA2My45MDhhMjMuOTQzIDIzLjk0MyAwIDAgMCAyMy4zMzQuMDA2bDExNS4zOTItNjQuMzU1WiIvPjxwYXRoIGZpbGw9IiNFRUFCMzciIGQ9Ik0xMzkuMTIgMzQ1LjY0YTI0LjEyNiAyNC4xMjYgMCAwIDEtMjMuNTEyLS4wMDVMLjkzMSAyODIuMDE1bC0uOTMuOTgzbDExNS42MDcgNjQuNTQ4YTI0LjEyNiAyNC4xMjYgMCAwIDAgMjMuNTEzLjAwNWwxMTYuMjc1LTY0Ljg0N2wtLjI4NS0xLjc1MmwtMTE1Ljk5IDY0LjY4OVoiLz48L3N2Zz4=",url:"https://firebase.google.com",disabled:!0},{category:"RPC",label:"Telefunc",flag:"telefunc",image:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDcuMDIiIGhlaWdodD0iNDcuMDIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQ3LjAyIDQ3LjAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGNpcmNsZSBjeD0iMjMuNTEiIGN5PSIyMy41MSIgcj0iMjEuOTUiIGZpbGw9IiNmN2UwMTgiIHN0cm9rZT0iIzMxMzQzZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzLjEyIiBzdHlsZT0icGFpbnQtb3JkZXI6bm9ybWFsIi8+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTU1MDMgMCAwIC45NTUwMyAuMzQ0MDUgMS4wMTE3KSIgZmlsbD0iIzMxMzQzZCIgc2hhcGUtcmVuZGVyaW5nPSJhdXRvIj4KICA8cGF0aCBkPSJtMjEuODA0IDEzLjkxMyA2LjQzMzMgOS42NDU4LTYuNDMzMyA5LjY0NDFoNS44ODI0bDMuNDkzLTUuMjM1MiAzLjQ5MTMgNS4yMzUyaDUuODgyNGwtMTIuODY3LTE5LjI5eiIgY29sb3I9IiMwMDAwMDAiIGNvbG9yLXJlbmRlcmluZz0iYXV0byIgZG9taW5hbnQtYmFzZWxpbmU9ImF1dG8iIGltYWdlLXJlbmRlcmluZz0iYXV0byIgc29saWQtY29sb3I9IiMwMDAwMDAiIHN0eWxlPSJmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWFudC1hbHRlcm5hdGVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtdmFyaWFudC1wb3NpdGlvbjpub3JtYWw7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NoYXBlLXBhZGRpbmc6MDt0ZXh0LWRlY29yYXRpb24tY29sb3I6IzAwMDAwMDt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lO3RleHQtZGVjb3JhdGlvbi1zdHlsZTpzb2xpZDt0ZXh0LWluZGVudDowO3RleHQtb3JpZW50YXRpb246bWl4ZWQ7dGV4dC10cmFuc2Zvcm06bm9uZTt3aGl0ZS1zcGFjZTpub3JtYWwiLz4KICA8cGF0aCBkPSJtMTQuODgyIDEzLjkxMyA2LjQzMzMgOS42NDU4LTYuNDMzMyA5LjY0NDFoNS44ODI0YzIuMDg1NS0zLjI5MTEgNC4wNDUyLTYuMjk1OSA2LjIyMjEtOS45NjE4bC02LjIyMjEtOS4zMjgxeiIgY29sb3I9IiMwMDAwMDAiIGNvbG9yLXJlbmRlcmluZz0iYXV0byIgZG9taW5hbnQtYmFzZWxpbmU9ImF1dG8iIGZpbGwtb3BhY2l0eT0iLjU3MzE1IiBpbWFnZS1yZW5kZXJpbmc9ImF1dG8iIHNvbGlkLWNvbG9yPSIjMDAwMDAwIiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtYWx0ZXJuYXRlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LXZhcmlhbnQtcG9zaXRpb246bm9ybWFsO2lzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtzaGFwZS1wYWRkaW5nOjA7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1pbmRlbnQ6MDt0ZXh0LW9yaWVudGF0aW9uOm1peGVkO3RleHQtdHJhbnNmb3JtOm5vbmU7d2hpdGUtc3BhY2U6bm9ybWFsIi8+CiAgPHBhdGggZD0ibTcuOTYwNCAxMy45MTMgNi40MzMzIDkuNjQ1OC02LjQzMzMgOS42NDQxaDUuODgyNGMyLjA4NTUtMy4yOTExIDQuMDQ1Mi02LjI5NTkgNi4yMjIxLTkuOTYxOGwtNi4yMjIxLTkuMzI4MXoiIGNvbG9yPSIjMDAwMDAwIiBjb2xvci1yZW5kZXJpbmc9ImF1dG8iIGRvbWluYW50LWJhc2VsaW5lPSJhdXRvIiBmaWxsLW9wYWNpdHk9Ii4yNzY1NSIgaW1hZ2UtcmVuZGVyaW5nPSJhdXRvIiBzb2xpZC1jb2xvcj0iIzAwMDAwMCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWFsdGVybmF0ZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXBzOm5vcm1hbDtmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWw7Zm9udC12YXJpYW50LXBvc2l0aW9uOm5vcm1hbDtpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c2hhcGUtcGFkZGluZzowO3RleHQtZGVjb3JhdGlvbi1jb2xvcjojMDAwMDAwO3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmU7dGV4dC1kZWNvcmF0aW9uLXN0eWxlOnNvbGlkO3RleHQtaW5kZW50OjA7dGV4dC1vcmllbnRhdGlvbjptaXhlZDt0ZXh0LXRyYW5zZm9ybTpub25lO3doaXRlLXNwYWNlOm5vcm1hbCIvPgogPC9nPgo8L3N2Zz4K",url:"https://telefunc.com"},{category:"RPC",label:"tRPC",flag:"trpc",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjg0ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDMwNSI+PHBhdGggZmlsbD0iIzM5OENDQiIgZD0iTTI4LjU3IDI0NC40ODRoMjEuOTgydjExLjE1M0gyOC41NzF2MjUuMzA4YTE2Ljg4IDE2Ljg4IDAgMCAwIC43MzggNS4zNjRhOC4xNTIgOC4xNTIgMCAwIDAgMi4wODggMy40YTcuODE1IDcuODE1IDAgMCAwIDMuMyAxLjg1MWMxLjIzNS4zMyAyLjUwNC41MSAzLjc4LjUzNmwuNTQ3LjAwMmMxLjE1IDAgMi4zMzggMCAzLjU2My0uMTYybC43MjctLjA5bDEuNDA5LS4xNmMuNDYxLS4wNTQuOTE1LS4xMTMgMS4zNjYtLjE4OGwuNjYtLjEwNWwxLjI0LS4xODRjLjQwMS0uMDYuNzktLjEyNCAxLjE3NS0uMTk5bC45MTgtLjE4NGwuNDI3LS4wOWwuNzktLjE3NmwuMzY2LS4wODdsMS40NzYgMTAuMzlhMTguNTA1IDE4LjUwNSAwIDAgMS0zLjc1MiAxLjZhMzUuOSAzNS45IDAgMCAxLTQuNTEzIDEuMTEzYy0xLjYuMy0zLjI2NC41MjYtNS4wMDIuNjg4YTU0LjI4IDU0LjI4IDAgMCAxLTUuMDg5LjIzOGEyOC4zOTYgMjguMzk2IDAgMCAxLTguNzUyLTEuMjVhMTYuODMgMTYuODMgMCAwIDEtNi43MjctNC4wMDJhMTcuMzQzIDE3LjM0MyAwIDAgMS00LjMwMi02Ljg1MmEyOS4xOTYgMjkuMTk2IDAgMCAxLTEuNTI1LTEwLjAwM3YtMjYuNzU4SDB2LTExLjE1M2gxMy40NDF2LTE0LjQxN2gxNS4xM3YxNC40MTdabTUzLjg4IDI5LjI3MXYyOS42MDlINjcuMTU2di03OS4yMzZoMjYuNjJhNDIuNTIgNDIuNTIgMCAwIDEgMTEuOTE2IDEuNTVhMjYuNjcgMjYuNjcgMCAwIDEgOS4xNCA0LjU1MmExOS44OCAxOS44OCAwIDAgMSA1Ljc5IDcuNTAyYTI0LjU3IDI0LjU3IDAgMCAxIDIuMDUgMTAuMzRhMjYuNzIgMjYuNzIgMCAwIDEtMS4wMTIgNy42NGEyMC4zMzEgMjAuMzMxIDAgMCAxLTcuNDAzIDEwLjgwNGEzMC4wOTYgMzAuMDk2IDAgMCAxLTUuOTAxIDMuNDg4bDE3LjAzIDMyLjY5N3YuNzEzaC0xNi40NDNMOTQuMDQgMjczLjc1NUg4Mi40NVptLjAxMi0xMi40MjhoMTEuMzE1YTE3Ljg2OCAxNy44NjggMCAwIDAgNi4yNTItMWExMC44NjYgMTAuODY2IDAgMCAwIDQuMzktMi45MTRhMTAuNTI4IDEwLjUyOCAwIDAgMCAyLjExMi0zLjU4OWMuNDQ4LTEuMzU4LjY5Mi0yLjc3NS43MjMtNC4yMDNsLjAwMi0uNTM2YTE1LjEwNCAxNS4xMDQgMCAwIDAtLjk1LTUuNTc2YTkuODY1IDkuODY1IDAgMCAwLTIuODUtNC4wMDFhMTIuMDY2IDEyLjA2NiAwIDAgMC00LjE0LTIuMTc2YTE5LjE0MyAxOS4xNDMgMCAwIDAtNC45Ny0uNzZsLTExLjg4NC0uMDAzdjI0Ljc1OFptNjcuODQ1IDQyLjAzN0gxMzUuMDR2LTc5LjIzNmgyNy4wOTVhMzQuNDEgMzQuNDEgMCAwIDEgMTEuNzAzIDEuODc2YTI2LjYzMyAyNi42MzMgMCAwIDEgOC45MjggNS4yMDFhMjMuMzA3IDIzLjMwNyAwIDAgMSA1LjYyNyA4LjA1M2EyNi4zNTggMjYuMzU4IDAgMCAxIDEuOTg4IDkuNzIzdi42NjdhMjQuMTcgMjQuMTcgMCAwIDEtMS45ODggOS44NTNhMjIuNTA3IDIyLjUwNyAwIDAgMS01LjYyNyA3Ljc3N2EyNi4zNyAyNi4zNyAwIDAgMS04Ljk2NSA1LjE3N2EzNC43MjMgMzQuNzIzIDAgMCAxLTExLjcwNCAxLjg1aC0xMS44MDNsLjAxMyAyOS4wNTlabTAtNDEuNDYyaDExLjgwM2ExNS4wMDQgMTUuMDA0IDAgMCAwIDUuNjY0LS45ODhhMTEuNTUzIDExLjU1MyAwIDAgMCA0LjAyNi0yLjY2M2ExMS4xNzggMTEuMTc4IDAgMCAwIDIuMzY0LTMuODg5Yy41My0xLjQ3Ni44LTMuMDMzLjgtNC42MDFhMTYuMzY3IDE2LjM2NyAwIDAgMC0uOC01LjE2NGExMS45NjYgMTEuOTY2IDAgMCAwLTIuMzY0LTQuMjAyYTExLjU5IDExLjU5IDAgMCAwLTQuMDI2LTIuODI1YTE0LjI2NyAxNC4yNjcgMCAwIDAtNS42NjQtMS4wMzhoLTExLjgwM3YyNS4zN1ptMTAzLjA0MiAyNy40MmEyNS4zMDcgMjUuMzA3IDAgMCAxLTUuOTAyIDguMTY1YTI2LjA0NSAyNi4wNDUgMCAwIDEtOC44MTUgNS4yMDJhMzMuNjQ3IDMzLjY0NyAwIDAgMS0xMC41NTggMS44MTRsLS43Ny0uMDAxYTMwLjc1OSAzMC43NTkgMCAwIDEtOS4wNTMtMS4yNWEyNS4zNDUgMjUuMzQ1IDAgMCAxLTcuNTAyLTMuNjc3YTI1LjcwNyAyNS43MDcgMCAwIDEtNS40MTQtNS4zODlhMzMuNjcyIDMzLjY3MiAwIDAgMS00LjAwMS02Ljk2NGE0MS41NzUgNDEuNTc1IDAgMCAxLTIuNDEzLTguMzc4YTUzLjQwOCA1My40MDggMCAwIDEtLjg1MS05LjY5di0xMC42NjZhNTMuNDMgNTMuNDMgMCAwIDEgLjc2My05LjExNWEzOS40MTEgMzkuNDExIDAgMCAxIDEuOTUtNy4xNjFsLjMzOC0uODY2YTMwLjQwOSAzMC40MDkgMCAwIDEgNC41NzctOC4wNTNhMjkuMjcxIDI5LjI3MSAwIDAgMSA2LjQxNC01Ljk3NmEyNi4xNTggMjYuMTU4IDAgMCAxIDcuMDUyLTMuMTg5YTI5LjEwOCAyOS4xMDggMCAwIDEgNy40OC0xLjExbC43Ni0uMDAzYTMzLjc2IDMzLjc2IDAgMCAxIDExLjYxNiAxLjg1YTIzLjc1NyAyMy43NTcgMCAwIDEgMTQuMzQyIDEzLjY1NWEzNy40MTEgMzcuNDExIDAgMCAxIDIuNjEzIDExLjE1M2gtMTUuMjNjLS4wOS0yLjEyLS40NDItNC4yMi0xLjA1LTYuMjUyYTEyLjM1NCAxMi4zNTQgMCAwIDAtMi40MjUtNC40NjNhMTAuNDE2IDEwLjQxNiAwIDAgMC00LjA1Mi0yLjYzOWExNi43MyAxNi43MyAwIDAgMC01LjgwMS0uOWExNC4yNDIgMTQuMjQyIDAgMCAwLTMuMzUxLjM4OGMtMSAuMjQzLTEuOTU5LjYyNi0yLjg1MSAxLjEzN2ExMS4zMjggMTEuMzI4IDAgMCAwLTMuNzUxIDMuNzUyYTIxLjk2OSAyMS45NjkgMCAwIDAtMi41MDEgNS42MzlhMzQuMDEgMzQuMDEgMCAwIDAtMS4wMjUgNS41MjZhNTguNzY3IDU4Ljc2NyAwIDAgMC0uMzI1IDYuNTAydjEwLjc2NmE2MS4yOCA2MS4yOCAwIDAgMCAuNTEyIDguNDY1YTI4LjkyIDI4LjkyIDAgMCAwIDEuNiA2LjUwMmExNS45OTIgMTUuOTkyIDAgMCAwIDEuODI2IDMuMzc2Yy42NjcuOTYgMS40ODcgMS44MDQgMi40MjYgMi41YTEwLjAwMyAxMC4wMDMgMCAwIDAgMy4yODggMS42YTE0LjU2IDE0LjU2IDAgMCAwIDQuMDUyLjUyNmExNy45MTggMTcuOTE4IDAgMCAwIDUuMzg5LS43NjNhMTAuMzAzIDEwLjMwMyAwIDAgMCA0LjA4OC0yLjRhMTEuMjUzIDExLjI1MyAwIDAgMCAyLjY2NC00LjE5YTIwLjk2OSAyMC45NjkgMCAwIDAgMS4yNS02LjE1SDI1NmEzMC4zOTYgMzAuMzk2IDAgMCAxLTIuNjUgMTAuNzI3Wk0xODYuMzggOTIuNDAybDM4LjQ4NiAyMi4yMnY0NC40NjJsLTM4LjQ4NiAyMi4yMmwtMTcuMDg1LTkuODgxbC00MS41NDUgMjMuOTg0bC00MS4yOTYtMjMuODQ3bC0xNi44NDYgOS43NDNsLTM4LjQ4Ni0yMi4yNTZWMTE0LjYybDM4LjQ4Ni0yMi4yMTlsMzguNDg2IDIyLjIydjQ0LjQyNWwtMTEuNjQzIDYuNzMzbDMxLjI5OSAxOC4wNzRsMzEuNTQ4LTE4LjIxMmwtMTEuNDA1LTYuNTk1VjExNC42MmwzOC40ODctMjIuMjE5Wk0xNTcuODk2IDEyNi4ydjI3LjEybDIzLjQ4MiAxMy41NTV2LTI3LjEyTDE1Ny44OTYgMTI2LjJabTU2Ljk2Ny0uMDM3bC0yMy40ODIgMTMuNTU0djI3LjE1OGwyMy40ODItMTMuNTkydi0yNy4xMlptLTE3My43MzggMHYyNy4xMmwyMy40ODEgMTMuNTU0di0yNy4xMmwtMjMuNDgxLTEzLjU1NFptNTYuOTY2IDBMNzQuNjEgMTM5LjcxNnYyNy4xMmwyMy40ODItMTMuNTU0di0yNy4xMlptODguMjg5LTIyLjE4MmwtMjMuNDgyIDEzLjU1NGwyMy40ODIgMTMuNTY3bDIzLjQ4MS0xMy41NjdsLTIzLjQ4MS0xMy41NTRabS0xMTYuNzcyLS4wMzdsLTIzLjQ4MiAxMy41OTFsMjMuNDgyIDEzLjUzbDIzLjQ4Mi0xMy41M2wtMjMuNDgyLTEzLjU5MVptMTkuMTQzLTY4LjkydjExLjU0bC0zNS42MSAyMC41N3YzNC43NzJsLTEwLjAwMyA1Ljc3N1Y2MS4zNTVMODguNzUgMzUuMDIzWk0xMjcuMjM3IDBsMzguNTEyIDIyLjIxOXYxMi4yMTlsNDYuNjEzIDI2LjkxN3Y0Ni4wMzlsLTEwLjAwMy01Ljc3N1Y2Ny4xMzJsLTM2LjYxLTIxLjE0MXYyMC42NjZsLTM4LjQ4NyAyMi4yMTlsLTM4LjQ4Ni0yMi4yMTlWMjIuMjE5TDEyNy4yMzcgMFpNOTguNzggMzMuNzZ2MjcuMTJsMjMuNDU3IDEzLjU1NFY0Ny4zMjZMOTguNzc5IDMzLjc2Wm01Ni45NDIgMGwtMjMuNDU3IDEzLjU2NnYyNy4wOTZMMTU1LjcyIDYwLjg4VjMzLjc2Wm0tMjguNDg0LTIyLjIwN0wxMDMuNzggMjUuMTA3bDIzLjQ1NyAxMy41NTRsMjMuNDgyLTEzLjU1NGwtMjMuNDgyLTEzLjU1NFoiLz48L3N2Zz4=",url:"https://trpc.io"},{category:"Server",label:"H3",flag:"h3",url:"https://github.com/unjs/h3"},{category:"Server",label:"Express",flag:"express",url:"https://expressjs.com"},{category:"Server",label:"HatTip",flag:"hattip",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMjYzIDIyOCIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoyOyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBpZD0iSGF0VGlwTG9nbyIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgMSwgMC43MTcxMDUsIDcuODg4MTU4KSI+CiAgICA8cGF0aCBkPSJNMzQuNjMsMTYyLjMxMWMtMCwwIC0xMi4xNjEsLTYxLjc4IC0xMi42NzksLTgxLjAxOGMwLC0wIDEuODkyLC01My4zNDIgNzUuMDU3LC02OC41OGMwLDAgNzkuMTcxLC0zMC4wNzYgMTA1LjUzOCwyNC4zMzZjMCwtMCAyMy4wNDMsNTcuMzIzIDI1LjM0LDc2Ljg5Yy0wLC0wIC01NC40NywzOS4wNzMgLTE5MS44MjEsNTQuMzY3bC0xLjQzNSwtNS45OTVaIiBzdHlsZT0iZmlsbDojMjMzNjNmO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPHBhdGggZD0iTTM5LjI3NywxODEuNjkybC0zLjIxMiwtMTMuMzg2YzAsMCAxMjEuOTM0LC0xMS4yMzUgMTkxLjgyMSwtNTQuMzY3bDMuODg3LDE2LjIwNGMtMCwwIC04OS4xLDU5LjYzNyAtMTkyLjQ5Niw1MS41NDlaIiBzdHlsZT0iZmlsbDojMDRiNTc4O2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPHBhdGggZD0iTTMzLjg1MiwxNTguMDI0bDUuNDI1LDIzLjY2OGMtMCwtMCA4OS4wNTksMTEuMTM3IDE5Mi40OTYsLTUxLjU0OWwtMy44ODcsLTE2LjIwNGwyNC44ODksLTEyLjAwNmMwLDAgNy4yMzEsLTMuOTczIDQuNTI0LDcuNDgxYy0wLC0wIDEuNjM5LDU3Ljk1MyAtMTMwLjI1MSw4Ny4zMTRjLTEyNi43NTQsMjguMjE4IC0xMzEuMzg1LC0zMi41NzUgLTExNy4wOTQsLTM1LjYxM2wyMy44OTgsLTMuMDkxWiIgc3R5bGU9ImZpbGw6IzIzMzY0MDtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICA8L2c+Cjwvc3ZnPg==",url:"https://github.com/hattipjs/hattip"},{category:"Database",label:"Prisma",flag:"prisma",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjgzZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDMxMCI+PHBhdGggZD0iTTI1NC4zMTMgMjM1LjUxOUwxNDggOS43NDlBMTcuMDYzIDE3LjA2MyAwIDAgMCAxMzMuNDczLjAzN2ExNi44NyAxNi44NyAwIDAgMC0xNS41MzMgOC4wNTJMMi42MzMgMTk0Ljg0OGExNy40NjUgMTcuNDY1IDAgMCAwIC4xOTMgMTguNzQ3TDU5LjIgMzAwLjg5NmExOC4xMyAxOC4xMyAwIDAgMCAyMC4zNjMgNy40ODlsMTYzLjU5OS00OC4zOTJhMTcuOTI5IDE3LjkyOSAwIDAgMCAxMS4yNi05LjcyMmExNy41NDIgMTcuNTQyIDAgMCAwLS4xMDEtMTQuNzZsLS4wMDguMDA4Wm0tMjMuODAyIDkuNjgzbC0xMzguODIzIDQxLjA1Yy00LjIzNSAxLjI2LTguMy0yLjQxMS03LjQxOS02LjY4NWw0OS41OTgtMjM3LjQ4NGMuOTI3LTQuNDQzIDcuMDYzLTUuMTQ3IDkuMDAzLTEuMDM1bDkxLjgxNCAxOTQuOTczYTYuNjMgNi42MyAwIDAgMS00LjE4IDkuMThoLjAwN1oiLz48L3N2Zz4=",url:"https://www.prisma.io"},{category:"Database",label:"EdgeDB",flag:"edgedb",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyLjIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgNTEyIDIzMi43MjciPjxwYXRoIGZpbGw9IiM0RDRENEQiIGQ9Ik00MzMuNjY3IDExNS4yMzhjMCAzNS4zMzMtMTQuMTY3IDQxLjY2Ni0zMC4wMDIgNDEuNjY2SDM3MFY3My41NzFoMzMuNjY2YzE1LjgzNSAwIDMwLjAwMiA2LjMzNCAzMC4wMDIgNDEuNjY3Wm0tMTcuMTY3LjAwNGMwLTI0LjY2Ny03LjUtMjUuODMzLTE4LjMzMy0yNS44MzNoLTEwLjQ5OXY1MS42NjZoMTAuNWMxMC44MzMgMCAxOC4zMzItMS4xNjcgMTguMzMyLTI1LjgzM1ptLTE3OC4zMzYgNDEuNjYyVjczLjU3MWg1My4wMDF2MTUuODM0aC0zNS4zMzR2MTdoMjYuNjY2djE1LjY2NmgtMjYuNjY2djE5aDM1LjMzNHYxNS44MzNoLTUzWk0zMjAgMjMyLjcyN2gxNy40NTVWMEgzMjB2MjMyLjcyN1pNNDY4Ljk5NSAxMTkuOTF2MjEuMTY2aDE0LjY2OGM5LjE2NiAwIDExLjUtNiAxMS41LTEwLjVjMC0zLjUtMS42NjgtMTAuNjY2LTE0LjE2OC0xMC42NjZoLTEyWm0wLTMwLjUwMnYxNS44MzNoMTJjNi44MzMgMCAxMC44MzMtMyAxMC44MzMtOHMtNC03LjgzMy0xMC44MzMtNy44MzNoLTEyWk00NTEuMzM0IDczLjU3aDMzLjk5OGMxNy44MzYgMCAyMy4xNjggMTIuNSAyMy4xNjggMjEuNWMwIDguMzM0LTUuMzMyIDE0LjMzNC05IDE2YzEwLjY2NyA1LjE2NyAxMi41IDE1LjY2NyAxMi41IDIxYzAgNy0zLjUgMjQuODMzLTI2LjY2OCAyNC44MzNoLTMzLjk5OFY3My41NzFabS0zMTQuNjY1IDQxLjY2N2MwIDM1LjMzMy0xNC4xNjcgNDEuNjY2LTMwIDQxLjY2Nkg3My4wMDJWNzMuNTcxaDMzLjY2N2MxNS44MzMgMCAzMCA2LjMzNCAzMCA0MS42NjdabTUxLjk5NyAyNi41MDdjOSAwIDEzLjY2Ni0zIDE1LjMzMy01di05LjE2NmgtMTQuMzM0di0xNC4zMzRoMjguNXYzMy4xNjdjLTIuNSAzLjgzMy0xNi4xNjYgMTEuMzMzLTI4LjY2NiAxMS4zMzNjLTIwLjUgMC0zNy44MzMtOC0zNy44MzMtNDMuMzMzczE3LjUtNDEuNjY2IDMzLjMzMy00MS42NjZjMjQuODMzIDAgMzEgMTMgMzMgMjQuNWwtMTQuNjY3IDMuMzMzYy0uODMzLTUuMzM0LTUuNS0xMi0xNi4xNjYtMTJjLTEwLjgzNCAwLTE4LjMzNCAxLjE2Ni0xOC4zMzQgMjUuODMzYzAgMjQuNjY3IDcuODM0IDI3LjMzMyAxOS44MzQgMjcuMzMzWk0xMTkuNSAxMTUuMjQyYzAtMjQuNjY3LTcuNS0yNS44MzMtMTguMzMzLTI1LjgzM2gtMTAuNXY1MS42NjZoMTAuNWMxMC44MzMgMCAxOC4zMzMtMS4xNjcgMTguMzMzLTI1LjgzM1pNMCAxNTYuOTA0VjczLjU3MWg1M3YxNS44MzRIMTcuNjY3djE3aDI2LjY2NnYxNS42NjZIMTcuNjY3djE5SDUzdjE1LjgzM0gwWiIvPjwvc3ZnPg==",url:"https://www.edgedb.com"},{category:"Analytics",label:"Plausible.io",flag:"plausible.io",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8dGl0bGU+bG9nbzwvdGl0bGU+CiAgICA8ZGVmcz4KICAgICAgICA8cmFkaWFsR3JhZGllbnQgY3g9Ijc5LjEzMDUyNjMlIiBjeT0iODcuNjQ0ODE1OCUiIGZ4PSI3OS4xMzA1MjYzJSIgZnk9Ijg3LjY0NDgxNTglIiByPSI5Ni45ODk3NzYzJSIgaWQ9InJhZGlhbEdyYWRpZW50LTEiPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjMjQ0MEU2IiBvZmZzZXQ9IjAlIj48L3N0b3A+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiM1NjYxQjMiIG9mZnNldD0iMTAwJSI+PC9zdG9wPgogICAgICAgIDwvcmFkaWFsR3JhZGllbnQ+CiAgICAgICAgPHJhZGlhbEdyYWRpZW50IGN4PSIxLjUwNjEwNDU3ZS0wNSUiIGN5PSIzMC4yMTk4OTQxJSIgZng9IjEuNTA2MTA0NTdlLTA1JSIgZnk9IjMwLjIxOTg5NDElIiByPSI2Mi4yNjg4NzczJSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwwLjMwMjE5OSksc2NhbGUoMS4wMDAwMDAsMC43MjI1MTkpLHJvdGF0ZSg2MS43MzQ1MjIpLHRyYW5zbGF0ZSgtMC4wMDAwMDAsLTAuMzAyMTk5KSIgaWQ9InJhZGlhbEdyYWRpZW50LTIiPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNjU3NENEIiBzdG9wLW9wYWNpdHk9IjAuNSIgb2Zmc2V0PSIwJSI+PC9zdG9wPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNjU3NENEIiBvZmZzZXQ9IjEwMCUiPjwvc3RvcD4KICAgICAgICA8L3JhZGlhbEdyYWRpZW50PgogICAgPC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9ImxvZ28iPgogICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlIiB4PSIwIiB5PSIwIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiPjwvcmVjdD4KICAgICAgICAgICAgPGcgaWQ9IkJpdG1hcCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMi41MzEwMTcsIDAuMDQ5NjI4KSIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNy40Njg5ODMsIDkuOTY3NTIzKSBzY2FsZSgtMSwgMSkgcm90YXRlKC0xODAuMDAwMDAwKSB0cmFuc2xhdGUoLTcuNDY4OTgzLCAtOS45Njc1MjMpIHRyYW5zbGF0ZSgwLjAwMDAwMCwgMC4wMDAwMDApIj4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBmaWxsPSJ1cmwoI3JhZGlhbEdyYWRpZW50LTEpIiBjeD0iNy40Njg5ODI2NCIgY3k9IjEyLjQ2NjA2MjciIHI9IjcuNDY4OTgyNjQiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjE4ODU4NTYyLDE5Ljg1MTExNjYgQzQuNjQ1MTYxMywxOS41ODMxMjY2IDMuMzQ0OTEzMTgsMTguOTI4MDM5NyAyLjI2Nzk5MDEsMTcuODc1OTMwNSBDMS4xNjEyOTAzNCwxNi43OTQwNDQ3IDAuNDc2NDI2ODE4LDE1LjUzMzQ5ODggMC4xNDM5MjA2MTUsMTMuOTYwMjk3OCBMMC4wMjk3NzY2OTQsMTMuNDI0MzE3NiBMMC4wMTQ4ODgzNTY2LDYuNzE0NjQwMTkgTDEuOTE2MDAwMDNlLTA4LC00LjkyOTM5MDIzZS0xNiBMMC4xMzg5NTc4MzYsLTQuOTI5MzkwMjNlLTE2IEMwLjIxODM2MjMwMiwtNC45MjkzOTAyM2UtMTYgMC40NzE0NjQwNCwwLjAyNDgxMzg5NTggMC42OTk3NTE4OCwwLjA0OTYyNzc5MTYgQzIuNjUwMTI0MDgsMC4yODc4NDExOTEgNC4zMDc2OTIzMiwxLjQ2ODk4MjYzIDUuMjEwOTE4MTQsMy4yNjA1NDU5MSBDNS40MzkyMDU5OCwzLjcxNzEyMTU5IDUuNjAyOTc3NjgsNC4yNDMxNzYxNyA1LjcxNzEyMTYsNC44OTgyNjMwMyBDNS44MTE0MTQ0Miw1LjQ1NDA5NDI5IDUuODE2Mzc3Miw1LjYzNzcxNzEzIDUuODAxNDg4ODYsOC41MzU5ODAxNSBMNS43ODY2MDA1MiwxMS41ODgwODkzIEw1LjkwNTcwNzIyLDExLjg4NTg1NjEgQzYuMDY5NDc4OTIsMTIuMjkyODA0IDYuNTIxMDkxODQsMTIuNzQ0NDE2OSA2LjkyODAzOTcyLDEyLjkwODE4ODYgTDcuMjI1ODA2NDgsMTMuMDI3Mjk1MyBMMTAuMDA0OTYyOCwxMy4wMzIyNTgxIEMxMS41MzM0OTg4LDEzLjAzMjI1ODEgMTIuODczNDQ5MiwxMy4wNTIxMDkyIDEyLjk3NzY2NzUsMTMuMDcxOTYwMyBDMTMuNDY0MDE5OSwxMy4xNjYyNTMxIDEzLjk4NTExMTcsMTMuNTczMjAxIDE0LjE5MzU0ODQsMTQuMDI0ODEzOSBDMTQuMjUzMTAxOCwxNC4xNDg4ODM0IDE0LjMzMjUwNjIsMTQuMzkyMDU5NiAxNC4zNjcyNDU3LDE0LjU1NTgzMTMgQzE0LjQyMTgzNjIsMTQuODI4Nzg0MSAxNC40MTY4NzM1LDE0LjkwMzIyNTggMTQuMzM3NDY5LDE1LjIxMDkxODEgQzE0LjA4OTMzLDE2LjEyNDA2OTUgMTMuMjE1ODgwOSwxNy4zODk1NzgyIDEyLjMyMjU4MDcsMTguMTI5MDMyMyBDMTEuMzEwMTczNywxOC45Njc3NDE5IDEwLjE5MzU0ODQsMTkuNTI4NTM2IDguOTg3NTkzMDgsMTkuODExNDE0NCBDOC4zNTIzNTczNCwxOS45NTUzMzUgNi45MTMxNTEzOCwxOS45ODAxNDg5IDYuMTg4NTg1NjIsMTkuODUxMTE2NiBaIiBpZD0iUGF0aCIgZmlsbD0idXJsKCNyYWRpYWxHcmFkaWVudC0yKSI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=",url:"https://plausible.io"},{category:"Analytics",label:"Google Analytics",flag:"google-analytics",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjkxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDI4NCI+PHBhdGggZmlsbD0iI0Y5QUIwMCIgZD0iTTI1Ni4wMDMgMjQ3LjkzM2EzNS4yMjQgMzUuMjI0IDAgMCAxLTM5LjM3NiAzNS4xNjFjLTE4LjA0NC0yLjY3LTMxLjI2Ni0xOC4zNzEtMzAuODI2LTM2LjYwNlYzNi44NDVDMTg1LjM2NSAxOC41OTEgMTk4LjYyIDIuODgxIDIxNi42ODcuMjRhMzUuMjIxIDM1LjIyMSAwIDAgMSAzOS4zMTYgMzUuMTZ2MjEyLjUzM1oiLz48cGF0aCBmaWxsPSIjRTM3NDAwIiBkPSJNMzUuMTAxIDIxMy4xOTNjMTkuMzg2IDAgMzUuMTAxIDE1LjcxNiAzNS4xMDEgMzUuMTAxYzAgMTkuMzg2LTE1LjcxNSAzNS4xMDEtMzUuMTAxIDM1LjEwMVMwIDI2Ny42OCAwIDI0OC4yOTVjMC0xOS4zODYgMTUuNzE1LTM1LjEwMiAzNS4xMDEtMzUuMTAyWm05Mi4zNTgtMTA2LjM4N2MtMTkuNDc3IDEuMDY4LTM0LjU5IDE3LjQwNi0zNC4xMzcgMzYuOTA4djk0LjI4NWMwIDI1LjU4OCAxMS4yNTkgNDEuMTIyIDI3Ljc1NSA0NC40MzNhMzUuMTYxIDM1LjE2MSAwIDAgMCA0Mi4xNDYtMzQuNTZWMTQyLjA4OWEzNS4yMjIgMzUuMjIyIDAgMCAwLTM1Ljc2NC0zNS4yODJaIi8+PC9zdmc+",url:"https://360suite.google.com/",disabled:!0},{category:"Analytics",label:"Segment",flag:"segment",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjk3ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDI2NSI+PHBhdGggZmlsbD0iIzRGQjU4QiIgZD0ibTIzMy41NiAxNDEuOTI3bC4xNy4wMTNsMTcuODkyIDEuODdhNC45MjcgNC45MjcgMCAwIDEgMy4yMjUgMS43MDdsLjEzMy4xNjNsLS4xNy4wODVhNC45MyA0LjkzIDAgMCAxIDEuMDIgMy43NGExMzMuMjcyIDEzMy4yNzIgMCAwIDEtNDEuNjA0IDgxLjA4M2ExMjguODYgMTI4Ljg2IDAgMCAxLTg3LjYyOSAzNC4zOGExMjcuNDg4IDEyNy40ODggMCAwIDEtNDYuMTU2LTguNTdsLS44MDItLjMxMmE0LjcxNiA0LjcxNiAwIDAgMS0yLjY4Ni0yLjUzM2wtLjA3Ny0uMTg3YTQuODkxIDQuODkxIDAgMCAxLS4wODMtMy42Nmw3LjA2Mi0xNy4yM2E0Ljg0NiA0Ljg0NiAwIDAgMSA2LjExOC0yLjc5OWwuMTYzLjA2YzM2LjA5NyAxMy45MzkgNzYuOTggNi4wODkgMTA1LjM0OS0yMC4yMjdhMTA0LjQ1NSAxMDQuNDU1IDAgMCAwIDMyLjg5MS02My4zMmE0LjkzIDQuOTMgMCAwIDEgNS4wMTMtNC4yN2wuMTcuMDA3Wm0tMTkwLjA4IDY0LjMxbC4yNTEtLjAwMmwuMjUzLjAwMmM4LjEyLjA5MyAxNC42NTggNi42NTkgMTQuNzQ2IDE0Ljc0OXYuMjUzYzAgLjA4NCAwIC4xNjgtLjAwMi4yNTJjLS4xNDEgOC4yODQtNi45NyAxNC44ODYtMTUuMjU0IDE0Ljc0NWMtOC4yODQtLjE0MS0xNC44ODUtNi45Ny0xNC43NDUtMTUuMjU0Yy4xMzktOC4xMTUgNi42OTUtMTQuNjE1IDE0Ljc1LTE0Ljc0NVpNNC45MyAxNDcuMDgyaDE0Ni4zMTZhNC45NzMgNC45NzMgMCAwIDEgNC45MjggNC44NDRsLjAwMi4xNzF2MTguMzE2YTQuOTc0IDQuOTc0IDAgMCAxLTQuNzYgNS4wMWwtLjE3LjAwNUg0LjkzQTQuOTc1IDQuOTc1IDAgMCAxIDAgMTcwLjU4NHYtMTguNjU5YTQuOTc1IDQuOTc1IDAgMCAxIDQuNzU1LTQuODM4bC4xNzUtLjAwNVpNMTY5LjU2IDcuMzExYTQuOTc0IDQuOTc0IDAgMCAxIDIuODQ4IDIuNjM1YTUuMDk2IDUuMDk2IDAgMCAxIDAgMy44NjdsLTYuMzc1IDE2Ljk5OWE0Ljg0NSA0Ljg0NSAwIDAgMS02LjE2MiAyLjk3NEExMDEuMjI4IDEwMS4yMjggMCAwIDAgNjIuMTMgNTEuMjUyYTEwNS4yNjcgMTA1LjI2NyAwIDAgMC0zNC41MDcgNTQuOTlhNC45MyA0LjkzIDAgMCAxLTQuNzYgMy42OThoLTEuMTA1TDQuMjUgMTA1LjczM2E0Ljg4NiA0Ljg4NiAwIDAgMS0zLjEwMy0yLjI5NWgtLjA4NUE0LjkyOSA0LjkyOSAwIDAgMSAuNTEgOTkuNTdhMTMzLjM5MyAxMzMuMzkzIDAgMCAxIDQ0LjQxLTcwLjIwNEM3OS43MzkuNyAxMjcuMDE5LTcuNjY2IDE2OS41NiA3LjMxMVptLTY0LjgwNyA3My40MzRIMjUxLjA3YTQuOTcyIDQuOTcyIDAgMCAxIDQuOTIyIDQuNjdsLjAwOC4xNzR2MTguMzE3YTQuOTczIDQuOTczIDAgMCAxLTQuNzYgNS4wMWwtLjE3LjAwNUgxMDQuNzU0YTQuOTcyIDQuOTcyIDAgMCAxLTQuODg2LTQuODQybC0uMDAyLS4xNzNWODUuNzU5YTQuOTcyIDQuOTcyIDAgMCAxIDQuNzE1LTUuMDA4bC4xNzMtLjAwNlptMTAxLjU3Mi01NS44ODNsLjI1Mi0uMDAybC4yNTMuMDAyYzguMTIuMDkzIDE0LjY1OCA2LjY1OSAxNC43NDYgMTQuNzQ4di4yNTNjMCAuMDg1IDAgLjE3LS4wMDIuMjUzYy0uMTQgOC4yODQtNi45NyAxNC44ODUtMTUuMjU0IDE0Ljc0NGMtOC4yODQtLjE0LTE0Ljg4NS02Ljk3LTE0Ljc0NC0xNS4yNTNjLjEzOC04LjExNiA2LjY5NC0xNC42MTYgMTQuNzQ5LTE0Ljc0NVoiLz48L3N2Zz4=",url:"https://segment.com",disabled:!0},{category:"Hosting",label:"Vercel",flag:"vercel",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjE2ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyMiI+PHBhdGggZD0ibTEyOCAwbDEyOCAyMjEuNzA1SDB6Ii8+PC9zdmc+",url:"https://vercel.com"},{category:"Hosting",label:"Netlify",flag:"netlify",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjE0ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyNiI+PHBhdGggZmlsbD0iIzA1QkRCQSIgZD0iTTY5LjE4MSAxODguMDg3aC0yLjQxN2wtMTIuMDY1LTEyLjA2NXYtMi40MTdsMTguNDQ0LTE4LjQ0NGgxMi43NzhsMS43MDQgMS43MDR2MTIuNzc4ek01NC42OTkgNTEuNjI4di0yLjQxN2wxMi4wNjUtMTIuMDY1aDIuNDE3TDg3LjYyNSA1NS41OXYxMi43NzhsLTEuNzA0IDEuNzA0SDczLjE0M3oiLz48cGF0aCBmaWxsPSIjMDE0ODQ3IiBkPSJNMTYwLjkwNiAxNDkuMTk4aC0xNy41NTJsLTEuNDY2LTEuNDY2di00MS4wODljMC03LjMxLTIuODczLTEyLjk3Ni0xMS42ODktMTMuMTc0Yy00LjUzNy0uMTE5LTkuNzI3IDAtMTUuMjc0LjIxOGwtLjgzMy44NTJ2NTMuMTczbC0xLjQ2NiAxLjQ2Nkg5NS4wNzRsLTEuNDY2LTEuNDY2di03MC4xOWwxLjQ2Ni0xLjQ2N2gzOS41MDNjMTUuMzU0IDAgMjcuNzk1IDEyLjQ0MSAyNy43OTUgMjcuNzk1djQzLjg4MmwtMS40NjYgMS40NjZaIi8+PHBhdGggZmlsbD0iIzA1QkRCQSIgZD0iTTcxLjY3NyAxMjIuODg5SDEuNDY2TDAgMTIxLjQyM1YxMDMuODNsMS40NjYtMS40NjZoNzAuMjExbDEuNDY2IDEuNDY2djE3LjU5M3ptMTgyLjg1NyAwaC03MC4yMTFsLTEuNDY2LTEuNDY2VjEwMy44M2wxLjQ2Ni0xLjQ2Nmg3MC4yMTFMMjU2IDEwMy44M3YxNy41OTN6TTExNy44NzYgNTQuMTI0VjEuNDY2TDExOS4zNDIgMGgxNy41OTNsMS40NjYgMS40NjZ2NTIuNjU4bC0xLjQ2NiAxLjQ2NmgtMTcuNTkzem0wIDE2OS42NjN2LTUyLjY1OGwxLjQ2Ni0xLjQ2NmgxNy41OTNsMS40NjYgMS40NjZ2NTIuNjU4bC0xLjQ2NiAxLjQ2NWgtMTcuNTkzeiIvPjwvc3ZnPg==",url:"https://www.netlify.com",disabled:!0},{category:"Linter",label:"ESLint",flag:"eslint",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjE0ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyNSI+PHBhdGggZmlsbD0iIzgwODBGMiIgZD0ibTc3Ljk2NSA4MC41NjhsNDguNTctMjguMDQyYTMuOTI5IDMuOTI5IDAgMCAxIDMuOTMgMGw0OC41NyAyOC4wNDJBMy45MzIgMy45MzIgMCAwIDEgMTgxIDgzLjk3MXY1Ni4wODRjMCAxLjQwMy0uNzUgMi43LTEuOTY1IDMuNDAzbC00OC41NyAyOC4wNDJhMy45MjkgMy45MjkgMCAwIDEtMy45MyAwbC00OC41Ny0yOC4wNDJBMy45MzEgMy45MzEgMCAwIDEgNzYgMTQwLjA1NVY4My45N2MuMDAxLTEuNDA0Ljc1LTIuNyAxLjk2NS0zLjQwMyIvPjxwYXRoIGZpbGw9IiM0QjMyQzMiIGQ9Ik0yNTQuNDE3IDEwNy40MTdMMTk2LjMyMyA2LjM1QzE5NC4yMTMgMi42OTYgMTkwLjMxNSAwIDE4Ni4wOTUgMEg2OS45MDZjLTQuMjIgMC04LjEyIDIuNjk2LTEwLjIzIDYuMzVMMS41ODMgMTA3LjE5NGMtMi4xMSAzLjY1NS0yLjExIDguMjY4IDAgMTEuOTIzbDU4LjA5MyAxMDAuMjM5YzIuMTEgMy42NTQgNi4wMSA1LjUyMiAxMC4yMyA1LjUyMmgxMTYuMTg4YzQuMjIgMCA4LjExOS0xLjgxMiAxMC4yMjgtNS40NjdsNTguMDk0LTEwMC40MDJjMi4xMTItMy42NTMgMi4xMTItNy45MzggMC0xMS41OTJabS00OC4xMDUgNDguNmMwIDEuNDg1LS44OTQgMi44Ni0yLjE4MiAzLjYwNGwtNzMuOTk5IDQyLjY5M2E0LjIxIDQuMjEgMCAwIDEtNC4xODYgMGwtNzQuMDU2LTQyLjY5M2MtMS4yODctLjc0NC0yLjE4OC0yLjExOC0yLjE4OC0zLjYwNVY3MC42MjhjMC0xLjQ4Ny44ODgtMi44NiAyLjE3Ni0zLjYwNGw3My45OTUtNDIuNjk0YTQuMjAyIDQuMjAyIDAgMCAxIDQuMTg1IDBsNzQuMDYgNDIuNjk0YzEuMjg5Ljc0NCAyLjE5NSAyLjExNyAyLjE5NSAzLjYwNHY4NS4zODhaIi8+PC9zdmc+",url:"https://eslint.org"},{category:"Linter",label:"Prettier",flag:"prettier",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDI1NiI+PHJlY3Qgd2lkdGg9IjI0LjM4MSIgaGVpZ2h0PSIxMi4xOSIgeD0iMTgyLjg1NyIgeT0iNDguNzYyIiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI3My4xNDMiIGhlaWdodD0iMTIuMTkiIHk9IjI0My44MSIgZmlsbD0iI0VBNUU1RSIgcng9IjUiLz48cmVjdCB3aWR0aD0iNDguNzYyIiBoZWlnaHQ9IjEyLjE5IiB4PSIxNDYuMjg2IiB5PSIxNDYuMjg2IiBmaWxsPSIjQkY4NUJGIiByeD0iNSIvPjxyZWN0IHdpZHRoPSI2MC45NTIiIGhlaWdodD0iMTIuMTkiIHg9IjczLjE0MyIgeT0iMTQ2LjI4NiIgZmlsbD0iI0VBNUU1RSIgcng9IjUiLz48cmVjdCB3aWR0aD0iNjAuOTUyIiBoZWlnaHQ9IjEyLjE5IiB5PSIxNDYuMjg2IiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI3My4xNDMiIGhlaWdodD0iMTIuMTkiIHk9IjE5NS4wNDgiIGZpbGw9IiNCRjg1QkYiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjczLjE0MyIgaGVpZ2h0PSIxMi4xOSIgeT0iOTcuNTI0IiBmaWxsPSIjQkY4NUJGIiByeD0iNSIvPjxyZWN0IHdpZHRoPSIxMzQuMDk1IiBoZWlnaHQ9IjEyLjE5IiB4PSI2MC45NTIiIHk9IjI0LjM4MSIgZmlsbD0iI0Y3QkEzRSIgcng9IjUiLz48cmVjdCB3aWR0aD0iNDguNzYyIiBoZWlnaHQ9IjEyLjE5IiB5PSIyNC4zODEiIGZpbGw9IiNFQTVFNUUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjI0LjM4MSIgaGVpZ2h0PSIxMi4xOSIgeD0iNDguNzYyIiB5PSIyMTkuNDI5IiBmaWxsPSIjRjdCQTNFIiByeD0iNSIvPjxyZWN0IHdpZHRoPSIyNC4zODEiIGhlaWdodD0iMTIuMTkiIHg9IjQ4Ljc2MiIgeT0iNzMuMTQzIiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIzNi41NzEiIGhlaWdodD0iMTIuMTkiIHk9IjIxOS40MjkiIGZpbGw9IiM1NkIzQjQiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjM2LjU3MSIgaGVpZ2h0PSIxMi4xOSIgeT0iNzMuMTQzIiBmaWxsPSIjRjdCQTNFIiByeD0iNSIvPjxyZWN0IHdpZHRoPSIyNC4zODEiIGhlaWdodD0iMTIuMTkiIHg9IjE1OC40NzYiIHk9IjIxOS40MjkiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI2MC45NTIiIGhlaWdodD0iMTIuMTkiIHg9Ijg1LjMzMyIgeT0iMjE5LjQyOSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjYwLjk1MiIgaGVpZ2h0PSIxMi4xOSIgeD0iMTk1LjA0OCIgeT0iMjE5LjQyOSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjEwOS43MTQiIGhlaWdodD0iMTIuMTkiIHg9Ijk3LjUyNCIgeT0iMTIxLjkwNSIgZmlsbD0iIzU2QjNCNCIgcng9IjUiLz48cmVjdCB3aWR0aD0iNDguNzYyIiBoZWlnaHQ9IjEyLjE5IiB4PSIzNi41NzEiIHk9IjEyMS45MDUiIGZpbGw9IiNGN0JBM0UiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjI0LjM4MSIgaGVpZ2h0PSIxMi4xOSIgeT0iMTIxLjkwNSIgZmlsbD0iI0VBNUU1RSIgcng9IjUiLz48cmVjdCB3aWR0aD0iNjAuOTUyIiBoZWlnaHQ9IjEyLjE5IiB4PSIxMDkuNzE0IiB5PSI0OC43NjIiIGZpbGw9IiNCRjg1QkYiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9Ijk3LjUyNCIgaGVpZ2h0PSIxMi4xOSIgeT0iNDguNzYyIiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIxMjEuOTA1IiBoZWlnaHQ9IjEyLjE5IiB4PSIzNi41NzEiIHk9IjE3MC42NjciIGZpbGw9IiNGN0JBM0UiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjI0LjM4MSIgaGVpZ2h0PSIxMi4xOSIgeT0iMTcwLjY2NyIgZmlsbD0iI0JGODVCRiIgcng9IjUiLz48cmVjdCB3aWR0aD0iNzMuMTQzIiBoZWlnaHQ9IjEyLjE5IiB4PSIxNDYuMjg2IiB5PSI3My4xNDMiIGZpbGw9IiNFQTVFNUUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjczLjE0MyIgaGVpZ2h0PSIxMi4xOSIgeD0iMTQ2LjI4NiIgeT0iOTcuNTI0IiBmaWxsPSIjRjdCQTNFIiByeD0iNSIvPjxyZWN0IHdpZHRoPSIxNTguNDc2IiBoZWlnaHQ9IjEyLjE5IiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI4NS4zMzMiIGhlaWdodD0iMTIuMTkiIHg9IjE3MC42NjciIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIzNi41NzEiIGhlaWdodD0iMTIuMTkiIHg9IjE3MC42NjciIHk9IjE3MC42NjciIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIzNi41NzEiIGhlaWdodD0iMTIuMTkiIHg9IjIxOS40MjkiIHk9IjE3MC42NjciIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI0OC43NjIiIGhlaWdodD0iMTIuMTkiIHg9IjIwNy4yMzgiIHk9IjE0Ni4yODYiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI0OC43NjIiIGhlaWdodD0iMTIuMTkiIHg9IjIwNy4yMzgiIHk9IjI0LjM4MSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjM2LjU3MSIgaGVpZ2h0PSIxMi4xOSIgeD0iMjE5LjQyOSIgeT0iMTIxLjkwNSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjM2LjU3MSIgaGVpZ2h0PSIxMi4xOSIgeD0iMjE5LjQyOSIgeT0iNDguNzYyIiBmaWxsPSIjRDBENEQ4IiBvcGFjaXR5PSIuNSIgcng9IjUiLz48cmVjdCB3aWR0aD0iMjQuMzgxIiBoZWlnaHQ9IjEyLjE5IiB4PSIyMzEuNjE5IiB5PSI3My4xNDMiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIyNC4zODEiIGhlaWdodD0iMTIuMTkiIHg9IjIzMS42MTkiIHk9Ijk3LjUyNCIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjEyMS45MDUiIGhlaWdodD0iMTIuMTkiIHg9IjEzNC4wOTUiIHk9IjE5NS4wNDgiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIzNi41NzEiIGhlaWdodD0iMTIuMTkiIHg9Ijg1LjMzMyIgeT0iMTk1LjA0OCIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjczLjE0MyIgaGVpZ2h0PSIxMi4xOSIgeD0iMTgyLjg1NyIgeT0iMjQzLjgxIiBmaWxsPSIjRDBENEQ4IiBvcGFjaXR5PSIuNSIgcng9IjUiLz48cmVjdCB3aWR0aD0iODUuMzMzIiBoZWlnaHQ9IjEyLjE5IiB4PSI4NS4zMzMiIHk9IjI0My44MSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjQ4Ljc2MiIgaGVpZ2h0PSIxMi4xOSIgeD0iODUuMzMzIiB5PSI3My4xNDMiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI0OC43NjIiIGhlaWdodD0iMTIuMTkiIHg9Ijg1LjMzMyIgeT0iOTcuNTI0IiBmaWxsPSIjRDBENEQ4IiBvcGFjaXR5PSIuNSIgcng9IjUiLz48L3N2Zz4=",url:"https://prettier.io"},{category:"Error tracking",label:"Sentry",flag:"sentry",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjEzZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyNyI+PHBhdGggZmlsbD0iIzM2MkQ1OSIgZD0iTTE0OC4zNjggMTIuNDAzYTIzLjkzNSAyMy45MzUgMCAwIDAtNDEuMDAzIDBMNzMuNjQgNzAuMTY1YzUyLjQyNiAyNi4xNzQgODcuMDUgNzguMTc3IDkwLjk3NSAxMzYuNjQyaC0yMy42NzljLTMuOTE4LTUwLjExMy0zNC4wNjEtOTQuNDEtNzkuMjM4LTExNi40NDhsLTMxLjIxMyA1My45N2E4MS41OTUgODEuNTk1IDAgMCAxIDQ3LjMwNyA2Mi4zNzVoLTU0LjM4YTMuODk1IDMuODk1IDAgMCAxLTMuMTc4LTUuNjlsMTUuMDY5LTI1LjYyNmE1NS4wNDYgNTUuMDQ2IDAgMCAwLTE3LjIyMS05LjczOEwzLjE2NyAxOTEuMjc3YTIzLjI2OSAyMy4yNjkgMCAwIDAgOC42NjIgMzEuOTgyYTIzLjg4NCAyMy44ODQgMCAwIDAgMTEuNTgzIDMuMDc1aDc0LjQ3MWE5OS40MzIgOTkuNDMyIDAgMCAwLTQxLjAwMy04OC43MmwxMS44NC0yMC41YzM1LjY3OSAyNC41MDQgNTUuNzU0IDY2LjAzOCA1Mi43OSAxMDkuMjJoNjMuMDk0YzIuOTktNjUuNDMtMjkuMDQ3LTEyNy41MTItODQuMTA3LTE2Mi45ODZsMjMuOTM1LTQxLjAwMmEzLjk0NyAzLjk0NyAwIDAgMSA1LjM4Mi0xLjM4NGMyLjcxNiAxLjQ4NiAxMDMuOTkzIDE3OC4yMDggMTA1Ljg5IDE4MC4yNThhMy44OTUgMy44OTUgMCAwIDEtMy40ODYgNS43OTJoLTI0LjM5NmMuMzA3IDYuNTI2LjMwNyAxMy4wMzUgMCAxOS41MjhoMjQuNDk5QTIzLjUyOCAyMy41MjggMCAwIDAgMjU2IDIwMi45MWEyMy4wMTUgMjMuMDE1IDAgMCAwLTMuMTc4LTExLjY4NUwxNDguMzY4IDEyLjQwM1oiLz48L3N2Zz4=",url:"https://sentry.io",disabled:!0},{category:"Error tracking",label:"Logrocket",flag:"logrocket",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAuMDAgMC4wMCAxMTQ2LjAwIDE3ODMuMDAiPgo8cGF0aCBmaWxsPSIjNzE1MmExIiBkPSIKICBNIDM3Mi4yNCAxMjc5Ljc3CiAgUSAzNDYuNTQgMTI5OC44OCAzMjIuMTggMTMxOS42OAogIEMgMjkyLjkwIDEzNDQuNjYgMjYzLjgwIDEzNjkuNzYgMjM0LjEzIDEzOTQuMjkKICBDIDIwMi45MyAxNDIwLjA5IDE3NS40MyAxNDU1LjExIDEzMC4zNCAxNDQ3LjYyCiAgQyAxMDEuNDYgMTQ0Mi44MyA3NS4xMCAxNDIzLjM2IDY4LjE3IDEzOTMuOTYKICBDIDQ3LjM2IDEzMDUuNzggMjYuNDMgMTIxNy42MiA2LjQ0IDExMjkuMjUKICBRIDMuNjAgMTExNi42OCAyLjU1IDExMDkuNjQKICBDIC04Ljg3IDEwMzIuNDMgMjMuMTAgOTU1LjU1IDgzLjQ3IDkwNi44OQogIFEgMTM0Ljk3IDg2NS4zOCAxODcuNTMgODI1LjIxCiAgQyAxOTEuNDkgODIyLjE4IDE5My4yMSA4MTkuMDYgMTkyLjkxIDgxNC4yNQogIEMgMTc5LjY3IDYwMy40MyAyNDguMjYgMzk5LjYwIDM2MS40NiAyMjQuMjAKICBDIDM4My43MiAxODkuNjkgNDA4LjY2IDE1Ni40NyA0MzUuMDcgMTIzLjU3CiAgQyA0NzMuODUgNzUuMjQgNTE3LjU1IDMyLjM2IDU3MC42NiAwLjYwCiAgQSAwLjgxIDAuODAgLTQ1LjMgMCAxIDU3MS41MCAwLjU5CiAgQyA2NDguNjkgNDYuMTcgNzA1LjA0IDExNi4wMCA3NTYuNzcgMTg4LjU0CiAgUSA3NjIuODYgMTk3LjA3IDc2OC4yMSAyMDQuOTUKICBDIDg4OS44MiAzODQuMTEgOTY0LjI0IDYwMC4xNyA5NDkuNTkgODE4LjczCiAgQSAwLjk5IDAuOTggMjEuNSAwIDAgOTQ5Ljk1IDgxOS41NQogIEMgOTkyLjA4IDg1My4zOSAxMDM4LjgyIDg4OC43OSAxMDcyLjIxIDkxNy4wMwogIFEgMTA4OC4xMCA5MzAuNDYgMTEwMy42MyA5NTIuMzQKICBRIDExNDYuNzYgMTAxMy4wOSAxMTQ1LjI5IDEwODcuMjQKICBDIDExNDUuMDIgMTEwMS4wNiAxMTQyLjgyIDExMTQuMTUgMTEzOS42OCAxMTI5LjQ4CiAgQyAxMTIxLjQzIDEyMTguNzMgMTEwMi4yMSAxMzE1LjQ2IDEwODMuOTMgMTM5Ni45MwogIEMgMTA3My41NCAxNDQzLjIwIDEwMTMuNzMgMTQ2My4wMiA5NzQuNjAgMTQ0Mi4xMwogIFEgOTY4LjY2IDE0MzguOTYgOTU4LjcwIDE0MzAuODMKICBDIDg5Ni40OCAxMzc5Ljk2IDgzNC42MiAxMzI4LjcwIDc3Mi40OSAxMjc3Ljg5CiAgQSAwLjg1IDAuODQgNDMuMyAwIDAgNzcxLjM4IDEyNzcuOTIKICBDIDcxOS4xMSAxMzI1LjgyIDY1Mi4zMyAxMzU0Ljg4IDU4MS40NSAxMzU3LjY4CiAgQyA1MDUuMTMgMTM2MC42OSA0MzAuMjkgMTMzMC43MyAzNzMuMTQgMTI3OS44MQogIEEgMC43MSAwLjcxIDAuMCAwIDAgMzcyLjI0IDEyNzkuNzcKICBaCiAgTSA0MDkuOTcgNTkyLjcwCiAgQyA0MjEuNDggNjg1LjIxIDUwNy45OSA3NDIuODggNTk5LjI0IDcyOC40NgogIEMgNjM1LjgyIDcyMi42OCA2NjguMDcgNzA1LjQ4IDY5Mi45NCA2NzguNDQKICBDIDc1MC40OCA2MTUuODUgNzQ2LjQ4IDUyMC4yNiA2ODQuMTkgNDYyLjU1CiAgUSA2MzkuMjEgNDIwLjg5IDU3Ni4wMSA0MTguNjEKICBDIDQ4MC42NyA0MTUuMTggMzk3Ljg4IDQ5NS40NSA0MDkuOTcgNTkyLjcwCiAgWiIKLz4KPGVsbGlwc2UgZmlsbD0iIzcxNTJhMSIgY3g9IjAuMDAiIGN5PSIwLjAwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1NjkuODYsNTc2LjU1KSByb3RhdGUoLTAuMSkiIHJ4PSI3OS41MCIgcnk9Ijc2LjQ1Ii8+CjxwYXRoIGZpbGw9IiM3MTUyYTEiIGQ9IgogIE0gNDYyLjgzIDE2MTkuNzkKICBBIDAuNzAgMC43MCAwLjAgMCAwIDQ2MS43MiAxNjE5LjYyCiAgUSA0NDguMTIgMTYzMy4wMCA0MzQuMzYgMTY0Ni4zNgogIFEgNDIwLjc0IDE2NTkuNTcgNDEzLjQ0IDE2NjUuMTkKICBDIDM5NC4yMCAxNjc5Ljk5IDM1OS43NCAxNjY3LjIxIDM1NC43NyAxNjQzLjI1CiAgUSAzNTQuMDYgMTYzOS44MyAzNTQuMDIgMTYzMy4yMQogIFEgMzUzLjUwIDE1NTIuNTQgMzU0LjA4IDE0NzEuODcKICBRIDM1NC4xNCAxNDYyLjk2IDM1NS41NiAxNDU4LjQzCiAgUSAzNTguMzEgMTQ0OS42OSAzNjUuMTYgMTQ0My45MAogIFEgMzg3LjA4IDE0MjUuMzggNDEyLjEyIDE0MzguMDgKICBDIDUwOS4xMSAxNDg3LjI5IDYzMi4zMyAxNDg2LjE0IDcyOS41MyAxNDM4LjUzCiAgUSA3MzYuNjkgMTQzNS4wMiA3NDEuMDEgMTQzNC4xMAogIEMgNzU4Ljk2IDE0MzAuMjcgNzgwLjcyIDE0MzkuNTggNzg2LjY1IDE0NTguMTQKICBRIDc4OC4yMCAxNDYzLjAwIDc4OC4yOCAxNDc0LjUzCiAgUSA3ODkuMDMgMTU5Mi4yMyA3ODguMzAgMTYzOS43NQogIFEgNzg4LjI2IDE2NDIuNjIgNzg2LjQ4IDE2NDcuMzkKICBDIDc3OS4xOCAxNjY3LjA2IDc1Mi4wNSAxNjc3LjQwIDczMy4zNyAxNjY3Ljc4CiAgQyA3MjguMTkgMTY2NS4xMSA3MjEuNTYgMTY1OS4wMCA3MTcuNjkgMTY1NS4zMQogIFEgNjk4Ljg2IDE2MzcuMzkgNjgwLjI4IDE2MTkuMzYKICBBIDAuNTAgMC41MCAwLjAgMCAwIDY3OS40OSAxNjE5LjQ5CiAgQyA2NTUuODUgMTY2NC42MSA2MzIuODkgMTcxMC4yMCA2MDguNzcgMTc1NS4xMwogIFEgNjAyLjU0IDE3NjYuNzQgNjAyLjM3IDE3NjYuOTkKICBDIDU5MC4yNCAxNzg1LjQzIDU1OS41NiAxNzg2LjkyIDU0NC4yNSAxNzcxLjg5CiAgUSA1NDAuODcgMTc2OC41OCA1MzYuNDIgMTc2MC4yNwogIEMgNTExLjQ0IDE3MTMuNjUgNDg3LjU5IDE2NjYuNDQgNDYyLjgzIDE2MTkuNzkKICBaIgovPgo8L3N2Zz4K",url:"https://logrocket.com",disabled:!0}],XI=AM.map(M=>M.flag),$I=(M=>(M.Frontend="Frontend",M.Backend="Backend",M.Tools="Tools",M))($I||{}),KI=[{label:"Framework",group:"Frontend"},{label:"CSS",group:"Frontend"},{label:"Auth",group:"Backend"},{label:"RPC",group:"Backend"},{label:"Server",group:"Backend"},{label:"Database",group:"Backend"},{label:"Hosting",group:"Backend"},{label:"Linter",multiple:!0,group:"Tools"},{label:"Analytics",group:"Tools"},{label:"Error tracking",group:"Tools"}],TM=(M=>(M[M.ERROR_AUTH_R_SERVER=0]="ERROR_AUTH_R_SERVER",M[M.INFO_HATTIP=1]="INFO_HATTIP",M))(TM||{});function _I(M,I,N){const i=Array.from(XM(N));return j=>j.has(I)&&!i.every(e=>j.has(e))&&M}function qI(M,I){return N=>N.has(I)&&M}function XM(M){const I=new Set;for(const N of M)XI.includes(N)&&I.add(AM.find(i=>i.flag===N).category),I.add(N);return I}var MN=[_I(0,"Auth",["Server"]),qI(1,"hattip")];function IN(M,I){const N=XM(M),i=[];for(const j of MN){const e=j(N);typeof e=="number"&&(e in I?i.push(I[e]):console.warn("No handler defined for rule",e))}return i}const NN=cM('A Server is required when using Auth. Check Vike documentation.
    • Either pick a server (Express.js / H3 / ...) or unselect '),iN=cM("HatTip is an experimental project. Prefer H3 or Express for production use");function jN(M){return{type:"error",value:M}}function eN(M){return{type:"info",value:M}}const gN={[TM.ERROR_AUTH_R_SERVER]:jN(()=>{const{selectedFeatures:M}=fM($M),I=o(()=>{var N;return(N=M().filter(i=>i.category==="Auth"))==null?void 0:N[0].label});return(()=>{const N=$(NN),i=N.firstChild,j=i.nextSibling,e=j.nextSibling,g=e.nextSibling,t=g.nextSibling,L=t.nextSibling,D=L.nextSibling,u=D.firstChild,y=u.firstChild,T=y.nextSibling;return nM(T,I),N})()}),[TM.INFO_HATTIP]:eN(()=>$(iN))};function tN(){const M=AM.map(D=>({...D,alt:D.disabled?"Coming soon":void 0,selected:!1})),[I,N]=FM(M);function i(D,u,y){var n;((n=KI.find(l=>l.label===D))==null?void 0:n.multiple)||jM(()=>N(l=>l.category===D,"selected",!1)),N(l=>l.flag===u,"selected",y)}const j=o(()=>I.filter(D=>D.selected)),e=o(()=>j().map(D=>D.flag));function g(D){jM(()=>{for(const u of M)if(D.includes(u.category)){const y=M.findIndex(T=>T.category===u.category);N(T=>T.category===u.category,"selected",(T,[n,l])=>l===y)}else D.includes(u.flag)?N(y=>y.flag===u.flag,"selected",!0):N(y=>y.flag===u.flag,"selected",!1)})}const t=o(()=>j().map(D=>D.flag)),L=o(()=>{const D=IN(t(),gN);return{size:D.length,error:D.filter(u=>u.type==="error").map(u=>u.value),warning:D.filter(u=>u.type==="warning").map(u=>u.value),info:D.filter(u=>u.type==="info").map(u=>u.value)}});return{selectedFeaturesFlags:e,selectFeature:i,selectedFeatures:j,currentFeatures:I,selectPreset:g,selectedFlags:t,rules:L}}const $M=YM(void 0);function uN(M){const I=tN();return f($M.Provider,{value:I,get children(){return M.children}})}const DN=cM('
      ');function lN(M){return f(uN,{get children(){const I=$(DN);return nM(I,()=>M.children),I}})}export{pM as D,LN as F,lN as L,$M as S,SI as a,II as b,Q as c,o as d,f as e,nN as f,$ as g,cN as h,nM as i,YI as j,dI as k,$I as l,KI as m,TN as n,zN as o,yN as p,aI as q,AN as r,uM as s,cM as t,fM as u}; diff --git a/assets/entries/entry-client-routing.07463a08.js b/assets/entries/entry-client-routing.a8d12846.js similarity index 99% rename from assets/entries/entry-client-routing.07463a08.js rename to assets/entries/entry-client-routing.a8d12846.js index 262fb74..fb9e390 100644 --- a/assets/entries/entry-client-routing.07463a08.js +++ b/assets/entries/entry-client-routing.a8d12846.js @@ -1,3 +1,3 @@ function un(){return!(typeof process>"u"||!process.cwd||!process.versions||typeof process.versions.node>"u"||!process.release||process.release.name!=="node")}function Ee(e,t){let n;{var r=Error.stackTraceLimit;Error.stackTraceLimit=1/0,n=new Error(e),Error.stackTraceLimit=r}return un()&&(n.stack=cn(n.stack,t)),n}function cn(e,t){if(!e)return e;const n=dn(e);let r=0;return n.filter(o=>o.includes(" (internal/")||o.includes(" (node:internal")?!1:r1&&ye(!1,st,{onlyOnce:!0,showStackTrace:!0})}function hn(e){ye(T.isClientRouting!==!1,gn,{onlyOnce:!0,showStackTrace:!0}),ye(T.isClientRouting===void 0,st,{onlyOnce:!0,showStackTrace:!0}),T.isClientRouting=!0,e&&(T.checkSingleInstance=!0),at()}function pn(e){T.instances.push(e),at()}function mn(e,t){if(e)return;const n=`[vike][Wrong Usage] ${t}`;throw new Error(n)}function ye(e,t,{onlyOnce:n,showStackTrace:r}){if(e)return;const i=`[vike][Warning] ${t}`;if(n){const{alreadyLogged:o}=T,l=n===!0?i:n;if(o.has(l))return;o.add(l)}console.warn(r?new Error(i):i)}const yn="0.4.144",N={projectName:"Vike",projectVersion:yn,npmPackageName:"vike",githubRepository:"https://github.com/vikejs/vike"};pn(N.projectVersion);const lt=new Proxy(e=>e,{get:()=>lt}),h=lt,S=k("utils/assert.ts",{alreadyLogged:new Set,logger(e,t){t==="info"?console.log(e):console.warn(e)},showStackTraceList:new WeakSet}),bn=`[${N.npmPackageName}]`,wn=`[${N.npmPackageName}@${N.projectVersion}]`,$e=2;function s(e,t){var l;if(e)return;const n=(()=>{if(!t)return null;const a=typeof t=="string"?t:JSON.stringify(t);return h.dim(`Debug info (for ${N.projectName} maintainers; you can ignore this): ${a}`)})(),r=`${N.githubRepository}/issues/new`;let i=[`You stumbled upon a bug in ${N.projectName}'s source code.`,`Go to ${h.blue(r)} and copy-paste this error; a maintainer will fix the bug (usually under 24 hours).`,n].filter(Boolean).join(" ");i=Y(i),i=ae(i,"Bug"),i=M(i,!0);const o=Ee(i,$e);throw(l=S.onBeforeLog)==null||l.call(S),o}function g(e,t,{showStackTrace:n}={}){var i;if(e)return;t=Y(t),t=ae(t,"Wrong Usage"),t=M(t);const r=Ee(t,$e);throw n&&S.showStackTraceList.add(r),(i=S.onBeforeLog)==null||i.call(S),r}function ut(e){return e=Y(e),e=ae(e,"Error"),e=M(e),Ee(e,$e)}function R(e,t,{onlyOnce:n,showStackTrace:r}){var i;if(!e){if(t=Y(t),t=ae(t,"Warning"),t=M(t),n){const{alreadyLogged:o}=S,l=n===!0?t:n;if(o.has(l))return;o.add(l)}if((i=S.onBeforeLog)==null||i.call(S),r){const o=new Error(t);S.showStackTraceList.add(o),S.logger(o,"warn")}else S.logger(t,"warn")}}function Ce(e,t,{onlyOnce:n}){var r;if(!e){if(t=Y(t),t=M(t),n){const{alreadyLogged:i}=S,o=t;if(i.has(o))return;i.add(o)}(r=S.onBeforeLog)==null||r.call(S),S.logger(t,"info")}}function ae(e,t){let n=`[${t}]`;const r=t==="Warning"?"yellow":"red";return n=h.bold(h[r](n)),`${n}${e}`}function Y(e){return e.startsWith("[")?e:` ${e}`}function M(e,t=!1){return`${t?wn:bn}${e}`}function W(){return typeof window<"u"&&typeof window.scrollY=="number"}const ct=k("utils/assertRouterType.ts",{});function D(){vn(ft()),ct.isClientRouting=!0}function ft(){return ct.isClientRouting!==!1}function vn(e){g(W(),`${h.cyan("import { something } from 'vike/client/router'")} is forbidden on the server-side`,{showStackTrace:!0}),R(e,"You shouldn't `import { something } from 'vike/client/router'` when using Server Routing. The 'vike/client/router' utilities work only with Client Routing. In particular, don't `import { navigate }` nor `import { prefetch }` as they unnecessarily bloat your client-side bundle sizes.",{showStackTrace:!0,onlyOnce:!0})}const Sn=["js","ts","cjs","cts","mjs","mts","jsx","tsx","cjsx","ctsx","mjsx","mtsx"],dt=["vue","svelte","marko","md","mdx"],Rn=[...Sn,...dt];function gt(e){const t=Rn.some(n=>e.endsWith("."+n));return s(!Pn(e)||t),t}function Pn(e){return/\.(c|m)?(j|t)sx?$/.test(e)}function En(e){return dt.some(t=>e.endsWith("."+t))}function F(e,t,n){return typeof e=="string"?He(e.split(""),t,n).join(""):He(e,t,n)}function He(e,t,n){const r=[];let i=t>=0?t:e.length+t;s(i>=0&&i<=e.length);let o=n>=0?n:e.length+n;for(s(o>=0&&o<=e.length);!(i===o||(i===e.length&&(i=0),i===o));){const l=e[i];s(l!==void 0),r.push(l),i++}return r}const ht=["http://","https://","tauri://"];function ke(e){return ht.some(t=>e.startsWith(t))||e.startsWith("/")||e.startsWith(".")||e.startsWith("?")||e.startsWith("#")||e===""}function _n(e,t){s(t.includes(" but ")),g(typeof e=="string",`${t} should be a string`),!ke(e)&&(!e.startsWith("/")&&!e.includes(":")?g(!1,`${t} is ${h.cyan(e)} and it should be /${h.cyan(e)} instead (URL pathnames should start with a leading slash)`):g(!1,`${t} isn't a valid URL`))}function J(e,t){s(ke(e)),s(t.startsWith("/"));const[n,...r]=e.split("#");s(n!==void 0);const i=["",...r].join("#")||null;s(i===null||i.startsWith("#"));const o=i===null?"":be(i.slice(1)),[l,...a]=n.split("?");s(l!==void 0);const u=["",...a].join("?")||null;s(u===null||u.startsWith("?"));const c={},d={};Array.from(new URLSearchParams(u||"")).forEach(([b,z])=>{c[b]=z,d[b]=[...d[b]||[],z]});const{origin:f,pathname:w}=Cn(l,t);s(f===null||f===be(f)),s(w.startsWith("/")),s(f===null||e.startsWith(f));const m=l.slice((f||"").length);Fn(e,f,m,u,i);let{pathname:v,hasBaseServer:C}=Tn(w,t);return v=$n(v),s(v.startsWith("/")),{origin:f,pathname:v,pathnameOriginal:m,hasBaseServer:C,search:c,searchAll:d,searchOriginal:u,hash:o,hashOriginal:i}}function be(e){try{return decodeURIComponent(e)}catch{}try{return decodeURI(e)}catch{}return e}function $n(e){return e=e.split("/").map(t=>be(t).split("/").join("%2F")).join("/"),e=e.replace(/\s/g,""),e}function Cn(e,t){var n;{const{origin:r,pathname:i}=fe(e);if(r)return{origin:r,pathname:i};s(i===e)}if(e.startsWith("/"))return{origin:null,pathname:e};{let r=typeof window<"u"&&((n=window==null?void 0:window.document)==null?void 0:n.baseURI);r&&(r=fe(r).pathname);const o=kn(e,r||t);return fe(o)}}function fe(e){if(ht.some(t=>e.startsWith(t))){const[t,n,r,...i]=e.split("/"),o=[t,n,r].join("/"),l=["",...i].join("/")||"/";return{origin:o,pathname:l}}else return{pathname:e,origin:null}}function kn(e,t){const n=t.split("/"),r=e.split("/");let i=t.endsWith("/");e.startsWith(".")&&n.pop();for(const l in r){const a=r[l];a==""&&l==="0"||a!="."&&(a==".."?n.pop():(i=!1,n.push(a)))}let o=n.join("/");return i&&!o.endsWith("/")&&(o+="/"),o.startsWith("/")||(o="/"+o),o}function On(e){s(e.startsWith("/")),s(!e.includes("?")),s(!e.includes("#"))}function Tn(e,t){On(e),s(Oe(t));let n=e;if(s(n.startsWith("/")),s(t.startsWith("/")),t==="/")return{pathname:e,hasBaseServer:!0};let r=t;return t.endsWith("/")&&n===F(t,0,-1)&&(r=F(t,0,-1),s(n===r)),n.startsWith(r)?(s(n.startsWith("/")||n.startsWith("http")),s(n.startsWith(r)),n=n.slice(r.length),n.startsWith("/")||(n="/"+n),s(n.startsWith("/")),{pathname:n,hasBaseServer:!0}):{pathname:e,hasBaseServer:!1}}function Oe(e){return e.startsWith("/")}function Fn(e,t,n,r,i){const o=xn(t,n,r,i);s(e===o)}function xn(e,t,n,r){return`${e||""}${t}${n||""}${r||""}`}function y(e,t){t&&Object.defineProperties(e,Object.getOwnPropertyDescriptors(t))}function I(e){return e instanceof Function||typeof e=="function"}function ne(e){return(t,n)=>{const r=e(t),i=e(n);return r===i?0:r>i?-1:1}}function An(e){return(t,n)=>{const r=e(t),i=e(n);return r===i?0:r{const r=e(t),i=e(n);if(s([!0,!1,null].includes(r)),s([!0,!1,null].includes(i)),r===i)return 0;if(r===!0||i===!1)return-1;if(i===!0||r===!1)return 1;s(!1)}}function In(e){return j(t=>{const n=e(t);return n===null?null:!n})}function p(e,t,n="unknown"){if(!P(e))return!1;if(!(t in e))return n==="undefined";if(n==="unknown")return!0;const r=e[t];return n==="array"?Array.isArray(r):n==="object"?P(r):n==="string[]"?Array.isArray(r)&&r.every(i=>typeof i=="string"):n==="function"?I(r):Array.isArray(n)?typeof r=="string"&&n.includes(r):n==="null"?r===null:n==="undefined"?r===void 0:n==="true"?r===!0:n==="false"?r===!1:typeof r===n}function A(e){return typeof e!="object"||e===null?!1:Object.getPrototypeOf(e)===null?!0:e.constructor.name==="Object"}function jn(e,t){return e.toLowerCase()t.toLowerCase()?1:0}const Ln=e=>e!=null;function Ve(e){return"["+e.map(t=>"'"+t+"'").join(", ")+"]"}function pt(e){const t=n=>`Not a posix path: ${n}`;s(e!==null,t("null")),s(typeof e=="string",t(`typeof path === ${JSON.stringify(typeof e)}`)),s(e!=="",t("(empty string)")),s(e),s(!e.includes("\\"),t(e))}function de(e,t){const n=Object.getOwnPropertyDescriptor(e,t);return!!n&&!("value"in n)&&!!n.get}function Nn(e){return typeof e=="object"&&e!==null&&"then"in e&&I(e.then)}function Wn(e){return[null,void 0].includes(e)?String(e):["boolean","number","string"].includes(typeof e)?JSON.stringify(e):null}function Bn(e){return e.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&")}const Hn=["clientRouting"];function Vn(e){Hn.forEach(t=>{if(s(e.fileExports),!(t in e.fileExports))return;const n=`The value of \`${t}\` is only allowed to be \`true\`.`;g(e.fileExports[t]!==!1,`${e.filePath} has \`export { ${t} }\` with the value \`false\` which is prohibited: remove \`export { ${t} }\` instead. (${n})`),g(e.fileExports[t]===!0,`${e.filePath} has \`export { ${t} }\` with a forbidden value. ${n}`)})}const mt=["render","clientRouting","prerender","doNotPrerender"];function Dn(e,t){g(!mt.includes(e),`${t} has \`export default { ${e} }\` which is prohibited, use \`export { ${e} }\` instead.`)}function zn(e,t){if(!e)return null;let[n,...r]=e;if(!n||r.length===0&&["*","default",t].includes(n))return null;s(n!=="*");let i="",o="";return n==="default"?i="export default":(i="export",r=[n,...r]),r.forEach(a=>{i=`${i} { ${a}`,o=` }${o}`}),i+o}function H(e,t,n){const r=Gn(e,t);if(r===null)return null;const{value:i,definedAt:o}=r;return n&&Un(i,n,t,o),r}function Un(e,t,n,r){s(e!==null);const i=typeof e;if(i===t)return;const o=Wn(e),l=o!==null?`value ${h.cyan(o)}`:`type ${h.cyan(i)}`,a=Te(n,{definedAt:r},!0);g(!1,`${a} has an invalid ${l}: it should be a ${h.cyan(t)} instead`)}function Gn(e,t){const n=e.configValues[t];return!n||n.value===null?null:n}function yt(e,t){const n=t.find(r=>r.pageId===e);return s(t.length>0),s(n),n}function Te(e,{definedAt:t},n){return`${n?"Config":"config"} ${h.cyan(e)} defined ${bt(t,e)}`}function bt(e,t){if(e.isComputed)return"internally";let n;return e.isCumulative?n=e.files:n=[e.file],s(n.length>=1),`at ${n.map(i=>{const{filePathToShowToUser:o,fileExportPath:l}=i;let a=o;const u=zn(l,t);return u&&(a=`${a} > ${h.cyan(u)}`),e.isEffect&&(a=`${a} > (${h.blue("effect")})`),a}).join(" / ")}`}function Yn(e,t){let n=bt(e.definedAt,t);return n.startsWith("at ")&&(n=n.slice(3)),n}function wt({definedAt:e}){if(e.isComputed||e.isCumulative)return null;const{filePathToShowToUser:t}=e.file;return s(t),t}function Mn({definedAt:e}){const t=wt({definedAt:e});return s(t),t}function Jn(e,t){const n={},r={},i={};e.forEach(a=>{Kn(a).forEach(({exportName:c,exportValue:d,isFromDefaultExport:f})=>{s(c!=="default"),i[c]=i[c]??[],i[c].push({exportValue:d,exportSource:`${a.filePath} > ${f?`\`export default { ${c} }\``:`\`export { ${c} }\``}`,filePath:a.filePath,_filePath:a.filePath,_fileType:a.fileType,_isFromDefaultExport:f})})}),t&&Object.entries(t.configValues).forEach(([a,u])=>{const{value:c}=u,d=wt(u),f=Te(a,u,!0);r[a]=r[a]??c,n[a]=n[a]??[],s(n[a].length===0),n[a].push({configValue:c,configDefinedAt:f,configDefinedByFile:d});const w=a;i[w]=i[w]??[],i[w].push({exportValue:c,exportSource:f,filePath:d,_filePath:d,_fileType:null,_isFromDefaultExport:null})});const o=qn(),l={};return Object.entries(i).forEach(([a,u])=>{u.forEach(({exportValue:c,_fileType:d,_isFromDefaultExport:f})=>{l[a]=l[a]??c,d===".page"&&!f&&(a in o||(o[a]=c))})}),s(!("default"in l)),s(!("default"in i)),{config:r,configEntries:n,exports:l,exportsAll:i,pageExports:o}}function Kn(e){const{filePath:t,fileExports:n}=e;s(n),s(gt(t));const r=[];return Object.entries(n).sort(In(([i])=>i==="default")).forEach(([i,o])=>{let l=i==="default";if(l)if(En(t))i="Page";else{g(P(o),`The ${h.cyan("export default")} of ${t} should be an object.`),Object.entries(o).forEach(([a,u])=>{Dn(a,t),r.push({exportName:a,exportValue:u,isFromDefaultExport:l})});return}r.push({exportName:i,exportValue:o,isFromDefaultExport:l})}),r.forEach(({exportName:i,isFromDefaultExport:o})=>{s(!(o&&mt.includes(i)))}),r}function qn(){return new Proxy({},{get(...e){return W()||R(!1,"`pageContext.pageExports` is outdated. Use `pageContext.exports` instead, see https://vike.dev/exports",{onlyOnce:!0,showStackTrace:!0}),Reflect.get(...e)}})}function Xn(e){const t=".page.",n=F(e.split(t),0,-1).join(t);return s(!n.includes("\\")),n}function V(e){pt(e)}function vt(e,t){if(t.length>0){const r=t.filter(i=>i.isErrorPage);return r.length===0?null:(g(r.length===1,"Only one error page can be defined"),r[0].pageId)}const n=_e(e.map(({pageId:r})=>r).filter(r=>K(r)));if(g(n.length<=1,`Only one _error.page.js is allowed, but found several: ${n.join(" ")}`),n.length>0){const r=n[0];return s(r),r}return null}function K(e,t){return s(!e.includes("\\")),e.includes("/_error")}function Qn(e,t){if(t.length>0){const n=t.find(r=>r.pageId===e);return s(n),!!n.isErrorPage}else return K(e)}const Zn=[".page",".page.server",".page.route",".page.client",".css"];function er(e){if(pt(e),e.endsWith(".css"))return".css";s(gt(e),e);const n=e.split("/").slice(-1)[0].split("."),r=n.slice(-3)[0],i=n.slice(-2)[0];if(i==="page")return".page";if(s(r==="page",e),i==="server")return".page.server";if(i==="client")return".page.client";if(i==="route")return".page.route";s(!1,e)}function St(e){const t=o=>i.pageId===o||i.isDefaultPageFile&&(De(i.filePath)||tr(o,i.filePath)),n=er(e),i={filePath:e,fileType:n,isEnv:o=>{if(s(n!==".page.route"),o==="CLIENT_ONLY")return n===".page.client"||n===".css";if(o==="SERVER_ONLY")return n===".page.server";if(o==="CLIENT_AND_SERVER")return n===".page";s(!1)},isRelevant:t,isDefaultPageFile:we(e),isRendererPageFile:n!==".css"&&we(e)&&De(e),isErrorPageFile:K(e),pageId:Xn(e)};return i}function we(e){return V(e),K(e)?!1:e.includes("/_default")}function De(e){return V(e),e.includes("/renderer/")}function tr(e,t){V(e),V(t),s(!e.endsWith("/")),s(!t.endsWith("/")),s(we(t));const n=F(t.split("/"),0,-1).filter(r=>r!=="_default").join("/");return e.startsWith(n)}function nr(e){s(Array.isArray(e)),e.forEach(t=>{s(P(t)),s(p(t,"pageId","string")),s(p(t,"routeFilesystem")),s(p(t,"configValuesSerialized")),s(p(t,"configValuesImported"))})}function rr(e){s(p(e,"configValuesImported"))}const ir=[{is:e=>e===void 0,match:e=>e==="!undefined",serialize:()=>"!undefined",deserialize:()=>{}},{is:e=>e===1/0,match:e=>e==="!Infinity",serialize:()=>"!Infinity",deserialize:()=>1/0},{is:e=>e===-1/0,match:e=>e==="!-Infinity",serialize:()=>"!-Infinity",deserialize:()=>-1/0},{is:e=>typeof e=="number"&&isNaN(e),match:e=>e==="!NaN",serialize:()=>"!NaN",deserialize:()=>NaN},{is:e=>e instanceof Date,match:e=>e.startsWith("!Date:"),serialize:e=>"!Date:"+e.toISOString(),deserialize:e=>new Date(e.slice(6))},{is:e=>typeof e=="bigint",match:e=>e.startsWith("!BigInt:"),serialize:e=>"!BigInt:"+e.toString(),deserialize:e=>{if(typeof BigInt>"u")throw new Error("Your JavaScript environement does not support BigInt. Consider adding a polyfill.");return BigInt(e.slice(8))}},{is:e=>e instanceof RegExp,match:e=>e.startsWith("!RegExp:"),serialize:e=>"!RegExp:"+e.toString(),deserialize:e=>{e=e.slice(8);const t=e.match(/\/(.*)\/(.*)?/),n=t[1],r=t[2];return new RegExp(n,r)}},{is:e=>e instanceof Map,match:e=>e.startsWith("!Map:"),serialize:(e,t)=>"!Map:"+t(Array.from(e.entries())),deserialize:(e,t)=>new Map(t(e.slice(5)))},{is:e=>e instanceof Set,match:e=>e.startsWith("!Set:"),serialize:(e,t)=>"!Set:"+t(Array.from(e.values())),deserialize:(e,t)=>new Set(t(e.slice(5)))},{is:e=>typeof e=="string"&&e.startsWith("!"),match:e=>e.startsWith("!"),serialize:e=>"!"+e,deserialize:e=>e.slice(1)}];function le(e){const t=JSON.parse(e);return Rt(t)}function Rt(e){return typeof e=="string"?or(e):(typeof e=="object"&&e!==null&&Object.entries(e).forEach(([t,n])=>{e[t]=Rt(n)}),e)}function or(e){for(const{match:t,deserialize:n}of ir)if(t(e))return n(e,le);return e}const sr=["$$registrations","_rerender_only"],ar=[".md",".mdx"];function lr(e,t,n){ur(e,t,n)}function ur(e,t,n){const i=Object.keys(e).filter(l=>!sr.includes(l)),o=i.filter(l=>l!=="default"&&l!==n);if(o.length===0){if(i.length===1)return;{s(i.length===0);let l=`${t} doesn't export any value, but it should have a ${h.cyan("export default")}`;n&&(l+=` or ${h.cyan(`export { ${n} }`)}`),g(!1,l)}}else if(n){if(ar.some(l=>t.endsWith(l)))return;o.forEach(l=>{R(!1,`${t} should have only a single export: move ${h.cyan(`export { ${l} }`)} to +config.h.js or its own +${o}.js`,{onlyOnce:!0})})}else{const l=o.join(", ");g(!1,`${t} replace ${h.cyan(`export { ${l} }`)} with ${h.cyan(`export default { ${l} }`)}`)}}function ve(e){const t={},n=(r,i,o,l)=>{t[r]={value:i,definedAt:{file:{filePathToShowToUser:o,fileExportPath:[r,"default"].includes(l)?[]:[l]}}},cr(i,r,o)};return e.forEach(r=>{if(r.isValueFile){const{exportValues:i,importPath:o,configName:l}=r;l!=="client"&&lr(i,o,l),Object.entries(i).forEach(([a,u])=>{const c=a!=="default",d=c?a:r.configName;c&&d in t||n(d,u,o,a)})}else{const{configName:i,importPath:o,exportValue:l,exportName:a}=r;n(i,l,o,a)}}),t}function cr(e,t,n){s(!n.includes("+config.")),g(e!==null,`Set ${h.cyan(t)} to ${h.cyan("null")} in a +config.h.js file instead of ${n}`)}function fr(e,t){const n=e.map(i=>{const o={};{const{configValuesSerialized:d}=i;Object.entries(d).forEach(([f,w])=>{{const{valueSerialized:m,definedAt:v}=w;s(m),s(!o[f]),o[f]={value:le(m),definedAt:v}}})}{const{configValuesImported:d}=i,f=ve(d);Object.assign(o,f)}const{pageId:l,isErrorPage:a,routeFilesystem:u,loadConfigValuesAll:c}=i;return dr(o),{pageId:l,isErrorPage:a,routeFilesystem:u,configValues:o,loadConfigValuesAll:c}}),r={configValues:{}};{const i=ve(t.configValuesImported);Object.assign(r.configValues,i)}return{pageConfigs:n,pageConfigGlobal:r}}function dr(e){const t="route",n=e[t];if(!n)return;const{value:r}=n,i=typeof r,o=Te(t,n,!0);g(i==="string"||I(r),`${o} has an invalid type '${i}': it should be a string or a function instead, see https://vike.dev/route`)}function gr(e){s(p(e,"isGeneratedFile")),s(e.isGeneratedFile!==!1,"vike was re-installed(/re-built). Restart your app."),s(e.isGeneratedFile===!0,`\`isGeneratedFile === ${e.isGeneratedFile}\``),s(p(e,"pageFilesLazy","object")),s(p(e,"pageFilesEager","object")),s(p(e,"pageFilesExportNamesLazy","object")),s(p(e,"pageFilesExportNamesEager","object")),s(p(e.pageFilesLazy,".page")),s(p(e.pageFilesLazy,".page.client")||p(e.pageFilesLazy,".page.server")),s(p(e,"pageFilesList","string[]")),s(p(e,"pageConfigsSerialized")),s(p(e,"pageConfigGlobalSerialized"));const{pageConfigsSerialized:t,pageConfigGlobalSerialized:n}=e;nr(t),rr(n);const{pageConfigs:r,pageConfigGlobal:i}=fr(t,n),o={};Q(e.pageFilesLazy).forEach(({filePath:a,pageFile:u,globValue:c})=>{u=o[a]=o[a]??u;const d=c;ze(d),u.loadFile=async()=>{"fileExports"in u||(u.fileExports=await d(),Vn(u))}}),Q(e.pageFilesExportNamesLazy).forEach(({filePath:a,pageFile:u,globValue:c})=>{u=o[a]=o[a]??u;const d=c;ze(d),u.loadExportNames=async()=>{if(!("exportNames"in u)){const f=await d();g("exportNames"in f,"You seem to be using Vite 2 but the latest vike versions only work with Vite 3"),s(p(f,"exportNames","string[]"),u.filePath),u.exportNames=f.exportNames}}}),Q(e.pageFilesEager).forEach(({filePath:a,pageFile:u,globValue:c})=>{u=o[a]=o[a]??u;const d=c;s(P(d)),u.fileExports=d}),Q(e.pageFilesExportNamesEager).forEach(({filePath:a,pageFile:u,globValue:c})=>{u=o[a]=o[a]??u;const d=c;s(P(d)),s(p(d,"exportNames","string[]"),u.filePath),u.exportNames=d.exportNames}),e.pageFilesList.forEach(a=>{o[a]=o[a]??St(a)});const l=Object.values(o);return l.forEach(({filePath:a})=>{s(!a.includes("\\"))}),{pageFiles:l,pageConfigs:r,pageConfigGlobal:i}}function Q(e){const t=[];return Object.entries(e).forEach(([n,r])=>{s(Zn.includes(n)),s(P(r)),Object.entries(r).forEach(([i,o])=>{const l=St(i);s(l.fileType===n),t.push({filePath:i,pageFile:l,globValue:o})})}),t}function ze(e){s(I(e))}const x=k("setPageFiles.ts",{});function hr(e){const{pageFiles:t,pageConfigs:n,pageConfigGlobal:r}=gr(e);x.pageFilesAll=t,x.pageConfigs=n,x.pageConfigGlobal=r}async function pr(e,t){e?(s(!x.pageFilesGetter),s(t===void 0)):(s(x.pageFilesGetter),s(typeof t=="boolean"),(!x.pageFilesAll||!t)&&await x.pageFilesGetter());const{pageFilesAll:n,pageConfigs:r,pageConfigGlobal:i}=x;s(n&&r&&i);const o=mr(n,r);return{pageFilesAll:n,allPageIds:o,pageConfigs:r,pageConfigGlobal:i}}function mr(e,t){const n=e.filter(({isDefaultPageFile:o})=>!o).map(({pageId:o})=>o),r=_e(n),i=t.map(o=>o.pageId);return[...r,...i]}function Fe(e,t){return Et(e,t,!0)}function Pt(e,t){return Et(e,t,!1)}function Et(e,t,n){const r=n?"CLIENT_ONLY":"SERVER_ONLY",i=e.filter(m=>m.isRelevant(t)&&m.fileType!==".page.route").sort(yr(n,t)),o=m=>{const v=i.filter(b=>b.pageId===t&&b.isEnv(m?"CLIENT_AND_SERVER":r));g(v.length<=1,`Merge the following files into a single file: ${v.map(b=>b.filePath).join(" ")}`);const C=v[0];return s(C===void 0||!C.isDefaultPageFile),C},l=o(!1),a=o(!0),u=m=>i.filter(v=>v.isRendererPageFile&&v.isEnv(m?"CLIENT_AND_SERVER":r))[0],c=u(!1),d=u(!0),f=i.filter(m=>m.isDefaultPageFile&&!m.isRendererPageFile&&(m.isEnv(r)||m.isEnv("CLIENT_AND_SERVER")));return[l,a,...f,c,d].filter(Ln)}function yr(e,t){const n=e?"CLIENT_ONLY":"SERVER_ONLY",r=-1,i=1,o=0;return(l,a)=>{if(!l.isDefaultPageFile&&a.isDefaultPageFile)return r;if(!a.isDefaultPageFile&&l.isDefaultPageFile)return i;{const u=l.isRendererPageFile,c=a.isRendererPageFile;if(!u&&c)return r;if(!c&&u)return i;s(u===c)}{const u=Ue(t,l.filePath),c=Ue(t,a.filePath);if(u{if(o=wr(o),o in Ge)return;Ge[o]=!0;const l=o.endsWith(".css"),a=l?'[rel="stylesheet"]':"";if(!!r)for(let d=i.length-1;d>=0;d--){const f=i[d];if(f.href===o&&(!l||f.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${a}`))return;const c=document.createElement("link");if(c.rel=l?"stylesheet":br,l||(c.as="script",c.crossOrigin=""),c.href=o,document.head.appendChild(c),l)return new Promise((d,f)=>{c.addEventListener("load",d),c.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t()).catch(o=>{const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o})},xe={},_t={},vr={},ue={},Sr=[],$t={},Rr=!0,Pr=[{pageId:"/pages/_error",isErrorPage:!0,routeFilesystem:void 0,loadConfigValuesAll:async()=>(await Ye(()=>import("./pages_error.ac9ba2d2.js"),["assets/entries/pages_error.ac9ba2d2.js","assets/chunks/chunk-5b43f735.js","assets/static/LayoutDefault.d4faae46.css"])).default,configValuesSerialized:{isClientSideRenderable:{definedAt:{isComputed:!0},valueSerialized:"true"},onBeforeRenderEnv:{definedAt:{isComputed:!0},valueSerialized:"null"},clientRouting:{definedAt:{file:{filePathToShowToUser:"vike-solid",fileExportPath:["default","clientRouting"]}},valueSerialized:"true"},hydrationCanBeAborted:{definedAt:{file:{filePathToShowToUser:"vike-solid",fileExportPath:["default","hydrationCanBeAborted"]}},valueSerialized:"true"},title:{definedAt:{file:{filePathToShowToUser:"/pages/+config.h.ts",fileExportPath:["default","title"]}},valueSerialized:'"Bati"'}},configValuesImported:[]},{pageId:"/pages/index",isErrorPage:void 0,routeFilesystem:{routeString:"/",definedBy:"/pages/index/"},loadConfigValuesAll:async()=>(await Ye(()=>import("./pages_index.b192f320.js"),["assets/entries/pages_index.b192f320.js","assets/chunks/chunk-5b43f735.js","assets/static/LayoutDefault.d4faae46.css"])).default,configValuesSerialized:{isClientSideRenderable:{definedAt:{isComputed:!0},valueSerialized:"true"},onBeforeRenderEnv:{definedAt:{isComputed:!0},valueSerialized:"null"},clientRouting:{definedAt:{file:{filePathToShowToUser:"vike-solid",fileExportPath:["default","clientRouting"]}},valueSerialized:"true"},hydrationCanBeAborted:{definedAt:{file:{filePathToShowToUser:"vike-solid",fileExportPath:["default","hydrationCanBeAborted"]}},valueSerialized:"true"},title:{definedAt:{file:{filePathToShowToUser:"/pages/+config.h.ts",fileExportPath:["default","title"]}},valueSerialized:'"Bati"'}},configValuesImported:[]}],Er={configValuesImported:[]},_r=Object.assign({}),$r={..._r};xe[".page"]=$r;const Cr=Object.assign({}),kr={...Cr};ue[".page"]=kr;const Or=Object.assign({}),Tr={...Or};ue[".page.server"]=Tr;const Fr=Object.assign({}),xr={...Fr};_t[".page.route"]=xr;const Ar=Object.assign({}),Ir={...Ar};xe[".page.client"]=Ir;const jr=Object.assign({}),Lr={...jr};ue[".page.client"]=Lr;const Nr=Object.assign({}),Wr={...Nr};$t[".page.server"]=Wr;const Br=Object.freeze(Object.defineProperty({__proto__:null,isGeneratedFile:Rr,neverLoaded:$t,pageConfigGlobalSerialized:Er,pageConfigsSerialized:Pr,pageFilesEager:_t,pageFilesExportNamesEager:ue,pageFilesExportNamesLazy:vr,pageFilesLazy:xe,pageFilesList:Sr},Symbol.toStringTag,{value:"Module"}));hr(Br);function Ct(){s(W())}function Hr(){Ct(),D()}function Vr(){Ct()}function Me(e){const t=e/1e3;if(t<120){const n=Je(t);return`${n} second${Ke(n)}`}{const n=t/60,r=Je(n);return`${r} minute${Ke(r)}`}}function Je(e){let t=e.toFixed(1);return t.endsWith(".0")&&(t=t.slice(0,-2)),t}function Ke(e){return e==="1"?"":"s"}const Dr=k("utils/executeHook.ts",{userHookErrors:new Map});function ce(e,t,n){const{timeoutErr:r,timeoutWarn:i}=zr(t);let o,l;const a=new Promise((f,w)=>{o=m=>{u(),f(m)},l=m=>{u(),w(m)}}),u=()=>{clearTimeout(c),clearTimeout(d)},c=setTimeout(()=>{R(!1,`The ${t}() hook defined by ${n} is taking more than ${Me(i)}`,{onlyOnce:!1})},i),d=setTimeout(()=>{const f=ut(`Hook timeout: the ${t}() hook defined by ${n} didn't finish after ${Me(r)}`);l(f)},r);return(async()=>{try{const f=await e();o(f)}catch(f){P(f)&&Dr.userHookErrors.set(f,{hookName:t,hookFilePath:n}),l(f)}})(),a}function zr(e){return e==="onBeforeRoute"?{timeoutErr:5*1e3,timeoutWarn:1*1e3}:e==="onBeforePrerender"?{timeoutErr:10*60*1e3,timeoutWarn:30*1e3}:{timeoutErr:40*1e3,timeoutWarn:4*1e3}}function q(e){const t=window.location.href,{searchOriginal:n,hashOriginal:r,pathname:i}=J(t,"/");let o;return e!=null&&e.withoutHash?o=`${i}${n||""}`:o=`${i}${n||""}${r||""}`,s(o.startsWith("/")),o}Vr();function Ur(){var r,i,o,l;const e=!!((i=(r=window.__REACT_DEVTOOLS_GLOBAL_HOOK__)==null?void 0:r.renderers)!=null&&i.size),t=!!((l=(o=window.__REACT_DEVTOOLS_GLOBAL_HOOK__)==null?void 0:o.rendererInterfaces)!=null&&l.size),n=!!window.__vite_plugin_react_preamble_installed__;return e||t||n}function kt(e,t){const n=Object.keys,r=typeof e;return e&&t&&r==="object"&&r===typeof t?n(e).length===n(t).length&&n(e).every(o=>kt(e[o],t[o])):e===t}function Gr(e,t){return P(e)&&P(t)&&e.constructor===t.constructor&&kt({...e,stack:null},{...t,stack:null})&&t.message===t.message}function re(e){window.location.href=e}function Yr(e){return new Promise(t=>setTimeout(t,e))}function Mr(e,t){let n=!1;return()=>{n||(n=!0,setTimeout(()=>{n=!1,e()},t))}}Hr();const qe=k("navigationState.ts",{}),Jr=q(),Ot={markNavigationChange(){qe.navigationChanged=!0},get noNavigationChangeYet(){return!qe.navigationChanged&&this.isFirstUrl(q())},isFirstUrl(e){return e===Jr}};function Kr(){const e="vike_pageContext",t=document.getElementById(e);g(t,`The element #${e} (which vike automatically injects into the HTML) is missing from the DOM. This may happen if your HTML is malformed. Make sure your HTML isn't malformed, and make sure you don't remove #${e} from the HTML nor from the DOM.`);const n=t.textContent;s(n);const r=le(n);return s(p(r,"_pageId","string")),y(r,{_hasPageContextFromServer:!0}),r}async function qr(e,t){const r=Pt(e,t).filter(o=>o.fileType===".page.server");return await Promise.all(r.map(async o=>{o.exportNames||(s(o.loadExportNames,t),await o.loadExportNames())})),{hasOnBeforeRenderServerSideOnlyHook:r.some(({exportNames:o})=>(s(o),o.includes("onBeforeRender")))}}function Xr(e,t){if(!A(e))return!1;for(const n of Object.keys(e))if(!t.includes(n))return!1;return!0}function Qr(e){return typeof e=="object"&&e!==null&&Object.values(e).every(t=>typeof t=="string")}function Zr(e,t){if(s(e.length>0),e.length===1)return e[0];const n=e.slice(0,e.length-1),r=e[e.length-1];return n.join(", ")+` ${t} `+r}W()&&D();function Tt(e,t=!0){s(e.urlOriginal),"urlPathname"in e&&s(de(e,"urlPathname")),Object.defineProperty(e,"urlPathname",{get:xt,enumerable:t,configurable:!0}),"url"in e&&s(de(e,"url")),Object.defineProperty(e,"url",{get:ei,enumerable:!1,configurable:!0}),"urlParsed"in e&&s(de(e,"urlParsed")),Object.defineProperty(e,"urlParsed",{get:ti,enumerable:t,configurable:!0})}function Ft(e){let t=e._urlHandler;t||(t=o=>o);const n=e._urlRewrite??e.urlOriginal;s(n&&typeof n=="string");const r=t(n),i=e._baseServer;return s(i.startsWith("/")),J(r,i)}function xt(){const{pathname:e}=Ft(this),t=e;return s(t.startsWith("/")),t}function ei(){return R(!1,"`pageContext.url` is outdated. Use `pageContext.urlPathname`, `pageContext.urlParsed`, or `pageContext.urlOriginal` instead. (See https://vike.dev/migration/0.4.23 for more information.)",{onlyOnce:!0,showStackTrace:!0}),xt.call(this)}function ti(){const e=Ft(this),{origin:t,pathname:n,pathnameOriginal:r,search:i,searchAll:o,searchOriginal:l,hash:a,hashOriginal:u}=e,c=W(),d=w=>{R(c,`pageContext.urlParsed.${w} isn't available on the server-side (HTTP requests don't include the URL hash by design)`,{onlyOnce:!0,showStackTrace:!0})},f={origin:t,pathname:n,pathnameOriginal:r,search:i,searchAll:o,searchOriginal:l,get hash(){return d("hash"),a},get hashOriginal(){return d("hashOriginal"),u},get hashString(){return R(!1,"pageContext.urlParsed.hashString has been renamed to pageContext.urlParsed.hashOriginal",{onlyOnce:!0,showStackTrace:!0}),d("hashString"),u},get searchString(){return R(!1,"pageContext.urlParsed.searchString has been renamed to pageContext.urlParsed.searchOriginal",{onlyOnce:!0,showStackTrace:!0}),l}};return Z(f,"hashString"),Z(f,"searchString"),c||(Z(f,"hash"),Z(f,"hashOriginal")),f}function Z(e,t){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(e,t,{...n,enumerable:!1})}function ni(e){s(typeof e.urlOriginal=="string"),s(typeof e.urlPathname=="string"),s(A(e.urlParsed)),s(e.urlPathname===e.urlParsed.pathname)}const At="@",Se=":";function ri(e,t="Invalid"){let n=`${t} Route String ${L(e)}`;g(e!=="",`${n} (empty string): set it to ${L("/")} instead`),g(["/","*"].includes(e[0]),`${n}: it should start with ${L("/")} or ${L("*")}`),g(!e.includes("**"),`${n}: set it to ${L(e.split("**").join("*"))} instead`)}function Re(e,t){ri(e);const n=It(e),r=n.map(f=>f.param?"[^/]+":f.glob?f.isLastDir?"|/.*":".*":Bn(f.static)).map(f=>`(${f})`).join(""),i=new RegExp(`^${r}/?$`),o=t.match(i);if(!o)return null;const l={},[a,...u]=o;let c=0;const d=n.filter(f=>f.glob).length>1;return n.forEach((f,w)=>{let m=u[w];if(f.param&&(l[f.param]=m),f.glob){const v=`*${d?++c:""}`;f.isLastDir&&(m=m.slice(1)),l[v]=m}}),{routeParams:l}}function It(e){const t=[],n=i=>{const o=t[t.length-1];o!=null&&o.static?o.static+=i:t.push({static:i})},r=e.split("/");return r.forEach((i,o)=>{const l=o===0,a=o===r.length-1;ii(i)?(R(!i.startsWith(Se),`Outdated Route String ${L(e)}, use ${L(e.split(Se).join(At))} instead`,{onlyOnce:!0}),l||n("/"),t.push({param:i.slice(1)})):i==="*"&&a&&e!=="*"&&e!=="/*"?t.push({glob:!0,isLastDir:!0}):(l||n("/"),i.split("*").forEach((u,c)=>{c!==0&&t.push({glob:!0}),u!==""&&n(u)}))}),t}function ee(e){const t=It(e),n=a=>(a==null?void 0:a.split("/").filter(Boolean).length)||0;let r=0;for(const a of t){if(!a.static)break;r+=n(a.static)}const i=t.map(a=>n(a.static)).reduce((a,u)=>a+u,0),o=t.filter(a=>a.param).length,l=t.filter(a=>a.glob).length;return{numberOfStaticPartsBeginning:r,numberOfStaticParts:i,numberOfParams:o,numberOfGlobs:l}}function ii(e){return e.startsWith(At)||e.startsWith(Se)}function Xe(e){const n=Re(e,e);return s(n),Object.keys(n.routeParams).length===0}function L(e){return W()?`'${e}'`:(e===""&&(e="''"),h.cyan(e))}function oi(e){e.sort(si).sort(j(t=>t.routeType==="FUNCTION"&&!!t.precedence&&t.precedence<0)).sort(j(t=>t.routeType==="STRING"&&Xe(t.routeString)===!1)).sort(j(t=>t.routeType==="FUNCTION"&&!t.precedence)).sort(j(t=>t.routeType==="STRING"&&Xe(t.routeString)===!0)).sort(j(t=>t.routeType==="FILESYSTEM")).sort(j(t=>t.routeType==="FUNCTION"&&!!t.precedence&&t.precedence>0))}function si(e,t){{const n=e.precedence??0,r=t.precedence??0;if(n!==r)return n>r?-1:1}if(!t.routeString||!e.routeString)return 0;{const r=ne(i=>ee(i).numberOfStaticPartsBeginning)(e.routeString,t.routeString);if(r!==0)return r}{const r=ne(i=>ee(i).numberOfStaticParts)(e.routeString,t.routeString);if(r!==0)return r}{const r=An(i=>ee(i).numberOfGlobs)(e.routeString,t.routeString);if(r!==0)return r}{const r=ne(i=>ee(i).numberOfParams)(e.routeString,t.routeString);if(r!==0)return r}return 0}async function ai(e,t,n){ni(t);let r=e(t);if(jt(r,`The Route Function ${n}`),r=await r,r===!1)return null;if(r===!0&&(r={}),g(A(r),`The Route Function ${n} should return a boolean or a plain JavaScript object (but it's ${h.cyan(`typeof result === ${JSON.stringify(typeof r)}`)} instead)`),"match"in r){const{match:l}=r;if(g(typeof l=="boolean",`The ${h.cyan("match")} value returned by the Route Function ${n} should be a boolean.`),!l)return null}let i=null;"precedence"in r&&(i=r.precedence,g(typeof i=="number",`The ${h.cyan("precedence")} value returned by the Route Function ${n} should be a number.`)),Lt(r,`The ${h.cyan("routeParams")} object returned by the Route Function ${n} should`);const o=r.routeParams||{};return g(!("pageContext"in r),`Providing ${h.cyan("pageContext")} in Route Functions is prohibited, see https://vike.dev/route-function#cannot-provide-pagecontext`),s(A(o)),Object.keys(r).forEach(l=>{g(l==="match"||l==="routeParams"||l==="precedence",`The Route Function ${n} returned an object with an unknown property ${h.cyan(l)} (the known properties are ${h.cyan("match")}, ${h.cyan("routeParams")}, and ${h.cyan("precedence")})`)}),{precedence:i,routeParams:o}}function jt(e,t){R(!Nn(e),`${t} returned a promise, but asynchronous routing is deprecated and will be removed in the next major release, see https://vike.dev/route-function#async`,{onlyOnce:!0})}function Qe(){const e=h.cyan("iKnowThePerformanceRisksOfAsyncRouteFunctions");R(!1,`${e} is deprecated and will be removed in the next major release`,{onlyOnce:!0})}function Lt(e,t){s(t.endsWith(" should")),p(e,"routeParams")&&(s(t.endsWith(" should")),g(A(e.routeParams),`${t} be a plain JavaScript object.`),g(Qr(e.routeParams),`${t} only hold string values.`))}function Nt(e,{hookName:t,hookFilePath:n}){if(e==null)return;s(!t.endsWith(")"));const r=`The ${h.cyan("pageContext")} object provided by the ${t}() hook defined by ${n}`;g(P(e),`${r} should be an object (but it's ${h.cyan(`typeof pageContext === ${JSON.stringify(typeof e)}`)} instead)`),g(!("_objectCreatedByVike"in e),`${r} shouldn't be the whole ${h.cyan("pageContext")} object, see https://vike.dev/pageContext-manipulation#do-not-return-entire-pagecontext`),R(!("_pageId"in e),`${r} sets ${h.cyan("pageContext._pageId")} which means that Vike's routing is overriden. This is an experimental feature: make sure to contact a vike maintainer before using this.`,{onlyOnce:!0}),g(!("is404"in e),`${r} sets ${h.cyan("pageContext.is404")} which is forbidden, use ${h.cyan("throw render()")} instead, see https://vike.dev/render`)}async function li(e,t){let n=e.onBeforeRoute(t);jt(n,`The onBeforeRoute() hook ${e.hookFilePath}`),n=await n;const r=`The onBeforeRoute() hook defined by ${e.hookFilePath}`;if(g(n==null||Xr(n,["pageContext"])&&p(n,"pageContext"),`${r} should return ${h.cyan("null")}, ${h.cyan("undefined")}, or a plain JavaScript object ${h.cyan("{ pageContext: { /* ... */ } }")}`),n==null)return null;if(g(p(n,"pageContext","object"),`${r} returned ${h.cyan("{ pageContext }")} but pageContext should be a plain JavaScript object.`),p(n.pageContext,"_pageId")&&!p(n.pageContext,"_pageId","null")){const o=`${r} returned ${h.cyan("{ pageContext: { _pageId } }")} but ${h.cyan("_pageId")} should be`;g(p(n.pageContext,"_pageId","string"),`${o} a string or null`),g(t._allPageIds.includes(n.pageContext._pageId),`${o} ${Zr(t._allPageIds.map(l=>h.cyan(l)),"or")}`)}p(n.pageContext,"routeParams")&&Lt(n.pageContext,`${r} returned ${h.cyan("{ pageContext: { routeParams } }")} but routeParams should`);const i={};return p(n.pageContext,"url")&&(R(!1,`${r} returned ${h.cyan("{ pageContext: { url } }")} but ${h.cyan("pageContext.url")} has been renamed to ${h.cyan("pageContext.urlOriginal")}. Return ${h.cyan("{ pageContext: { urlOriginal } }")} instead. (See https://vike.dev/migration/0.4.23 for more information.)`,{onlyOnce:!0}),n.pageContext.urlOriginal=n.pageContext.url,delete n.pageContext.url),p(n.pageContext,"urlOriginal")&&(_n(n.pageContext.urlOriginal,`${r} returned ${h.cyan("{ pageContext: { urlOriginal } }")} but ${h.cyan("urlOriginal")}`),y(i,{_urlOriginalPristine:t.urlOriginal})),Nt(n.pageContext,{hookFilePath:e.hookFilePath,hookName:"onBeforeRoute"}),y(i,n.pageContext),i}var te;function Ze(...e){var t;te||(te=(t=globalThis.__brillout_debug_createDebugger)==null?void 0:t.call(globalThis,"vike:routing")),te&&te(...e)}W()&&D();async function Wt(e){Tt(e),Ze("Pages routes:",e._pageRoutes);const t={};if(e._onBeforeRouteHook){const l=await li(e._onBeforeRouteHook,e);if(l){if(y(t,l),p(t,"_pageId","string")||p(t,"_pageId","null"))return p(t,"routeParams")?s(p(t,"routeParams","object")):y(t,{routeParams:{}}),y(t,{_routingProvidedByOnBeforeRouteHook:!0,_routeMatches:"CUSTOM_ROUTE"}),{pageContextAddendum:t};y(e,t)}}y(t,{_routingProvidedByOnBeforeRouteHook:!1});const n=e._allPageIds;s(n.length>=0),g(e._pageFilesAll.length>0||e._pageConfigs.length>0,"No *.page.js file found. You must create at least one *.page.js file."),g(n.length>0,"You must create at least one *.page.js file that isn't _default.page.*");const{urlPathname:r}=e;s(r.startsWith("/"));const i=[];await Promise.all(e._pageRoutes.map(async l=>{const{pageId:a,routeType:u}=l;if(l.routeType==="FILESYSTEM"){const{routeString:c}=l,d=Re(c,r);if(d){const{routeParams:f}=d;i.push({pageId:a,routeParams:f,routeString:c,routeType:u})}return}if(l.routeType==="STRING"){const{routeString:c}=l,d=Re(c,r);if(d){const{routeParams:f}=d;s(u==="STRING"),i.push({pageId:a,routeString:c,routeParams:f,routeType:u})}return}if(l.routeType==="FUNCTION"){const{routeFunction:c,routeDefinedAt:d}=l,f=await ai(c,e,d);if(f){const{routeParams:w,precedence:m}=f;i.push({pageId:a,precedence:m,routeParams:w,routeType:u})}return}s(!1)})),oi(i);const o=i[0];if(Ze(`Route matches for URL ${h.cyan(r)} (in precedence order):`,i),y(t,{_routeMatches:i}),!o)return y(t,{_pageId:null,routeParams:{}}),{pageContextAddendum:t};{const{routeParams:l}=o;s(A(l)),y(t,{_pageId:o.pageId,routeParams:o.routeParams})}return{pageContextAddendum:t}}function G(e,t){if(!(t in e.exports))return null;const n=e.exports[t],r=e.exportsAll[t][0];if(s(r.exportValue===n),n===null)return null;const i=r.filePath;return s(i),s(!i.endsWith(" ")),ui(n,{hookName:t,hookFilePath:i}),{hookFn:n,hookName:t,hookFilePath:i}}function ge(e,t){G(e,t)}function ui(e,{hookName:t,hookFilePath:n}){s(t&&n),s(!t.endsWith(")")),g(I(e),`hook ${t}() defined by ${n} should be a function`)}function ci(e){const t=Object.entries(e);for(const n in e)delete e[n];t.sort(([n],[r])=>jn(n,r)).forEach(([n,r])=>{e[n]=r})}function fi(e){di(e),gi(e)}function di(e){Qn(e._pageId,e._pageConfigs)&&s(p(e,"is404","boolean"))}function gi(e){if(e.is404===void 0||e.is404===null)return;const t=e.pageProps||{};if(!P(t)){R(!1,"pageContext.pageProps should be an object",{showStackTrace:!0,onlyOnce:!0});return}t.is404=t.is404||e.is404,e.pageProps=t}const hi="not-serializable",ie=k("getPageContextProxyForUser.ts",{});function pi(e){return s([!0,!1].includes(e._hasPageContextFromServer)),s([!0,!1].includes(e._hasPageContextFromClient)),new Proxy(e,{get(t,n){const r=e[n],i=JSON.stringify(n);return g(r!==hi,`pageContext[${i}] couldn't be serialized and, therefore, is missing on the client-side. Check the server logs for more information.`),mi(e,n,`pageContext[${i}] isn't available on the client-side because ${i} is missing in passToClient, see https://vike.dev/passToClient`),r}})}function mi(e,t,n){ie.prev===t||ie.prev==="__v_raw"||(wi(t),!(t in e)&&(bi(t)||e._hasPageContextFromServer&&!e._hasPageContextFromClient&&g(!1,n)))}const yi=["then","toJSON"];function bi(e){return!!(yi.includes(e)||typeof e=="symbol"||typeof e!="string"||e.startsWith("__v_"))}function wi(e){ie.prev=e,window.setTimeout(()=>{ie.prev=void 0},0)}function Ae(e,t){if(t){const i=e;s([!0,!1].includes(i.isHydration)),s([!0,!1,null].includes(i.isBackwardNavigation))}else{const i=e;s(i.isHydration===!0),s(i.isBackwardNavigation===null)}s("config"in e),s("configEntries"in e),s("exports"in e),s("exportsAll"in e),s("pageExports"in e),s(P(e.pageExports));const n=e.exports.Page;y(e,{Page:n}),vi(e),ci(e);const r=pi(e);return fi(e),r}function vi(e){Object.entries(e).forEach(([t,n])=>{delete e[t],e[t]=n})}function Bt(e,t){const n=e.filter(i=>i.pageId===t);return s(n.length<=1),n[0]??null}async function Si(e,t){if("isLoaded"in e&&!t)return e;const n=await e.loadConfigValuesAll(),r=ve(n);return Object.assign(e.configValues,r),y(e,{isLoaded:!0}),e}const Ht="__whileFetchingAssets";async function oe(e,t,n){const r=Fe(e,n),i=Bt(t,n);let o;const l=!1;try{o=(await Promise.all([i&&Si(i,l),...r.map(v=>{var C;return(C=v.loadFile)==null?void 0:C.call(v)})]))[0]}catch(m){throw Ri(m)&&Object.assign(m,{[Ht]:!0}),m}const{config:a,configEntries:u,exports:c,exportsAll:d,pageExports:f}=Jn(r,o);return{config:a,configEntries:u,exports:c,exportsAll:d,pageExports:f,_pageFilesLoaded:r}}function Ie(e){return e?e[Ht]===!0:!1}function Ri(e){return e instanceof Error?["Failed to fetch dynamically imported module","error loading dynamically imported module","Importing a module script failed","error resolving module specifier","failed to resolve module"].some(n=>e.message.toLowerCase().includes(n.toLowerCase())):!1}const et=["urlPathname","urlParsed"],Pi=["Page","pageExports","exports"];function Vt(e){[...Pi,...et].forEach(n=>{n in e&&(et.includes(n)?(s(n.startsWith("url")),R(!1,`pageContext.${n} is already available in the browser when using Client Routing; adding '${n}' to passToClient has no effect`,{onlyOnce:!0})):R(!1,`pageContext.${n} is a built-in that cannot be overriden; adding '${n}' to passToClient has no effect`,{onlyOnce:!0}),delete e[n])})}const Ei="/";function _i(e,t,n){const{pathnameOriginal:r,searchOriginal:i,hashOriginal:o}=J(e,Ei);e.startsWith("/")&&s(e===`${r}${i||""}${o||""}`,{url:e});const l=r.endsWith("/");let a;return n&&r!=="/"?(l?a=F(r,0,-1):a=r,s(!a.endsWith("/"),{url:e}),s(a!=="")):a=r+(l?"":"/")+"index",s(a),a=a+t,`${a}${i||""}${o||""}`}const $i=".pageContext.json",Ci=!1;function ki(e){return _i(e,$i,Ci)}function Oi(e,t,n){s(!n.endsWith(" "));const r=[],i=Object.keys(e);for(const o of i)t.includes(o)||r.push(o);g(r.length===0,[n,"returned an object with following unknown keys:",Ve(r)+".","Only following keys are allowed:",Ve(t)+"."].join(" "))}function Ti(e,t){if(e==null)return;const n=`The onBeforeRender() hook defined by ${t}`;g(A(e),`${n} should return a plain JavaScript object, ${h.cyan("undefined")}, or ${h.cyan("null")}`),Oi(e,["pageContext"],n),e.pageContext&&Nt(e.pageContext,{hookName:"onBeforeRender",hookFilePath:t})}async function Fi(e,t){let n;if(e._pageFilesAll.length>0?(s(e._pageConfigs.length===0),n=xi(e._pageId,e._pageFilesAll)):n=G(e,"guard"),!n)return;const r=n.hookFn;let i=e;const o=t(e);o&&(i=o);const l=await ce(()=>r(i),"guard",n.hookFilePath);g(l===void 0,`The guard() hook of ${n.hookFilePath} returns a value, but guard() doesn't accept any return value`)}function xi(e,t){const n=t.find(a=>a.pageId===e&&a.fileType===".page.route");if(!n)return null;const{filePath:r,fileExports:i}=n;s(i);const o=i.guard;if(!o)return null;const l=r;return g(I(o),`guard() defined by ${l} should be a function`),{hookFn:o,hookName:"guard",hookFilePath:l}}function Ai(e){const t=new Error("AbortRender");return y(t,{_pageContextAbort:e,[Dt]:!0}),t}const Dt="_isAbortError";function he(e){return typeof e=="object"&&e!==null&&Dt in e}function Ii(e){return e._urlRewrite||e._urlRedirect||e.abortStatusCode?(s(p(e,"_abortCall","string")),!0):!1}function ji(e,t,n){if(t)return;const r=n._urlRewrite??n.urlOriginal;s(r);const i=e._pageContextAbort._abortCall;Ce(!1,`${h.cyan(i)} intercepted while rendering ${h.cyan(r)}`,{onlyOnce:!1})}function Li(e){Ni(e);const t={_urlRewrite:null};return e.forEach(n=>{Object.assign(t,n)}),t}function Ni(e){const t=[];e.forEach(n=>{const r=n._urlRewrite;{const i=t.indexOf(r);if(i!==-1){const o=[...t.slice(i),r].map(l=>`render('${l}')`).join(" => ");g(!1,`Infinite loop of render() calls: ${o}`)}}t.push(r)})}function Wi(e,t){const n=[e>0&&h.cyan("throw render('/some-url')"),t>0&&h.cyan("throw redirect('/some-url')")].filter(Boolean).join(" and ");g(e+t<=7,`Maximum chain length of 7 ${n} exceeded. Did you define an infinite loop of ${n}?`)}const zt=k("router/getPageContext.ts",{});async function Bi(e){if(e._isFirstRenderAttempt&&Ot.isFirstUrl(e.urlOriginal)){s(p(e,"_isFirstRenderAttempt","true"));const t=await Hi(e);return tt(t),t}else{s(p(e,"_isFirstRenderAttempt","false"));const t=await Di(e);return tt(t),t}}async function Hi(e){const t=Kr();Vt(t),y(t,{isHydration:!0,_hasPageContextFromClient:!1}),y(t,await oe(e._pageFilesAll,e._pageConfigs,t._pageId));{const n={...e,...t};if(await Gi(n)){const r=await Gt(n);y(t,r)}}return t}async function Vi(e){const t=vt(e._pageFilesAll,e._pageConfigs);if(!t)throw new Error("No error page defined.");const n={isHydration:!1,_pageId:t};return y(n,await Ut({...e,...n},!0)),n}async function Di(e){const t={isHydration:!1};return y(t,await Yi(e)),y(t,await Ut({...e,...t},!1)),t}async function Ut(e,t){let n={};if(y(n,await oe(e._pageFilesAll,e._pageConfigs,e._pageId)),!t&&await zi({...e,...n})){const r=await Ki(e);if(!r._isError)y(n,r);else{const i=vt(e._pageFilesAll,e._pageConfigs);s(i),n={},y(n,{isHydration:!1,_pageId:i}),y(n,await oe(e._pageFilesAll,e._pageConfigs,n._pageId)),s(p(r,"is404","boolean")),s(p(r,"pageProps","object")),s(p(r.pageProps,"is404","boolean")),s(!("serverSideError"in r)),y(n,r)}}else y(n,{_hasPageContextFromServer:!1}),t||await Fi({_hasPageContextFromClient:!1,...e,...n},r=>Ae(r,!0));{const r=await Gt({...e,...n});y(n,r)}return n}async function Gt(e){const t=G(e,"onBeforeRender");if(!t)return{_hasPageContextFromClient:!1};const n=t.hookFn,r={_hasPageContextFromClient:!0},i=Ae({...e,...r},!0),o=await ce(()=>n(i),"onBeforeRender",t.hookFilePath);Ti(o,t.hookFilePath);const l=o==null?void 0:o.pageContext;return y(r,l),r}async function zi(e){return!!zt.pageContextInitHasClientData||await Ui(e)}function tt(e){e._pageContextInitHasClientData&&(zt.pageContextInitHasClientData=!0)}async function Ui(e){var t;if(e._pageConfigs.length>0){const n=yt(e._pageId,e._pageConfigs);return((t=H(n,"onBeforeRenderEnv"))==null?void 0:t.value)==="server-only"}else{const{hasOnBeforeRenderServerSideOnlyHook:n}=await qr(e._pageFilesAll,e._pageId);return n}}async function Gi(e){var t;if(e._pageConfigs.length>0){const n=yt(e._pageId,e._pageConfigs);return((t=H(n,"onBeforeRenderEnv"))==null?void 0:t.value)==="client-only"}else return!1}async function Yi(e){const n=(await Wt(e)).pageContextAddendum;if(!n._pageId){const r=new Error("No routing match");throw Mi(r),r}return s(p(n,"_pageId","string")),n}function Mi(e){y(e,{_is404:!0})}function Ji(e){return P(e)&&e._is404===!0}async function Ki(e){const t=e._urlRewrite??e._urlOriginalPristine??e.urlOriginal,n=ki(t),r=await fetch(n);{const l=r.headers.get("content-type"),a="application/json",u=l&&l.includes(a);if(!u&&r.status===404)throw re(e.urlOriginal),Xi();g(u,`Wrong Content-Type for ${n}: it should be ${a} but it's ${l} instead. Make sure to properly use pageContext.httpResponse.headers, see https://vike.dev/renderPage`)}const i=await r.text(),o=le(i);if(s(P(o)),"serverSideError"in o)throw ut("The pageContext object couldn't be fetched from the server as an error occurred on the server-side. Check your server logs.");if(Ii(o))throw Ai(o);return s(p(o,"_pageId","string")),Vt(o),y(o,{_hasPageContextFromServer:!0}),o}function qi(e){return P(e)&&!!e._alreadyServerSideRouted}function Xi(){const e=new Error("Page doesn't exist");return Object.assign(e,{_alreadyServerSideRouted:!0}),e}function Qi(e,t){const r=t.filter(({filesystemRoot:o})=>e.startsWith(o)).sort(ne(({filesystemRoot:o})=>o.length))[0];let i;if(r){const{filesystemRoot:o,urlRoot:l}=r,a={pageId:e,filesystemRoot:o,urlRoot:l};s(l.startsWith("/")&&e.startsWith("/")&&o.startsWith("/"),a),s(e.startsWith(o),a),o!=="/"?(s(!o.endsWith("/"),a),i=F(e,o.length,0)):i=e,s(i.startsWith("/"),a),i=l+(l.endsWith("/")?"":"/")+F(i,1,0)}else i=e;return s(i.startsWith("/")),i=i.split("/").filter(o=>o!=="pages"&&o!=="src"&&o!=="index").join("/"),s(!i.includes(".page.")),s(!i.endsWith(".")),i.endsWith("/index")&&(i=F(i,0,-6)),i===""&&(i="/"),s(i.startsWith("/")),s(!i.endsWith("/")||i==="/"),i}async function Zi(e,t,n,r){await Promise.all(e.filter(a=>a.fileType===".page.route").map(a=>{var u;return(u=a.loadFile)==null?void 0:u.call(a)}));const{onBeforeRouteHook:i,filesystemRoots:o}=to(e,t,n);return{pageRoutes:eo(o,e,t,r),onBeforeRouteHook:i}}function eo(e,t,n,r){const i=[];let o=[...r];if(n.length>0){s(e===null);const l=!0;n.filter(a=>!a.isErrorPage).forEach(a=>{const u=a.pageId;o=ro(o,u);let c=null;{const d="route",f=H(a,d);if(f){const w=f.value,m=Yn(f,d);typeof w=="string"?c={pageId:u,comesFromV1PageConfig:l,routeString:w,routeDefinedAt:m,routeType:"STRING"}:(s(I(w)),H(a,"iKnowThePerformanceRisksOfAsyncRouteFunctions","boolean")&&Qe(),c={pageId:u,comesFromV1PageConfig:l,routeFunction:w,routeDefinedAt:m,routeType:"FUNCTION"})}}if(!c){const{routeFilesystem:d}=a;s(d);const{routeString:f,definedBy:w}=d;s(d.routeString.startsWith("/")),c={pageId:u,routeFilesystemDefinedBy:w,comesFromV1PageConfig:l,routeString:f,routeDefinedAt:null,routeType:"FILESYSTEM"}}s(c),i.push(c)})}if(n.length===0){s(e);const l=!1;o.filter(a=>!K(a)).forEach(a=>{const u=t.find(c=>c.pageId===a&&c.fileType===".page.route");if(!u||!("default"in u.fileExports)){const c=Qi(a,e);s(c.startsWith("/")),s(!c.endsWith("/")||c==="/"),i.push({pageId:a,comesFromV1PageConfig:l,routeString:c,routeDefinedAt:null,routeFilesystemDefinedBy:`${a}.page.*`,routeType:"FILESYSTEM"})}else{const{filePath:c,fileExports:d}=u;if(s(d.default),p(d,"default","string")){const f=d.default;g(f.startsWith("/"),`A Route String should start with a leading slash '/' but ${c} has \`export default '${f}'\`. Make sure to \`export default '/${f}'\` instead.`),i.push({pageId:a,comesFromV1PageConfig:l,routeString:f,routeDefinedAt:c,routeType:"STRING"});return}if(p(d,"default","function")){const f=d.default;"iKnowThePerformanceRisksOfAsyncRouteFunctions"in d&&Qe(),i.push({pageId:a,comesFromV1PageConfig:l,routeFunction:f,routeDefinedAt:c,routeType:"FUNCTION"});return}g(!1,`The default export of ${c} should be a string or a function.`)}})}return i}function to(e,t,n){var o;if(t.length>0){if((o=n.configValues.onBeforeRoute)!=null&&o.value){const l=n.configValues.onBeforeRoute,{value:a}=l,u=Mn(l);return g(I(a),`The hook onBeforeRoute() defined by ${u} should be a function.`),{onBeforeRouteHook:{hookFilePath:u,onBeforeRoute:a},filesystemRoots:null}}return{onBeforeRouteHook:null,filesystemRoots:null}}let r=null;const i=[];return e.filter(l=>l.fileType===".page.route"&&l.isDefaultPageFile).forEach(({filePath:l,fileExports:a})=>{if(s(a),"onBeforeRoute"in a){g(p(a,"onBeforeRoute","function"),`\`export { onBeforeRoute }\` of ${l} should be a function.`);const{onBeforeRoute:u}=a;r={hookFilePath:`${l} > \`export { onBeforeRoute }\``,onBeforeRoute:u}}"filesystemRoutingRoot"in a&&(g(p(a,"filesystemRoutingRoot","string"),`\`export { filesystemRoutingRoot }\` of ${l} should be a string.`),g(p(a,"filesystemRoutingRoot","string"),`\`export { filesystemRoutingRoot }\` of ${l} is \`'${a.filesystemRoutingRoot}'\` but it should start with a leading slash \`/\`.`),i.push({filesystemRoot:no(l),urlRoot:a.filesystemRoutingRoot}))}),{onBeforeRouteHook:r,filesystemRoots:i}}function no(e){s(e.startsWith("/")),s(!e.endsWith("/"));const t=e.split("/"),n=F(t,0,-1).join("/")||"/";return s(n.startsWith("/")),s(!n.endsWith("/")||n==="/"),n}function ro(e,t){const{length:n}=e;return e=e.filter(r=>r!==t),s(e.length===n-1),e}function Yt(){const e="/";return s(io(e)),e}function io(e){return e.startsWith("/")}const pe=k("createPageContext.ts",{});async function Mt(e){pe.pageFilesData||(pe.pageFilesData=await pr(!0));const{pageFilesAll:t,allPageIds:n,pageConfigs:r,pageConfigGlobal:i}=pe.pageFilesData,{pageRoutes:o,onBeforeRouteHook:l}=await Zi(t,r,i,n),a=Yt();s(Oe(a));const c={_objectCreatedByVike:!0,_urlHandler:null,_urlRewrite:null,_baseServer:a,_isProduction:!0,_pageFilesAll:t,_pageConfigs:r,_pageConfigGlobal:i,_allPageIds:n,_pageRoutes:o,_onBeforeRouteHook:l};return y(c,e),Tt(c),c}async function Jt(e){const t=await Mt({urlOriginal:e}),n=await Wt(t),r=t._pageFilesAll,i=t._pageConfigs;if(!("pageContextAddendum"in n))return{pageId:null,pageFilesAll:r,pageConfigs:i};const o=n.pageContextAddendum._pageId;return o?{pageId:o,pageFilesAll:r,pageConfigs:i}:{pageId:null,pageFilesAll:r,pageConfigs:i}}function U(e){return e.fileType===".css"?[]:e.exportNames?e.exportNames:(s(e.fileExports,e.filePath),Object.keys(e.fileExports))}function oo({pageFilesClientSide:e,pageFilesServerSide:t,pageId:n}){return{isHtmlOnly:r(),isClientRouting:o()};function r(){return t.some(a=>a.pageId===n&&a.fileType===".page")?(i(),!1):!(!t.some(a=>a.pageId===n&&a.fileType===".page.server")||e.some(a=>a.pageId===n&&a.fileType===".page.client"&&U(a).includes("render")))}function i(){const l=e.some(a=>U(a).includes("render"));g(l,["No client-side `render()` hook found.","See https://vike.dev/render-modes for more information.",["Loaded client-side page files (none of them `export { render }`):",...e.map((a,u)=>` (${u+1}): ${a.filePath}`)].join(` +`)}function fn(e){return e.startsWith(" at ")}function dn(e){return e.split(/\r?\n/)}function k(e,t){const n=globalThis.__vike=globalThis.__vike||{};return n[e]=n[e]||t}function P(e){return typeof e=="object"&&e!==null}function _e(e){return Array.from(new Set(e))}const T=k("assertPackageInstances.ts",{instances:[],alreadyLogged:new Set}),gn="The client runtime of Server Routing as well as the client runtime of Client Routing are both being loaded. Make sure they aren't loaded both at the same time for a given page. See https://vike.dev/client-runtimes-conflict",st="Two vike client runtime instances are being loaded. Make sure your client-side bundles don't include vike twice. (In order to reduce the size of your client-side JavaScript bundles.)";function at(){{const e=_e(T.instances);mn(e.length<=1,`Both vike@${e[0]} and vike@${e[1]} loaded. Only one version should be loaded.`)}T.checkSingleInstance&&T.instances.length>1&&ye(!1,st,{onlyOnce:!0,showStackTrace:!0})}function hn(e){ye(T.isClientRouting!==!1,gn,{onlyOnce:!0,showStackTrace:!0}),ye(T.isClientRouting===void 0,st,{onlyOnce:!0,showStackTrace:!0}),T.isClientRouting=!0,e&&(T.checkSingleInstance=!0),at()}function pn(e){T.instances.push(e),at()}function mn(e,t){if(e)return;const n=`[vike][Wrong Usage] ${t}`;throw new Error(n)}function ye(e,t,{onlyOnce:n,showStackTrace:r}){if(e)return;const i=`[vike][Warning] ${t}`;if(n){const{alreadyLogged:o}=T,l=n===!0?i:n;if(o.has(l))return;o.add(l)}console.warn(r?new Error(i):i)}const yn="0.4.144",N={projectName:"Vike",projectVersion:yn,npmPackageName:"vike",githubRepository:"https://github.com/vikejs/vike"};pn(N.projectVersion);const lt=new Proxy(e=>e,{get:()=>lt}),h=lt,S=k("utils/assert.ts",{alreadyLogged:new Set,logger(e,t){t==="info"?console.log(e):console.warn(e)},showStackTraceList:new WeakSet}),bn=`[${N.npmPackageName}]`,wn=`[${N.npmPackageName}@${N.projectVersion}]`,$e=2;function s(e,t){var l;if(e)return;const n=(()=>{if(!t)return null;const a=typeof t=="string"?t:JSON.stringify(t);return h.dim(`Debug info (for ${N.projectName} maintainers; you can ignore this): ${a}`)})(),r=`${N.githubRepository}/issues/new`;let i=[`You stumbled upon a bug in ${N.projectName}'s source code.`,`Go to ${h.blue(r)} and copy-paste this error; a maintainer will fix the bug (usually under 24 hours).`,n].filter(Boolean).join(" ");i=Y(i),i=ae(i,"Bug"),i=M(i,!0);const o=Ee(i,$e);throw(l=S.onBeforeLog)==null||l.call(S),o}function g(e,t,{showStackTrace:n}={}){var i;if(e)return;t=Y(t),t=ae(t,"Wrong Usage"),t=M(t);const r=Ee(t,$e);throw n&&S.showStackTraceList.add(r),(i=S.onBeforeLog)==null||i.call(S),r}function ut(e){return e=Y(e),e=ae(e,"Error"),e=M(e),Ee(e,$e)}function R(e,t,{onlyOnce:n,showStackTrace:r}){var i;if(!e){if(t=Y(t),t=ae(t,"Warning"),t=M(t),n){const{alreadyLogged:o}=S,l=n===!0?t:n;if(o.has(l))return;o.add(l)}if((i=S.onBeforeLog)==null||i.call(S),r){const o=new Error(t);S.showStackTraceList.add(o),S.logger(o,"warn")}else S.logger(t,"warn")}}function Ce(e,t,{onlyOnce:n}){var r;if(!e){if(t=Y(t),t=M(t),n){const{alreadyLogged:i}=S,o=t;if(i.has(o))return;i.add(o)}(r=S.onBeforeLog)==null||r.call(S),S.logger(t,"info")}}function ae(e,t){let n=`[${t}]`;const r=t==="Warning"?"yellow":"red";return n=h.bold(h[r](n)),`${n}${e}`}function Y(e){return e.startsWith("[")?e:` ${e}`}function M(e,t=!1){return`${t?wn:bn}${e}`}function W(){return typeof window<"u"&&typeof window.scrollY=="number"}const ct=k("utils/assertRouterType.ts",{});function D(){vn(ft()),ct.isClientRouting=!0}function ft(){return ct.isClientRouting!==!1}function vn(e){g(W(),`${h.cyan("import { something } from 'vike/client/router'")} is forbidden on the server-side`,{showStackTrace:!0}),R(e,"You shouldn't `import { something } from 'vike/client/router'` when using Server Routing. The 'vike/client/router' utilities work only with Client Routing. In particular, don't `import { navigate }` nor `import { prefetch }` as they unnecessarily bloat your client-side bundle sizes.",{showStackTrace:!0,onlyOnce:!0})}const Sn=["js","ts","cjs","cts","mjs","mts","jsx","tsx","cjsx","ctsx","mjsx","mtsx"],dt=["vue","svelte","marko","md","mdx"],Rn=[...Sn,...dt];function gt(e){const t=Rn.some(n=>e.endsWith("."+n));return s(!Pn(e)||t),t}function Pn(e){return/\.(c|m)?(j|t)sx?$/.test(e)}function En(e){return dt.some(t=>e.endsWith("."+t))}function F(e,t,n){return typeof e=="string"?He(e.split(""),t,n).join(""):He(e,t,n)}function He(e,t,n){const r=[];let i=t>=0?t:e.length+t;s(i>=0&&i<=e.length);let o=n>=0?n:e.length+n;for(s(o>=0&&o<=e.length);!(i===o||(i===e.length&&(i=0),i===o));){const l=e[i];s(l!==void 0),r.push(l),i++}return r}const ht=["http://","https://","tauri://"];function ke(e){return ht.some(t=>e.startsWith(t))||e.startsWith("/")||e.startsWith(".")||e.startsWith("?")||e.startsWith("#")||e===""}function _n(e,t){s(t.includes(" but ")),g(typeof e=="string",`${t} should be a string`),!ke(e)&&(!e.startsWith("/")&&!e.includes(":")?g(!1,`${t} is ${h.cyan(e)} and it should be /${h.cyan(e)} instead (URL pathnames should start with a leading slash)`):g(!1,`${t} isn't a valid URL`))}function J(e,t){s(ke(e)),s(t.startsWith("/"));const[n,...r]=e.split("#");s(n!==void 0);const i=["",...r].join("#")||null;s(i===null||i.startsWith("#"));const o=i===null?"":be(i.slice(1)),[l,...a]=n.split("?");s(l!==void 0);const u=["",...a].join("?")||null;s(u===null||u.startsWith("?"));const c={},d={};Array.from(new URLSearchParams(u||"")).forEach(([b,z])=>{c[b]=z,d[b]=[...d[b]||[],z]});const{origin:f,pathname:w}=Cn(l,t);s(f===null||f===be(f)),s(w.startsWith("/")),s(f===null||e.startsWith(f));const m=l.slice((f||"").length);Fn(e,f,m,u,i);let{pathname:v,hasBaseServer:C}=Tn(w,t);return v=$n(v),s(v.startsWith("/")),{origin:f,pathname:v,pathnameOriginal:m,hasBaseServer:C,search:c,searchAll:d,searchOriginal:u,hash:o,hashOriginal:i}}function be(e){try{return decodeURIComponent(e)}catch{}try{return decodeURI(e)}catch{}return e}function $n(e){return e=e.split("/").map(t=>be(t).split("/").join("%2F")).join("/"),e=e.replace(/\s/g,""),e}function Cn(e,t){var n;{const{origin:r,pathname:i}=fe(e);if(r)return{origin:r,pathname:i};s(i===e)}if(e.startsWith("/"))return{origin:null,pathname:e};{let r=typeof window<"u"&&((n=window==null?void 0:window.document)==null?void 0:n.baseURI);r&&(r=fe(r).pathname);const o=kn(e,r||t);return fe(o)}}function fe(e){if(ht.some(t=>e.startsWith(t))){const[t,n,r,...i]=e.split("/"),o=[t,n,r].join("/"),l=["",...i].join("/")||"/";return{origin:o,pathname:l}}else return{pathname:e,origin:null}}function kn(e,t){const n=t.split("/"),r=e.split("/");let i=t.endsWith("/");e.startsWith(".")&&n.pop();for(const l in r){const a=r[l];a==""&&l==="0"||a!="."&&(a==".."?n.pop():(i=!1,n.push(a)))}let o=n.join("/");return i&&!o.endsWith("/")&&(o+="/"),o.startsWith("/")||(o="/"+o),o}function On(e){s(e.startsWith("/")),s(!e.includes("?")),s(!e.includes("#"))}function Tn(e,t){On(e),s(Oe(t));let n=e;if(s(n.startsWith("/")),s(t.startsWith("/")),t==="/")return{pathname:e,hasBaseServer:!0};let r=t;return t.endsWith("/")&&n===F(t,0,-1)&&(r=F(t,0,-1),s(n===r)),n.startsWith(r)?(s(n.startsWith("/")||n.startsWith("http")),s(n.startsWith(r)),n=n.slice(r.length),n.startsWith("/")||(n="/"+n),s(n.startsWith("/")),{pathname:n,hasBaseServer:!0}):{pathname:e,hasBaseServer:!1}}function Oe(e){return e.startsWith("/")}function Fn(e,t,n,r,i){const o=xn(t,n,r,i);s(e===o)}function xn(e,t,n,r){return`${e||""}${t}${n||""}${r||""}`}function y(e,t){t&&Object.defineProperties(e,Object.getOwnPropertyDescriptors(t))}function I(e){return e instanceof Function||typeof e=="function"}function ne(e){return(t,n)=>{const r=e(t),i=e(n);return r===i?0:r>i?-1:1}}function An(e){return(t,n)=>{const r=e(t),i=e(n);return r===i?0:r{const r=e(t),i=e(n);if(s([!0,!1,null].includes(r)),s([!0,!1,null].includes(i)),r===i)return 0;if(r===!0||i===!1)return-1;if(i===!0||r===!1)return 1;s(!1)}}function In(e){return j(t=>{const n=e(t);return n===null?null:!n})}function p(e,t,n="unknown"){if(!P(e))return!1;if(!(t in e))return n==="undefined";if(n==="unknown")return!0;const r=e[t];return n==="array"?Array.isArray(r):n==="object"?P(r):n==="string[]"?Array.isArray(r)&&r.every(i=>typeof i=="string"):n==="function"?I(r):Array.isArray(n)?typeof r=="string"&&n.includes(r):n==="null"?r===null:n==="undefined"?r===void 0:n==="true"?r===!0:n==="false"?r===!1:typeof r===n}function A(e){return typeof e!="object"||e===null?!1:Object.getPrototypeOf(e)===null?!0:e.constructor.name==="Object"}function jn(e,t){return e.toLowerCase()t.toLowerCase()?1:0}const Ln=e=>e!=null;function Ve(e){return"["+e.map(t=>"'"+t+"'").join(", ")+"]"}function pt(e){const t=n=>`Not a posix path: ${n}`;s(e!==null,t("null")),s(typeof e=="string",t(`typeof path === ${JSON.stringify(typeof e)}`)),s(e!=="",t("(empty string)")),s(e),s(!e.includes("\\"),t(e))}function de(e,t){const n=Object.getOwnPropertyDescriptor(e,t);return!!n&&!("value"in n)&&!!n.get}function Nn(e){return typeof e=="object"&&e!==null&&"then"in e&&I(e.then)}function Wn(e){return[null,void 0].includes(e)?String(e):["boolean","number","string"].includes(typeof e)?JSON.stringify(e):null}function Bn(e){return e.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&")}const Hn=["clientRouting"];function Vn(e){Hn.forEach(t=>{if(s(e.fileExports),!(t in e.fileExports))return;const n=`The value of \`${t}\` is only allowed to be \`true\`.`;g(e.fileExports[t]!==!1,`${e.filePath} has \`export { ${t} }\` with the value \`false\` which is prohibited: remove \`export { ${t} }\` instead. (${n})`),g(e.fileExports[t]===!0,`${e.filePath} has \`export { ${t} }\` with a forbidden value. ${n}`)})}const mt=["render","clientRouting","prerender","doNotPrerender"];function Dn(e,t){g(!mt.includes(e),`${t} has \`export default { ${e} }\` which is prohibited, use \`export { ${e} }\` instead.`)}function zn(e,t){if(!e)return null;let[n,...r]=e;if(!n||r.length===0&&["*","default",t].includes(n))return null;s(n!=="*");let i="",o="";return n==="default"?i="export default":(i="export",r=[n,...r]),r.forEach(a=>{i=`${i} { ${a}`,o=` }${o}`}),i+o}function H(e,t,n){const r=Gn(e,t);if(r===null)return null;const{value:i,definedAt:o}=r;return n&&Un(i,n,t,o),r}function Un(e,t,n,r){s(e!==null);const i=typeof e;if(i===t)return;const o=Wn(e),l=o!==null?`value ${h.cyan(o)}`:`type ${h.cyan(i)}`,a=Te(n,{definedAt:r},!0);g(!1,`${a} has an invalid ${l}: it should be a ${h.cyan(t)} instead`)}function Gn(e,t){const n=e.configValues[t];return!n||n.value===null?null:n}function yt(e,t){const n=t.find(r=>r.pageId===e);return s(t.length>0),s(n),n}function Te(e,{definedAt:t},n){return`${n?"Config":"config"} ${h.cyan(e)} defined ${bt(t,e)}`}function bt(e,t){if(e.isComputed)return"internally";let n;return e.isCumulative?n=e.files:n=[e.file],s(n.length>=1),`at ${n.map(i=>{const{filePathToShowToUser:o,fileExportPath:l}=i;let a=o;const u=zn(l,t);return u&&(a=`${a} > ${h.cyan(u)}`),e.isEffect&&(a=`${a} > (${h.blue("effect")})`),a}).join(" / ")}`}function Yn(e,t){let n=bt(e.definedAt,t);return n.startsWith("at ")&&(n=n.slice(3)),n}function wt({definedAt:e}){if(e.isComputed||e.isCumulative)return null;const{filePathToShowToUser:t}=e.file;return s(t),t}function Mn({definedAt:e}){const t=wt({definedAt:e});return s(t),t}function Jn(e,t){const n={},r={},i={};e.forEach(a=>{Kn(a).forEach(({exportName:c,exportValue:d,isFromDefaultExport:f})=>{s(c!=="default"),i[c]=i[c]??[],i[c].push({exportValue:d,exportSource:`${a.filePath} > ${f?`\`export default { ${c} }\``:`\`export { ${c} }\``}`,filePath:a.filePath,_filePath:a.filePath,_fileType:a.fileType,_isFromDefaultExport:f})})}),t&&Object.entries(t.configValues).forEach(([a,u])=>{const{value:c}=u,d=wt(u),f=Te(a,u,!0);r[a]=r[a]??c,n[a]=n[a]??[],s(n[a].length===0),n[a].push({configValue:c,configDefinedAt:f,configDefinedByFile:d});const w=a;i[w]=i[w]??[],i[w].push({exportValue:c,exportSource:f,filePath:d,_filePath:d,_fileType:null,_isFromDefaultExport:null})});const o=qn(),l={};return Object.entries(i).forEach(([a,u])=>{u.forEach(({exportValue:c,_fileType:d,_isFromDefaultExport:f})=>{l[a]=l[a]??c,d===".page"&&!f&&(a in o||(o[a]=c))})}),s(!("default"in l)),s(!("default"in i)),{config:r,configEntries:n,exports:l,exportsAll:i,pageExports:o}}function Kn(e){const{filePath:t,fileExports:n}=e;s(n),s(gt(t));const r=[];return Object.entries(n).sort(In(([i])=>i==="default")).forEach(([i,o])=>{let l=i==="default";if(l)if(En(t))i="Page";else{g(P(o),`The ${h.cyan("export default")} of ${t} should be an object.`),Object.entries(o).forEach(([a,u])=>{Dn(a,t),r.push({exportName:a,exportValue:u,isFromDefaultExport:l})});return}r.push({exportName:i,exportValue:o,isFromDefaultExport:l})}),r.forEach(({exportName:i,isFromDefaultExport:o})=>{s(!(o&&mt.includes(i)))}),r}function qn(){return new Proxy({},{get(...e){return W()||R(!1,"`pageContext.pageExports` is outdated. Use `pageContext.exports` instead, see https://vike.dev/exports",{onlyOnce:!0,showStackTrace:!0}),Reflect.get(...e)}})}function Xn(e){const t=".page.",n=F(e.split(t),0,-1).join(t);return s(!n.includes("\\")),n}function V(e){pt(e)}function vt(e,t){if(t.length>0){const r=t.filter(i=>i.isErrorPage);return r.length===0?null:(g(r.length===1,"Only one error page can be defined"),r[0].pageId)}const n=_e(e.map(({pageId:r})=>r).filter(r=>K(r)));if(g(n.length<=1,`Only one _error.page.js is allowed, but found several: ${n.join(" ")}`),n.length>0){const r=n[0];return s(r),r}return null}function K(e,t){return s(!e.includes("\\")),e.includes("/_error")}function Qn(e,t){if(t.length>0){const n=t.find(r=>r.pageId===e);return s(n),!!n.isErrorPage}else return K(e)}const Zn=[".page",".page.server",".page.route",".page.client",".css"];function er(e){if(pt(e),e.endsWith(".css"))return".css";s(gt(e),e);const n=e.split("/").slice(-1)[0].split("."),r=n.slice(-3)[0],i=n.slice(-2)[0];if(i==="page")return".page";if(s(r==="page",e),i==="server")return".page.server";if(i==="client")return".page.client";if(i==="route")return".page.route";s(!1,e)}function St(e){const t=o=>i.pageId===o||i.isDefaultPageFile&&(De(i.filePath)||tr(o,i.filePath)),n=er(e),i={filePath:e,fileType:n,isEnv:o=>{if(s(n!==".page.route"),o==="CLIENT_ONLY")return n===".page.client"||n===".css";if(o==="SERVER_ONLY")return n===".page.server";if(o==="CLIENT_AND_SERVER")return n===".page";s(!1)},isRelevant:t,isDefaultPageFile:we(e),isRendererPageFile:n!==".css"&&we(e)&&De(e),isErrorPageFile:K(e),pageId:Xn(e)};return i}function we(e){return V(e),K(e)?!1:e.includes("/_default")}function De(e){return V(e),e.includes("/renderer/")}function tr(e,t){V(e),V(t),s(!e.endsWith("/")),s(!t.endsWith("/")),s(we(t));const n=F(t.split("/"),0,-1).filter(r=>r!=="_default").join("/");return e.startsWith(n)}function nr(e){s(Array.isArray(e)),e.forEach(t=>{s(P(t)),s(p(t,"pageId","string")),s(p(t,"routeFilesystem")),s(p(t,"configValuesSerialized")),s(p(t,"configValuesImported"))})}function rr(e){s(p(e,"configValuesImported"))}const ir=[{is:e=>e===void 0,match:e=>e==="!undefined",serialize:()=>"!undefined",deserialize:()=>{}},{is:e=>e===1/0,match:e=>e==="!Infinity",serialize:()=>"!Infinity",deserialize:()=>1/0},{is:e=>e===-1/0,match:e=>e==="!-Infinity",serialize:()=>"!-Infinity",deserialize:()=>-1/0},{is:e=>typeof e=="number"&&isNaN(e),match:e=>e==="!NaN",serialize:()=>"!NaN",deserialize:()=>NaN},{is:e=>e instanceof Date,match:e=>e.startsWith("!Date:"),serialize:e=>"!Date:"+e.toISOString(),deserialize:e=>new Date(e.slice(6))},{is:e=>typeof e=="bigint",match:e=>e.startsWith("!BigInt:"),serialize:e=>"!BigInt:"+e.toString(),deserialize:e=>{if(typeof BigInt>"u")throw new Error("Your JavaScript environement does not support BigInt. Consider adding a polyfill.");return BigInt(e.slice(8))}},{is:e=>e instanceof RegExp,match:e=>e.startsWith("!RegExp:"),serialize:e=>"!RegExp:"+e.toString(),deserialize:e=>{e=e.slice(8);const t=e.match(/\/(.*)\/(.*)?/),n=t[1],r=t[2];return new RegExp(n,r)}},{is:e=>e instanceof Map,match:e=>e.startsWith("!Map:"),serialize:(e,t)=>"!Map:"+t(Array.from(e.entries())),deserialize:(e,t)=>new Map(t(e.slice(5)))},{is:e=>e instanceof Set,match:e=>e.startsWith("!Set:"),serialize:(e,t)=>"!Set:"+t(Array.from(e.values())),deserialize:(e,t)=>new Set(t(e.slice(5)))},{is:e=>typeof e=="string"&&e.startsWith("!"),match:e=>e.startsWith("!"),serialize:e=>"!"+e,deserialize:e=>e.slice(1)}];function le(e){const t=JSON.parse(e);return Rt(t)}function Rt(e){return typeof e=="string"?or(e):(typeof e=="object"&&e!==null&&Object.entries(e).forEach(([t,n])=>{e[t]=Rt(n)}),e)}function or(e){for(const{match:t,deserialize:n}of ir)if(t(e))return n(e,le);return e}const sr=["$$registrations","_rerender_only"],ar=[".md",".mdx"];function lr(e,t,n){ur(e,t,n)}function ur(e,t,n){const i=Object.keys(e).filter(l=>!sr.includes(l)),o=i.filter(l=>l!=="default"&&l!==n);if(o.length===0){if(i.length===1)return;{s(i.length===0);let l=`${t} doesn't export any value, but it should have a ${h.cyan("export default")}`;n&&(l+=` or ${h.cyan(`export { ${n} }`)}`),g(!1,l)}}else if(n){if(ar.some(l=>t.endsWith(l)))return;o.forEach(l=>{R(!1,`${t} should have only a single export: move ${h.cyan(`export { ${l} }`)} to +config.h.js or its own +${o}.js`,{onlyOnce:!0})})}else{const l=o.join(", ");g(!1,`${t} replace ${h.cyan(`export { ${l} }`)} with ${h.cyan(`export default { ${l} }`)}`)}}function ve(e){const t={},n=(r,i,o,l)=>{t[r]={value:i,definedAt:{file:{filePathToShowToUser:o,fileExportPath:[r,"default"].includes(l)?[]:[l]}}},cr(i,r,o)};return e.forEach(r=>{if(r.isValueFile){const{exportValues:i,importPath:o,configName:l}=r;l!=="client"&&lr(i,o,l),Object.entries(i).forEach(([a,u])=>{const c=a!=="default",d=c?a:r.configName;c&&d in t||n(d,u,o,a)})}else{const{configName:i,importPath:o,exportValue:l,exportName:a}=r;n(i,l,o,a)}}),t}function cr(e,t,n){s(!n.includes("+config.")),g(e!==null,`Set ${h.cyan(t)} to ${h.cyan("null")} in a +config.h.js file instead of ${n}`)}function fr(e,t){const n=e.map(i=>{const o={};{const{configValuesSerialized:d}=i;Object.entries(d).forEach(([f,w])=>{{const{valueSerialized:m,definedAt:v}=w;s(m),s(!o[f]),o[f]={value:le(m),definedAt:v}}})}{const{configValuesImported:d}=i,f=ve(d);Object.assign(o,f)}const{pageId:l,isErrorPage:a,routeFilesystem:u,loadConfigValuesAll:c}=i;return dr(o),{pageId:l,isErrorPage:a,routeFilesystem:u,configValues:o,loadConfigValuesAll:c}}),r={configValues:{}};{const i=ve(t.configValuesImported);Object.assign(r.configValues,i)}return{pageConfigs:n,pageConfigGlobal:r}}function dr(e){const t="route",n=e[t];if(!n)return;const{value:r}=n,i=typeof r,o=Te(t,n,!0);g(i==="string"||I(r),`${o} has an invalid type '${i}': it should be a string or a function instead, see https://vike.dev/route`)}function gr(e){s(p(e,"isGeneratedFile")),s(e.isGeneratedFile!==!1,"vike was re-installed(/re-built). Restart your app."),s(e.isGeneratedFile===!0,`\`isGeneratedFile === ${e.isGeneratedFile}\``),s(p(e,"pageFilesLazy","object")),s(p(e,"pageFilesEager","object")),s(p(e,"pageFilesExportNamesLazy","object")),s(p(e,"pageFilesExportNamesEager","object")),s(p(e.pageFilesLazy,".page")),s(p(e.pageFilesLazy,".page.client")||p(e.pageFilesLazy,".page.server")),s(p(e,"pageFilesList","string[]")),s(p(e,"pageConfigsSerialized")),s(p(e,"pageConfigGlobalSerialized"));const{pageConfigsSerialized:t,pageConfigGlobalSerialized:n}=e;nr(t),rr(n);const{pageConfigs:r,pageConfigGlobal:i}=fr(t,n),o={};Q(e.pageFilesLazy).forEach(({filePath:a,pageFile:u,globValue:c})=>{u=o[a]=o[a]??u;const d=c;ze(d),u.loadFile=async()=>{"fileExports"in u||(u.fileExports=await d(),Vn(u))}}),Q(e.pageFilesExportNamesLazy).forEach(({filePath:a,pageFile:u,globValue:c})=>{u=o[a]=o[a]??u;const d=c;ze(d),u.loadExportNames=async()=>{if(!("exportNames"in u)){const f=await d();g("exportNames"in f,"You seem to be using Vite 2 but the latest vike versions only work with Vite 3"),s(p(f,"exportNames","string[]"),u.filePath),u.exportNames=f.exportNames}}}),Q(e.pageFilesEager).forEach(({filePath:a,pageFile:u,globValue:c})=>{u=o[a]=o[a]??u;const d=c;s(P(d)),u.fileExports=d}),Q(e.pageFilesExportNamesEager).forEach(({filePath:a,pageFile:u,globValue:c})=>{u=o[a]=o[a]??u;const d=c;s(P(d)),s(p(d,"exportNames","string[]"),u.filePath),u.exportNames=d.exportNames}),e.pageFilesList.forEach(a=>{o[a]=o[a]??St(a)});const l=Object.values(o);return l.forEach(({filePath:a})=>{s(!a.includes("\\"))}),{pageFiles:l,pageConfigs:r,pageConfigGlobal:i}}function Q(e){const t=[];return Object.entries(e).forEach(([n,r])=>{s(Zn.includes(n)),s(P(r)),Object.entries(r).forEach(([i,o])=>{const l=St(i);s(l.fileType===n),t.push({filePath:i,pageFile:l,globValue:o})})}),t}function ze(e){s(I(e))}const x=k("setPageFiles.ts",{});function hr(e){const{pageFiles:t,pageConfigs:n,pageConfigGlobal:r}=gr(e);x.pageFilesAll=t,x.pageConfigs=n,x.pageConfigGlobal=r}async function pr(e,t){e?(s(!x.pageFilesGetter),s(t===void 0)):(s(x.pageFilesGetter),s(typeof t=="boolean"),(!x.pageFilesAll||!t)&&await x.pageFilesGetter());const{pageFilesAll:n,pageConfigs:r,pageConfigGlobal:i}=x;s(n&&r&&i);const o=mr(n,r);return{pageFilesAll:n,allPageIds:o,pageConfigs:r,pageConfigGlobal:i}}function mr(e,t){const n=e.filter(({isDefaultPageFile:o})=>!o).map(({pageId:o})=>o),r=_e(n),i=t.map(o=>o.pageId);return[...r,...i]}function Fe(e,t){return Et(e,t,!0)}function Pt(e,t){return Et(e,t,!1)}function Et(e,t,n){const r=n?"CLIENT_ONLY":"SERVER_ONLY",i=e.filter(m=>m.isRelevant(t)&&m.fileType!==".page.route").sort(yr(n,t)),o=m=>{const v=i.filter(b=>b.pageId===t&&b.isEnv(m?"CLIENT_AND_SERVER":r));g(v.length<=1,`Merge the following files into a single file: ${v.map(b=>b.filePath).join(" ")}`);const C=v[0];return s(C===void 0||!C.isDefaultPageFile),C},l=o(!1),a=o(!0),u=m=>i.filter(v=>v.isRendererPageFile&&v.isEnv(m?"CLIENT_AND_SERVER":r))[0],c=u(!1),d=u(!0),f=i.filter(m=>m.isDefaultPageFile&&!m.isRendererPageFile&&(m.isEnv(r)||m.isEnv("CLIENT_AND_SERVER")));return[l,a,...f,c,d].filter(Ln)}function yr(e,t){const n=e?"CLIENT_ONLY":"SERVER_ONLY",r=-1,i=1,o=0;return(l,a)=>{if(!l.isDefaultPageFile&&a.isDefaultPageFile)return r;if(!a.isDefaultPageFile&&l.isDefaultPageFile)return i;{const u=l.isRendererPageFile,c=a.isRendererPageFile;if(!u&&c)return r;if(!c&&u)return i;s(u===c)}{const u=Ue(t,l.filePath),c=Ue(t,a.filePath);if(u{if(o=wr(o),o in Ge)return;Ge[o]=!0;const l=o.endsWith(".css"),a=l?'[rel="stylesheet"]':"";if(!!r)for(let d=i.length-1;d>=0;d--){const f=i[d];if(f.href===o&&(!l||f.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${a}`))return;const c=document.createElement("link");if(c.rel=l?"stylesheet":br,l||(c.as="script",c.crossOrigin=""),c.href=o,document.head.appendChild(c),l)return new Promise((d,f)=>{c.addEventListener("load",d),c.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t()).catch(o=>{const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o})},xe={},_t={},vr={},ue={},Sr=[],$t={},Rr=!0,Pr=[{pageId:"/pages/_error",isErrorPage:!0,routeFilesystem:void 0,loadConfigValuesAll:async()=>(await Ye(()=>import("./pages_error.75643d35.js"),["assets/entries/pages_error.75643d35.js","assets/chunks/chunk-f1b9f6a2.js","assets/static/LayoutDefault.d4faae46.css"])).default,configValuesSerialized:{isClientSideRenderable:{definedAt:{isComputed:!0},valueSerialized:"true"},onBeforeRenderEnv:{definedAt:{isComputed:!0},valueSerialized:"null"},clientRouting:{definedAt:{file:{filePathToShowToUser:"vike-solid",fileExportPath:["default","clientRouting"]}},valueSerialized:"true"},hydrationCanBeAborted:{definedAt:{file:{filePathToShowToUser:"vike-solid",fileExportPath:["default","hydrationCanBeAborted"]}},valueSerialized:"true"},title:{definedAt:{file:{filePathToShowToUser:"/pages/+config.h.ts",fileExportPath:["default","title"]}},valueSerialized:'"Bati"'}},configValuesImported:[]},{pageId:"/pages/index",isErrorPage:void 0,routeFilesystem:{routeString:"/",definedBy:"/pages/index/"},loadConfigValuesAll:async()=>(await Ye(()=>import("./pages_index.afbdc8eb.js"),["assets/entries/pages_index.afbdc8eb.js","assets/chunks/chunk-f1b9f6a2.js","assets/static/LayoutDefault.d4faae46.css"])).default,configValuesSerialized:{isClientSideRenderable:{definedAt:{isComputed:!0},valueSerialized:"true"},onBeforeRenderEnv:{definedAt:{isComputed:!0},valueSerialized:"null"},clientRouting:{definedAt:{file:{filePathToShowToUser:"vike-solid",fileExportPath:["default","clientRouting"]}},valueSerialized:"true"},hydrationCanBeAborted:{definedAt:{file:{filePathToShowToUser:"vike-solid",fileExportPath:["default","hydrationCanBeAborted"]}},valueSerialized:"true"},title:{definedAt:{file:{filePathToShowToUser:"/pages/+config.h.ts",fileExportPath:["default","title"]}},valueSerialized:'"Bati"'}},configValuesImported:[]}],Er={configValuesImported:[]},_r=Object.assign({}),$r={..._r};xe[".page"]=$r;const Cr=Object.assign({}),kr={...Cr};ue[".page"]=kr;const Or=Object.assign({}),Tr={...Or};ue[".page.server"]=Tr;const Fr=Object.assign({}),xr={...Fr};_t[".page.route"]=xr;const Ar=Object.assign({}),Ir={...Ar};xe[".page.client"]=Ir;const jr=Object.assign({}),Lr={...jr};ue[".page.client"]=Lr;const Nr=Object.assign({}),Wr={...Nr};$t[".page.server"]=Wr;const Br=Object.freeze(Object.defineProperty({__proto__:null,isGeneratedFile:Rr,neverLoaded:$t,pageConfigGlobalSerialized:Er,pageConfigsSerialized:Pr,pageFilesEager:_t,pageFilesExportNamesEager:ue,pageFilesExportNamesLazy:vr,pageFilesLazy:xe,pageFilesList:Sr},Symbol.toStringTag,{value:"Module"}));hr(Br);function Ct(){s(W())}function Hr(){Ct(),D()}function Vr(){Ct()}function Me(e){const t=e/1e3;if(t<120){const n=Je(t);return`${n} second${Ke(n)}`}{const n=t/60,r=Je(n);return`${r} minute${Ke(r)}`}}function Je(e){let t=e.toFixed(1);return t.endsWith(".0")&&(t=t.slice(0,-2)),t}function Ke(e){return e==="1"?"":"s"}const Dr=k("utils/executeHook.ts",{userHookErrors:new Map});function ce(e,t,n){const{timeoutErr:r,timeoutWarn:i}=zr(t);let o,l;const a=new Promise((f,w)=>{o=m=>{u(),f(m)},l=m=>{u(),w(m)}}),u=()=>{clearTimeout(c),clearTimeout(d)},c=setTimeout(()=>{R(!1,`The ${t}() hook defined by ${n} is taking more than ${Me(i)}`,{onlyOnce:!1})},i),d=setTimeout(()=>{const f=ut(`Hook timeout: the ${t}() hook defined by ${n} didn't finish after ${Me(r)}`);l(f)},r);return(async()=>{try{const f=await e();o(f)}catch(f){P(f)&&Dr.userHookErrors.set(f,{hookName:t,hookFilePath:n}),l(f)}})(),a}function zr(e){return e==="onBeforeRoute"?{timeoutErr:5*1e3,timeoutWarn:1*1e3}:e==="onBeforePrerender"?{timeoutErr:10*60*1e3,timeoutWarn:30*1e3}:{timeoutErr:40*1e3,timeoutWarn:4*1e3}}function q(e){const t=window.location.href,{searchOriginal:n,hashOriginal:r,pathname:i}=J(t,"/");let o;return e!=null&&e.withoutHash?o=`${i}${n||""}`:o=`${i}${n||""}${r||""}`,s(o.startsWith("/")),o}Vr();function Ur(){var r,i,o,l;const e=!!((i=(r=window.__REACT_DEVTOOLS_GLOBAL_HOOK__)==null?void 0:r.renderers)!=null&&i.size),t=!!((l=(o=window.__REACT_DEVTOOLS_GLOBAL_HOOK__)==null?void 0:o.rendererInterfaces)!=null&&l.size),n=!!window.__vite_plugin_react_preamble_installed__;return e||t||n}function kt(e,t){const n=Object.keys,r=typeof e;return e&&t&&r==="object"&&r===typeof t?n(e).length===n(t).length&&n(e).every(o=>kt(e[o],t[o])):e===t}function Gr(e,t){return P(e)&&P(t)&&e.constructor===t.constructor&&kt({...e,stack:null},{...t,stack:null})&&t.message===t.message}function re(e){window.location.href=e}function Yr(e){return new Promise(t=>setTimeout(t,e))}function Mr(e,t){let n=!1;return()=>{n||(n=!0,setTimeout(()=>{n=!1,e()},t))}}Hr();const qe=k("navigationState.ts",{}),Jr=q(),Ot={markNavigationChange(){qe.navigationChanged=!0},get noNavigationChangeYet(){return!qe.navigationChanged&&this.isFirstUrl(q())},isFirstUrl(e){return e===Jr}};function Kr(){const e="vike_pageContext",t=document.getElementById(e);g(t,`The element #${e} (which vike automatically injects into the HTML) is missing from the DOM. This may happen if your HTML is malformed. Make sure your HTML isn't malformed, and make sure you don't remove #${e} from the HTML nor from the DOM.`);const n=t.textContent;s(n);const r=le(n);return s(p(r,"_pageId","string")),y(r,{_hasPageContextFromServer:!0}),r}async function qr(e,t){const r=Pt(e,t).filter(o=>o.fileType===".page.server");return await Promise.all(r.map(async o=>{o.exportNames||(s(o.loadExportNames,t),await o.loadExportNames())})),{hasOnBeforeRenderServerSideOnlyHook:r.some(({exportNames:o})=>(s(o),o.includes("onBeforeRender")))}}function Xr(e,t){if(!A(e))return!1;for(const n of Object.keys(e))if(!t.includes(n))return!1;return!0}function Qr(e){return typeof e=="object"&&e!==null&&Object.values(e).every(t=>typeof t=="string")}function Zr(e,t){if(s(e.length>0),e.length===1)return e[0];const n=e.slice(0,e.length-1),r=e[e.length-1];return n.join(", ")+` ${t} `+r}W()&&D();function Tt(e,t=!0){s(e.urlOriginal),"urlPathname"in e&&s(de(e,"urlPathname")),Object.defineProperty(e,"urlPathname",{get:xt,enumerable:t,configurable:!0}),"url"in e&&s(de(e,"url")),Object.defineProperty(e,"url",{get:ei,enumerable:!1,configurable:!0}),"urlParsed"in e&&s(de(e,"urlParsed")),Object.defineProperty(e,"urlParsed",{get:ti,enumerable:t,configurable:!0})}function Ft(e){let t=e._urlHandler;t||(t=o=>o);const n=e._urlRewrite??e.urlOriginal;s(n&&typeof n=="string");const r=t(n),i=e._baseServer;return s(i.startsWith("/")),J(r,i)}function xt(){const{pathname:e}=Ft(this),t=e;return s(t.startsWith("/")),t}function ei(){return R(!1,"`pageContext.url` is outdated. Use `pageContext.urlPathname`, `pageContext.urlParsed`, or `pageContext.urlOriginal` instead. (See https://vike.dev/migration/0.4.23 for more information.)",{onlyOnce:!0,showStackTrace:!0}),xt.call(this)}function ti(){const e=Ft(this),{origin:t,pathname:n,pathnameOriginal:r,search:i,searchAll:o,searchOriginal:l,hash:a,hashOriginal:u}=e,c=W(),d=w=>{R(c,`pageContext.urlParsed.${w} isn't available on the server-side (HTTP requests don't include the URL hash by design)`,{onlyOnce:!0,showStackTrace:!0})},f={origin:t,pathname:n,pathnameOriginal:r,search:i,searchAll:o,searchOriginal:l,get hash(){return d("hash"),a},get hashOriginal(){return d("hashOriginal"),u},get hashString(){return R(!1,"pageContext.urlParsed.hashString has been renamed to pageContext.urlParsed.hashOriginal",{onlyOnce:!0,showStackTrace:!0}),d("hashString"),u},get searchString(){return R(!1,"pageContext.urlParsed.searchString has been renamed to pageContext.urlParsed.searchOriginal",{onlyOnce:!0,showStackTrace:!0}),l}};return Z(f,"hashString"),Z(f,"searchString"),c||(Z(f,"hash"),Z(f,"hashOriginal")),f}function Z(e,t){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(e,t,{...n,enumerable:!1})}function ni(e){s(typeof e.urlOriginal=="string"),s(typeof e.urlPathname=="string"),s(A(e.urlParsed)),s(e.urlPathname===e.urlParsed.pathname)}const At="@",Se=":";function ri(e,t="Invalid"){let n=`${t} Route String ${L(e)}`;g(e!=="",`${n} (empty string): set it to ${L("/")} instead`),g(["/","*"].includes(e[0]),`${n}: it should start with ${L("/")} or ${L("*")}`),g(!e.includes("**"),`${n}: set it to ${L(e.split("**").join("*"))} instead`)}function Re(e,t){ri(e);const n=It(e),r=n.map(f=>f.param?"[^/]+":f.glob?f.isLastDir?"|/.*":".*":Bn(f.static)).map(f=>`(${f})`).join(""),i=new RegExp(`^${r}/?$`),o=t.match(i);if(!o)return null;const l={},[a,...u]=o;let c=0;const d=n.filter(f=>f.glob).length>1;return n.forEach((f,w)=>{let m=u[w];if(f.param&&(l[f.param]=m),f.glob){const v=`*${d?++c:""}`;f.isLastDir&&(m=m.slice(1)),l[v]=m}}),{routeParams:l}}function It(e){const t=[],n=i=>{const o=t[t.length-1];o!=null&&o.static?o.static+=i:t.push({static:i})},r=e.split("/");return r.forEach((i,o)=>{const l=o===0,a=o===r.length-1;ii(i)?(R(!i.startsWith(Se),`Outdated Route String ${L(e)}, use ${L(e.split(Se).join(At))} instead`,{onlyOnce:!0}),l||n("/"),t.push({param:i.slice(1)})):i==="*"&&a&&e!=="*"&&e!=="/*"?t.push({glob:!0,isLastDir:!0}):(l||n("/"),i.split("*").forEach((u,c)=>{c!==0&&t.push({glob:!0}),u!==""&&n(u)}))}),t}function ee(e){const t=It(e),n=a=>(a==null?void 0:a.split("/").filter(Boolean).length)||0;let r=0;for(const a of t){if(!a.static)break;r+=n(a.static)}const i=t.map(a=>n(a.static)).reduce((a,u)=>a+u,0),o=t.filter(a=>a.param).length,l=t.filter(a=>a.glob).length;return{numberOfStaticPartsBeginning:r,numberOfStaticParts:i,numberOfParams:o,numberOfGlobs:l}}function ii(e){return e.startsWith(At)||e.startsWith(Se)}function Xe(e){const n=Re(e,e);return s(n),Object.keys(n.routeParams).length===0}function L(e){return W()?`'${e}'`:(e===""&&(e="''"),h.cyan(e))}function oi(e){e.sort(si).sort(j(t=>t.routeType==="FUNCTION"&&!!t.precedence&&t.precedence<0)).sort(j(t=>t.routeType==="STRING"&&Xe(t.routeString)===!1)).sort(j(t=>t.routeType==="FUNCTION"&&!t.precedence)).sort(j(t=>t.routeType==="STRING"&&Xe(t.routeString)===!0)).sort(j(t=>t.routeType==="FILESYSTEM")).sort(j(t=>t.routeType==="FUNCTION"&&!!t.precedence&&t.precedence>0))}function si(e,t){{const n=e.precedence??0,r=t.precedence??0;if(n!==r)return n>r?-1:1}if(!t.routeString||!e.routeString)return 0;{const r=ne(i=>ee(i).numberOfStaticPartsBeginning)(e.routeString,t.routeString);if(r!==0)return r}{const r=ne(i=>ee(i).numberOfStaticParts)(e.routeString,t.routeString);if(r!==0)return r}{const r=An(i=>ee(i).numberOfGlobs)(e.routeString,t.routeString);if(r!==0)return r}{const r=ne(i=>ee(i).numberOfParams)(e.routeString,t.routeString);if(r!==0)return r}return 0}async function ai(e,t,n){ni(t);let r=e(t);if(jt(r,`The Route Function ${n}`),r=await r,r===!1)return null;if(r===!0&&(r={}),g(A(r),`The Route Function ${n} should return a boolean or a plain JavaScript object (but it's ${h.cyan(`typeof result === ${JSON.stringify(typeof r)}`)} instead)`),"match"in r){const{match:l}=r;if(g(typeof l=="boolean",`The ${h.cyan("match")} value returned by the Route Function ${n} should be a boolean.`),!l)return null}let i=null;"precedence"in r&&(i=r.precedence,g(typeof i=="number",`The ${h.cyan("precedence")} value returned by the Route Function ${n} should be a number.`)),Lt(r,`The ${h.cyan("routeParams")} object returned by the Route Function ${n} should`);const o=r.routeParams||{};return g(!("pageContext"in r),`Providing ${h.cyan("pageContext")} in Route Functions is prohibited, see https://vike.dev/route-function#cannot-provide-pagecontext`),s(A(o)),Object.keys(r).forEach(l=>{g(l==="match"||l==="routeParams"||l==="precedence",`The Route Function ${n} returned an object with an unknown property ${h.cyan(l)} (the known properties are ${h.cyan("match")}, ${h.cyan("routeParams")}, and ${h.cyan("precedence")})`)}),{precedence:i,routeParams:o}}function jt(e,t){R(!Nn(e),`${t} returned a promise, but asynchronous routing is deprecated and will be removed in the next major release, see https://vike.dev/route-function#async`,{onlyOnce:!0})}function Qe(){const e=h.cyan("iKnowThePerformanceRisksOfAsyncRouteFunctions");R(!1,`${e} is deprecated and will be removed in the next major release`,{onlyOnce:!0})}function Lt(e,t){s(t.endsWith(" should")),p(e,"routeParams")&&(s(t.endsWith(" should")),g(A(e.routeParams),`${t} be a plain JavaScript object.`),g(Qr(e.routeParams),`${t} only hold string values.`))}function Nt(e,{hookName:t,hookFilePath:n}){if(e==null)return;s(!t.endsWith(")"));const r=`The ${h.cyan("pageContext")} object provided by the ${t}() hook defined by ${n}`;g(P(e),`${r} should be an object (but it's ${h.cyan(`typeof pageContext === ${JSON.stringify(typeof e)}`)} instead)`),g(!("_objectCreatedByVike"in e),`${r} shouldn't be the whole ${h.cyan("pageContext")} object, see https://vike.dev/pageContext-manipulation#do-not-return-entire-pagecontext`),R(!("_pageId"in e),`${r} sets ${h.cyan("pageContext._pageId")} which means that Vike's routing is overriden. This is an experimental feature: make sure to contact a vike maintainer before using this.`,{onlyOnce:!0}),g(!("is404"in e),`${r} sets ${h.cyan("pageContext.is404")} which is forbidden, use ${h.cyan("throw render()")} instead, see https://vike.dev/render`)}async function li(e,t){let n=e.onBeforeRoute(t);jt(n,`The onBeforeRoute() hook ${e.hookFilePath}`),n=await n;const r=`The onBeforeRoute() hook defined by ${e.hookFilePath}`;if(g(n==null||Xr(n,["pageContext"])&&p(n,"pageContext"),`${r} should return ${h.cyan("null")}, ${h.cyan("undefined")}, or a plain JavaScript object ${h.cyan("{ pageContext: { /* ... */ } }")}`),n==null)return null;if(g(p(n,"pageContext","object"),`${r} returned ${h.cyan("{ pageContext }")} but pageContext should be a plain JavaScript object.`),p(n.pageContext,"_pageId")&&!p(n.pageContext,"_pageId","null")){const o=`${r} returned ${h.cyan("{ pageContext: { _pageId } }")} but ${h.cyan("_pageId")} should be`;g(p(n.pageContext,"_pageId","string"),`${o} a string or null`),g(t._allPageIds.includes(n.pageContext._pageId),`${o} ${Zr(t._allPageIds.map(l=>h.cyan(l)),"or")}`)}p(n.pageContext,"routeParams")&&Lt(n.pageContext,`${r} returned ${h.cyan("{ pageContext: { routeParams } }")} but routeParams should`);const i={};return p(n.pageContext,"url")&&(R(!1,`${r} returned ${h.cyan("{ pageContext: { url } }")} but ${h.cyan("pageContext.url")} has been renamed to ${h.cyan("pageContext.urlOriginal")}. Return ${h.cyan("{ pageContext: { urlOriginal } }")} instead. (See https://vike.dev/migration/0.4.23 for more information.)`,{onlyOnce:!0}),n.pageContext.urlOriginal=n.pageContext.url,delete n.pageContext.url),p(n.pageContext,"urlOriginal")&&(_n(n.pageContext.urlOriginal,`${r} returned ${h.cyan("{ pageContext: { urlOriginal } }")} but ${h.cyan("urlOriginal")}`),y(i,{_urlOriginalPristine:t.urlOriginal})),Nt(n.pageContext,{hookFilePath:e.hookFilePath,hookName:"onBeforeRoute"}),y(i,n.pageContext),i}var te;function Ze(...e){var t;te||(te=(t=globalThis.__brillout_debug_createDebugger)==null?void 0:t.call(globalThis,"vike:routing")),te&&te(...e)}W()&&D();async function Wt(e){Tt(e),Ze("Pages routes:",e._pageRoutes);const t={};if(e._onBeforeRouteHook){const l=await li(e._onBeforeRouteHook,e);if(l){if(y(t,l),p(t,"_pageId","string")||p(t,"_pageId","null"))return p(t,"routeParams")?s(p(t,"routeParams","object")):y(t,{routeParams:{}}),y(t,{_routingProvidedByOnBeforeRouteHook:!0,_routeMatches:"CUSTOM_ROUTE"}),{pageContextAddendum:t};y(e,t)}}y(t,{_routingProvidedByOnBeforeRouteHook:!1});const n=e._allPageIds;s(n.length>=0),g(e._pageFilesAll.length>0||e._pageConfigs.length>0,"No *.page.js file found. You must create at least one *.page.js file."),g(n.length>0,"You must create at least one *.page.js file that isn't _default.page.*");const{urlPathname:r}=e;s(r.startsWith("/"));const i=[];await Promise.all(e._pageRoutes.map(async l=>{const{pageId:a,routeType:u}=l;if(l.routeType==="FILESYSTEM"){const{routeString:c}=l,d=Re(c,r);if(d){const{routeParams:f}=d;i.push({pageId:a,routeParams:f,routeString:c,routeType:u})}return}if(l.routeType==="STRING"){const{routeString:c}=l,d=Re(c,r);if(d){const{routeParams:f}=d;s(u==="STRING"),i.push({pageId:a,routeString:c,routeParams:f,routeType:u})}return}if(l.routeType==="FUNCTION"){const{routeFunction:c,routeDefinedAt:d}=l,f=await ai(c,e,d);if(f){const{routeParams:w,precedence:m}=f;i.push({pageId:a,precedence:m,routeParams:w,routeType:u})}return}s(!1)})),oi(i);const o=i[0];if(Ze(`Route matches for URL ${h.cyan(r)} (in precedence order):`,i),y(t,{_routeMatches:i}),!o)return y(t,{_pageId:null,routeParams:{}}),{pageContextAddendum:t};{const{routeParams:l}=o;s(A(l)),y(t,{_pageId:o.pageId,routeParams:o.routeParams})}return{pageContextAddendum:t}}function G(e,t){if(!(t in e.exports))return null;const n=e.exports[t],r=e.exportsAll[t][0];if(s(r.exportValue===n),n===null)return null;const i=r.filePath;return s(i),s(!i.endsWith(" ")),ui(n,{hookName:t,hookFilePath:i}),{hookFn:n,hookName:t,hookFilePath:i}}function ge(e,t){G(e,t)}function ui(e,{hookName:t,hookFilePath:n}){s(t&&n),s(!t.endsWith(")")),g(I(e),`hook ${t}() defined by ${n} should be a function`)}function ci(e){const t=Object.entries(e);for(const n in e)delete e[n];t.sort(([n],[r])=>jn(n,r)).forEach(([n,r])=>{e[n]=r})}function fi(e){di(e),gi(e)}function di(e){Qn(e._pageId,e._pageConfigs)&&s(p(e,"is404","boolean"))}function gi(e){if(e.is404===void 0||e.is404===null)return;const t=e.pageProps||{};if(!P(t)){R(!1,"pageContext.pageProps should be an object",{showStackTrace:!0,onlyOnce:!0});return}t.is404=t.is404||e.is404,e.pageProps=t}const hi="not-serializable",ie=k("getPageContextProxyForUser.ts",{});function pi(e){return s([!0,!1].includes(e._hasPageContextFromServer)),s([!0,!1].includes(e._hasPageContextFromClient)),new Proxy(e,{get(t,n){const r=e[n],i=JSON.stringify(n);return g(r!==hi,`pageContext[${i}] couldn't be serialized and, therefore, is missing on the client-side. Check the server logs for more information.`),mi(e,n,`pageContext[${i}] isn't available on the client-side because ${i} is missing in passToClient, see https://vike.dev/passToClient`),r}})}function mi(e,t,n){ie.prev===t||ie.prev==="__v_raw"||(wi(t),!(t in e)&&(bi(t)||e._hasPageContextFromServer&&!e._hasPageContextFromClient&&g(!1,n)))}const yi=["then","toJSON"];function bi(e){return!!(yi.includes(e)||typeof e=="symbol"||typeof e!="string"||e.startsWith("__v_"))}function wi(e){ie.prev=e,window.setTimeout(()=>{ie.prev=void 0},0)}function Ae(e,t){if(t){const i=e;s([!0,!1].includes(i.isHydration)),s([!0,!1,null].includes(i.isBackwardNavigation))}else{const i=e;s(i.isHydration===!0),s(i.isBackwardNavigation===null)}s("config"in e),s("configEntries"in e),s("exports"in e),s("exportsAll"in e),s("pageExports"in e),s(P(e.pageExports));const n=e.exports.Page;y(e,{Page:n}),vi(e),ci(e);const r=pi(e);return fi(e),r}function vi(e){Object.entries(e).forEach(([t,n])=>{delete e[t],e[t]=n})}function Bt(e,t){const n=e.filter(i=>i.pageId===t);return s(n.length<=1),n[0]??null}async function Si(e,t){if("isLoaded"in e&&!t)return e;const n=await e.loadConfigValuesAll(),r=ve(n);return Object.assign(e.configValues,r),y(e,{isLoaded:!0}),e}const Ht="__whileFetchingAssets";async function oe(e,t,n){const r=Fe(e,n),i=Bt(t,n);let o;const l=!1;try{o=(await Promise.all([i&&Si(i,l),...r.map(v=>{var C;return(C=v.loadFile)==null?void 0:C.call(v)})]))[0]}catch(m){throw Ri(m)&&Object.assign(m,{[Ht]:!0}),m}const{config:a,configEntries:u,exports:c,exportsAll:d,pageExports:f}=Jn(r,o);return{config:a,configEntries:u,exports:c,exportsAll:d,pageExports:f,_pageFilesLoaded:r}}function Ie(e){return e?e[Ht]===!0:!1}function Ri(e){return e instanceof Error?["Failed to fetch dynamically imported module","error loading dynamically imported module","Importing a module script failed","error resolving module specifier","failed to resolve module"].some(n=>e.message.toLowerCase().includes(n.toLowerCase())):!1}const et=["urlPathname","urlParsed"],Pi=["Page","pageExports","exports"];function Vt(e){[...Pi,...et].forEach(n=>{n in e&&(et.includes(n)?(s(n.startsWith("url")),R(!1,`pageContext.${n} is already available in the browser when using Client Routing; adding '${n}' to passToClient has no effect`,{onlyOnce:!0})):R(!1,`pageContext.${n} is a built-in that cannot be overriden; adding '${n}' to passToClient has no effect`,{onlyOnce:!0}),delete e[n])})}const Ei="/";function _i(e,t,n){const{pathnameOriginal:r,searchOriginal:i,hashOriginal:o}=J(e,Ei);e.startsWith("/")&&s(e===`${r}${i||""}${o||""}`,{url:e});const l=r.endsWith("/");let a;return n&&r!=="/"?(l?a=F(r,0,-1):a=r,s(!a.endsWith("/"),{url:e}),s(a!=="")):a=r+(l?"":"/")+"index",s(a),a=a+t,`${a}${i||""}${o||""}`}const $i=".pageContext.json",Ci=!1;function ki(e){return _i(e,$i,Ci)}function Oi(e,t,n){s(!n.endsWith(" "));const r=[],i=Object.keys(e);for(const o of i)t.includes(o)||r.push(o);g(r.length===0,[n,"returned an object with following unknown keys:",Ve(r)+".","Only following keys are allowed:",Ve(t)+"."].join(" "))}function Ti(e,t){if(e==null)return;const n=`The onBeforeRender() hook defined by ${t}`;g(A(e),`${n} should return a plain JavaScript object, ${h.cyan("undefined")}, or ${h.cyan("null")}`),Oi(e,["pageContext"],n),e.pageContext&&Nt(e.pageContext,{hookName:"onBeforeRender",hookFilePath:t})}async function Fi(e,t){let n;if(e._pageFilesAll.length>0?(s(e._pageConfigs.length===0),n=xi(e._pageId,e._pageFilesAll)):n=G(e,"guard"),!n)return;const r=n.hookFn;let i=e;const o=t(e);o&&(i=o);const l=await ce(()=>r(i),"guard",n.hookFilePath);g(l===void 0,`The guard() hook of ${n.hookFilePath} returns a value, but guard() doesn't accept any return value`)}function xi(e,t){const n=t.find(a=>a.pageId===e&&a.fileType===".page.route");if(!n)return null;const{filePath:r,fileExports:i}=n;s(i);const o=i.guard;if(!o)return null;const l=r;return g(I(o),`guard() defined by ${l} should be a function`),{hookFn:o,hookName:"guard",hookFilePath:l}}function Ai(e){const t=new Error("AbortRender");return y(t,{_pageContextAbort:e,[Dt]:!0}),t}const Dt="_isAbortError";function he(e){return typeof e=="object"&&e!==null&&Dt in e}function Ii(e){return e._urlRewrite||e._urlRedirect||e.abortStatusCode?(s(p(e,"_abortCall","string")),!0):!1}function ji(e,t,n){if(t)return;const r=n._urlRewrite??n.urlOriginal;s(r);const i=e._pageContextAbort._abortCall;Ce(!1,`${h.cyan(i)} intercepted while rendering ${h.cyan(r)}`,{onlyOnce:!1})}function Li(e){Ni(e);const t={_urlRewrite:null};return e.forEach(n=>{Object.assign(t,n)}),t}function Ni(e){const t=[];e.forEach(n=>{const r=n._urlRewrite;{const i=t.indexOf(r);if(i!==-1){const o=[...t.slice(i),r].map(l=>`render('${l}')`).join(" => ");g(!1,`Infinite loop of render() calls: ${o}`)}}t.push(r)})}function Wi(e,t){const n=[e>0&&h.cyan("throw render('/some-url')"),t>0&&h.cyan("throw redirect('/some-url')")].filter(Boolean).join(" and ");g(e+t<=7,`Maximum chain length of 7 ${n} exceeded. Did you define an infinite loop of ${n}?`)}const zt=k("router/getPageContext.ts",{});async function Bi(e){if(e._isFirstRenderAttempt&&Ot.isFirstUrl(e.urlOriginal)){s(p(e,"_isFirstRenderAttempt","true"));const t=await Hi(e);return tt(t),t}else{s(p(e,"_isFirstRenderAttempt","false"));const t=await Di(e);return tt(t),t}}async function Hi(e){const t=Kr();Vt(t),y(t,{isHydration:!0,_hasPageContextFromClient:!1}),y(t,await oe(e._pageFilesAll,e._pageConfigs,t._pageId));{const n={...e,...t};if(await Gi(n)){const r=await Gt(n);y(t,r)}}return t}async function Vi(e){const t=vt(e._pageFilesAll,e._pageConfigs);if(!t)throw new Error("No error page defined.");const n={isHydration:!1,_pageId:t};return y(n,await Ut({...e,...n},!0)),n}async function Di(e){const t={isHydration:!1};return y(t,await Yi(e)),y(t,await Ut({...e,...t},!1)),t}async function Ut(e,t){let n={};if(y(n,await oe(e._pageFilesAll,e._pageConfigs,e._pageId)),!t&&await zi({...e,...n})){const r=await Ki(e);if(!r._isError)y(n,r);else{const i=vt(e._pageFilesAll,e._pageConfigs);s(i),n={},y(n,{isHydration:!1,_pageId:i}),y(n,await oe(e._pageFilesAll,e._pageConfigs,n._pageId)),s(p(r,"is404","boolean")),s(p(r,"pageProps","object")),s(p(r.pageProps,"is404","boolean")),s(!("serverSideError"in r)),y(n,r)}}else y(n,{_hasPageContextFromServer:!1}),t||await Fi({_hasPageContextFromClient:!1,...e,...n},r=>Ae(r,!0));{const r=await Gt({...e,...n});y(n,r)}return n}async function Gt(e){const t=G(e,"onBeforeRender");if(!t)return{_hasPageContextFromClient:!1};const n=t.hookFn,r={_hasPageContextFromClient:!0},i=Ae({...e,...r},!0),o=await ce(()=>n(i),"onBeforeRender",t.hookFilePath);Ti(o,t.hookFilePath);const l=o==null?void 0:o.pageContext;return y(r,l),r}async function zi(e){return!!zt.pageContextInitHasClientData||await Ui(e)}function tt(e){e._pageContextInitHasClientData&&(zt.pageContextInitHasClientData=!0)}async function Ui(e){var t;if(e._pageConfigs.length>0){const n=yt(e._pageId,e._pageConfigs);return((t=H(n,"onBeforeRenderEnv"))==null?void 0:t.value)==="server-only"}else{const{hasOnBeforeRenderServerSideOnlyHook:n}=await qr(e._pageFilesAll,e._pageId);return n}}async function Gi(e){var t;if(e._pageConfigs.length>0){const n=yt(e._pageId,e._pageConfigs);return((t=H(n,"onBeforeRenderEnv"))==null?void 0:t.value)==="client-only"}else return!1}async function Yi(e){const n=(await Wt(e)).pageContextAddendum;if(!n._pageId){const r=new Error("No routing match");throw Mi(r),r}return s(p(n,"_pageId","string")),n}function Mi(e){y(e,{_is404:!0})}function Ji(e){return P(e)&&e._is404===!0}async function Ki(e){const t=e._urlRewrite??e._urlOriginalPristine??e.urlOriginal,n=ki(t),r=await fetch(n);{const l=r.headers.get("content-type"),a="application/json",u=l&&l.includes(a);if(!u&&r.status===404)throw re(e.urlOriginal),Xi();g(u,`Wrong Content-Type for ${n}: it should be ${a} but it's ${l} instead. Make sure to properly use pageContext.httpResponse.headers, see https://vike.dev/renderPage`)}const i=await r.text(),o=le(i);if(s(P(o)),"serverSideError"in o)throw ut("The pageContext object couldn't be fetched from the server as an error occurred on the server-side. Check your server logs.");if(Ii(o))throw Ai(o);return s(p(o,"_pageId","string")),Vt(o),y(o,{_hasPageContextFromServer:!0}),o}function qi(e){return P(e)&&!!e._alreadyServerSideRouted}function Xi(){const e=new Error("Page doesn't exist");return Object.assign(e,{_alreadyServerSideRouted:!0}),e}function Qi(e,t){const r=t.filter(({filesystemRoot:o})=>e.startsWith(o)).sort(ne(({filesystemRoot:o})=>o.length))[0];let i;if(r){const{filesystemRoot:o,urlRoot:l}=r,a={pageId:e,filesystemRoot:o,urlRoot:l};s(l.startsWith("/")&&e.startsWith("/")&&o.startsWith("/"),a),s(e.startsWith(o),a),o!=="/"?(s(!o.endsWith("/"),a),i=F(e,o.length,0)):i=e,s(i.startsWith("/"),a),i=l+(l.endsWith("/")?"":"/")+F(i,1,0)}else i=e;return s(i.startsWith("/")),i=i.split("/").filter(o=>o!=="pages"&&o!=="src"&&o!=="index").join("/"),s(!i.includes(".page.")),s(!i.endsWith(".")),i.endsWith("/index")&&(i=F(i,0,-6)),i===""&&(i="/"),s(i.startsWith("/")),s(!i.endsWith("/")||i==="/"),i}async function Zi(e,t,n,r){await Promise.all(e.filter(a=>a.fileType===".page.route").map(a=>{var u;return(u=a.loadFile)==null?void 0:u.call(a)}));const{onBeforeRouteHook:i,filesystemRoots:o}=to(e,t,n);return{pageRoutes:eo(o,e,t,r),onBeforeRouteHook:i}}function eo(e,t,n,r){const i=[];let o=[...r];if(n.length>0){s(e===null);const l=!0;n.filter(a=>!a.isErrorPage).forEach(a=>{const u=a.pageId;o=ro(o,u);let c=null;{const d="route",f=H(a,d);if(f){const w=f.value,m=Yn(f,d);typeof w=="string"?c={pageId:u,comesFromV1PageConfig:l,routeString:w,routeDefinedAt:m,routeType:"STRING"}:(s(I(w)),H(a,"iKnowThePerformanceRisksOfAsyncRouteFunctions","boolean")&&Qe(),c={pageId:u,comesFromV1PageConfig:l,routeFunction:w,routeDefinedAt:m,routeType:"FUNCTION"})}}if(!c){const{routeFilesystem:d}=a;s(d);const{routeString:f,definedBy:w}=d;s(d.routeString.startsWith("/")),c={pageId:u,routeFilesystemDefinedBy:w,comesFromV1PageConfig:l,routeString:f,routeDefinedAt:null,routeType:"FILESYSTEM"}}s(c),i.push(c)})}if(n.length===0){s(e);const l=!1;o.filter(a=>!K(a)).forEach(a=>{const u=t.find(c=>c.pageId===a&&c.fileType===".page.route");if(!u||!("default"in u.fileExports)){const c=Qi(a,e);s(c.startsWith("/")),s(!c.endsWith("/")||c==="/"),i.push({pageId:a,comesFromV1PageConfig:l,routeString:c,routeDefinedAt:null,routeFilesystemDefinedBy:`${a}.page.*`,routeType:"FILESYSTEM"})}else{const{filePath:c,fileExports:d}=u;if(s(d.default),p(d,"default","string")){const f=d.default;g(f.startsWith("/"),`A Route String should start with a leading slash '/' but ${c} has \`export default '${f}'\`. Make sure to \`export default '/${f}'\` instead.`),i.push({pageId:a,comesFromV1PageConfig:l,routeString:f,routeDefinedAt:c,routeType:"STRING"});return}if(p(d,"default","function")){const f=d.default;"iKnowThePerformanceRisksOfAsyncRouteFunctions"in d&&Qe(),i.push({pageId:a,comesFromV1PageConfig:l,routeFunction:f,routeDefinedAt:c,routeType:"FUNCTION"});return}g(!1,`The default export of ${c} should be a string or a function.`)}})}return i}function to(e,t,n){var o;if(t.length>0){if((o=n.configValues.onBeforeRoute)!=null&&o.value){const l=n.configValues.onBeforeRoute,{value:a}=l,u=Mn(l);return g(I(a),`The hook onBeforeRoute() defined by ${u} should be a function.`),{onBeforeRouteHook:{hookFilePath:u,onBeforeRoute:a},filesystemRoots:null}}return{onBeforeRouteHook:null,filesystemRoots:null}}let r=null;const i=[];return e.filter(l=>l.fileType===".page.route"&&l.isDefaultPageFile).forEach(({filePath:l,fileExports:a})=>{if(s(a),"onBeforeRoute"in a){g(p(a,"onBeforeRoute","function"),`\`export { onBeforeRoute }\` of ${l} should be a function.`);const{onBeforeRoute:u}=a;r={hookFilePath:`${l} > \`export { onBeforeRoute }\``,onBeforeRoute:u}}"filesystemRoutingRoot"in a&&(g(p(a,"filesystemRoutingRoot","string"),`\`export { filesystemRoutingRoot }\` of ${l} should be a string.`),g(p(a,"filesystemRoutingRoot","string"),`\`export { filesystemRoutingRoot }\` of ${l} is \`'${a.filesystemRoutingRoot}'\` but it should start with a leading slash \`/\`.`),i.push({filesystemRoot:no(l),urlRoot:a.filesystemRoutingRoot}))}),{onBeforeRouteHook:r,filesystemRoots:i}}function no(e){s(e.startsWith("/")),s(!e.endsWith("/"));const t=e.split("/"),n=F(t,0,-1).join("/")||"/";return s(n.startsWith("/")),s(!n.endsWith("/")||n==="/"),n}function ro(e,t){const{length:n}=e;return e=e.filter(r=>r!==t),s(e.length===n-1),e}function Yt(){const e="/";return s(io(e)),e}function io(e){return e.startsWith("/")}const pe=k("createPageContext.ts",{});async function Mt(e){pe.pageFilesData||(pe.pageFilesData=await pr(!0));const{pageFilesAll:t,allPageIds:n,pageConfigs:r,pageConfigGlobal:i}=pe.pageFilesData,{pageRoutes:o,onBeforeRouteHook:l}=await Zi(t,r,i,n),a=Yt();s(Oe(a));const c={_objectCreatedByVike:!0,_urlHandler:null,_urlRewrite:null,_baseServer:a,_isProduction:!0,_pageFilesAll:t,_pageConfigs:r,_pageConfigGlobal:i,_allPageIds:n,_pageRoutes:o,_onBeforeRouteHook:l};return y(c,e),Tt(c),c}async function Jt(e){const t=await Mt({urlOriginal:e}),n=await Wt(t),r=t._pageFilesAll,i=t._pageConfigs;if(!("pageContextAddendum"in n))return{pageId:null,pageFilesAll:r,pageConfigs:i};const o=n.pageContextAddendum._pageId;return o?{pageId:o,pageFilesAll:r,pageConfigs:i}:{pageId:null,pageFilesAll:r,pageConfigs:i}}function U(e){return e.fileType===".css"?[]:e.exportNames?e.exportNames:(s(e.fileExports,e.filePath),Object.keys(e.fileExports))}function oo({pageFilesClientSide:e,pageFilesServerSide:t,pageId:n}){return{isHtmlOnly:r(),isClientRouting:o()};function r(){return t.some(a=>a.pageId===n&&a.fileType===".page")?(i(),!1):!(!t.some(a=>a.pageId===n&&a.fileType===".page.server")||e.some(a=>a.pageId===n&&a.fileType===".page.client"&&U(a).includes("render")))}function i(){const l=e.some(a=>U(a).includes("render"));g(l,["No client-side `render()` hook found.","See https://vike.dev/render-modes for more information.",["Loaded client-side page files (none of them `export { render }`):",...e.map((a,u)=>` (${u+1}): ${a.filePath}`)].join(` `)].join(" "))}function o(){return e.some(a=>U(a).includes("clientRouting"))}}function so({pageFilesClientSide:e,pageFilesServerSide:t,isHtmlOnly:n,isClientRouting:r}){let i=[];const o=t.filter(a=>!e.includes(a)),l=[];if(l.push(...e.map(a=>({id:a.filePath,onlyAssets:!1,eagerlyImported:!1}))),l.push(...o.map(a=>({id:a.filePath,onlyAssets:!0,eagerlyImported:!1}))),n)i=e.map(a=>a.filePath);else{const a=ao(r);l.push({id:a,onlyAssets:!1,eagerlyImported:!1}),i=[a]}return{clientEntries:i,clientDependencies:l}}function ao(e){return e?"@@vike/dist/esm/client/client-routing-runtime/entry.js":"@@vike/dist/esm/client/server-routing-runtime/entry.js"}function lo(e,t){let n=Fe(e,t);const r=Pt(e,t),{isHtmlOnly:i,isClientRouting:o}=oo({pageFilesClientSide:n,pageFilesServerSide:r,pageId:t});i&&(n=n.filter(u=>u.isEnv("CLIENT_ONLY")&&!U(u).includes("render")),n=co(n));const{clientEntries:l,clientDependencies:a}=so({pageFilesClientSide:n,pageFilesServerSide:r,isHtmlOnly:i,isClientRouting:o});return{isHtmlOnly:i,isClientRouting:o,clientEntries:l,clientDependencies:a,pageFilesClientSide:n,pageFilesServerSide:r}}async function uo(e,t,{sharedPageFilesAlreadyLoaded:n}){const r=Fe(e,t);await Promise.all(r.map(async i=>{var o;s(i.isEnv("CLIENT_ONLY")||i.isEnv("CLIENT_AND_SERVER")),!(n&&i.isEnv("CLIENT_AND_SERVER"))&&await((o=i.loadExportNames)==null?void 0:o.call(i))}))}function co(e){const t=[];for(const n of e)if(t.push(n),U(n).includes("overrideDefaultPages"))break;return t}function fo(e,t,n){var r,i;if(e){const o=((r=H(e,"clientRouting","boolean"))==null?void 0:r.value)??!1;return{isClientSideRenderable:((i=H(e,"isClientSideRenderable","boolean"))==null?void 0:i.value)??!1,isClientRouting:o}}else{const{isHtmlOnly:o,isClientRouting:l}=lo(t,n);return{isClientSideRenderable:!o,isClientRouting:l}}}async function Kt(e){const{pageId:t,pageFilesAll:n,pageConfigs:r}=await Jt(e);if(!t)return!1;await uo(n,t,{sharedPageFilesAlreadyLoaded:!1});const i=Bt(r,t),{isClientSideRenderable:o,isClientRouting:l}=fo(i,n,t);return o&&l}function qt(e){return!e.startsWith("/")&&!e.startsWith(".")&&!e.startsWith("?")&&e!==""}function Xt(e){const t=e.getAttribute("href");return!!(t===null||t===""||qt(t)||ho(e)||po(t)||!mo(t)||!ke(t)||!go(e))}function go(e){if(Wo()){const n=e.getAttribute("data-vike-link");return n!==null&&n!=="false"}else return!0}function ho(e){const t=e.getAttribute("target"),n=e.getAttribute("rel");return t==="_blank"||t==="_external"||n==="external"||e.hasAttribute("download")}function po(e){if(e.startsWith("#"))return!0;const t=n=>n.split("#")[0];return!!(e.includes("#")&&t(e)===t(window.location.href))}function mo(e){const t=Yt();s(Oe(t));const{hasBaseServer:n}=J(e,t);return n}function yo(e,t){let n=bo(e,t);return n==="viewport"&&!e._isProduction&&(Ce(!1,"Viewport prefetching is disabled in development",{onlyOnce:!0}),n="hover"),{prefetchStaticAssets:n}}function bo(e,t){{const n=wo(t);if(n!==null)return n}if("prefetchLinks"in e.exports&&g(!1,"`export { prefetchLinks }` is deprecated, use `export { prefetchStaticAssets }` instead."),"prefetchStaticAssets"in e.exports){const{prefetchStaticAssets:n}=e.exports;if(n===!1)return!1;if(n==="hover")return"hover";if(n==="viewport")return"viewport";const r="prefetchStaticAssets value should be false, 'hover', or 'viewport'";g(A(n),r);const i=Object.keys(n);g(i.length===1&&i[0]==="when",r);const{when:o}=n;if(o==="HOVER"||o==="VIEWPORT"){const l=o.toLowerCase();return R(!1,`prefetchStaticAssets value \`{ when: '${o}' }\` is outdated: set prefetchStaticAssets to '${l}' instead`,{onlyOnce:!0}),l}g(!1,r)}return"hover"}function wo(e){const t=e.getAttribute("data-prefetch-static-assets"),n=e.getAttribute("data-prefetch");if(t===null&&n===null)return null;const r="The attribute data-prefetch is outdated, use data-prefetch-static-assets instead.";if(t){if(g(n===null,r),t==="hover"||t==="viewport")return t;if(t==="false")return!1;g(!1,`data-prefetch-static-assets has value "${t}" but it should instead be "false", "hover", or "viewport"`)}if(n){if(s(!t),R(!1,r,{onlyOnce:!0}),n==="true")return"viewport";if(n==="false")return"hover";g(!1,`data-prefetch has value "${n}" but it should instead be "true" or "false"`)}s(!1)}const Qt=new Map;function Zt(e){const t=tn(e);return Qt.has(t)}function en(e){const t=tn(e);Qt.set(t,!0)}function tn(e){return J(e,"/").pathname}D();const nt=new Map;async function vo(e){if(g(ft(),"prefetch() only works with Client Routing, see https://vike.dev/prefetch",{showStackTrace:!0}),g(!qt(e),`You are trying to prefetch the URL ${e} of another domain which cannot be prefetched`,{showStackTrace:!0}),Zt(e))return;en(e);const{pageId:t,pageFilesAll:n,pageConfigs:r}=await Jt(e);if(t)try{await oe(n,r,t)}catch(i){if(Ie(i))Pe(i,!0);else throw i}}function So(e){en(e.urlPathname),[...document.getElementsByTagName("A")].forEach(n=>{if(nt.has(n))return;nt.set(n,!0);const r=n.getAttribute("href");if(Xt(n)||(s(r),Zt(r)))return;const{prefetchStaticAssets:i}=yo(e,n);if(i&&(i==="hover"&&(n.addEventListener("mouseover",()=>{me(r)}),n.addEventListener("touchstart",()=>{me(r)},{passive:!0})),i==="viewport")){const o=new IntersectionObserver(l=>{l.forEach(a=>{a.isIntersecting&&(me(r),o.disconnect())})});o.observe(n)}})}async function me(e){try{if(!await Kt(e))return}catch{return}await vo(e)}async function Ro(e,t){const n=Ae(e,t);let r=null,i;r=G(e,"render"),i="render";{const a=G(e,"onRenderClient");a&&(r=a,i="onRenderClient")}if(!r){const a=Po(e);if(e._pageConfigs.length>0)g(!1,`No onRenderClient() hook defined for URL '${a}', but it's needed, see https://vike.dev/onRenderClient`);else{const u=e._pageFilesLoaded.filter(d=>d.fileType===".page.client");let c;u.length===0?c="No file `*.page.client.*` found for URL "+a:c="One of the following files should export a `render()` hook: "+u.map(d=>d.filePath).join(" "),g(!1,c)}}s(r);const o=r.hookFn;s(i);const l=await ce(()=>o(n),i,r.hookFilePath);g(l===void 0,`The ${i}() hook defined by ${r.hookFilePath} isn't allowed to return a value`)}function Po(e){let t;try{t=e.urlPathname??e.urlOriginal}catch{}return t=t??window.location.href,t}function nn(){let e=window.history.state;e||(e={});let t=!1;"timestamp"in e||(t=!0,e.timestamp=on()),"scrollPosition"in e||(t=!0,e.scrollPosition=rn()),sn(e),t&&Le(e)}function je(){const e=window.history.state||{};return sn(e),e}function rn(){return{x:window.scrollX,y:window.scrollY}}function on(){return new Date().getTime()}function rt(){const e=rn(),t=je();Le({...t,scrollPosition:e})}function Eo(e,t){if(t)Le(je(),e);else{const n=on();_o({timestamp:n,scrollPosition:null},e)}}function sn(e){if(s(P(e)),"timestamp"in e){const{timestamp:t}=e;s(typeof t=="number")}if("scrollPosition"in e){const{scrollPosition:t}=e;t!==null&&s(p(t,"x","number")&&p(t,"y","number"))}}function Le(e,t){window.history.replaceState(e,"",t??null)}function _o(e,t){window.history.pushState(e,"",t)}D();const $o=k("navigate.ts",{});function Co(e){$o.navigate=e}const _=k("useClientRouter.ts",{previousState:se()});jo();nn();function Pe(e,t){s(Ie(e)),_.clientRoutingIsDisabled=!0,t&&console.log(e),Ce(!1,["Failed to fetch static asset.","This usually happens when a new frontend is deployed.","Falling back to Server Routing.","(The next page navigation will use Server Routing instead of Client Routing.)"].filter(Boolean).join(" "),{onlyOnce:!0})}function ko(){Ao(),Oo((i,{keepScrollPosition:o})=>{r({scrollTarget:o?"preserve-scroll":"scroll-to-top-or-hash",urlOriginal:i,isBackwardNavigation:!1,checkClientSideRenderable:!0})}),To((i,o)=>{r({scrollTarget:i,isBackwardNavigation:o})}),Co(async(i,{keepScrollPosition:o=!1,overwriteLastHistoryEntry:l=!1}={})=>{await r({scrollTarget:o?"preserve-scroll":"scroll-to-top-or-hash",urlOriginal:i,overwriteLastHistoryEntry:l,isBackwardNavigation:!1,checkClientSideRenderable:!0})});let e=0,t,n=!1;r({scrollTarget:"preserve-scroll",isBackwardNavigation:null});return;async function r({scrollTarget:i,urlOriginal:o=q(),overwriteLastHistoryEntry:l=!1,isBackwardNavigation:a,checkClientSideRenderable:u,pageContextsFromRewrite:c=[],redirectCount:d=0}){var Be;if(Wi(c.length,d),_.clientRoutingIsDisabled){re(o);return}const f=Li(c);if(u){const $=f._urlRewrite??o;let E;try{E=await Kt($)}catch(B){if(he(B))E=!0;else throw B}if(!E){re(o);return}}const w={urlOriginal:o,isBackwardNavigation:a,...f},m=++e;s(m>=1),m>1&&n===!1&&(await((Be=_.onPageTransitionStart)==null?void 0:Be.call(_,w)),n=!0);let v=!1;const C=()=>m===1&&v===!1?!1:m!==e,b=await Mt(w);if(C())return;const z=m===1;y(b,{_isFirstRenderAttempt:z});let X,O,We=!1;try{X=await Bi(b)}catch($){We=!0,O=$}if(We){if(he(O)||console.error(O),ot(O,b))return;if(he(O)){const $=O;ji(O,b._isProduction,b);const E=$._pageContextAbort;if(E._urlRewrite){await r({scrollTarget:i,urlOriginal:o,overwriteLastHistoryEntry:l,isBackwardNavigation:a,pageContextsFromRewrite:[...c,E],redirectCount:d});return}if(E._urlRedirect){const B=E._urlRedirect.url;if(B.startsWith("http")){window.location.href=B;return}else await r({scrollTarget:"scroll-to-top-or-hash",urlOriginal:B,overwriteLastHistoryEntry:!1,isBackwardNavigation:!1,checkClientSideRenderable:!0,pageContextsFromRewrite:c,redirectCount:d++});return}s(E.abortStatusCode),y(b,E),E.abortStatusCode===404&&y(b,{is404:!0})}else y(b,{is404:Ji(O)});try{X=await Vi(b)}catch($){if(ot($,b)||(z||setTimeout(()=>{window.location.pathname=o},0),Gr(O,$)))return;throw $}}if(s(X),y(b,X),ge(b,"onPageTransitionStart"),_.onPageTransitionStart=b.exports.onPageTransitionStart,b.exports.hydrationCanBeAborted?v=!0:R(!Ur(),"You seem to be using React; we recommend setting hydrationCanBeAborted to true, see https://vike.dev/clientRouting",{onlyOnce:!0}),!C()&&(t&&await t,!C())){if(Fo(o,l),Ot.markNavigationChange(),s(t===void 0),t=(async()=>{await Ro(b,!0),So(b)})(),await t,t=void 0,b._isFirstRenderAttempt){ge(b,"onHydrationEnd");const{onHydrationEnd:$}=b.exports;if($){const E=b.exportsAll.onHydrationEnd[0].exportSource;s(E),await ce(()=>$(b),"onHydrationEnd",E)}}else m===e&&(b.exports.onPageTransitionEnd&&(ge(b,"onPageTransitionEnd"),await b.exports.onPageTransitionEnd(b)),n=!1);an(i),Ne(),_.initialRenderIsDone=!0}}}function Oo(e){document.addEventListener("click",t);return;function t(i){if(!n(i))return;const o=r(i.target);if(!o)return;const l=o.getAttribute("href");if(Xt(o))return;s(l),i.preventDefault();const a=![null,"false"].includes(o.getAttribute("keep-scroll-position"));e(l,{keepScrollPosition:a})}function n(i){return i.button===0&&!i.ctrlKey&&!i.shiftKey&&!i.altKey&&!i.metaKey}function r(i){for(;i.tagName!=="A";){const{parentNode:o}=i;if(!o)return null;i=o}return i}}function To(e){window.addEventListener("popstate",()=>{const t=se(),n=t.historyState.scrollPosition||"scroll-to-top-or-hash",r=t.urlWithoutHash===_.previousState.urlWithoutHash,i=!t.historyState.timestamp||!_.previousState.historyState.timestamp?null:t.historyState.timestamp<_.previousState.historyState.timestamp;_.previousState=t,r?window.history.state===null?(nn(),_.previousState=se()):an(n):e(n,i)})}function Fo(e,t){q()!==e&&(Ne(),Eo(e,t),_.previousState=se())}function se(){return{urlWithoutHash:q({withoutHash:!0}),historyState:je()}}function an(e){if(e==="preserve-scroll")return;let t;if(e==="scroll-to-top-or-hash"){const n=Io();if(n&&n!=="top"){const r=document.getElementById(n)||document.getElementsByName(n)[0];if(r){r.scrollIntoView();return}}t={x:0,y:0}}else s("x"in e&&"y"in e),t=e;xo(t)}function xo(e){const t=()=>window.scrollTo(e.x,e.y),n=()=>window.scrollX===e.x&&window.scrollY===e.y;n()||(t(),!n()&&requestAnimationFrame(()=>{t(),!n()&&setTimeout(async()=>{if(t(),n())return;const r=new Date().getTime();for(;;)if(await Yr(10),t(),n()||new Date().getTime()-r>100)return},0)}))}function Ao(){window.addEventListener("scroll",Mr(rt,Math.ceil(1e3/3)),{passive:!0}),ln(rt)}function Io(){let{hash:e}=window.location;return e===""?null:(s(e.startsWith("#")),e=e.slice(1),e)}function jo(){it(),ln(it),Lo(()=>_.initialRenderIsDone&&Ne())}function Ne(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual")}function it(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="auto")}function ln(e){window.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&e()})}function Lo(e){window.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&e()})}function ot(e,t){return!!(qi(e)||No(e,t))}function No(e,t){if(!Ie(e))return!1;if(t._isFirstRenderAttempt)throw Pe(e,!1),e;return Pe(e,!0),re(t.urlOriginal),!0}function Wo(){return!!window._disableAutomaticLinkInterception}D();const Bo=!0;hn(Bo);ko(); diff --git a/assets/entries/pages_error.ac9ba2d2.js b/assets/entries/pages_error.75643d35.js similarity index 84% rename from assets/entries/pages_error.ac9ba2d2.js rename to assets/entries/pages_error.75643d35.js index f76578a..7779e48 100644 --- a/assets/entries/pages_error.ac9ba2d2.js +++ b/assets/entries/pages_error.75643d35.js @@ -1 +1 @@ -import{g as e,i as a,t,o as n,L as l}from"../chunks/chunk-5b43f735.js";const i=t("

      404 Page Not Found"),u=t("

      This page could not be found."),s=t("

      "),p=t("

      500 Internal Server Error"),m=t("

      Something went wrong.");function f(o){return o.is404?[e(i),e(u),(()=>{const r=e(s);return a(r,()=>o.errorInfo),r})()]:[e(p),e(m)]}const g=Object.freeze(Object.defineProperty({__proto__:null,default:f},Symbol.toStringTag,{value:"Module"})),_=[{configName:"onRenderClient",importPath:"vike-solid/renderer/onRenderClient",isValueFile:!1,exportValue:n,exportName:"onRenderClient"},{configName:"Page",importPath:"/pages/_error/+Page.tsx",isValueFile:!0,exportValues:g},{configName:"Layout",importPath:"/layouts/LayoutDefault.tsx",isValueFile:!1,exportValue:l,exportName:"default"}];export{_ as default}; +import{g as e,i as a,t,o as n,L as l}from"../chunks/chunk-f1b9f6a2.js";const i=t("

      404 Page Not Found"),u=t("

      This page could not be found."),s=t("

      "),p=t("

      500 Internal Server Error"),m=t("

      Something went wrong.");function f(o){return o.is404?[e(i),e(u),(()=>{const r=e(s);return a(r,()=>o.errorInfo),r})()]:[e(p),e(m)]}const g=Object.freeze(Object.defineProperty({__proto__:null,default:f},Symbol.toStringTag,{value:"Module"})),_=[{configName:"onRenderClient",importPath:"vike-solid/renderer/onRenderClient",isValueFile:!1,exportValue:n,exportName:"onRenderClient"},{configName:"Page",importPath:"/pages/_error/+Page.tsx",isValueFile:!0,exportValues:g},{configName:"Layout",importPath:"/layouts/LayoutDefault.tsx",isValueFile:!1,exportValue:l,exportName:"default"}];export{_ as default}; diff --git a/assets/entries/pages_index.b192f320.js b/assets/entries/pages_index.afbdc8eb.js similarity index 99% rename from assets/entries/pages_index.b192f320.js rename to assets/entries/pages_index.afbdc8eb.js index 0c86556..8e3f23f 100644 --- a/assets/entries/pages_index.b192f320.js +++ b/assets/entries/pages_index.afbdc8eb.js @@ -1,2 +1,2 @@ -import{g as c,s as C,c as h,a as V,t as d,b as Q,u as D,S as T,d as S,e as a,f as b,i as s,h as J,j as X,k as H,l as Y,m as Z,F as M,n as q,p as E,D as ee,q as te,r as le,o as ne,L as ie}from"../chunks/chunk-5b43f735.js";const re="/assets/static/logo.059a8ea3.svg",se=d('Bati logo');function ae(e){return(()=>{const t=c(se);return C(t,"src",re),h(n=>{const l=e.size,i=e.size,r=e.class;return l!==n._v$&&C(t,"height",n._v$=l),i!==n._v$2&&C(t,"width",n._v$2=i),r!==n._v$3&&V(t,n._v$3=r),n},{_v$:void 0,_v$2:void 0,_v$3:void 0}),t})()}function oe(e){let t;async function n(){clearTimeout(t);const l=window.getSelection();if(l){const i=l.toString().replaceAll(` +import{g as c,s as C,c as h,a as V,t as d,b as Q,u as D,S as T,d as S,e as a,f as b,i as s,h as J,j as X,k as H,l as Y,m as Z,F as M,n as q,p as E,D as ee,q as te,r as le,o as ne,L as ie}from"../chunks/chunk-f1b9f6a2.js";const re="/assets/static/logo.059a8ea3.svg",se=d('Bati logo');function ae(e){return(()=>{const t=c(se);return C(t,"src",re),h(n=>{const l=e.size,i=e.size,r=e.class;return l!==n._v$&&C(t,"height",n._v$=l),i!==n._v$2&&C(t,"width",n._v$2=i),r!==n._v$3&&V(t,n._v$3=r),n},{_v$:void 0,_v$2:void 0,_v$3:void 0}),t})()}function oe(e){let t;async function n(){clearTimeout(t);const l=window.getSelection();if(l){const i=l.toString().replaceAll(` `," ");await navigator.clipboard.writeText(i),e.classList.add("tooltip","tooltip-open"),t=setTimeout(()=>{e.classList.remove("tooltip","tooltip-open")},3e3)}}e.addEventListener("click",n),Q(()=>e.removeEventListener("click",n))}function K(e){var t,n,l="";if(typeof e=="string"||typeof e=="number")l+=e;else if(typeof e=="object")if(Array.isArray(e))for(t=0;t"),de=d(""),ue=d("Scaffolds a web app using ."),fe=new Intl.ListFormat("en"),ge={label:"Vike",url:"https://vike.dev"};function $e(e){return e.feature.url?(()=>{const t=c(ce),n=t.firstChild;return s(n,()=>e.feature.label),h(l=>{const i=e.feature.url,r=R("text-primary link link-hover",e.feature.label==="Vike"&&"font-semibold");return i!==l._v$&&C(t,"href",l._v$=i),r!==l._v$2&&V(n,l._v$2=r),l},{_v$:void 0,_v$2:void 0}),t})():(()=>{const t=c(de);return s(t,()=>e.feature.label),h(()=>V(t,R("text-primary",e.feature.label==="Vike"&&"font-semibold"))),t})()}function ve(){const{selectedFeatures:e}=D(T),t=S(()=>[ge,...e()]),n=S(()=>fe.formatToParts(t().map(l=>l.label)).map(l=>l.type==="literal"?l.value:a($e,{get feature(){return t().find(i=>i.label===l.value)}})));return(()=>{const l=c(ue),i=l.firstChild,r=i.nextSibling,[o,f]=b(r.nextSibling);return o.nextSibling,s(l,n,o,f),l})()}function _e(e,t){const n=t();n&&(e.setAttribute("data-flip-name",n),e.style.viewTransitionName=n)}const be=d('

      ');function me(e){return(()=>{const t=c(be),n=t.firstChild,l=n.nextSibling,[i,r]=b(l.nextSibling);return J(_e,t,()=>e.flipLabel),s(n,()=>e.label),s(t,()=>e.children,i,r),h(o=>{const f=R("form-control",e.class),$=e.style,v=e.classList;return f!==o._v$&&V(t,o._v$=f),o._v$2=X(t,$,o._v$2),o._v$3=H(t,v,o._v$3),o},{_v$:void 0,_v$2:void 0,_v$3:void 0}),t})()}const xe=d('
      '),he=d('
      '),we=d('

    - - - +
    Bati logo

    Bâti

    Scaffolds a web app using Vike.
    pnpm create @batijs/app
    Presets

    Frontend

    Framework
    CSS

    Backend

    Auth
    RPC
    Server
    Database
    Hosting

    Tools

    Linter
    Analytics
    Error tracking
    + + + \ No newline at end of file