\ No newline at end of file
diff --git a/rad/static/dv3d/index.js b/rad/static/dv3d/index.js
index 698c49fa..271f2839 100644
--- a/rad/static/dv3d/index.js
+++ b/rad/static/dv3d/index.js
@@ -1,4 +1,4 @@
-var E$=Object.defineProperty;var b$=(t,e,r)=>e in t?E$(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Eb=(t,e,r)=>b$(t,typeof e!="symbol"?e+"":e,r);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function r(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(i){if(i.ep)return;i.ep=!0;const o=r(i);fetch(i.href,o)}})();var Wi=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function vl(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function D$(t){if(t.__esModule)return t;var e=t.default;if(typeof e=="function"){var r=function n(){return this instanceof n?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};r.prototype=e.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(t).forEach(function(n){var i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(r,n,i.get?i:{enumerable:!0,get:function(){return t[n]}})}),r}var cO={exports:{}},G5={},lO={exports:{}},Gn={};/**
+var bH=Object.defineProperty;var DH=(t,e,r)=>e in t?bH(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var VD=(t,e,r)=>DH(t,typeof e!="symbol"?e+"":e,r);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function r(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(i){if(i.ep)return;i.ep=!0;const o=r(i);fetch(i.href,o)}})();var to=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Vl(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function IH(t){if(t.__esModule)return t;var e=t.default;if(typeof e=="function"){var r=function n(){return this instanceof n?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};r.prototype=e.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(t).forEach(function(n){var i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(r,n,i.get?i:{enumerable:!0,get:function(){return t[n]}})}),r}var _O={exports:{}},Dw={},EO={exports:{}},zn={};/**
* @license React
* react.production.min.js
*
@@ -6,7 +6,7 @@ var E$=Object.defineProperty;var b$=(t,e,r)=>e in t?E$(t,e,{enumerable:!0,config
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
- */var Ym=Symbol.for("react.element"),I$=Symbol.for("react.portal"),O$=Symbol.for("react.fragment"),M$=Symbol.for("react.strict_mode"),P$=Symbol.for("react.profiler"),R$=Symbol.for("react.provider"),L$=Symbol.for("react.context"),A$=Symbol.for("react.forward_ref"),N$=Symbol.for("react.suspense"),k$=Symbol.for("react.memo"),V$=Symbol.for("react.lazy"),bb=Symbol.iterator;function F$(t){return t===null||typeof t!="object"?null:(t=bb&&t[bb]||t["@@iterator"],typeof t=="function"?t:null)}var uO={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},fO=Object.assign,dO={};function $h(t,e,r){this.props=t,this.context=e,this.refs=dO,this.updater=r||uO}$h.prototype.isReactComponent={};$h.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState")};$h.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function hO(){}hO.prototype=$h.prototype;function BT(t,e,r){this.props=t,this.context=e,this.refs=dO,this.updater=r||uO}var GT=BT.prototype=new hO;GT.constructor=BT;fO(GT,$h.prototype);GT.isPureReactComponent=!0;var Db=Array.isArray,gO=Object.prototype.hasOwnProperty,WT={current:null},pO={key:!0,ref:!0,__self:!0,__source:!0};function mO(t,e,r){var n,i={},o=null,a=null;if(e!=null)for(n in e.ref!==void 0&&(a=e.ref),e.key!==void 0&&(o=""+e.key),e)gO.call(e,n)&&!pO.hasOwnProperty(n)&&(i[n]=e[n]);var s=arguments.length-2;if(s===1)i.children=r;else if(1