From 850f89c8edbb100c4b379f4ea3d9f8da9338d1e2 Mon Sep 17 00:00:00 2001 From: legop3 Date: Sun, 3 May 2026 22:51:50 -0400 Subject: [PATCH] overseer v2 1 --- server/config.example.yaml | 8 + server/index.js | 1 + server/prompts/overseer_control_system.txt | 12 + server/public/assets/index-BVMv97rc.js | 126 ------- server/public/assets/index-Ctsy7ecD.js | 126 +++++++ server/public/index.html | 4 +- .../services/chatService/contextBuilders.js | 1 + server/src/services/chatService/index.js | 1 + .../overseerControlService/constants.js | 26 ++ .../overseerControlService/contextBuilder.js | 64 ++++ .../services/overseerControlService/index.js | 343 ++++++++++++++++++ .../overseerControlService/runtimeHelpers.js | 93 +++++ .../overseerControlService/tools/chatSay.js | 6 + .../tools/haSetEntity.js | 14 + .../overseerControlService/tools/index.js | 42 +++ .../overseerControlService/tools/liftDown.js | 12 + .../overseerControlService/tools/liftUp.js | 12 + .../tools/memoryRead.js | 6 + .../tools/memoryWrite.js | 6 + .../tools/neatoClearErrors.js | 11 + .../tools/neatoLocate.js | 11 + .../tools/neatoSendHome.js | 11 + .../tools/neatoStart.js | 11 + .../AdminPanel/AdminPanelContent.jsx | 22 ++ .../AdminPanel/OverseerControlPanel.jsx | 79 ++++ webui/src/context/SessionContext.jsx | 9 + 26 files changed, 929 insertions(+), 128 deletions(-) create mode 100644 server/prompts/overseer_control_system.txt delete mode 100644 server/public/assets/index-BVMv97rc.js create mode 100644 server/public/assets/index-Ctsy7ecD.js create mode 100644 server/src/services/overseerControlService/constants.js create mode 100644 server/src/services/overseerControlService/contextBuilder.js create mode 100644 server/src/services/overseerControlService/index.js create mode 100644 server/src/services/overseerControlService/runtimeHelpers.js create mode 100644 server/src/services/overseerControlService/tools/chatSay.js create mode 100644 server/src/services/overseerControlService/tools/haSetEntity.js create mode 100644 server/src/services/overseerControlService/tools/index.js create mode 100644 server/src/services/overseerControlService/tools/liftDown.js create mode 100644 server/src/services/overseerControlService/tools/liftUp.js create mode 100644 server/src/services/overseerControlService/tools/memoryRead.js create mode 100644 server/src/services/overseerControlService/tools/memoryWrite.js create mode 100644 server/src/services/overseerControlService/tools/neatoClearErrors.js create mode 100644 server/src/services/overseerControlService/tools/neatoLocate.js create mode 100644 server/src/services/overseerControlService/tools/neatoSendHome.js create mode 100644 server/src/services/overseerControlService/tools/neatoStart.js create mode 100644 webui/src/components/AdminPanel/OverseerControlPanel.jsx diff --git a/server/config.example.yaml b/server/config.example.yaml index b1d10e02..898b58a3 100644 --- a/server/config.example.yaml +++ b/server/config.example.yaml @@ -13,6 +13,14 @@ llmCommentary: model: "qwen2.5:7b-instruct" ollamaServer: "http://127.0.0.1:11434" frequency: 120000 +overseerControl: + enabled: false + observeOnly: true + name: "The Overseer" + model: "qwen2.5:7b-instruct" + ollamaServer: "http://127.0.0.1:11434" + gateIntervalMs: 2000 + heartbeatMs: 30000 media: # Base address for mediaMTX (scheme + host + optional port/path). The UI will always request # http:////whep diff --git a/server/index.js b/server/index.js index 80d55259..5f7a37ee 100644 --- a/server/index.js +++ b/server/index.js @@ -20,6 +20,7 @@ require('./src/services/verificationService'); require('./src/services/privateRoverAccessRequestService'); require('./src/services/chatService'); require('./src/services/llmCommentaryService'); +require('./src/services/overseerControlService'); require('./src/services/globalObjectiveService'); require('./src/services/serverControlService'); require('./src/services/videoSessions'); diff --git a/server/prompts/overseer_control_system.txt b/server/prompts/overseer_control_system.txt new file mode 100644 index 00000000..c5092814 --- /dev/null +++ b/server/prompts/overseer_control_system.txt @@ -0,0 +1,12 @@ +You are , a control-first room AI for a live rover room. + +Rules: +- You may choose SKIP, CHAT, ACTION, or ACTION+CHAT. +- Respect tool availability and blocked tool reasons. +- Prefer restraint over spam. +- If directly addressed, avoid ignoring users. +- Keep lines concise and in-character. + +Output contract for this phase: +- Return exactly one line. +- Return one of: SKIP, CHAT, ACTION, ACTION+CHAT. diff --git a/server/public/assets/index-BVMv97rc.js b/server/public/assets/index-BVMv97rc.js deleted file mode 100644 index 14777b8b..00000000 --- a/server/public/assets/index-BVMv97rc.js +++ /dev/null @@ -1,126 +0,0 @@ -(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))o(u);new MutationObserver(u=>{for(const f of u)if(f.type==="childList")for(const p of f.addedNodes)p.tagName==="LINK"&&p.rel==="modulepreload"&&o(p)}).observe(document,{childList:!0,subtree:!0});function l(u){const f={};return u.integrity&&(f.integrity=u.integrity),u.referrerPolicy&&(f.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?f.credentials="include":u.crossOrigin==="anonymous"?f.credentials="omit":f.credentials="same-origin",f}function o(u){if(u.ep)return;u.ep=!0;const f=l(u);fetch(u.href,f)}})();function py(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Qu={exports:{}},nr={};var pp;function xy(){if(pp)return nr;pp=1;var n=Symbol.for("react.transitional.element"),s=Symbol.for("react.fragment");function l(o,u,f){var p=null;if(f!==void 0&&(p=""+f),u.key!==void 0&&(p=""+u.key),"key"in u){f={};for(var h in u)h!=="key"&&(f[h]=u[h])}else f=u;return u=f.ref,{$$typeof:n,type:o,key:p,ref:u!==void 0?u:null,props:f}}return nr.Fragment=s,nr.jsx=l,nr.jsxs=l,nr}var xp;function gy(){return xp||(xp=1,Qu.exports=xy()),Qu.exports}var i=gy(),Ku={exports:{}},we={};var gp;function by(){if(gp)return we;gp=1;var n=Symbol.for("react.transitional.element"),s=Symbol.for("react.portal"),l=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),u=Symbol.for("react.profiler"),f=Symbol.for("react.consumer"),p=Symbol.for("react.context"),h=Symbol.for("react.forward_ref"),x=Symbol.for("react.suspense"),g=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),y=Symbol.for("react.activity"),N=Symbol.iterator;function R(q){return q===null||typeof q!="object"?null:(q=N&&q[N]||q["@@iterator"],typeof q=="function"?q:null)}var C={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},S=Object.assign,w={};function j(q,_,J){this.props=q,this.context=_,this.refs=w,this.updater=J||C}j.prototype.isReactComponent={},j.prototype.setState=function(q,_){if(typeof q!="object"&&typeof q!="function"&&q!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,q,_,"setState")},j.prototype.forceUpdate=function(q){this.updater.enqueueForceUpdate(this,q,"forceUpdate")};function M(){}M.prototype=j.prototype;function E(q,_,J){this.props=q,this.context=_,this.refs=w,this.updater=J||C}var k=E.prototype=new M;k.constructor=E,S(k,j.prototype),k.isPureReactComponent=!0;var z=Array.isArray;function X(){}var O={H:null,A:null,T:null,S:null},L=Object.prototype.hasOwnProperty;function K(q,_,J){var ne=J.ref;return{$$typeof:n,type:q,key:_,ref:ne!==void 0?ne:null,props:J}}function $(q,_){return K(q.type,_,q.props)}function F(q){return typeof q=="object"&&q!==null&&q.$$typeof===n}function ee(q){var _={"=":"=0",":":"=2"};return"$"+q.replace(/[=:]/g,function(J){return _[J]})}var oe=/\/+/g;function ce(q,_){return typeof q=="object"&&q!==null&&q.key!=null?ee(""+q.key):_.toString(36)}function H(q){switch(q.status){case"fulfilled":return q.value;case"rejected":throw q.reason;default:switch(typeof q.status=="string"?q.then(X,X):(q.status="pending",q.then(function(_){q.status==="pending"&&(q.status="fulfilled",q.value=_)},function(_){q.status==="pending"&&(q.status="rejected",q.reason=_)})),q.status){case"fulfilled":return q.value;case"rejected":throw q.reason}}throw q}function T(q,_,J,ne,fe){var ue=typeof q;(ue==="undefined"||ue==="boolean")&&(q=null);var le=!1;if(q===null)le=!0;else switch(ue){case"bigint":case"string":case"number":le=!0;break;case"object":switch(q.$$typeof){case n:case s:le=!0;break;case b:return le=q._init,T(le(q._payload),_,J,ne,fe)}}if(le)return fe=fe(q),le=ne===""?"."+ce(q,0):ne,z(fe)?(J="",le!=null&&(J=le.replace(oe,"$&/")+"/"),T(fe,_,J,"",function(ge){return ge})):fe!=null&&(F(fe)&&(fe=$(fe,J+(fe.key==null||q&&q.key===fe.key?"":(""+fe.key).replace(oe,"$&/")+"/")+le)),_.push(fe)),1;le=0;var xe=ne===""?".":ne+":";if(z(q))for(var me=0;me>>1,de=T[re];if(0>>1;reu(J,I))neu(fe,J)?(T[re]=fe,T[ne]=I,re=ne):(T[re]=J,T[_]=I,re=_);else if(neu(fe,I))T[re]=fe,T[ne]=I,re=ne;else break e}}return V}function u(T,V){var I=T.sortIndex-V.sortIndex;return I!==0?I:T.id-V.id}if(n.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var f=performance;n.unstable_now=function(){return f.now()}}else{var p=Date,h=p.now();n.unstable_now=function(){return p.now()-h}}var x=[],g=[],b=1,y=null,N=3,R=!1,C=!1,S=!1,w=!1,j=typeof setTimeout=="function"?setTimeout:null,M=typeof clearTimeout=="function"?clearTimeout:null,E=typeof setImmediate<"u"?setImmediate:null;function k(T){for(var V=l(g);V!==null;){if(V.callback===null)o(g);else if(V.startTime<=T)o(g),V.sortIndex=V.expirationTime,s(x,V);else break;V=l(g)}}function z(T){if(S=!1,k(T),!C)if(l(x)!==null)C=!0,X||(X=!0,ee());else{var V=l(g);V!==null&&H(z,V.startTime-T)}}var X=!1,O=-1,L=5,K=-1;function $(){return w?!0:!(n.unstable_now()-KT&&$());){var re=y.callback;if(typeof re=="function"){y.callback=null,N=y.priorityLevel;var de=re(y.expirationTime<=T);if(T=n.unstable_now(),typeof de=="function"){y.callback=de,k(T),V=!0;break t}y===l(x)&&o(x),k(T)}else o(x);y=l(x)}if(y!==null)V=!0;else{var q=l(g);q!==null&&H(z,q.startTime-T),V=!1}}break e}finally{y=null,N=I,R=!1}V=void 0}}finally{V?ee():X=!1}}}var ee;if(typeof E=="function")ee=function(){E(F)};else if(typeof MessageChannel<"u"){var oe=new MessageChannel,ce=oe.port2;oe.port1.onmessage=F,ee=function(){ce.postMessage(null)}}else ee=function(){j(F,0)};function H(T,V){O=j(function(){T(n.unstable_now())},V)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(T){T.callback=null},n.unstable_forceFrameRate=function(T){0>T||125re?(T.sortIndex=I,s(g,T),l(x)===null&&T===l(g)&&(S?(M(O),O=-1):S=!0,H(z,I-re))):(T.sortIndex=de,s(x,T),C||R||(C=!0,X||(X=!0,ee()))),T},n.unstable_shouldYield=$,n.unstable_wrapCallback=function(T){var V=N;return function(){var I=N;N=V;try{return T.apply(this,arguments)}finally{N=I}}}})(Ju)),Ju}var yp;function yy(){return yp||(yp=1,Iu.exports=vy()),Iu.exports}var Pu={exports:{}},_t={};var Sp;function Sy(){if(Sp)return _t;Sp=1;var n=$d();function s(x){var g="https://react.dev/errors/"+x;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(s){console.error(s)}}return n(),Pu.exports=Sy(),Pu.exports}var Np;function Ny(){if(Np)return ar;Np=1;var n=yy(),s=$d(),l=jy();function o(e){var t="https://react.dev/errors/"+e;if(1de||(e.current=re[de],re[de]=null,de--)}function J(e,t){de++,re[de]=e.current,e.current=t}var ne=q(null),fe=q(null),ue=q(null),le=q(null);function xe(e,t){switch(J(ue,t),J(fe,e),J(ne,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?z0(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=z0(t),e=U0(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}_(ne),J(ne,e)}function me(){_(ne),_(fe),_(ue)}function ge(e){e.memoizedState!==null&&J(le,e);var t=ne.current,a=U0(t,e.type);t!==a&&(J(fe,e),J(ne,a))}function ze(e){fe.current===e&&(_(ne),_(fe)),le.current===e&&(_(le),Pl._currentValue=I)}var Re,Ee;function Be(e){if(Re===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);Re=t&&t[1]||"",Ee=-1)":-1c||D[r]!==Y[c]){var W=` -`+D[r].replace(" at new "," at ");return e.displayName&&W.includes("")&&(W=W.replace("",e.displayName)),W}while(1<=r&&0<=c);break}}}finally{Ue=!1,Error.prepareStackTrace=a}return(a=e?e.displayName||e.name:"")?Be(a):""}function ie(e,t){switch(e.tag){case 26:case 27:case 5:return Be(e.type);case 16:return Be("Lazy");case 13:return e.child!==t&&t!==null?Be("Suspense Fallback"):Be("Suspense");case 19:return Be("SuspenseList");case 0:case 15:return ht(e.type,!1);case 11:return ht(e.type.render,!1);case 1:return ht(e.type,!0);case 31:return Be("Activity");default:return""}}function be(e){try{var t="",a=null;do t+=ie(e,a),a=e,e=e.return;while(e);return t}catch(r){return` -Error generating stack: `+r.message+` -`+r.stack}}var se=Object.prototype.hasOwnProperty,P=n.unstable_scheduleCallback,ve=n.unstable_cancelCallback,Ae=n.unstable_shouldYield,pt=n.unstable_requestPaint,He=n.unstable_now,lt=n.unstable_getCurrentPriorityLevel,rt=n.unstable_ImmediatePriority,bt=n.unstable_UserBlockingPriority,kt=n.unstable_NormalPriority,ds=n.unstable_LowPriority,Qt=n.unstable_IdlePriority,Oa=n.log,qr=n.unstable_setDisableYieldValue,En=null,it=null;function Bt(e){if(typeof Oa=="function"&&qr(e),it&&typeof it.setStrictMode=="function")try{it.setStrictMode(En,e)}catch{}}var Ot=Math.clz32?Math.clz32:Tr,fs=Math.log,Oo=Math.LN2;function Tr(e){return e>>>=0,e===0?32:31-(fs(e)/Oo|0)|0}var et=256,kn=262144,ca=4194304;function ln(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function La(e,t,a){var r=e.pendingLanes;if(r===0)return 0;var c=0,d=e.suspendedLanes,v=e.pingedLanes;e=e.warmLanes;var A=r&134217727;return A!==0?(r=A&~d,r!==0?c=ln(r):(v&=A,v!==0?c=ln(v):a||(a=A&~e,a!==0&&(c=ln(a))))):(A=r&~d,A!==0?c=ln(A):v!==0?c=ln(v):a||(a=r&~e,a!==0&&(c=ln(a)))),c===0?0:t!==0&&t!==c&&(t&d)===0&&(d=c&-c,a=t&-t,d>=a||d===32&&(a&4194048)!==0)?t:c}function za(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Lo(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Dr(){var e=ca;return ca<<=1,(ca&62914560)===0&&(ca=4194304),e}function ms(e){for(var t=[],a=0;31>a;a++)t.push(e);return t}function Lt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Se(e,t,a,r,c,d){var v=e.pendingLanes;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=a,e.entangledLanes&=a,e.errorRecoveryDisabledLanes&=a,e.shellSuspendCounter=0;var A=e.entanglements,D=e.expirationTimes,Y=e.hiddenUpdates;for(a=v&~a;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var cb=/[\n"\\]/g;function on(e){return e.replace(cb,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Vo(e,t,a,r,c,d,v,A){e.name="",v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"?e.type=v:e.removeAttribute("type"),t!=null?v==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+rn(t)):e.value!==""+rn(t)&&(e.value=""+rn(t)):v!=="submit"&&v!=="reset"||e.removeAttribute("value"),t!=null?$o(e,v,rn(t)):a!=null?$o(e,v,rn(a)):r!=null&&e.removeAttribute("value"),c==null&&d!=null&&(e.defaultChecked=!!d),c!=null&&(e.checked=c&&typeof c!="function"&&typeof c!="symbol"),A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"?e.name=""+rn(A):e.removeAttribute("name")}function Tf(e,t,a,r,c,d,v,A){if(d!=null&&typeof d!="function"&&typeof d!="symbol"&&typeof d!="boolean"&&(e.type=d),t!=null||a!=null){if(!(d!=="submit"&&d!=="reset"||t!=null)){Ho(e);return}a=a!=null?""+rn(a):"",t=t!=null?""+rn(t):a,A||t===e.value||(e.value=t),e.defaultValue=t}r=r??c,r=typeof r!="function"&&typeof r!="symbol"&&!!r,e.checked=A?e.checked:!!r,e.defaultChecked=!!r,v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"&&(e.name=v),Ho(e)}function $o(e,t,a){t==="number"&&Or(e.ownerDocument)===e||e.defaultValue===""+a||(e.defaultValue=""+a)}function vs(e,t,a,r){if(e=e.options,t){t={};for(var c=0;c"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Qo=!1;if(Un)try{var xl={};Object.defineProperty(xl,"passive",{get:function(){Qo=!0}}),window.addEventListener("test",xl,xl),window.removeEventListener("test",xl,xl)}catch{Qo=!1}var da=null,Ko=null,zr=null;function Uf(){if(zr)return zr;var e,t=Ko,a=t.length,r,c="value"in da?da.value:da.textContent,d=c.length;for(e=0;e=vl),Ff=" ",Xf=!1;function Qf(e,t){switch(e){case"keyup":return Lb.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Kf(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ns=!1;function Ub(e,t){switch(e){case"compositionend":return Kf(t);case"keypress":return t.which!==32?null:(Xf=!0,Ff);case"textInput":return e=t.data,e===Ff&&Xf?null:e;default:return null}}function Hb(e,t){if(Ns)return e==="compositionend"||!Wo&&Qf(e,t)?(e=Uf(),zr=Ko=da=null,Ns=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-e};e=r}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=nm(a)}}function sm(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?sm(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function lm(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Or(e.document);t instanceof e.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)e=t.contentWindow;else break;t=Or(e.document)}return t}function nc(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var Kb=Un&&"documentMode"in document&&11>=document.documentMode,As=null,ac=null,Nl=null,sc=!1;function rm(e,t,a){var r=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;sc||As==null||As!==Or(r)||(r=As,"selectionStart"in r&&nc(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Nl&&jl(Nl,r)||(Nl=r,r=qi(ac,"onSelect"),0>=v,c-=v,Mn=1<<32-Ot(t)+c|a<ke?(_e=ye,ye=null):_e=ye.sibling;var Ge=Q(U,ye,G[ke],te);if(Ge===null){ye===null&&(ye=_e);break}e&&ye&&Ge.alternate===null&&t(U,ye),B=d(Ge,B,ke),$e===null?je=Ge:$e.sibling=Ge,$e=Ge,ye=_e}if(ke===G.length)return a(U,ye),Oe&&Vn(U,ke),je;if(ye===null){for(;keke?(_e=ye,ye=null):_e=ye.sibling;var Da=Q(U,ye,Ge.value,te);if(Da===null){ye===null&&(ye=_e);break}e&&ye&&Da.alternate===null&&t(U,ye),B=d(Da,B,ke),$e===null?je=Da:$e.sibling=Da,$e=Da,ye=_e}if(Ge.done)return a(U,ye),Oe&&Vn(U,ke),je;if(ye===null){for(;!Ge.done;ke++,Ge=G.next())Ge=ae(U,Ge.value,te),Ge!==null&&(B=d(Ge,B,ke),$e===null?je=Ge:$e.sibling=Ge,$e=Ge);return Oe&&Vn(U,ke),je}for(ye=r(ye);!Ge.done;ke++,Ge=G.next())Ge=Z(ye,U,ke,Ge.value,te),Ge!==null&&(e&&Ge.alternate!==null&&ye.delete(Ge.key===null?ke:Ge.key),B=d(Ge,B,ke),$e===null?je=Ge:$e.sibling=Ge,$e=Ge);return e&&ye.forEach(function(hy){return t(U,hy)}),Oe&&Vn(U,ke),je}function Je(U,B,G,te){if(typeof G=="object"&&G!==null&&G.type===S&&G.key===null&&(G=G.props.children),typeof G=="object"&&G!==null){switch(G.$$typeof){case R:e:{for(var je=G.key;B!==null;){if(B.key===je){if(je=G.type,je===S){if(B.tag===7){a(U,B.sibling),te=c(B,G.props.children),te.return=U,U=te;break e}}else if(B.elementType===je||typeof je=="object"&&je!==null&&je.$$typeof===L&&Ia(je)===B.type){a(U,B.sibling),te=c(B,G.props),Ml(te,G),te.return=U,U=te;break e}a(U,B);break}else t(U,B);B=B.sibling}G.type===S?(te=Fa(G.props.children,U.mode,te,G.key),te.return=U,U=te):(te=Kr(G.type,G.key,G.props,null,U.mode,te),Ml(te,G),te.return=U,U=te)}return v(U);case C:e:{for(je=G.key;B!==null;){if(B.key===je)if(B.tag===4&&B.stateNode.containerInfo===G.containerInfo&&B.stateNode.implementation===G.implementation){a(U,B.sibling),te=c(B,G.children||[]),te.return=U,U=te;break e}else{a(U,B);break}else t(U,B);B=B.sibling}te=dc(G,U.mode,te),te.return=U,U=te}return v(U);case L:return G=Ia(G),Je(U,B,G,te)}if(H(G))return pe(U,B,G,te);if(ee(G)){if(je=ee(G),typeof je!="function")throw Error(o(150));return G=je.call(G),Ne(U,B,G,te)}if(typeof G.then=="function")return Je(U,B,ti(G),te);if(G.$$typeof===E)return Je(U,B,Jr(U,G),te);ni(U,G)}return typeof G=="string"&&G!==""||typeof G=="number"||typeof G=="bigint"?(G=""+G,B!==null&&B.tag===6?(a(U,B.sibling),te=c(B,G),te.return=U,U=te):(a(U,B),te=uc(G,U.mode,te),te.return=U,U=te),v(U)):a(U,B)}return function(U,B,G,te){try{kl=0;var je=Je(U,B,G,te);return Bs=null,je}catch(ye){if(ye===_s||ye===Wr)throw ye;var $e=Zt(29,ye,null,U.mode);return $e.lanes=te,$e.return=U,$e}finally{}}}var Pa=Mm(!0),Rm=Mm(!1),xa=!1;function Nc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ac(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function ga(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function ba(e,t,a){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,(Ye&2)!==0){var c=r.pending;return c===null?t.next=t:(t.next=c.next,c.next=t),r.pending=t,t=Qr(e),mm(e,null,a),t}return Xr(e,r,t,a),Qr(e)}function Rl(e,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var r=t.lanes;r&=e.pendingLanes,a|=r,t.lanes=a,Pe(e,a)}}function wc(e,t){var a=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,a===r)){var c=null,d=null;if(a=a.firstBaseUpdate,a!==null){do{var v={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};d===null?c=d=v:d=d.next=v,a=a.next}while(a!==null);d===null?c=d=t:d=d.next=t}else c=d=t;a={baseState:r.baseState,firstBaseUpdate:c,lastBaseUpdate:d,shared:r.shared,callbacks:r.callbacks},e.updateQueue=a;return}e=a.lastBaseUpdate,e===null?a.firstBaseUpdate=t:e.next=t,a.lastBaseUpdate=t}var Cc=!1;function ql(){if(Cc){var e=Ds;if(e!==null)throw e}}function Tl(e,t,a,r){Cc=!1;var c=e.updateQueue;xa=!1;var d=c.firstBaseUpdate,v=c.lastBaseUpdate,A=c.shared.pending;if(A!==null){c.shared.pending=null;var D=A,Y=D.next;D.next=null,v===null?d=Y:v.next=Y,v=D;var W=e.alternate;W!==null&&(W=W.updateQueue,A=W.lastBaseUpdate,A!==v&&(A===null?W.firstBaseUpdate=Y:A.next=Y,W.lastBaseUpdate=D))}if(d!==null){var ae=c.baseState;v=0,W=Y=D=null,A=d;do{var Q=A.lane&-536870913,Z=Q!==A.lane;if(Z?(De&Q)===Q:(r&Q)===Q){Q!==0&&Q===Ts&&(Cc=!0),W!==null&&(W=W.next={lane:0,tag:A.tag,payload:A.payload,callback:null,next:null});e:{var pe=e,Ne=A;Q=t;var Je=a;switch(Ne.tag){case 1:if(pe=Ne.payload,typeof pe=="function"){ae=pe.call(Je,ae,Q);break e}ae=pe;break e;case 3:pe.flags=pe.flags&-65537|128;case 0:if(pe=Ne.payload,Q=typeof pe=="function"?pe.call(Je,ae,Q):pe,Q==null)break e;ae=y({},ae,Q);break e;case 2:xa=!0}}Q=A.callback,Q!==null&&(e.flags|=64,Z&&(e.flags|=8192),Z=c.callbacks,Z===null?c.callbacks=[Q]:Z.push(Q))}else Z={lane:Q,tag:A.tag,payload:A.payload,callback:A.callback,next:null},W===null?(Y=W=Z,D=ae):W=W.next=Z,v|=Q;if(A=A.next,A===null){if(A=c.shared.pending,A===null)break;Z=A,A=Z.next,Z.next=null,c.lastBaseUpdate=Z,c.shared.pending=null}}while(!0);W===null&&(D=ae),c.baseState=D,c.firstBaseUpdate=Y,c.lastBaseUpdate=W,d===null&&(c.shared.lanes=0),Na|=v,e.lanes=v,e.memoizedState=ae}}function qm(e,t){if(typeof e!="function")throw Error(o(191,e));e.call(t)}function Tm(e,t){var a=e.callbacks;if(a!==null)for(e.callbacks=null,e=0;ed?d:8;var v=T.T,A={};T.T=A,Fc(e,!1,t,a);try{var D=c(),Y=T.S;if(Y!==null&&Y(A,D),D!==null&&typeof D=="object"&&typeof D.then=="function"){var W=av(D,r);Bl(e,t,W,en(e))}else Bl(e,t,r,en(e))}catch(ae){Bl(e,t,{then:function(){},status:"rejected",reason:ae},en())}finally{V.p=d,v!==null&&A.types!==null&&(v.types=A.types),T.T=v}}function cv(){}function Gc(e,t,a,r){if(e.tag!==5)throw Error(o(476));var c=uh(e).queue;ch(e,c,t,I,a===null?cv:function(){return dh(e),a(r)})}function uh(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:I,baseState:I,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fn,lastRenderedState:I},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fn,lastRenderedState:a},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function dh(e){var t=uh(e);t.next===null&&(t=e.alternate.memoizedState),Bl(e,t.next.queue,{},en())}function Yc(){return Rt(Pl)}function fh(){return gt().memoizedState}function mh(){return gt().memoizedState}function uv(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var a=en();e=ga(a);var r=ba(t,e,a);r!==null&&(Ft(r,t,a),Rl(r,t,a)),t={cache:vc()},e.payload=t;return}t=t.return}}function dv(e,t,a){var r=en();a={lane:r,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},fi(e)?ph(t,a):(a=oc(e,t,a,r),a!==null&&(Ft(a,e,r),xh(a,t,r)))}function hh(e,t,a){var r=en();Bl(e,t,a,r)}function Bl(e,t,a,r){var c={lane:r,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(fi(e))ph(t,c);else{var d=e.alternate;if(e.lanes===0&&(d===null||d.lanes===0)&&(d=t.lastRenderedReducer,d!==null))try{var v=t.lastRenderedState,A=d(v,a);if(c.hasEagerState=!0,c.eagerState=A,Kt(A,v))return Xr(e,t,c,0),We===null&&Fr(),!1}catch{}finally{}if(a=oc(e,t,c,r),a!==null)return Ft(a,e,r),xh(a,t,r),!0}return!1}function Fc(e,t,a,r){if(r={lane:2,revertLane:Nu(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},fi(e)){if(t)throw Error(o(479))}else t=oc(e,a,r,2),t!==null&&Ft(t,e,2)}function fi(e){var t=e.alternate;return e===Ce||t!==null&&t===Ce}function ph(e,t){Ls=li=!0;var a=e.pending;a===null?t.next=t:(t.next=a.next,a.next=t),e.pending=t}function xh(e,t,a){if((a&4194048)!==0){var r=t.lanes;r&=e.pendingLanes,a|=r,t.lanes=a,Pe(e,a)}}var Ol={readContext:Rt,use:oi,useCallback:dt,useContext:dt,useEffect:dt,useImperativeHandle:dt,useLayoutEffect:dt,useInsertionEffect:dt,useMemo:dt,useReducer:dt,useRef:dt,useState:dt,useDebugValue:dt,useDeferredValue:dt,useTransition:dt,useSyncExternalStore:dt,useId:dt,useHostTransitionStatus:dt,useFormState:dt,useActionState:dt,useOptimistic:dt,useMemoCache:dt,useCacheRefresh:dt};Ol.useEffectEvent=dt;var gh={readContext:Rt,use:oi,useCallback:function(e,t){return zt().memoizedState=[e,t===void 0?null:t],e},useContext:Rt,useEffect:eh,useImperativeHandle:function(e,t,a){a=a!=null?a.concat([e]):null,ui(4194308,4,sh.bind(null,t,e),a)},useLayoutEffect:function(e,t){return ui(4194308,4,e,t)},useInsertionEffect:function(e,t){ui(4,2,e,t)},useMemo:function(e,t){var a=zt();t=t===void 0?null:t;var r=e();if(Wa){Bt(!0);try{e()}finally{Bt(!1)}}return a.memoizedState=[r,t],r},useReducer:function(e,t,a){var r=zt();if(a!==void 0){var c=a(t);if(Wa){Bt(!0);try{a(t)}finally{Bt(!1)}}}else c=t;return r.memoizedState=r.baseState=c,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:c},r.queue=e,e=e.dispatch=dv.bind(null,Ce,e),[r.memoizedState,e]},useRef:function(e){var t=zt();return e={current:e},t.memoizedState=e},useState:function(e){e=zc(e);var t=e.queue,a=hh.bind(null,Ce,t);return t.dispatch=a,[e.memoizedState,a]},useDebugValue:Vc,useDeferredValue:function(e,t){var a=zt();return $c(a,e,t)},useTransition:function(){var e=zc(!1);return e=ch.bind(null,Ce,e.queue,!0,!1),zt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,a){var r=Ce,c=zt();if(Oe){if(a===void 0)throw Error(o(407));a=a()}else{if(a=t(),We===null)throw Error(o(349));(De&127)!==0||zm(r,t,a)}c.memoizedState=a;var d={value:a,getSnapshot:t};return c.queue=d,eh(Hm.bind(null,r,d,e),[e]),r.flags|=2048,Us(9,{destroy:void 0},Um.bind(null,r,d,a,t),null),a},useId:function(){var e=zt(),t=We.identifierPrefix;if(Oe){var a=Rn,r=Mn;a=(r&~(1<<32-Ot(r)-1)).toString(32)+a,t="_"+t+"R_"+a,a=ri++,0<\/script>",d=d.removeChild(d.firstChild);break;case"select":d=typeof r.is=="string"?v.createElement("select",{is:r.is}):v.createElement("select"),r.multiple?d.multiple=!0:r.size&&(d.size=r.size);break;default:d=typeof r.is=="string"?v.createElement(c,{is:r.is}):v.createElement(c)}}d[ot]=t,d[Ut]=r;e:for(v=t.child;v!==null;){if(v.tag===5||v.tag===6)d.appendChild(v.stateNode);else if(v.tag!==4&&v.tag!==27&&v.child!==null){v.child.return=v,v=v.child;continue}if(v===t)break e;for(;v.sibling===null;){if(v.return===null||v.return===t)break e;v=v.return}v.sibling.return=v.return,v=v.sibling}t.stateNode=d;e:switch(Tt(d,c,r),c){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}r&&Qn(t)}}return at(t),lu(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,a),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Qn(t);else{if(typeof r!="string"&&t.stateNode===null)throw Error(o(166));if(e=ue.current,Rs(t)){if(e=t.stateNode,a=t.memoizedProps,r=null,c=Mt,c!==null)switch(c.tag){case 27:case 5:r=c.memoizedProps}e[ot]=t,e=!!(e.nodeValue===a||r!==null&&r.suppressHydrationWarning===!0||O0(e.nodeValue,a)),e||ha(t,!0)}else e=Ti(e).createTextNode(r),e[ot]=t,t.stateNode=e}return at(t),null;case 31:if(a=t.memoizedState,e===null||e.memoizedState!==null){if(r=Rs(t),a!==null){if(e===null){if(!r)throw Error(o(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(o(557));e[ot]=t}else Xa(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;at(t),e=!1}else a=pc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),e=!0;if(!e)return t.flags&256?(Jt(t),t):(Jt(t),null);if((t.flags&128)!==0)throw Error(o(558))}return at(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(c=Rs(t),r!==null&&r.dehydrated!==null){if(e===null){if(!c)throw Error(o(318));if(c=t.memoizedState,c=c!==null?c.dehydrated:null,!c)throw Error(o(317));c[ot]=t}else Xa(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;at(t),c=!1}else c=pc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=c),c=!0;if(!c)return t.flags&256?(Jt(t),t):(Jt(t),null)}return Jt(t),(t.flags&128)!==0?(t.lanes=a,t):(a=r!==null,e=e!==null&&e.memoizedState!==null,a&&(r=t.child,c=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(c=r.alternate.memoizedState.cachePool.pool),d=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(d=r.memoizedState.cachePool.pool),d!==c&&(r.flags|=2048)),a!==e&&a&&(t.child.flags|=8192),gi(t,t.updateQueue),at(t),null);case 4:return me(),e===null&&Eu(t.stateNode.containerInfo),at(t),null;case 10:return Gn(t.type),at(t),null;case 19:if(_(xt),r=t.memoizedState,r===null)return at(t),null;if(c=(t.flags&128)!==0,d=r.rendering,d===null)if(c)zl(r,!1);else{if(ft!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(d=si(e),d!==null){for(t.flags|=128,zl(r,!1),e=d.updateQueue,t.updateQueue=e,gi(t,e),t.subtreeFlags=0,e=a,a=t.child;a!==null;)hm(a,e),a=a.sibling;return J(xt,xt.current&1|2),Oe&&Vn(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&He()>ji&&(t.flags|=128,c=!0,zl(r,!1),t.lanes=4194304)}else{if(!c)if(e=si(d),e!==null){if(t.flags|=128,c=!0,e=e.updateQueue,t.updateQueue=e,gi(t,e),zl(r,!0),r.tail===null&&r.tailMode==="hidden"&&!d.alternate&&!Oe)return at(t),null}else 2*He()-r.renderingStartTime>ji&&a!==536870912&&(t.flags|=128,c=!0,zl(r,!1),t.lanes=4194304);r.isBackwards?(d.sibling=t.child,t.child=d):(e=r.last,e!==null?e.sibling=d:t.child=d,r.last=d)}return r.tail!==null?(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=He(),e.sibling=null,a=xt.current,J(xt,c?a&1|2:a&1),Oe&&Vn(t,r.treeForkCount),e):(at(t),null);case 22:case 23:return Jt(t),kc(),r=t.memoizedState!==null,e!==null?e.memoizedState!==null!==r&&(t.flags|=8192):r&&(t.flags|=8192),r?(a&536870912)!==0&&(t.flags&128)===0&&(at(t),t.subtreeFlags&6&&(t.flags|=8192)):at(t),a=t.updateQueue,a!==null&&gi(t,a.retryQueue),a=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==a&&(t.flags|=2048),e!==null&&_(Za),null;case 24:return a=null,e!==null&&(a=e.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),Gn(vt),at(t),null;case 25:return null;case 30:return null}throw Error(o(156,t.tag))}function xv(e,t){switch(mc(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Gn(vt),me(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return ze(t),null;case 31:if(t.memoizedState!==null){if(Jt(t),t.alternate===null)throw Error(o(340));Xa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Jt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(o(340));Xa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return _(xt),null;case 4:return me(),null;case 10:return Gn(t.type),null;case 22:case 23:return Jt(t),kc(),e!==null&&_(Za),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Gn(vt),null;case 25:return null;default:return null}}function Vh(e,t){switch(mc(t),t.tag){case 3:Gn(vt),me();break;case 26:case 27:case 5:ze(t);break;case 4:me();break;case 31:t.memoizedState!==null&&Jt(t);break;case 13:Jt(t);break;case 19:_(xt);break;case 10:Gn(t.type);break;case 22:case 23:Jt(t),kc(),e!==null&&_(Za);break;case 24:Gn(vt)}}function Ul(e,t){try{var a=t.updateQueue,r=a!==null?a.lastEffect:null;if(r!==null){var c=r.next;a=c;do{if((a.tag&e)===e){r=void 0;var d=a.create,v=a.inst;r=d(),v.destroy=r}a=a.next}while(a!==c)}}catch(A){Ke(t,t.return,A)}}function Sa(e,t,a){try{var r=t.updateQueue,c=r!==null?r.lastEffect:null;if(c!==null){var d=c.next;r=d;do{if((r.tag&e)===e){var v=r.inst,A=v.destroy;if(A!==void 0){v.destroy=void 0,c=t;var D=a,Y=A;try{Y()}catch(W){Ke(c,D,W)}}}r=r.next}while(r!==d)}}catch(W){Ke(t,t.return,W)}}function $h(e){var t=e.updateQueue;if(t!==null){var a=e.stateNode;try{Tm(t,a)}catch(r){Ke(e,e.return,r)}}}function Gh(e,t,a){a.props=es(e.type,e.memoizedProps),a.state=e.memoizedState;try{a.componentWillUnmount()}catch(r){Ke(e,t,r)}}function Hl(e,t){try{var a=e.ref;if(a!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof a=="function"?e.refCleanup=a(r):a.current=r}}catch(c){Ke(e,t,c)}}function qn(e,t){var a=e.ref,r=e.refCleanup;if(a!==null)if(typeof r=="function")try{r()}catch(c){Ke(e,t,c)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(c){Ke(e,t,c)}else a.current=null}function Yh(e){var t=e.type,a=e.memoizedProps,r=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&r.focus();break e;case"img":a.src?r.src=a.src:a.srcSet&&(r.srcset=a.srcSet)}}catch(c){Ke(e,e.return,c)}}function ru(e,t,a){try{var r=e.stateNode;zv(r,e.type,a,t),r[Ut]=t}catch(c){Ke(e,e.return,c)}}function Fh(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&ka(e.type)||e.tag===4}function iu(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Fh(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&ka(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function ou(e,t,a){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(e,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(e),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=zn));else if(r!==4&&(r===27&&ka(e.type)&&(a=e.stateNode,t=null),e=e.child,e!==null))for(ou(e,t,a),e=e.sibling;e!==null;)ou(e,t,a),e=e.sibling}function bi(e,t,a){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?a.insertBefore(e,t):a.appendChild(e);else if(r!==4&&(r===27&&ka(e.type)&&(a=e.stateNode),e=e.child,e!==null))for(bi(e,t,a),e=e.sibling;e!==null;)bi(e,t,a),e=e.sibling}function Xh(e){var t=e.stateNode,a=e.memoizedProps;try{for(var r=e.type,c=t.attributes;c.length;)t.removeAttributeNode(c[0]);Tt(t,r,a),t[ot]=e,t[Ut]=a}catch(d){Ke(e,e.return,d)}}var Kn=!1,jt=!1,cu=!1,Qh=typeof WeakSet=="function"?WeakSet:Set,Et=null;function gv(e,t){if(e=e.containerInfo,Ru=Ui,e=lm(e),nc(e)){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else e:{a=(a=e.ownerDocument)&&a.defaultView||window;var r=a.getSelection&&a.getSelection();if(r&&r.rangeCount!==0){a=r.anchorNode;var c=r.anchorOffset,d=r.focusNode;r=r.focusOffset;try{a.nodeType,d.nodeType}catch{a=null;break e}var v=0,A=-1,D=-1,Y=0,W=0,ae=e,Q=null;t:for(;;){for(var Z;ae!==a||c!==0&&ae.nodeType!==3||(A=v+c),ae!==d||r!==0&&ae.nodeType!==3||(D=v+r),ae.nodeType===3&&(v+=ae.nodeValue.length),(Z=ae.firstChild)!==null;)Q=ae,ae=Z;for(;;){if(ae===e)break t;if(Q===a&&++Y===c&&(A=v),Q===d&&++W===r&&(D=v),(Z=ae.nextSibling)!==null)break;ae=Q,Q=ae.parentNode}ae=Z}a=A===-1||D===-1?null:{start:A,end:D}}else a=null}a=a||{start:0,end:0}}else a=null;for(qu={focusedElem:e,selectionRange:a},Ui=!1,Et=t;Et!==null;)if(t=Et,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Et=e;else for(;Et!==null;){switch(t=Et,d=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(a=0;a title"))),Tt(d,r,a),d[ot]=e,Ct(d),r=d;break e;case"link":var v=W0("link","href",c).get(r+(a.href||""));if(v){for(var A=0;AJe&&(v=Je,Je=Ne,Ne=v);var U=am(A,Ne),B=am(A,Je);if(U&&B&&(Z.rangeCount!==1||Z.anchorNode!==U.node||Z.anchorOffset!==U.offset||Z.focusNode!==B.node||Z.focusOffset!==B.offset)){var G=ae.createRange();G.setStart(U.node,U.offset),Z.removeAllRanges(),Ne>Je?(Z.addRange(G),Z.extend(B.node,B.offset)):(G.setEnd(B.node,B.offset),Z.addRange(G))}}}}for(ae=[],Z=A;Z=Z.parentNode;)Z.nodeType===1&&ae.push({element:Z,left:Z.scrollLeft,top:Z.scrollTop});for(typeof A.focus=="function"&&A.focus(),A=0;Aa?32:a,T.T=null,a=xu,xu=null;var d=wa,v=Wn;if(At=0,Ys=wa=null,Wn=0,(Ye&6)!==0)throw Error(o(331));var A=Ye;if(Ye|=4,s0(d.current),t0(d,d.current,v,a),Ye=A,Xl(0,!1),it&&typeof it.onPostCommitFiberRoot=="function")try{it.onPostCommitFiberRoot(En,d)}catch{}return!0}finally{V.p=c,T.T=r,j0(e,t)}}function A0(e,t,a){t=un(a,t),t=Zc(e.stateNode,t,2),e=ba(e,t,2),e!==null&&(Lt(e,2),Tn(e))}function Ke(e,t,a){if(e.tag===3)A0(e,e,a);else for(;t!==null;){if(t.tag===3){A0(t,e,a);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof r.componentDidCatch=="function"&&(Aa===null||!Aa.has(r))){e=un(a,e),a=wh(2),r=ba(t,a,2),r!==null&&(Ch(a,r,t,e),Lt(r,2),Tn(r));break}}t=t.return}}function yu(e,t,a){var r=e.pingCache;if(r===null){r=e.pingCache=new yv;var c=new Set;r.set(t,c)}else c=r.get(t),c===void 0&&(c=new Set,r.set(t,c));c.has(a)||(fu=!0,c.add(a),e=wv.bind(null,e,t,a),t.then(e,e))}function wv(e,t,a){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&a,e.warmLanes&=~a,We===e&&(De&a)===a&&(ft===4||ft===3&&(De&62914560)===De&&300>He()-Si?(Ye&2)===0&&Fs(e,0):mu|=a,Gs===De&&(Gs=0)),Tn(e)}function w0(e,t){t===0&&(t=Dr()),e=Ya(e,t),e!==null&&(Lt(e,t),Tn(e))}function Cv(e){var t=e.memoizedState,a=0;t!==null&&(a=t.retryLane),w0(e,a)}function Ev(e,t){var a=0;switch(e.tag){case 31:case 13:var r=e.stateNode,c=e.memoizedState;c!==null&&(a=c.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(o(314))}r!==null&&r.delete(t),w0(e,a)}function kv(e,t){return P(e,t)}var ki=null,Qs=null,Su=!1,Mi=!1,ju=!1,Ea=0;function Tn(e){e!==Qs&&e.next===null&&(Qs===null?ki=Qs=e:Qs=Qs.next=e),Mi=!0,Su||(Su=!0,Rv())}function Xl(e,t){if(!ju&&Mi){ju=!0;do for(var a=!1,r=ki;r!==null;){if(e!==0){var c=r.pendingLanes;if(c===0)var d=0;else{var v=r.suspendedLanes,A=r.pingedLanes;d=(1<<31-Ot(42|e)+1)-1,d&=c&~(v&~A),d=d&201326741?d&201326741|1:d?d|2:0}d!==0&&(a=!0,M0(r,d))}else d=De,d=La(r,r===We?d:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),(d&3)===0||za(r,d)||(a=!0,M0(r,d));r=r.next}while(a);ju=!1}}function Mv(){C0()}function C0(){Mi=Su=!1;var e=0;Ea!==0&&Hv()&&(e=Ea);for(var t=He(),a=null,r=ki;r!==null;){var c=r.next,d=E0(r,t);d===0?(r.next=null,a===null?ki=c:a.next=c,c===null&&(Qs=a)):(a=r,(e!==0||(d&3)!==0)&&(Mi=!0)),r=c}At!==0&&At!==5||Xl(e),Ea!==0&&(Ea=0)}function E0(e,t){for(var a=e.suspendedLanes,r=e.pingedLanes,c=e.expirationTimes,d=e.pendingLanes&-62914561;0A)break;var W=D.transferSize,ae=D.initiatorType;W&&L0(ae)&&(D=D.responseEnd,v+=W*(D"u"?null:document;function Z0(e,t,a){var r=Ks;if(r&&typeof t=="string"&&t){var c=on(t);c='link[rel="'+e+'"][href="'+c+'"]',typeof a=="string"&&(c+='[crossorigin="'+a+'"]'),K0.has(c)||(K0.add(c),e={rel:e,crossOrigin:a,href:t},r.querySelector(c)===null&&(t=r.createElement("link"),Tt(t,"link",e),Ct(t),r.head.appendChild(t)))}}function Zv(e){ea.D(e),Z0("dns-prefetch",e,null)}function Iv(e,t){ea.C(e,t),Z0("preconnect",e,t)}function Jv(e,t,a){ea.L(e,t,a);var r=Ks;if(r&&e&&t){var c='link[rel="preload"][as="'+on(t)+'"]';t==="image"&&a&&a.imageSrcSet?(c+='[imagesrcset="'+on(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(c+='[imagesizes="'+on(a.imageSizes)+'"]')):c+='[href="'+on(e)+'"]';var d=c;switch(t){case"style":d=Zs(e);break;case"script":d=Is(e)}xn.has(d)||(e=y({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:e,as:t},a),xn.set(d,e),r.querySelector(c)!==null||t==="style"&&r.querySelector(Il(d))||t==="script"&&r.querySelector(Jl(d))||(t=r.createElement("link"),Tt(t,"link",e),Ct(t),r.head.appendChild(t)))}}function Pv(e,t){ea.m(e,t);var a=Ks;if(a&&e){var r=t&&typeof t.as=="string"?t.as:"script",c='link[rel="modulepreload"][as="'+on(r)+'"][href="'+on(e)+'"]',d=c;switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":d=Is(e)}if(!xn.has(d)&&(e=y({rel:"modulepreload",href:e},t),xn.set(d,e),a.querySelector(c)===null)){switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(Jl(d)))return}r=a.createElement("link"),Tt(r,"link",e),Ct(r),a.head.appendChild(r)}}}function Wv(e,t,a){ea.S(e,t,a);var r=Ks;if(r&&e){var c=gs(r).hoistableStyles,d=Zs(e);t=t||"default";var v=c.get(d);if(!v){var A={loading:0,preload:null};if(v=r.querySelector(Il(d)))A.loading=5;else{e=y({rel:"stylesheet",href:e,"data-precedence":t},a),(a=xn.get(d))&&zu(e,a);var D=v=r.createElement("link");Ct(D),Tt(D,"link",e),D._p=new Promise(function(Y,W){D.onload=Y,D.onerror=W}),D.addEventListener("load",function(){A.loading|=1}),D.addEventListener("error",function(){A.loading|=2}),A.loading|=4,_i(v,t,r)}v={type:"stylesheet",instance:v,count:1,state:A},c.set(d,v)}}}function ey(e,t){ea.X(e,t);var a=Ks;if(a&&e){var r=gs(a).hoistableScripts,c=Is(e),d=r.get(c);d||(d=a.querySelector(Jl(c)),d||(e=y({src:e,async:!0},t),(t=xn.get(c))&&Uu(e,t),d=a.createElement("script"),Ct(d),Tt(d,"link",e),a.head.appendChild(d)),d={type:"script",instance:d,count:1,state:null},r.set(c,d))}}function ty(e,t){ea.M(e,t);var a=Ks;if(a&&e){var r=gs(a).hoistableScripts,c=Is(e),d=r.get(c);d||(d=a.querySelector(Jl(c)),d||(e=y({src:e,async:!0,type:"module"},t),(t=xn.get(c))&&Uu(e,t),d=a.createElement("script"),Ct(d),Tt(d,"link",e),a.head.appendChild(d)),d={type:"script",instance:d,count:1,state:null},r.set(c,d))}}function I0(e,t,a,r){var c=(c=ue.current)?Di(c):null;if(!c)throw Error(o(446));switch(e){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=Zs(a.href),a=gs(c).hoistableStyles,r=a.get(t),r||(r={type:"style",instance:null,count:0,state:null},a.set(t,r)),r):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){e=Zs(a.href);var d=gs(c).hoistableStyles,v=d.get(e);if(v||(c=c.ownerDocument||c,v={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},d.set(e,v),(d=c.querySelector(Il(e)))&&!d._p&&(v.instance=d,v.state.loading=5),xn.has(e)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},xn.set(e,a),d||ny(c,e,a,v.state))),t&&r===null)throw Error(o(528,""));return v}if(t&&r!==null)throw Error(o(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Is(a),a=gs(c).hoistableScripts,r=a.get(t),r||(r={type:"script",instance:null,count:0,state:null},a.set(t,r)),r):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,e))}}function Zs(e){return'href="'+on(e)+'"'}function Il(e){return'link[rel="stylesheet"]['+e+"]"}function J0(e){return y({},e,{"data-precedence":e.precedence,precedence:null})}function ny(e,t,a,r){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?r.loading=1:(t=e.createElement("link"),r.preload=t,t.addEventListener("load",function(){return r.loading|=1}),t.addEventListener("error",function(){return r.loading|=2}),Tt(t,"link",a),Ct(t),e.head.appendChild(t))}function Is(e){return'[src="'+on(e)+'"]'}function Jl(e){return"script[async]"+e}function P0(e,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var r=e.querySelector('style[data-href~="'+on(a.href)+'"]');if(r)return t.instance=r,Ct(r),r;var c=y({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement("style"),Ct(r),Tt(r,"style",c),_i(r,a.precedence,e),t.instance=r;case"stylesheet":c=Zs(a.href);var d=e.querySelector(Il(c));if(d)return t.state.loading|=4,t.instance=d,Ct(d),d;r=J0(a),(c=xn.get(c))&&zu(r,c),d=(e.ownerDocument||e).createElement("link"),Ct(d);var v=d;return v._p=new Promise(function(A,D){v.onload=A,v.onerror=D}),Tt(d,"link",r),t.state.loading|=4,_i(d,a.precedence,e),t.instance=d;case"script":return d=Is(a.src),(c=e.querySelector(Jl(d)))?(t.instance=c,Ct(c),c):(r=a,(c=xn.get(d))&&(r=y({},a),Uu(r,c)),e=e.ownerDocument||e,c=e.createElement("script"),Ct(c),Tt(c,"link",r),e.head.appendChild(c),t.instance=c);case"void":return null;default:throw Error(o(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(r=t.instance,t.state.loading|=4,_i(r,a.precedence,e));return t.instance}function _i(e,t,a){for(var r=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),c=r.length?r[r.length-1]:null,d=c,v=0;v title"):null)}function ay(e,t,a){if(a===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return e=t.disabled,typeof t.precedence=="string"&&e==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function tp(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function sy(e,t,a,r){if(a.type==="stylesheet"&&(typeof r.media!="string"||matchMedia(r.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var c=Zs(r.href),d=t.querySelector(Il(c));if(d){t=d._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Oi.bind(e),t.then(e,e)),a.state.loading|=4,a.instance=d,Ct(d);return}d=t.ownerDocument||t,r=J0(r),(c=xn.get(c))&&zu(r,c),d=d.createElement("link"),Ct(d);var v=d;v._p=new Promise(function(A,D){v.onload=A,v.onerror=D}),Tt(d,"link",r),a.instance=d}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(e.count++,a=Oi.bind(e),t.addEventListener("load",a),t.addEventListener("error",a))}}var Hu=0;function ly(e,t){return e.stylesheets&&e.count===0&&zi(e,e.stylesheets),0Hu?50:800)+t);return e.unsuspend=a,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(c)}}:null}function Oi(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)zi(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Li=null;function zi(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Li=new Map,t.forEach(ry,e),Li=null,Oi.call(e))}function ry(e,t){if(!(t.state.loading&4)){var a=Li.get(e);if(a)var r=a.get(null);else{a=new Map,Li.set(e,a);for(var c=e.querySelectorAll("link[data-precedence],style[data-precedence]"),d=0;d"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(s){console.error(s)}}return n(),Zu.exports=Ny(),Zu.exports}var wy=Ay();var wp="popstate";function Cy(n={}){function s(o,u){let{pathname:f,search:p,hash:h}=o.location;return Nd("",{pathname:f,search:p,hash:h},u.state&&u.state.usr||null,u.state&&u.state.key||"default")}function l(o,u){return typeof u=="string"?u:xr(u)}return ky(s,l,null,n)}function ut(n,s){if(n===!1||n===null||typeof n>"u")throw new Error(s)}function Cn(n,s){if(!n){typeof console<"u"&&console.warn(s);try{throw new Error(s)}catch{}}}function Ey(){return Math.random().toString(36).substring(2,10)}function Cp(n,s){return{usr:n.state,key:n.key,idx:s}}function Nd(n,s,l=null,o){return{pathname:typeof n=="string"?n:n.pathname,search:"",hash:"",...typeof s=="string"?cl(s):s,state:l,key:s&&s.key||o||Ey()}}function xr({pathname:n="/",search:s="",hash:l=""}){return s&&s!=="?"&&(n+=s.charAt(0)==="?"?s:"?"+s),l&&l!=="#"&&(n+=l.charAt(0)==="#"?l:"#"+l),n}function cl(n){let s={};if(n){let l=n.indexOf("#");l>=0&&(s.hash=n.substring(l),n=n.substring(0,l));let o=n.indexOf("?");o>=0&&(s.search=n.substring(o),n=n.substring(0,o)),n&&(s.pathname=n)}return s}function ky(n,s,l,o={}){let{window:u=document.defaultView,v5Compat:f=!1}=o,p=u.history,h="POP",x=null,g=b();g==null&&(g=0,p.replaceState({...p.state,idx:g},""));function b(){return(p.state||{idx:null}).idx}function y(){h="POP";let w=b(),j=w==null?null:w-g;g=w,x&&x({action:h,location:S.location,delta:j})}function N(w,j){h="PUSH";let M=Nd(S.location,w,j);g=b()+1;let E=Cp(M,g),k=S.createHref(M);try{p.pushState(E,"",k)}catch(z){if(z instanceof DOMException&&z.name==="DataCloneError")throw z;u.location.assign(k)}f&&x&&x({action:h,location:S.location,delta:1})}function R(w,j){h="REPLACE";let M=Nd(S.location,w,j);g=b();let E=Cp(M,g),k=S.createHref(M);p.replaceState(E,"",k),f&&x&&x({action:h,location:S.location,delta:0})}function C(w){return My(w)}let S={get action(){return h},get location(){return n(u,p)},listen(w){if(x)throw new Error("A history only accepts one active listener");return u.addEventListener(wp,y),x=w,()=>{u.removeEventListener(wp,y),x=null}},createHref(w){return s(u,w)},createURL:C,encodeLocation(w){let j=C(w);return{pathname:j.pathname,search:j.search,hash:j.hash}},push:N,replace:R,go(w){return p.go(w)}};return S}function My(n,s=!1){let l="http://localhost";typeof window<"u"&&(l=window.location.origin!=="null"?window.location.origin:window.location.href),ut(l,"No window.location.(origin|href) available to create URL");let o=typeof n=="string"?n:xr(n);return o=o.replace(/ $/,"%20"),!s&&o.startsWith("//")&&(o=l+o),new URL(o,l)}function Mx(n,s,l="/"){return Ry(n,s,l,!1)}function Ry(n,s,l,o){let u=typeof s=="string"?cl(s):s,f=ra(u.pathname||"/",l);if(f==null)return null;let p=Rx(n);qy(p);let h=null;for(let x=0;h==null&&x{let b={relativePath:g===void 0?p.path||"":g,caseSensitive:p.caseSensitive===!0,childrenIndex:h,route:p};if(b.relativePath.startsWith("/")){if(!b.relativePath.startsWith(o)&&x)return;ut(b.relativePath.startsWith(o),`Absolute route path "${b.relativePath}" nested under path "${o}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),b.relativePath=b.relativePath.slice(o.length)}let y=la([o,b.relativePath]),N=l.concat(b);p.children&&p.children.length>0&&(ut(p.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${y}".`),Rx(p.children,s,N,y,x)),!(p.path==null&&!p.index)&&s.push({path:y,score:zy(y,p.index),routesMeta:N})};return n.forEach((p,h)=>{if(p.path===""||!p.path?.includes("?"))f(p,h);else for(let x of qx(p.path))f(p,h,!0,x)}),s}function qx(n){let s=n.split("/");if(s.length===0)return[];let[l,...o]=s,u=l.endsWith("?"),f=l.replace(/\?$/,"");if(o.length===0)return u?[f,""]:[f];let p=qx(o.join("/")),h=[];return h.push(...p.map(x=>x===""?f:[f,x].join("/"))),u&&h.push(...p),h.map(x=>n.startsWith("/")&&x===""?"/":x)}function qy(n){n.sort((s,l)=>s.score!==l.score?l.score-s.score:Uy(s.routesMeta.map(o=>o.childrenIndex),l.routesMeta.map(o=>o.childrenIndex)))}var Ty=/^:[\w-]+$/,Dy=3,_y=2,By=1,Oy=10,Ly=-2,Ep=n=>n==="*";function zy(n,s){let l=n.split("/"),o=l.length;return l.some(Ep)&&(o+=Ly),s&&(o+=_y),l.filter(u=>!Ep(u)).reduce((u,f)=>u+(Ty.test(f)?Dy:f===""?By:Oy),o)}function Uy(n,s){return n.length===s.length&&n.slice(0,-1).every((o,u)=>o===s[u])?n[n.length-1]-s[s.length-1]:0}function Hy(n,s,l=!1){let{routesMeta:o}=n,u={},f="/",p=[];for(let h=0;h{if(b==="*"){let C=h[N]||"";p=f.slice(0,f.length-C.length).replace(/(.)\/+$/,"$1")}const R=h[N];return y&&!R?g[b]=void 0:g[b]=(R||"").replace(/%2F/g,"/"),g},{}),pathname:f,pathnameBase:p,pattern:n}}function Vy(n,s=!1,l=!0){Cn(n==="*"||!n.endsWith("*")||n.endsWith("/*"),`Route path "${n}" will be treated as if it were "${n.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${n.replace(/\*$/,"/*")}".`);let o=[],u="^"+n.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(p,h,x)=>(o.push({paramName:h,isOptional:x!=null}),x?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return n.endsWith("*")?(o.push({paramName:"*"}),u+=n==="*"||n==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):l?u+="\\/*$":n!==""&&n!=="/"&&(u+="(?:(?=\\/|$))"),[new RegExp(u,s?void 0:"i"),o]}function $y(n){try{return n.split("/").map(s=>decodeURIComponent(s).replace(/\//g,"%2F")).join("/")}catch(s){return Cn(!1,`The URL path "${n}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${s}).`),n}}function ra(n,s){if(s==="/")return n;if(!n.toLowerCase().startsWith(s.toLowerCase()))return null;let l=s.endsWith("/")?s.length-1:s.length,o=n.charAt(l);return o&&o!=="/"?null:n.slice(l)||"/"}var Gy=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Yy=n=>Gy.test(n);function Fy(n,s="/"){let{pathname:l,search:o="",hash:u=""}=typeof n=="string"?cl(n):n,f;if(l)if(Yy(l))f=l;else{if(l.includes("//")){let p=l;l=l.replace(/\/\/+/g,"/"),Cn(!1,`Pathnames cannot have embedded double slashes - normalizing ${p} -> ${l}`)}l.startsWith("/")?f=kp(l.substring(1),"/"):f=kp(l,s)}else f=s;return{pathname:f,search:Ky(o),hash:Zy(u)}}function kp(n,s){let l=s.replace(/\/+$/,"").split("/");return n.split("/").forEach(u=>{u===".."?l.length>1&&l.pop():u!=="."&&l.push(u)}),l.length>1?l.join("/"):"/"}function Wu(n,s,l,o){return`Cannot include a '${n}' character in a manually specified \`to.${s}\` field [${JSON.stringify(o)}]. Please separate it out to the \`to.${l}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function Xy(n){return n.filter((s,l)=>l===0||s.route.path&&s.route.path.length>0)}function Tx(n){let s=Xy(n);return s.map((l,o)=>o===s.length-1?l.pathname:l.pathnameBase)}function Dx(n,s,l,o=!1){let u;typeof n=="string"?u=cl(n):(u={...n},ut(!u.pathname||!u.pathname.includes("?"),Wu("?","pathname","search",u)),ut(!u.pathname||!u.pathname.includes("#"),Wu("#","pathname","hash",u)),ut(!u.search||!u.search.includes("#"),Wu("#","search","hash",u)));let f=n===""||u.pathname==="",p=f?"/":u.pathname,h;if(p==null)h=l;else{let y=s.length-1;if(!o&&p.startsWith("..")){let N=p.split("/");for(;N[0]==="..";)N.shift(),y-=1;u.pathname=N.join("/")}h=y>=0?s[y]:"/"}let x=Fy(u,h),g=p&&p!=="/"&&p.endsWith("/"),b=(f||p===".")&&l.endsWith("/");return!x.pathname.endsWith("/")&&(g||b)&&(x.pathname+="/"),x}var la=n=>n.join("/").replace(/\/\/+/g,"/"),Qy=n=>n.replace(/\/+$/,"").replace(/^\/*/,"/"),Ky=n=>!n||n==="?"?"":n.startsWith("?")?n:"?"+n,Zy=n=>!n||n==="#"?"":n.startsWith("#")?n:"#"+n;function Iy(n){return n!=null&&typeof n.status=="number"&&typeof n.statusText=="string"&&typeof n.internal=="boolean"&&"data"in n}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var _x=["POST","PUT","PATCH","DELETE"];new Set(_x);var Jy=["GET",..._x];new Set(Jy);var ul=m.createContext(null);ul.displayName="DataRouter";var wo=m.createContext(null);wo.displayName="DataRouterState";m.createContext(!1);var Bx=m.createContext({isTransitioning:!1});Bx.displayName="ViewTransition";var Py=m.createContext(new Map);Py.displayName="Fetchers";var Wy=m.createContext(null);Wy.displayName="Await";var On=m.createContext(null);On.displayName="Navigation";var wr=m.createContext(null);wr.displayName="Location";var oa=m.createContext({outlet:null,matches:[],isDataRoute:!1});oa.displayName="Route";var Gd=m.createContext(null);Gd.displayName="RouteError";function e1(n,{relative:s}={}){ut(Cr(),"useHref() may be used only in the context of a component.");let{basename:l,navigator:o}=m.useContext(On),{hash:u,pathname:f,search:p}=Er(n,{relative:s}),h=f;return l!=="/"&&(h=f==="/"?l:la([l,f])),o.createHref({pathname:h,search:p,hash:u})}function Cr(){return m.useContext(wr)!=null}function us(){return ut(Cr(),"useLocation() may be used only in the context of a component."),m.useContext(wr).location}var Ox="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function Lx(n){m.useContext(On).static||m.useLayoutEffect(n)}function t1(){let{isDataRoute:n}=m.useContext(oa);return n?h1():n1()}function n1(){ut(Cr(),"useNavigate() may be used only in the context of a component.");let n=m.useContext(ul),{basename:s,navigator:l}=m.useContext(On),{matches:o}=m.useContext(oa),{pathname:u}=us(),f=JSON.stringify(Tx(o)),p=m.useRef(!1);return Lx(()=>{p.current=!0}),m.useCallback((x,g={})=>{if(Cn(p.current,Ox),!p.current)return;if(typeof x=="number"){l.go(x);return}let b=Dx(x,JSON.parse(f),u,g.relative==="path");n==null&&s!=="/"&&(b.pathname=b.pathname==="/"?s:la([s,b.pathname])),(g.replace?l.replace:l.push)(b,g.state,g)},[s,l,f,u,n])}m.createContext(null);function Er(n,{relative:s}={}){let{matches:l}=m.useContext(oa),{pathname:o}=us(),u=JSON.stringify(Tx(l));return m.useMemo(()=>Dx(n,JSON.parse(u),o,s==="path"),[n,u,o,s])}function a1(n,s){return zx(n,s)}function zx(n,s,l,o,u){ut(Cr(),"useRoutes() may be used only in the context of a component.");let{navigator:f}=m.useContext(On),{matches:p}=m.useContext(oa),h=p[p.length-1],x=h?h.params:{},g=h?h.pathname:"/",b=h?h.pathnameBase:"/",y=h&&h.route;{let M=y&&y.path||"";Ux(g,!y||M.endsWith("*")||M.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${g}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. - -Please change the parent to .`)}let N=us(),R;if(s){let M=typeof s=="string"?cl(s):s;ut(b==="/"||M.pathname?.startsWith(b),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${b}" but pathname "${M.pathname}" was given in the \`location\` prop.`),R=M}else R=N;let C=R.pathname||"/",S=C;if(b!=="/"){let M=b.replace(/^\//,"").split("/");S="/"+C.replace(/^\//,"").split("/").slice(M.length).join("/")}let w=Mx(n,{pathname:S});Cn(y||w!=null,`No routes matched location "${R.pathname}${R.search}${R.hash}" `),Cn(w==null||w[w.length-1].route.element!==void 0||w[w.length-1].route.Component!==void 0||w[w.length-1].route.lazy!==void 0,`Matched leaf route at location "${R.pathname}${R.search}${R.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let j=o1(w&&w.map(M=>Object.assign({},M,{params:Object.assign({},x,M.params),pathname:la([b,f.encodeLocation?f.encodeLocation(M.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:M.pathname]),pathnameBase:M.pathnameBase==="/"?b:la([b,f.encodeLocation?f.encodeLocation(M.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:M.pathnameBase])})),p,l,o,u);return s&&j?m.createElement(wr.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...R},navigationType:"POP"}},j):j}function s1(){let n=m1(),s=Iy(n)?`${n.status} ${n.statusText}`:n instanceof Error?n.message:JSON.stringify(n),l=n instanceof Error?n.stack:null,o="rgba(200,200,200, 0.5)",u={padding:"0.5rem",backgroundColor:o},f={padding:"2px 4px",backgroundColor:o},p=null;return console.error("Error handled by React Router default ErrorBoundary:",n),p=m.createElement(m.Fragment,null,m.createElement("p",null,"💿 Hey developer 👋"),m.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",m.createElement("code",{style:f},"ErrorBoundary")," or"," ",m.createElement("code",{style:f},"errorElement")," prop on your route.")),m.createElement(m.Fragment,null,m.createElement("h2",null,"Unexpected Application Error!"),m.createElement("h3",{style:{fontStyle:"italic"}},s),l?m.createElement("pre",{style:u},l):null,p)}var l1=m.createElement(s1,null),r1=class extends m.Component{constructor(n){super(n),this.state={location:n.location,revalidation:n.revalidation,error:n.error}}static getDerivedStateFromError(n){return{error:n}}static getDerivedStateFromProps(n,s){return s.location!==n.location||s.revalidation!=="idle"&&n.revalidation==="idle"?{error:n.error,location:n.location,revalidation:n.revalidation}:{error:n.error!==void 0?n.error:s.error,location:s.location,revalidation:n.revalidation||s.revalidation}}componentDidCatch(n,s){this.props.onError?this.props.onError(n,s):console.error("React Router caught the following error during render",n)}render(){return this.state.error!==void 0?m.createElement(oa.Provider,{value:this.props.routeContext},m.createElement(Gd.Provider,{value:this.state.error,children:this.props.component})):this.props.children}};function i1({routeContext:n,match:s,children:l}){let o=m.useContext(ul);return o&&o.static&&o.staticContext&&(s.route.errorElement||s.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=s.route.id),m.createElement(oa.Provider,{value:n},l)}function o1(n,s=[],l=null,o=null,u=null){if(n==null){if(!l)return null;if(l.errors)n=l.matches;else if(s.length===0&&!l.initialized&&l.matches.length>0)n=l.matches;else return null}let f=n,p=l?.errors;if(p!=null){let b=f.findIndex(y=>y.route.id&&p?.[y.route.id]!==void 0);ut(b>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(p).join(",")}`),f=f.slice(0,Math.min(f.length,b+1))}let h=!1,x=-1;if(l)for(let b=0;b=0?f=f.slice(0,x+1):f=[f[0]];break}}}let g=l&&o?(b,y)=>{o(b,{location:l.location,params:l.matches?.[0]?.params??{},errorInfo:y})}:void 0;return f.reduceRight((b,y,N)=>{let R,C=!1,S=null,w=null;l&&(R=p&&y.route.id?p[y.route.id]:void 0,S=y.route.errorElement||l1,h&&(x<0&&N===0?(Ux("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),C=!0,w=null):x===N&&(C=!0,w=y.route.hydrateFallbackElement||null)));let j=s.concat(f.slice(0,N+1)),M=()=>{let E;return R?E=S:C?E=w:y.route.Component?E=m.createElement(y.route.Component,null):y.route.element?E=y.route.element:E=b,m.createElement(i1,{match:y,routeContext:{outlet:b,matches:j,isDataRoute:l!=null},children:E})};return l&&(y.route.ErrorBoundary||y.route.errorElement||N===0)?m.createElement(r1,{location:l.location,revalidation:l.revalidation,component:S,error:R,children:M(),routeContext:{outlet:null,matches:j,isDataRoute:!0},onError:g}):M()},null)}function Yd(n){return`${n} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function c1(n){let s=m.useContext(ul);return ut(s,Yd(n)),s}function u1(n){let s=m.useContext(wo);return ut(s,Yd(n)),s}function d1(n){let s=m.useContext(oa);return ut(s,Yd(n)),s}function Fd(n){let s=d1(n),l=s.matches[s.matches.length-1];return ut(l.route.id,`${n} can only be used on routes that contain a unique "id"`),l.route.id}function f1(){return Fd("useRouteId")}function m1(){let n=m.useContext(Gd),s=u1("useRouteError"),l=Fd("useRouteError");return n!==void 0?n:s.errors?.[l]}function h1(){let{router:n}=c1("useNavigate"),s=Fd("useNavigate"),l=m.useRef(!1);return Lx(()=>{l.current=!0}),m.useCallback(async(u,f={})=>{Cn(l.current,Ox),l.current&&(typeof u=="number"?n.navigate(u):await n.navigate(u,{fromRouteId:s,...f}))},[n,s])}var Mp={};function Ux(n,s,l){!s&&!Mp[n]&&(Mp[n]=!0,Cn(!1,l))}m.memo(p1);function p1({routes:n,future:s,state:l,unstable_onError:o}){return zx(n,void 0,l,o,s)}function ao(n){ut(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function x1({basename:n="/",children:s=null,location:l,navigationType:o="POP",navigator:u,static:f=!1}){ut(!Cr(),"You cannot render a inside another . You should never have more than one in your app.");let p=n.replace(/^\/*/,"/"),h=m.useMemo(()=>({basename:p,navigator:u,static:f,future:{}}),[p,u,f]);typeof l=="string"&&(l=cl(l));let{pathname:x="/",search:g="",hash:b="",state:y=null,key:N="default"}=l,R=m.useMemo(()=>{let C=ra(x,p);return C==null?null:{location:{pathname:C,search:g,hash:b,state:y,key:N},navigationType:o}},[p,x,g,b,y,N,o]);return Cn(R!=null,` is not able to match the URL "${x}${g}${b}" because it does not start with the basename, so the won't render anything.`),R==null?null:m.createElement(On.Provider,{value:h},m.createElement(wr.Provider,{children:s,value:R}))}function g1({children:n,location:s}){return a1(Ad(n),s)}function Ad(n,s=[]){let l=[];return m.Children.forEach(n,(o,u)=>{if(!m.isValidElement(o))return;let f=[...s,u];if(o.type===m.Fragment){l.push.apply(l,Ad(o.props.children,f));return}ut(o.type===ao,`[${typeof o.type=="string"?o.type:o.type.name}] is not a component. All component children of must be a or `),ut(!o.props.index||!o.props.children,"An index route cannot have child routes.");let p={id:o.props.id||f.join("-"),caseSensitive:o.props.caseSensitive,element:o.props.element,Component:o.props.Component,index:o.props.index,path:o.props.path,middleware:o.props.middleware,loader:o.props.loader,action:o.props.action,hydrateFallbackElement:o.props.hydrateFallbackElement,HydrateFallback:o.props.HydrateFallback,errorElement:o.props.errorElement,ErrorBoundary:o.props.ErrorBoundary,hasErrorBoundary:o.props.hasErrorBoundary===!0||o.props.ErrorBoundary!=null||o.props.errorElement!=null,shouldRevalidate:o.props.shouldRevalidate,handle:o.props.handle,lazy:o.props.lazy};o.props.children&&(p.children=Ad(o.props.children,f)),l.push(p)}),l}var so="get",lo="application/x-www-form-urlencoded";function Co(n){return n!=null&&typeof n.tagName=="string"}function b1(n){return Co(n)&&n.tagName.toLowerCase()==="button"}function v1(n){return Co(n)&&n.tagName.toLowerCase()==="form"}function y1(n){return Co(n)&&n.tagName.toLowerCase()==="input"}function S1(n){return!!(n.metaKey||n.altKey||n.ctrlKey||n.shiftKey)}function j1(n,s){return n.button===0&&(!s||s==="_self")&&!S1(n)}var Xi=null;function N1(){if(Xi===null)try{new FormData(document.createElement("form"),0),Xi=!1}catch{Xi=!0}return Xi}var A1=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function ed(n){return n!=null&&!A1.has(n)?(Cn(!1,`"${n}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${lo}"`),null):n}function w1(n,s){let l,o,u,f,p;if(v1(n)){let h=n.getAttribute("action");o=h?ra(h,s):null,l=n.getAttribute("method")||so,u=ed(n.getAttribute("enctype"))||lo,f=new FormData(n)}else if(b1(n)||y1(n)&&(n.type==="submit"||n.type==="image")){let h=n.form;if(h==null)throw new Error('Cannot submit a + +
+ running: {runtime.running ? 'yes' : 'no'} + phase: {runtime.phase || '--'} + tick: {runtime.tickCount ?? 0} + trigger: {runtime.lastTriggerReason || '--'} + name: {cfg.name || '--'} + model: {cfg.model || '--'} + observeOnly: {cfg.observeOnly ? 'yes' : 'no'} + decision: {output.normalized || '--'} + outcome: {output.outcome || '--'} + reason: {output.reason || '--'} + last gen: {timings.lastGenerationMs != null ? `${timings.lastGenerationMs}ms` : '--'} +
+ +
+ Latest Context +
+          {input.stateUpdate || ''}
+        
+
+ +
+ Tool Availability +
+          {JSON.stringify({ available: input.availableTools, blocked: input.blockedTools }, null, 2)}
+        
+
+ + {errors.message ?
Error: {errors.message}
: null} + +
+ Recent Runs +
+          {JSON.stringify(state.history || [], null, 2)}
+        
+
+ + + {showPayload ? ( +
{JSON.stringify(state, null, 2)}
+ ) : null} + + ); +} diff --git a/webui/src/context/SessionContext.jsx b/webui/src/context/SessionContext.jsx index 0f2c77db..6ae3fa71 100644 --- a/webui/src/context/SessionContext.jsx +++ b/webui/src/context/SessionContext.jsx @@ -13,6 +13,7 @@ const INITIAL_STATE = { adminLogs: [], llmCommentaryState: null, llmCommentaryStatus: null, + overseerControlState: null, alerts: [], }; @@ -128,6 +129,10 @@ export function SessionProvider({ children }) { ], })); } + function handleOverseerState(payload = null) { + const state = payload && typeof payload === 'object' ? payload : null; + setState((prev) => ({ ...prev, overseerControlState: state })); + } function handleNeatoLidar(payload = null) { const next = payload && typeof payload === 'object' ? payload : null; setState((prev) => ({ ...prev, neatoLidar: next })); @@ -139,6 +144,7 @@ export function SessionProvider({ children }) { socket.on('adminlog:init', handleAdminLogInit); socket.on('adminlog:entry', handleAdminLogEntry); socket.on('llm:state', handleLlmState); + socket.on('overseer:state', handleOverseerState); socket.on('alert:new', handleAlertNew); return () => { socket.off('session:sync', handleSession); @@ -148,6 +154,7 @@ export function SessionProvider({ children }) { socket.off('adminlog:init', handleAdminLogInit); socket.off('adminlog:entry', handleAdminLogEntry); socket.off('llm:state', handleLlmState); + socket.off('overseer:state', handleOverseerState); socket.off('alert:new', handleAlertNew); }; }, [setState, socket]); @@ -204,6 +211,8 @@ export function SessionProvider({ children }) { emitWithAck('session:privateSafety:set', { roverId, safety }), llmControl: (action, controls = {}) => emitWithAck('llm:control', { controls: { action, ...controls } }), + overseerControl: (action, controls = {}) => + emitWithAck('overseer:control', { controls: { action, ...controls } }), pushAlert: (alert) => setState((prev) => ({ ...prev,