diff --git a/assets/index-BjE6ITEA.css b/assets/index-BjE6ITEA.css new file mode 100644 index 0000000..338e2ce --- /dev/null +++ b/assets/index-BjE6ITEA.css @@ -0,0 +1 @@ +.m-0{margin:0}.m-auto{margin:auto}.mt-6{margin-top:1.5rem}.block{display:block}.flex{display:flex}.table{display:table}.grid{display:grid}.h-auto{height:auto}.max-h-screen{max-height:100vh}.w-full{width:100%}.max-w-7xl{max-width:80rem}.max-w-80{max-width:20rem}.max-w-lg{max-width:32rem}.max-w-sm{max-width:24rem}.border-collapse{border-collapse:collapse}.flex-col{flex-direction:column}.justify-between{justify-content:space-between}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.text-ellipsis{text-overflow:ellipsis}.border{border-width:1px}.border-solid{border-style:solid}.border-\[\#aaa\]{--tw-border-opacity: 1;border-color:rgb(170 170 170 / var(--tw-border-opacity, 1))}.border-\[\#ccc\]{--tw-border-opacity: 1;border-color:rgb(204 204 204 / var(--tw-border-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.object-contain{-o-object-fit:contain;object-fit:contain}.p-1{padding:.25rem}.p-4{padding:1rem}.text-xs{font-size:.75rem;line-height:1rem}.text-inherit{color:inherit}.no-underline{text-decoration-line:none}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[\#ccc\]{--tw-shadow-color: #ccc;--tw-shadow: var(--tw-shadow-colored)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:Canvas;color:CanvasText;color-scheme:light dark;background-color:#f0f0f0}a{color:#0468bf;white-space:nowrap}a:visited{color:#05aff2}p{margin:.5em 0}@media (prefers-color-scheme: dark){body{background-color:#000}}.hover\:underline:hover{text-decoration-line:underline}@media (min-width: 1024px){.lg\:flex-row{flex-direction:row}}@media (prefers-color-scheme: dark){.dark\:border-\[\#555\]{--tw-border-opacity: 1;border-color:rgb(85 85 85 / var(--tw-border-opacity, 1))}.dark\:border-\[\#666\]{--tw-border-opacity: 1;border-color:rgb(102 102 102 / var(--tw-border-opacity, 1))}.dark\:bg-\[\#333\]{--tw-bg-opacity: 1;background-color:rgb(51 51 51 / var(--tw-bg-opacity, 1))}.dark\:shadow-\[\#333\]{--tw-shadow-color: #333;--tw-shadow: var(--tw-shadow-colored)}} diff --git a/assets/index-B1iXqpR7.js b/assets/index-CTa5uATZ.js similarity index 90% rename from assets/index-B1iXqpR7.js rename to assets/index-CTa5uATZ.js index 4115609..02ebd63 100644 --- a/assets/index-B1iXqpR7.js +++ b/assets/index-CTa5uATZ.js @@ -1,4 +1,4 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))n(r);new MutationObserver(r=>{for(const o of r)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 i(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(r){if(r.ep)return;r.ep=!0;const o=i(r);fetch(r.href,o)}})();var Ag=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function ol(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var al={exports:{}},rr={},sl={exports:{}},R={};/** +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))n(r);new MutationObserver(r=>{for(const o of r)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 i(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(r){if(r.ep)return;r.ep=!0;const o=i(r);fetch(r.href,o)}})();var Ng=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function ol(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var al={exports:{}},rr={},sl={exports:{}},R={};/** * @license React * react.production.min.js * @@ -22,7 +22,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */(function(t){function e(_,N){var A=_.length;_.push(N);t:for(;0>>1,K=_[J];if(0>>1;Jr(Cr,A))wer(rn,Cr)?(_[J]=rn,_[we]=A,J=we):(_[J]=Cr,_[ye]=A,J=ye);else if(wer(rn,A))_[J]=rn,_[we]=A,J=we;else break t}}return N}function r(_,N){var A=_.sortIndex-N.sortIndex;return A!==0?A:_.id-N.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;t.unstable_now=function(){return o.now()}}else{var a=Date,s=a.now();t.unstable_now=function(){return a.now()-s}}var l=[],g=[],d=1,m=null,p=3,v=!1,S=!1,y=!1,j=typeof setTimeout=="function"?setTimeout:null,h=typeof clearTimeout=="function"?clearTimeout:null,u=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function c(_){for(var N=i(g);N!==null;){if(N.callback===null)n(g);else if(N.startTime<=_)n(g),N.sortIndex=N.expirationTime,e(l,N);else break;N=i(g)}}function b(_){if(y=!1,c(_),!S)if(i(l)!==null)S=!0,vr(C);else{var N=i(g);N!==null&&Sr(b,N.startTime-_)}}function C(_,N){S=!1,y&&(y=!1,h(E),E=-1),v=!0;var A=p;try{for(c(N),m=i(l);m!==null&&(!(m.expirationTime>N)||_&&!Et());){var J=m.callback;if(typeof J=="function"){m.callback=null,p=m.priorityLevel;var K=J(m.expirationTime<=N);N=t.unstable_now(),typeof K=="function"?m.callback=K:m===i(l)&&n(l),c(N)}else n(l);m=i(l)}if(m!==null)var nn=!0;else{var ye=i(g);ye!==null&&Sr(b,ye.startTime-N),nn=!1}return nn}finally{m=null,p=A,v=!1}}var x=!1,P=null,E=-1,B=5,z=-1;function Et(){return!(t.unstable_now()-z_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):B=0<_?Math.floor(1e3/_):5},t.unstable_getCurrentPriorityLevel=function(){return p},t.unstable_getFirstCallbackNode=function(){return i(l)},t.unstable_next=function(_){switch(p){case 1:case 2:case 3:var N=3;break;default:N=p}var A=p;p=N;try{return _()}finally{p=A}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(_,N){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var A=p;p=_;try{return N()}finally{p=A}},t.unstable_scheduleCallback=function(_,N,A){var J=t.unstable_now();switch(typeof A=="object"&&A!==null?(A=A.delay,A=typeof A=="number"&&0J?(_.sortIndex=A,e(g,_),i(l)===null&&_===i(g)&&(y?(h(E),E=-1):y=!0,Sr(b,A-J))):(_.sortIndex=K,e(l,_),S||v||(S=!0,vr(C))),_},t.unstable_shouldYield=Et,t.unstable_wrapCallback=function(_){var N=p;return function(){var A=p;p=N;try{return _.apply(this,arguments)}finally{p=A}}}})(wl);yl.exports=wl;var Xg=yl.exports;/** + */(function(t){function e(_,A){var N=_.length;_.push(A);t:for(;0>>1,K=_[J];if(0>>1;Jr(Cr,N))wer(rn,Cr)?(_[J]=rn,_[we]=N,J=we):(_[J]=Cr,_[ye]=N,J=ye);else if(wer(rn,N))_[J]=rn,_[we]=N,J=we;else break t}}return A}function r(_,A){var N=_.sortIndex-A.sortIndex;return N!==0?N:_.id-A.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;t.unstable_now=function(){return o.now()}}else{var a=Date,s=a.now();t.unstable_now=function(){return a.now()-s}}var l=[],g=[],d=1,m=null,p=3,v=!1,S=!1,y=!1,j=typeof setTimeout=="function"?setTimeout:null,h=typeof clearTimeout=="function"?clearTimeout:null,u=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function c(_){for(var A=i(g);A!==null;){if(A.callback===null)n(g);else if(A.startTime<=_)n(g),A.sortIndex=A.expirationTime,e(l,A);else break;A=i(g)}}function b(_){if(y=!1,c(_),!S)if(i(l)!==null)S=!0,vr(C);else{var A=i(g);A!==null&&Sr(b,A.startTime-_)}}function C(_,A){S=!1,y&&(y=!1,h(E),E=-1),v=!0;var N=p;try{for(c(A),m=i(l);m!==null&&(!(m.expirationTime>A)||_&&!Et());){var J=m.callback;if(typeof J=="function"){m.callback=null,p=m.priorityLevel;var K=J(m.expirationTime<=A);A=t.unstable_now(),typeof K=="function"?m.callback=K:m===i(l)&&n(l),c(A)}else n(l);m=i(l)}if(m!==null)var nn=!0;else{var ye=i(g);ye!==null&&Sr(b,ye.startTime-A),nn=!1}return nn}finally{m=null,p=N,v=!1}}var x=!1,P=null,E=-1,B=5,z=-1;function Et(){return!(t.unstable_now()-z_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):B=0<_?Math.floor(1e3/_):5},t.unstable_getCurrentPriorityLevel=function(){return p},t.unstable_getFirstCallbackNode=function(){return i(l)},t.unstable_next=function(_){switch(p){case 1:case 2:case 3:var A=3;break;default:A=p}var N=p;p=A;try{return _()}finally{p=N}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(_,A){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var N=p;p=_;try{return A()}finally{p=N}},t.unstable_scheduleCallback=function(_,A,N){var J=t.unstable_now();switch(typeof N=="object"&&N!==null?(N=N.delay,N=typeof N=="number"&&0J?(_.sortIndex=N,e(g,_),i(l)===null&&_===i(g)&&(y?(h(E),E=-1):y=!0,Sr(b,N-J))):(_.sortIndex=K,e(l,_),S||v||(S=!0,vr(C))),_},t.unstable_shouldYield=Et,t.unstable_wrapCallback=function(_){var A=p;return function(){var N=p;p=A;try{return _.apply(this,arguments)}finally{p=N}}}})(wl);yl.exports=wl;var Xg=yl.exports;/** * @license React * react-dom.production.min.js * @@ -34,8 +34,8 @@ `+_r+t}var xr=!1;function Pr(t,e){if(!t||xr)return"";xr=!0;var i=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(e)if(e=function(){throw Error()},Object.defineProperty(e.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(e,[])}catch(g){var n=g}Reflect.construct(t,[],e)}else{try{e.call()}catch(g){n=g}t.call(e.prototype)}else{try{throw Error()}catch(g){n=g}t()}}catch(g){if(g&&n&&typeof g.stack=="string"){for(var r=g.stack.split(` `),o=n.stack.split(` `),a=r.length-1,s=o.length-1;1<=a&&0<=s&&r[a]!==o[s];)s--;for(;1<=a&&0<=s;a--,s--)if(r[a]!==o[s]){if(a!==1||s!==1)do if(a--,s--,0>s||r[a]!==o[s]){var l=` -`+r[a].replace(" at new "," at ");return t.displayName&&l.includes("")&&(l=l.replace("",t.displayName)),l}while(1<=a&&0<=s);break}}}finally{xr=!1,Error.prepareStackTrace=i}return(t=t?t.displayName||t.name:"")?Si(t):""}function rh(t){switch(t.tag){case 5:return Si(t.type);case 16:return Si("Lazy");case 13:return Si("Suspense");case 19:return Si("SuspenseList");case 0:case 2:case 15:return t=Pr(t.type,!1),t;case 11:return t=Pr(t.type.render,!1),t;case 1:return t=Pr(t.type,!0),t;default:return""}}function eo(t){if(t==null)return null;if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case Ie:return"Fragment";case Le:return"Portal";case Xr:return"Profiler";case Zo:return"StrictMode";case Zr:return"Suspense";case to:return"SuspenseList"}if(typeof t=="object")switch(t.$$typeof){case Cl:return(t.displayName||"Context")+".Consumer";case Sl:return(t._context.displayName||"Context")+".Provider";case ta:var e=t.render;return t=t.displayName,t||(t=e.displayName||e.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case ea:return e=t.displayName||null,e!==null?e:eo(t.type)||"Memo";case Zt:e=t._payload,t=t._init;try{return eo(t(e))}catch{}}return null}function oh(t){var e=t.type;switch(t.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return t=e.render,t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return eo(e);case 8:return e===Zo?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function pe(t){switch(typeof t){case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function _l(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function ah(t){var e=_l(t)?"checked":"value",i=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),n=""+t[e];if(!t.hasOwnProperty(e)&&typeof i<"u"&&typeof i.get=="function"&&typeof i.set=="function"){var r=i.get,o=i.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return r.call(this)},set:function(a){n=""+a,o.call(this,a)}}),Object.defineProperty(t,e,{enumerable:i.enumerable}),{getValue:function(){return n},setValue:function(a){n=""+a},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function sn(t){t._valueTracker||(t._valueTracker=ah(t))}function xl(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var i=e.getValue(),n="";return t&&(n=_l(t)?t.checked?"true":"false":t.value),t=n,t!==i?(e.setValue(t),!0):!1}function Gn(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}function io(t,e){var i=e.checked;return W({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:i??t._wrapperState.initialChecked})}function Ka(t,e){var i=e.defaultValue==null?"":e.defaultValue,n=e.checked!=null?e.checked:e.defaultChecked;i=pe(e.value!=null?e.value:i),t._wrapperState={initialChecked:n,initialValue:i,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function Pl(t,e){e=e.checked,e!=null&&Xo(t,"checked",e,!1)}function no(t,e){Pl(t,e);var i=pe(e.value),n=e.type;if(i!=null)n==="number"?(i===0&&t.value===""||t.value!=i)&&(t.value=""+i):t.value!==""+i&&(t.value=""+i);else if(n==="submit"||n==="reset"){t.removeAttribute("value");return}e.hasOwnProperty("value")?ro(t,e.type,i):e.hasOwnProperty("defaultValue")&&ro(t,e.type,pe(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(t.defaultChecked=!!e.defaultChecked)}function qa(t,e,i){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var n=e.type;if(!(n!=="submit"&&n!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+t._wrapperState.initialValue,i||e===t.value||(t.value=e),t.defaultValue=e}i=t.name,i!==""&&(t.name=""),t.defaultChecked=!!t._wrapperState.initialChecked,i!==""&&(t.name=i)}function ro(t,e,i){(e!=="number"||Gn(t.ownerDocument)!==t)&&(i==null?t.defaultValue=""+t._wrapperState.initialValue:t.defaultValue!==""+i&&(t.defaultValue=""+i))}var Ci=Array.isArray;function Qe(t,e,i,n){if(t=t.options,e){e={};for(var r=0;r"+e.valueOf().toString()+"",e=ln.firstChild;t.firstChild;)t.removeChild(t.firstChild);for(;e.firstChild;)t.appendChild(e.firstChild)}});function Di(t,e){if(e){var i=t.firstChild;if(i&&i===t.lastChild&&i.nodeType===3){i.nodeValue=e;return}}t.textContent=e}var xi={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},sh=["Webkit","ms","Moz","O"];Object.keys(xi).forEach(function(t){sh.forEach(function(e){e=e+t.charAt(0).toUpperCase()+t.substring(1),xi[e]=xi[t]})});function Al(t,e,i){return e==null||typeof e=="boolean"||e===""?"":i||typeof e!="number"||e===0||xi.hasOwnProperty(t)&&xi[t]?(""+e).trim():e+"px"}function Rl(t,e){t=t.style;for(var i in e)if(e.hasOwnProperty(i)){var n=i.indexOf("--")===0,r=Al(i,e[i],n);i==="float"&&(i="cssFloat"),n?t.setProperty(i,r):t[i]=r}}var lh=W({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function so(t,e){if(e){if(lh[t]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(w(137,t));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(w(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(w(61))}if(e.style!=null&&typeof e.style!="object")throw Error(w(62))}}function lo(t,e){if(t.indexOf("-")===-1)return typeof e.is=="string";switch(t){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var uo=null;function ia(t){return t=t.target||t.srcElement||window,t.correspondingUseElement&&(t=t.correspondingUseElement),t.nodeType===3?t.parentNode:t}var go=null,Ye=null,Ke=null;function ts(t){if(t=tn(t)){if(typeof go!="function")throw Error(w(280));var e=t.stateNode;e&&(e=ur(e),go(t.stateNode,t.type,e))}}function zl(t){Ye?Ke?Ke.push(t):Ke=[t]:Ye=t}function Ml(){if(Ye){var t=Ye,e=Ke;if(Ke=Ye=null,ts(t),e)for(t=0;t>>=0,t===0?32:31-(wh(t)/vh|0)|0}var un=64,gn=4194304;function ki(t){switch(t&-t){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: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&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return t&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return t}}function Tn(t,e){var i=t.pendingLanes;if(i===0)return 0;var n=0,r=t.suspendedLanes,o=t.pingedLanes,a=i&268435455;if(a!==0){var s=a&~r;s!==0?n=ki(s):(o&=a,o!==0&&(n=ki(o)))}else a=i&~r,a!==0?n=ki(a):o!==0&&(n=ki(o));if(n===0)return 0;if(e!==0&&e!==n&&!(e&r)&&(r=n&-n,o=e&-e,r>=o||r===16&&(o&4194240)!==0))return e;if(n&4&&(n|=i&16),e=t.entangledLanes,e!==0)for(t=t.entanglements,e&=n;0i;i++)e.push(t);return e}function Xi(t,e,i){t.pendingLanes|=e,e!==536870912&&(t.suspendedLanes=0,t.pingedLanes=0),t=t.eventTimes,e=31-zt(e),t[e]=i}function _h(t,e){var i=t.pendingLanes&~e;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.expiredLanes&=e,t.mutableReadLanes&=e,t.entangledLanes&=e,e=t.entanglements;var n=t.eventTimes;for(t=t.expirationTimes;0=Ei),us=" ",gs=!1;function Zl(t,e){switch(t){case"keyup":return Xh.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function tu(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Te=!1;function tc(t,e){switch(t){case"compositionend":return tu(e);case"keypress":return e.which!==32?null:(gs=!0,us);case"textInput":return t=e.data,t===us&&gs?null:t;default:return null}}function ec(t,e){if(Te)return t==="compositionend"||!ga&&Zl(t,e)?(t=ql(),xn=sa=ne=null,Te=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:i,offset:e-t};t=n}t:{for(;i;){if(i.nextSibling){i=i.nextSibling;break t}i=i.parentNode}i=void 0}i=ms(i)}}function ru(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?ru(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function ou(){for(var t=window,e=Gn();e instanceof t.HTMLIFrameElement;){try{var i=typeof e.contentWindow.location.href=="string"}catch{i=!1}if(i)t=e.contentWindow;else break;e=Gn(t.document)}return e}function ha(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function gc(t){var e=ou(),i=t.focusedElem,n=t.selectionRange;if(e!==i&&i&&i.ownerDocument&&ru(i.ownerDocument.documentElement,i)){if(n!==null&&ha(i)){if(e=n.start,t=n.end,t===void 0&&(t=e),"selectionStart"in i)i.selectionStart=e,i.selectionEnd=Math.min(t,i.value.length);else if(t=(e=i.ownerDocument||document)&&e.defaultView||window,t.getSelection){t=t.getSelection();var r=i.textContent.length,o=Math.min(n.start,r);n=n.end===void 0?o:Math.min(n.end,r),!t.extend&&o>n&&(r=n,n=o,o=r),r=ds(i,o);var a=ds(i,n);r&&a&&(t.rangeCount!==1||t.anchorNode!==r.node||t.anchorOffset!==r.offset||t.focusNode!==a.node||t.focusOffset!==a.offset)&&(e=e.createRange(),e.setStart(r.node,r.offset),t.removeAllRanges(),o>n?(t.addRange(e),t.extend(a.node,a.offset)):(e.setEnd(a.node,a.offset),t.addRange(e)))}}for(e=[],t=i;t=t.parentNode;)t.nodeType===1&&e.push({element:t,left:t.scrollLeft,top:t.scrollTop});for(typeof i.focus=="function"&&i.focus(),i=0;i=document.documentMode,Ve=null,bo=null,Ni=null,yo=!1;function fs(t,e,i){var n=i.window===i?i.document:i.nodeType===9?i:i.ownerDocument;yo||Ve==null||Ve!==Gn(n)||(n=Ve,"selectionStart"in n&&ha(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Ni&&Wi(Ni,n)||(Ni=n,n=Wn(bo,"onSelect"),0Oe||(t.current=_o[Oe],_o[Oe]=null,Oe--)}function D(t,e){Oe++,_o[Oe]=t.current,t.current=e}var me={},ot=fe(me),ct=fe(!1),Ee=me;function ei(t,e){var i=t.type.contextTypes;if(!i)return me;var n=t.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===e)return n.__reactInternalMemoizedMaskedChildContext;var r={},o;for(o in i)r[o]=e[o];return n&&(t=t.stateNode,t.__reactInternalMemoizedUnmaskedChildContext=e,t.__reactInternalMemoizedMaskedChildContext=r),r}function pt(t){return t=t.childContextTypes,t!=null}function Bn(){I(ct),I(ot)}function ks(t,e,i){if(ot.current!==me)throw Error(w(168));D(ot,e),D(ct,i)}function mu(t,e,i){var n=t.stateNode;if(e=e.childContextTypes,typeof n.getChildContext!="function")return i;n=n.getChildContext();for(var r in n)if(!(r in e))throw Error(w(108,oh(t)||"Unknown",r));return W({},i,n)}function Jn(t){return t=(t=t.stateNode)&&t.__reactInternalMemoizedMergedChildContext||me,Ee=ot.current,D(ot,t),D(ct,ct.current),!0}function _s(t,e,i){var n=t.stateNode;if(!n)throw Error(w(169));i?(t=mu(t,e,Ee),n.__reactInternalMemoizedMergedChildContext=t,I(ct),I(ot),D(ot,t)):I(ct),D(ct,i)}var Wt=null,gr=!1,Fr=!1;function du(t){Wt===null?Wt=[t]:Wt.push(t)}function Cc(t){gr=!0,du(t)}function be(){if(!Fr&&Wt!==null){Fr=!0;var t=0,e=G;try{var i=Wt;for(G=1;t>=a,r-=a,Bt=1<<32-zt(e)+r|i<E?(B=P,P=null):B=P.sibling;var z=p(h,P,c[E],b);if(z===null){P===null&&(P=B);break}t&&P&&z.alternate===null&&e(h,P),u=o(z,u,E),x===null?C=z:x.sibling=z,x=z,P=B}if(E===c.length)return i(h,P),T&&ve(h,E),C;if(P===null){for(;EE?(B=P,P=null):B=P.sibling;var Et=p(h,P,z.value,b);if(Et===null){P===null&&(P=B);break}t&&P&&Et.alternate===null&&e(h,P),u=o(Et,u,E),x===null?C=Et:x.sibling=Et,x=Et,P=B}if(z.done)return i(h,P),T&&ve(h,E),C;if(P===null){for(;!z.done;E++,z=c.next())z=m(h,z.value,b),z!==null&&(u=o(z,u,E),x===null?C=z:x.sibling=z,x=z);return T&&ve(h,E),C}for(P=n(h,P);!z.done;E++,z=c.next())z=v(P,h,E,z.value,b),z!==null&&(t&&z.alternate!==null&&P.delete(z.key===null?E:z.key),u=o(z,u,E),x===null?C=z:x.sibling=z,x=z);return t&&P.forEach(function(hi){return e(h,hi)}),T&&ve(h,E),C}function j(h,u,c,b){if(typeof c=="object"&&c!==null&&c.type===Ie&&c.key===null&&(c=c.props.children),typeof c=="object"&&c!==null){switch(c.$$typeof){case an:t:{for(var C=c.key,x=u;x!==null;){if(x.key===C){if(C=c.type,C===Ie){if(x.tag===7){i(h,x.sibling),u=r(x,c.props.children),u.return=h,h=u;break t}}else if(x.elementType===C||typeof C=="object"&&C!==null&&C.$$typeof===Zt&&Es(C)===x.type){i(h,x.sibling),u=r(x,c.props),u.ref=yi(h,x,c),u.return=h,h=u;break t}i(h,x);break}else e(h,x);x=x.sibling}c.type===Ie?(u=Pe(c.props.children,h.mode,b,c.key),u.return=h,h=u):(b=Mn(c.type,c.key,c.props,null,h.mode,b),b.ref=yi(h,u,c),b.return=h,h=b)}return a(h);case Le:t:{for(x=c.key;u!==null;){if(u.key===x)if(u.tag===4&&u.stateNode.containerInfo===c.containerInfo&&u.stateNode.implementation===c.implementation){i(h,u.sibling),u=r(u,c.children||[]),u.return=h,h=u;break t}else{i(h,u);break}else e(h,u);u=u.sibling}u=Qr(c,h.mode,b),u.return=h,h=u}return a(h);case Zt:return x=c._init,j(h,u,x(c._payload),b)}if(Ci(c))return S(h,u,c,b);if(pi(c))return y(h,u,c,b);bn(h,c)}return typeof c=="string"&&c!==""||typeof c=="number"?(c=""+c,u!==null&&u.tag===6?(i(h,u.sibling),u=r(u,c),u.return=h,h=u):(i(h,u),u=$r(c,h.mode,b),u.return=h,h=u),a(h)):i(h,u)}return j}var ni=wu(!0),vu=wu(!1),$n=fe(null),Qn=null,Ue=null,da=null;function fa(){da=Ue=Qn=null}function ba(t){var e=$n.current;I($n),t._currentValue=e}function Eo(t,e,i){for(;t!==null;){var n=t.alternate;if((t.childLanes&e)!==e?(t.childLanes|=e,n!==null&&(n.childLanes|=e)):n!==null&&(n.childLanes&e)!==e&&(n.childLanes|=e),t===i)break;t=t.return}}function Xe(t,e){Qn=t,da=Ue=null,t=t.dependencies,t!==null&&t.firstContext!==null&&(t.lanes&e&&(ht=!0),t.firstContext=null)}function xt(t){var e=t._currentValue;if(da!==t)if(t={context:t,memoizedValue:e,next:null},Ue===null){if(Qn===null)throw Error(w(308));Ue=t,Qn.dependencies={lanes:0,firstContext:t}}else Ue=Ue.next=t;return e}var ke=null;function ya(t){ke===null?ke=[t]:ke.push(t)}function Su(t,e,i,n){var r=e.interleaved;return r===null?(i.next=i,ya(e)):(i.next=r.next,r.next=i),e.interleaved=i,Yt(t,n)}function Yt(t,e){t.lanes|=e;var i=t.alternate;for(i!==null&&(i.lanes|=e),i=t,t=t.return;t!==null;)t.childLanes|=e,i=t.alternate,i!==null&&(i.childLanes|=e),i=t,t=t.return;return i.tag===3?i.stateNode:null}var te=!1;function wa(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Cu(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,effects:t.effects})}function Ht(t,e){return{eventTime:t,lane:e,tag:0,payload:null,callback:null,next:null}}function ue(t,e,i){var n=t.updateQueue;if(n===null)return null;if(n=n.shared,M&2){var r=n.pending;return r===null?e.next=e:(e.next=r.next,r.next=e),n.pending=e,Yt(t,i)}return r=n.interleaved,r===null?(e.next=e,ya(n)):(e.next=r.next,r.next=e),n.interleaved=e,Yt(t,i)}function En(t,e,i){if(e=e.updateQueue,e!==null&&(e=e.shared,(i&4194240)!==0)){var n=e.lanes;n&=t.pendingLanes,i|=n,e.lanes=i,ra(t,i)}}function js(t,e){var i=t.updateQueue,n=t.alternate;if(n!==null&&(n=n.updateQueue,i===n)){var r=null,o=null;if(i=i.firstBaseUpdate,i!==null){do{var a={eventTime:i.eventTime,lane:i.lane,tag:i.tag,payload:i.payload,callback:i.callback,next:null};o===null?r=o=a:o=o.next=a,i=i.next}while(i!==null);o===null?r=o=e:o=o.next=e}else r=o=e;i={baseState:n.baseState,firstBaseUpdate:r,lastBaseUpdate:o,shared:n.shared,effects:n.effects},t.updateQueue=i;return}t=i.lastBaseUpdate,t===null?i.firstBaseUpdate=e:t.next=e,i.lastBaseUpdate=e}function Yn(t,e,i,n){var r=t.updateQueue;te=!1;var o=r.firstBaseUpdate,a=r.lastBaseUpdate,s=r.shared.pending;if(s!==null){r.shared.pending=null;var l=s,g=l.next;l.next=null,a===null?o=g:a.next=g,a=l;var d=t.alternate;d!==null&&(d=d.updateQueue,s=d.lastBaseUpdate,s!==a&&(s===null?d.firstBaseUpdate=g:s.next=g,d.lastBaseUpdate=l))}if(o!==null){var m=r.baseState;a=0,d=g=l=null,s=o;do{var p=s.lane,v=s.eventTime;if((n&p)===p){d!==null&&(d=d.next={eventTime:v,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});t:{var S=t,y=s;switch(p=e,v=i,y.tag){case 1:if(S=y.payload,typeof S=="function"){m=S.call(v,m,p);break t}m=S;break t;case 3:S.flags=S.flags&-65537|128;case 0:if(S=y.payload,p=typeof S=="function"?S.call(v,m,p):S,p==null)break t;m=W({},m,p);break t;case 2:te=!0}}s.callback!==null&&s.lane!==0&&(t.flags|=64,p=r.effects,p===null?r.effects=[s]:p.push(s))}else v={eventTime:v,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},d===null?(g=d=v,l=m):d=d.next=v,a|=p;if(s=s.next,s===null){if(s=r.shared.pending,s===null)break;p=s,s=p.next,p.next=null,r.lastBaseUpdate=p,r.shared.pending=null}}while(!0);if(d===null&&(l=m),r.baseState=l,r.firstBaseUpdate=g,r.lastBaseUpdate=d,e=r.shared.interleaved,e!==null){r=e;do a|=r.lane,r=r.next;while(r!==e)}else o===null&&(r.shared.lanes=0);Ae|=a,t.lanes=a,t.memoizedState=m}}function Ns(t,e,i){if(t=e.effects,e.effects=null,t!==null)for(e=0;ei?i:4,t(!0);var n=Or.transition;Or.transition={};try{t(!1),e()}finally{G=i,Or.transition=n}}function Vu(){return Pt().memoizedState}function Pc(t,e,i){var n=he(t);if(i={lane:n,action:i,hasEagerState:!1,eagerState:null,next:null},Fu(t))Wu(e,i);else if(i=Su(t,e,i,n),i!==null){var r=st();Mt(i,t,n,r),Ou(i,e,n)}}function Ec(t,e,i){var n=he(t),r={lane:n,action:i,hasEagerState:!1,eagerState:null,next:null};if(Fu(t))Wu(e,r);else{var o=t.alternate;if(t.lanes===0&&(o===null||o.lanes===0)&&(o=e.lastRenderedReducer,o!==null))try{var a=e.lastRenderedState,s=o(a,i);if(r.hasEagerState=!0,r.eagerState=s,Gt(s,a)){var l=e.interleaved;l===null?(r.next=r,ya(e)):(r.next=l.next,l.next=r),e.interleaved=r;return}}catch{}finally{}i=Su(t,e,r,n),i!==null&&(r=st(),Mt(i,t,n,r),Ou(i,e,n))}}function Fu(t){var e=t.alternate;return t===F||e!==null&&e===F}function Wu(t,e){Ai=qn=!0;var i=t.pending;i===null?e.next=e:(e.next=i.next,i.next=e),t.pending=e}function Ou(t,e,i){if(i&4194240){var n=e.lanes;n&=t.pendingLanes,i|=n,e.lanes=i,ra(t,i)}}var Xn={readContext:xt,useCallback:it,useContext:it,useEffect:it,useImperativeHandle:it,useInsertionEffect:it,useLayoutEffect:it,useMemo:it,useReducer:it,useRef:it,useState:it,useDebugValue:it,useDeferredValue:it,useTransition:it,useMutableSource:it,useSyncExternalStore:it,useId:it,unstable_isNewReconciler:!1},jc={readContext:xt,useCallback:function(t,e){return Lt().memoizedState=[t,e===void 0?null:e],t},useContext:xt,useEffect:Rs,useImperativeHandle:function(t,e,i){return i=i!=null?i.concat([t]):null,Nn(4194308,4,Gu.bind(null,e,t),i)},useLayoutEffect:function(t,e){return Nn(4194308,4,t,e)},useInsertionEffect:function(t,e){return Nn(4,2,t,e)},useMemo:function(t,e){var i=Lt();return e=e===void 0?null:e,t=t(),i.memoizedState=[t,e],t},useReducer:function(t,e,i){var n=Lt();return e=i!==void 0?i(e):e,n.memoizedState=n.baseState=e,t={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:e},n.queue=t,t=t.dispatch=Pc.bind(null,F,t),[n.memoizedState,t]},useRef:function(t){var e=Lt();return t={current:t},e.memoizedState=t},useState:As,useDebugValue:Ea,useDeferredValue:function(t){return Lt().memoizedState=t},useTransition:function(){var t=As(!1),e=t[0];return t=xc.bind(null,t[1]),Lt().memoizedState=t,[e,t]},useMutableSource:function(){},useSyncExternalStore:function(t,e,i){var n=F,r=Lt();if(T){if(i===void 0)throw Error(w(407));i=i()}else{if(i=e(),X===null)throw Error(w(349));Ne&30||Pu(n,e,i)}r.memoizedState=i;var o={value:i,getSnapshot:e};return r.queue=o,Rs(ju.bind(null,n,o,t),[t]),n.flags|=2048,Yi(9,Eu.bind(null,n,o,i,e),void 0,null),i},useId:function(){var t=Lt(),e=X.identifierPrefix;if(T){var i=Jt,n=Bt;i=(n&~(1<<32-zt(n)-1)).toString(32)+i,e=":"+e+"R"+i,i=$i++,0")&&(l=l.replace("",t.displayName)),l}while(1<=a&&0<=s);break}}}finally{xr=!1,Error.prepareStackTrace=i}return(t=t?t.displayName||t.name:"")?Si(t):""}function rh(t){switch(t.tag){case 5:return Si(t.type);case 16:return Si("Lazy");case 13:return Si("Suspense");case 19:return Si("SuspenseList");case 0:case 2:case 15:return t=Pr(t.type,!1),t;case 11:return t=Pr(t.type.render,!1),t;case 1:return t=Pr(t.type,!0),t;default:return""}}function eo(t){if(t==null)return null;if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case Ie:return"Fragment";case Le:return"Portal";case Xr:return"Profiler";case Zo:return"StrictMode";case Zr:return"Suspense";case to:return"SuspenseList"}if(typeof t=="object")switch(t.$$typeof){case Cl:return(t.displayName||"Context")+".Consumer";case Sl:return(t._context.displayName||"Context")+".Provider";case ta:var e=t.render;return t=t.displayName,t||(t=e.displayName||e.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case ea:return e=t.displayName||null,e!==null?e:eo(t.type)||"Memo";case Zt:e=t._payload,t=t._init;try{return eo(t(e))}catch{}}return null}function oh(t){var e=t.type;switch(t.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return t=e.render,t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return eo(e);case 8:return e===Zo?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function pe(t){switch(typeof t){case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function _l(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function ah(t){var e=_l(t)?"checked":"value",i=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),n=""+t[e];if(!t.hasOwnProperty(e)&&typeof i<"u"&&typeof i.get=="function"&&typeof i.set=="function"){var r=i.get,o=i.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return r.call(this)},set:function(a){n=""+a,o.call(this,a)}}),Object.defineProperty(t,e,{enumerable:i.enumerable}),{getValue:function(){return n},setValue:function(a){n=""+a},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function sn(t){t._valueTracker||(t._valueTracker=ah(t))}function xl(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var i=e.getValue(),n="";return t&&(n=_l(t)?t.checked?"true":"false":t.value),t=n,t!==i?(e.setValue(t),!0):!1}function Gn(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}function io(t,e){var i=e.checked;return W({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:i??t._wrapperState.initialChecked})}function Ka(t,e){var i=e.defaultValue==null?"":e.defaultValue,n=e.checked!=null?e.checked:e.defaultChecked;i=pe(e.value!=null?e.value:i),t._wrapperState={initialChecked:n,initialValue:i,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function Pl(t,e){e=e.checked,e!=null&&Xo(t,"checked",e,!1)}function no(t,e){Pl(t,e);var i=pe(e.value),n=e.type;if(i!=null)n==="number"?(i===0&&t.value===""||t.value!=i)&&(t.value=""+i):t.value!==""+i&&(t.value=""+i);else if(n==="submit"||n==="reset"){t.removeAttribute("value");return}e.hasOwnProperty("value")?ro(t,e.type,i):e.hasOwnProperty("defaultValue")&&ro(t,e.type,pe(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(t.defaultChecked=!!e.defaultChecked)}function qa(t,e,i){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var n=e.type;if(!(n!=="submit"&&n!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+t._wrapperState.initialValue,i||e===t.value||(t.value=e),t.defaultValue=e}i=t.name,i!==""&&(t.name=""),t.defaultChecked=!!t._wrapperState.initialChecked,i!==""&&(t.name=i)}function ro(t,e,i){(e!=="number"||Gn(t.ownerDocument)!==t)&&(i==null?t.defaultValue=""+t._wrapperState.initialValue:t.defaultValue!==""+i&&(t.defaultValue=""+i))}var Ci=Array.isArray;function Qe(t,e,i,n){if(t=t.options,e){e={};for(var r=0;r"+e.valueOf().toString()+"",e=ln.firstChild;t.firstChild;)t.removeChild(t.firstChild);for(;e.firstChild;)t.appendChild(e.firstChild)}});function Di(t,e){if(e){var i=t.firstChild;if(i&&i===t.lastChild&&i.nodeType===3){i.nodeValue=e;return}}t.textContent=e}var xi={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},sh=["Webkit","ms","Moz","O"];Object.keys(xi).forEach(function(t){sh.forEach(function(e){e=e+t.charAt(0).toUpperCase()+t.substring(1),xi[e]=xi[t]})});function Nl(t,e,i){return e==null||typeof e=="boolean"||e===""?"":i||typeof e!="number"||e===0||xi.hasOwnProperty(t)&&xi[t]?(""+e).trim():e+"px"}function Rl(t,e){t=t.style;for(var i in e)if(e.hasOwnProperty(i)){var n=i.indexOf("--")===0,r=Nl(i,e[i],n);i==="float"&&(i="cssFloat"),n?t.setProperty(i,r):t[i]=r}}var lh=W({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function so(t,e){if(e){if(lh[t]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(w(137,t));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(w(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(w(61))}if(e.style!=null&&typeof e.style!="object")throw Error(w(62))}}function lo(t,e){if(t.indexOf("-")===-1)return typeof e.is=="string";switch(t){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var uo=null;function ia(t){return t=t.target||t.srcElement||window,t.correspondingUseElement&&(t=t.correspondingUseElement),t.nodeType===3?t.parentNode:t}var go=null,Ye=null,Ke=null;function ts(t){if(t=tn(t)){if(typeof go!="function")throw Error(w(280));var e=t.stateNode;e&&(e=ur(e),go(t.stateNode,t.type,e))}}function zl(t){Ye?Ke?Ke.push(t):Ke=[t]:Ye=t}function Ml(){if(Ye){var t=Ye,e=Ke;if(Ke=Ye=null,ts(t),e)for(t=0;t>>=0,t===0?32:31-(wh(t)/vh|0)|0}var un=64,gn=4194304;function ki(t){switch(t&-t){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: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&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return t&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return t}}function Tn(t,e){var i=t.pendingLanes;if(i===0)return 0;var n=0,r=t.suspendedLanes,o=t.pingedLanes,a=i&268435455;if(a!==0){var s=a&~r;s!==0?n=ki(s):(o&=a,o!==0&&(n=ki(o)))}else a=i&~r,a!==0?n=ki(a):o!==0&&(n=ki(o));if(n===0)return 0;if(e!==0&&e!==n&&!(e&r)&&(r=n&-n,o=e&-e,r>=o||r===16&&(o&4194240)!==0))return e;if(n&4&&(n|=i&16),e=t.entangledLanes,e!==0)for(t=t.entanglements,e&=n;0i;i++)e.push(t);return e}function Xi(t,e,i){t.pendingLanes|=e,e!==536870912&&(t.suspendedLanes=0,t.pingedLanes=0),t=t.eventTimes,e=31-zt(e),t[e]=i}function _h(t,e){var i=t.pendingLanes&~e;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.expiredLanes&=e,t.mutableReadLanes&=e,t.entangledLanes&=e,e=t.entanglements;var n=t.eventTimes;for(t=t.expirationTimes;0=Ei),us=" ",gs=!1;function Zl(t,e){switch(t){case"keyup":return Xh.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function tu(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Te=!1;function tc(t,e){switch(t){case"compositionend":return tu(e);case"keypress":return e.which!==32?null:(gs=!0,us);case"textInput":return t=e.data,t===us&&gs?null:t;default:return null}}function ec(t,e){if(Te)return t==="compositionend"||!ga&&Zl(t,e)?(t=ql(),xn=sa=ne=null,Te=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:i,offset:e-t};t=n}t:{for(;i;){if(i.nextSibling){i=i.nextSibling;break t}i=i.parentNode}i=void 0}i=ms(i)}}function ru(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?ru(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function ou(){for(var t=window,e=Gn();e instanceof t.HTMLIFrameElement;){try{var i=typeof e.contentWindow.location.href=="string"}catch{i=!1}if(i)t=e.contentWindow;else break;e=Gn(t.document)}return e}function ha(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function gc(t){var e=ou(),i=t.focusedElem,n=t.selectionRange;if(e!==i&&i&&i.ownerDocument&&ru(i.ownerDocument.documentElement,i)){if(n!==null&&ha(i)){if(e=n.start,t=n.end,t===void 0&&(t=e),"selectionStart"in i)i.selectionStart=e,i.selectionEnd=Math.min(t,i.value.length);else if(t=(e=i.ownerDocument||document)&&e.defaultView||window,t.getSelection){t=t.getSelection();var r=i.textContent.length,o=Math.min(n.start,r);n=n.end===void 0?o:Math.min(n.end,r),!t.extend&&o>n&&(r=n,n=o,o=r),r=ds(i,o);var a=ds(i,n);r&&a&&(t.rangeCount!==1||t.anchorNode!==r.node||t.anchorOffset!==r.offset||t.focusNode!==a.node||t.focusOffset!==a.offset)&&(e=e.createRange(),e.setStart(r.node,r.offset),t.removeAllRanges(),o>n?(t.addRange(e),t.extend(a.node,a.offset)):(e.setEnd(a.node,a.offset),t.addRange(e)))}}for(e=[],t=i;t=t.parentNode;)t.nodeType===1&&e.push({element:t,left:t.scrollLeft,top:t.scrollTop});for(typeof i.focus=="function"&&i.focus(),i=0;i=document.documentMode,Ve=null,bo=null,Ai=null,yo=!1;function fs(t,e,i){var n=i.window===i?i.document:i.nodeType===9?i:i.ownerDocument;yo||Ve==null||Ve!==Gn(n)||(n=Ve,"selectionStart"in n&&ha(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Ai&&Wi(Ai,n)||(Ai=n,n=Wn(bo,"onSelect"),0Oe||(t.current=_o[Oe],_o[Oe]=null,Oe--)}function D(t,e){Oe++,_o[Oe]=t.current,t.current=e}var me={},ot=fe(me),ct=fe(!1),Ee=me;function ei(t,e){var i=t.type.contextTypes;if(!i)return me;var n=t.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===e)return n.__reactInternalMemoizedMaskedChildContext;var r={},o;for(o in i)r[o]=e[o];return n&&(t=t.stateNode,t.__reactInternalMemoizedUnmaskedChildContext=e,t.__reactInternalMemoizedMaskedChildContext=r),r}function pt(t){return t=t.childContextTypes,t!=null}function Bn(){I(ct),I(ot)}function ks(t,e,i){if(ot.current!==me)throw Error(w(168));D(ot,e),D(ct,i)}function mu(t,e,i){var n=t.stateNode;if(e=e.childContextTypes,typeof n.getChildContext!="function")return i;n=n.getChildContext();for(var r in n)if(!(r in e))throw Error(w(108,oh(t)||"Unknown",r));return W({},i,n)}function Jn(t){return t=(t=t.stateNode)&&t.__reactInternalMemoizedMergedChildContext||me,Ee=ot.current,D(ot,t),D(ct,ct.current),!0}function _s(t,e,i){var n=t.stateNode;if(!n)throw Error(w(169));i?(t=mu(t,e,Ee),n.__reactInternalMemoizedMergedChildContext=t,I(ct),I(ot),D(ot,t)):I(ct),D(ct,i)}var Wt=null,gr=!1,Fr=!1;function du(t){Wt===null?Wt=[t]:Wt.push(t)}function Cc(t){gr=!0,du(t)}function be(){if(!Fr&&Wt!==null){Fr=!0;var t=0,e=G;try{var i=Wt;for(G=1;t>=a,r-=a,Bt=1<<32-zt(e)+r|i<E?(B=P,P=null):B=P.sibling;var z=p(h,P,c[E],b);if(z===null){P===null&&(P=B);break}t&&P&&z.alternate===null&&e(h,P),u=o(z,u,E),x===null?C=z:x.sibling=z,x=z,P=B}if(E===c.length)return i(h,P),T&&ve(h,E),C;if(P===null){for(;EE?(B=P,P=null):B=P.sibling;var Et=p(h,P,z.value,b);if(Et===null){P===null&&(P=B);break}t&&P&&Et.alternate===null&&e(h,P),u=o(Et,u,E),x===null?C=Et:x.sibling=Et,x=Et,P=B}if(z.done)return i(h,P),T&&ve(h,E),C;if(P===null){for(;!z.done;E++,z=c.next())z=m(h,z.value,b),z!==null&&(u=o(z,u,E),x===null?C=z:x.sibling=z,x=z);return T&&ve(h,E),C}for(P=n(h,P);!z.done;E++,z=c.next())z=v(P,h,E,z.value,b),z!==null&&(t&&z.alternate!==null&&P.delete(z.key===null?E:z.key),u=o(z,u,E),x===null?C=z:x.sibling=z,x=z);return t&&P.forEach(function(hi){return e(h,hi)}),T&&ve(h,E),C}function j(h,u,c,b){if(typeof c=="object"&&c!==null&&c.type===Ie&&c.key===null&&(c=c.props.children),typeof c=="object"&&c!==null){switch(c.$$typeof){case an:t:{for(var C=c.key,x=u;x!==null;){if(x.key===C){if(C=c.type,C===Ie){if(x.tag===7){i(h,x.sibling),u=r(x,c.props.children),u.return=h,h=u;break t}}else if(x.elementType===C||typeof C=="object"&&C!==null&&C.$$typeof===Zt&&Es(C)===x.type){i(h,x.sibling),u=r(x,c.props),u.ref=yi(h,x,c),u.return=h,h=u;break t}i(h,x);break}else e(h,x);x=x.sibling}c.type===Ie?(u=Pe(c.props.children,h.mode,b,c.key),u.return=h,h=u):(b=Mn(c.type,c.key,c.props,null,h.mode,b),b.ref=yi(h,u,c),b.return=h,h=b)}return a(h);case Le:t:{for(x=c.key;u!==null;){if(u.key===x)if(u.tag===4&&u.stateNode.containerInfo===c.containerInfo&&u.stateNode.implementation===c.implementation){i(h,u.sibling),u=r(u,c.children||[]),u.return=h,h=u;break t}else{i(h,u);break}else e(h,u);u=u.sibling}u=Qr(c,h.mode,b),u.return=h,h=u}return a(h);case Zt:return x=c._init,j(h,u,x(c._payload),b)}if(Ci(c))return S(h,u,c,b);if(pi(c))return y(h,u,c,b);bn(h,c)}return typeof c=="string"&&c!==""||typeof c=="number"?(c=""+c,u!==null&&u.tag===6?(i(h,u.sibling),u=r(u,c),u.return=h,h=u):(i(h,u),u=$r(c,h.mode,b),u.return=h,h=u),a(h)):i(h,u)}return j}var ni=wu(!0),vu=wu(!1),$n=fe(null),Qn=null,Ue=null,da=null;function fa(){da=Ue=Qn=null}function ba(t){var e=$n.current;I($n),t._currentValue=e}function Eo(t,e,i){for(;t!==null;){var n=t.alternate;if((t.childLanes&e)!==e?(t.childLanes|=e,n!==null&&(n.childLanes|=e)):n!==null&&(n.childLanes&e)!==e&&(n.childLanes|=e),t===i)break;t=t.return}}function Xe(t,e){Qn=t,da=Ue=null,t=t.dependencies,t!==null&&t.firstContext!==null&&(t.lanes&e&&(ht=!0),t.firstContext=null)}function xt(t){var e=t._currentValue;if(da!==t)if(t={context:t,memoizedValue:e,next:null},Ue===null){if(Qn===null)throw Error(w(308));Ue=t,Qn.dependencies={lanes:0,firstContext:t}}else Ue=Ue.next=t;return e}var ke=null;function ya(t){ke===null?ke=[t]:ke.push(t)}function Su(t,e,i,n){var r=e.interleaved;return r===null?(i.next=i,ya(e)):(i.next=r.next,r.next=i),e.interleaved=i,Yt(t,n)}function Yt(t,e){t.lanes|=e;var i=t.alternate;for(i!==null&&(i.lanes|=e),i=t,t=t.return;t!==null;)t.childLanes|=e,i=t.alternate,i!==null&&(i.childLanes|=e),i=t,t=t.return;return i.tag===3?i.stateNode:null}var te=!1;function wa(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Cu(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,effects:t.effects})}function Ht(t,e){return{eventTime:t,lane:e,tag:0,payload:null,callback:null,next:null}}function ue(t,e,i){var n=t.updateQueue;if(n===null)return null;if(n=n.shared,M&2){var r=n.pending;return r===null?e.next=e:(e.next=r.next,r.next=e),n.pending=e,Yt(t,i)}return r=n.interleaved,r===null?(e.next=e,ya(n)):(e.next=r.next,r.next=e),n.interleaved=e,Yt(t,i)}function En(t,e,i){if(e=e.updateQueue,e!==null&&(e=e.shared,(i&4194240)!==0)){var n=e.lanes;n&=t.pendingLanes,i|=n,e.lanes=i,ra(t,i)}}function js(t,e){var i=t.updateQueue,n=t.alternate;if(n!==null&&(n=n.updateQueue,i===n)){var r=null,o=null;if(i=i.firstBaseUpdate,i!==null){do{var a={eventTime:i.eventTime,lane:i.lane,tag:i.tag,payload:i.payload,callback:i.callback,next:null};o===null?r=o=a:o=o.next=a,i=i.next}while(i!==null);o===null?r=o=e:o=o.next=e}else r=o=e;i={baseState:n.baseState,firstBaseUpdate:r,lastBaseUpdate:o,shared:n.shared,effects:n.effects},t.updateQueue=i;return}t=i.lastBaseUpdate,t===null?i.firstBaseUpdate=e:t.next=e,i.lastBaseUpdate=e}function Yn(t,e,i,n){var r=t.updateQueue;te=!1;var o=r.firstBaseUpdate,a=r.lastBaseUpdate,s=r.shared.pending;if(s!==null){r.shared.pending=null;var l=s,g=l.next;l.next=null,a===null?o=g:a.next=g,a=l;var d=t.alternate;d!==null&&(d=d.updateQueue,s=d.lastBaseUpdate,s!==a&&(s===null?d.firstBaseUpdate=g:s.next=g,d.lastBaseUpdate=l))}if(o!==null){var m=r.baseState;a=0,d=g=l=null,s=o;do{var p=s.lane,v=s.eventTime;if((n&p)===p){d!==null&&(d=d.next={eventTime:v,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});t:{var S=t,y=s;switch(p=e,v=i,y.tag){case 1:if(S=y.payload,typeof S=="function"){m=S.call(v,m,p);break t}m=S;break t;case 3:S.flags=S.flags&-65537|128;case 0:if(S=y.payload,p=typeof S=="function"?S.call(v,m,p):S,p==null)break t;m=W({},m,p);break t;case 2:te=!0}}s.callback!==null&&s.lane!==0&&(t.flags|=64,p=r.effects,p===null?r.effects=[s]:p.push(s))}else v={eventTime:v,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},d===null?(g=d=v,l=m):d=d.next=v,a|=p;if(s=s.next,s===null){if(s=r.shared.pending,s===null)break;p=s,s=p.next,p.next=null,r.lastBaseUpdate=p,r.shared.pending=null}}while(!0);if(d===null&&(l=m),r.baseState=l,r.firstBaseUpdate=g,r.lastBaseUpdate=d,e=r.shared.interleaved,e!==null){r=e;do a|=r.lane,r=r.next;while(r!==e)}else o===null&&(r.shared.lanes=0);Ne|=a,t.lanes=a,t.memoizedState=m}}function As(t,e,i){if(t=e.effects,e.effects=null,t!==null)for(e=0;ei?i:4,t(!0);var n=Or.transition;Or.transition={};try{t(!1),e()}finally{G=i,Or.transition=n}}function Vu(){return Pt().memoizedState}function Pc(t,e,i){var n=he(t);if(i={lane:n,action:i,hasEagerState:!1,eagerState:null,next:null},Fu(t))Wu(e,i);else if(i=Su(t,e,i,n),i!==null){var r=st();Mt(i,t,n,r),Ou(i,e,n)}}function Ec(t,e,i){var n=he(t),r={lane:n,action:i,hasEagerState:!1,eagerState:null,next:null};if(Fu(t))Wu(e,r);else{var o=t.alternate;if(t.lanes===0&&(o===null||o.lanes===0)&&(o=e.lastRenderedReducer,o!==null))try{var a=e.lastRenderedState,s=o(a,i);if(r.hasEagerState=!0,r.eagerState=s,Gt(s,a)){var l=e.interleaved;l===null?(r.next=r,ya(e)):(r.next=l.next,l.next=r),e.interleaved=r;return}}catch{}finally{}i=Su(t,e,r,n),i!==null&&(r=st(),Mt(i,t,n,r),Ou(i,e,n))}}function Fu(t){var e=t.alternate;return t===F||e!==null&&e===F}function Wu(t,e){Ni=qn=!0;var i=t.pending;i===null?e.next=e:(e.next=i.next,i.next=e),t.pending=e}function Ou(t,e,i){if(i&4194240){var n=e.lanes;n&=t.pendingLanes,i|=n,e.lanes=i,ra(t,i)}}var Xn={readContext:xt,useCallback:it,useContext:it,useEffect:it,useImperativeHandle:it,useInsertionEffect:it,useLayoutEffect:it,useMemo:it,useReducer:it,useRef:it,useState:it,useDebugValue:it,useDeferredValue:it,useTransition:it,useMutableSource:it,useSyncExternalStore:it,useId:it,unstable_isNewReconciler:!1},jc={readContext:xt,useCallback:function(t,e){return Lt().memoizedState=[t,e===void 0?null:e],t},useContext:xt,useEffect:Rs,useImperativeHandle:function(t,e,i){return i=i!=null?i.concat([t]):null,An(4194308,4,Gu.bind(null,e,t),i)},useLayoutEffect:function(t,e){return An(4194308,4,t,e)},useInsertionEffect:function(t,e){return An(4,2,t,e)},useMemo:function(t,e){var i=Lt();return e=e===void 0?null:e,t=t(),i.memoizedState=[t,e],t},useReducer:function(t,e,i){var n=Lt();return e=i!==void 0?i(e):e,n.memoizedState=n.baseState=e,t={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:e},n.queue=t,t=t.dispatch=Pc.bind(null,F,t),[n.memoizedState,t]},useRef:function(t){var e=Lt();return t={current:t},e.memoizedState=t},useState:Ns,useDebugValue:Ea,useDeferredValue:function(t){return Lt().memoizedState=t},useTransition:function(){var t=Ns(!1),e=t[0];return t=xc.bind(null,t[1]),Lt().memoizedState=t,[e,t]},useMutableSource:function(){},useSyncExternalStore:function(t,e,i){var n=F,r=Lt();if(T){if(i===void 0)throw Error(w(407));i=i()}else{if(i=e(),X===null)throw Error(w(349));Ae&30||Pu(n,e,i)}r.memoizedState=i;var o={value:i,getSnapshot:e};return r.queue=o,Rs(ju.bind(null,n,o,t),[t]),n.flags|=2048,Yi(9,Eu.bind(null,n,o,i,e),void 0,null),i},useId:function(){var t=Lt(),e=X.identifierPrefix;if(T){var i=Jt,n=Bt;i=(n&~(1<<32-zt(n)-1)).toString(32)+i,e=":"+e+"R"+i,i=$i++,0<\/script>",t=t.removeChild(t.firstChild)):typeof n.is=="string"?t=a.createElement(i,{is:n.is}):(t=a.createElement(i),i==="select"&&(a=t,n.multiple?a.multiple=!0:n.size&&(a.size=n.size))):t=a.createElementNS(t,i),t[It]=e,t[Ji]=n,Xu(t,e,!1,!1),e.stateNode=t;t:{switch(a=lo(i,n),i){case"dialog":L("cancel",t),L("close",t),r=n;break;case"iframe":case"object":case"embed":L("load",t),r=n;break;case"video":case"audio":for(r=0;r<_i.length;r++)L(_i[r],t);r=n;break;case"source":L("error",t),r=n;break;case"img":case"image":case"link":L("error",t),L("load",t),r=n;break;case"details":L("toggle",t),r=n;break;case"input":Ka(t,n),r=io(t,n),L("invalid",t);break;case"option":r=n;break;case"select":t._wrapperState={wasMultiple:!!n.multiple},r=W({},n,{value:void 0}),L("invalid",t);break;case"textarea":Xa(t,n),r=oo(t,n),L("invalid",t);break;default:r=n}so(i,r),s=r;for(o in s)if(s.hasOwnProperty(o)){var l=s[o];o==="style"?Rl(t,l):o==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,l!=null&&Nl(t,l)):o==="children"?typeof l=="string"?(i!=="textarea"||l!=="")&&Di(t,l):typeof l=="number"&&Di(t,""+l):o!=="suppressContentEditableWarning"&&o!=="suppressHydrationWarning"&&o!=="autoFocus"&&(Gi.hasOwnProperty(o)?l!=null&&o==="onScroll"&&L("scroll",t):l!=null&&Xo(t,o,l,a))}switch(i){case"input":sn(t),qa(t,n,!1);break;case"textarea":sn(t),Za(t);break;case"option":n.value!=null&&t.setAttribute("value",""+pe(n.value));break;case"select":t.multiple=!!n.multiple,o=n.value,o!=null?Qe(t,!!n.multiple,o,!1):n.defaultValue!=null&&Qe(t,!!n.multiple,n.defaultValue,!0);break;default:typeof r.onClick=="function"&&(t.onclick=On)}switch(i){case"button":case"input":case"select":case"textarea":n=!!n.autoFocus;break t;case"img":n=!0;break t;default:n=!1}}n&&(e.flags|=4)}e.ref!==null&&(e.flags|=512,e.flags|=2097152)}return nt(e),null;case 6:if(t&&e.stateNode!=null)tg(t,e,t.memoizedProps,n);else{if(typeof n!="string"&&e.stateNode===null)throw Error(w(166));if(i=_e(Hi.current),_e(Vt.current),fn(e)){if(n=e.stateNode,i=e.memoizedProps,n[It]=e,(o=n.nodeValue!==i)&&(t=bt,t!==null))switch(t.tag){case 3:dn(n.nodeValue,i,(t.mode&1)!==0);break;case 5:t.memoizedProps.suppressHydrationWarning!==!0&&dn(n.nodeValue,i,(t.mode&1)!==0)}o&&(e.flags|=4)}else n=(i.nodeType===9?i:i.ownerDocument).createTextNode(n),n[It]=e,e.stateNode=n}return nt(e),null;case 13:if(I(V),n=e.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(T&&ft!==null&&e.mode&1&&!(e.flags&128))yu(),ii(),e.flags|=98560,o=!1;else if(o=fn(e),n!==null&&n.dehydrated!==null){if(t===null){if(!o)throw Error(w(318));if(o=e.memoizedState,o=o!==null?o.dehydrated:null,!o)throw Error(w(317));o[It]=e}else ii(),!(e.flags&128)&&(e.memoizedState=null),e.flags|=4;nt(e),o=!1}else Rt!==null&&(Bo(Rt),Rt=null),o=!0;if(!o)return e.flags&65536?e:null}return e.flags&128?(e.lanes=i,e):(n=n!==null,n!==(t!==null&&t.memoizedState!==null)&&n&&(e.child.flags|=8192,e.mode&1&&(t===null||V.current&1?Y===0&&(Y=3):Ga())),e.updateQueue!==null&&(e.flags|=4),nt(e),null);case 4:return ri(),Do(t,e),t===null&&Oi(e.stateNode.containerInfo),nt(e),null;case 10:return ba(e.type._context),nt(e),null;case 17:return pt(e.type)&&Bn(),nt(e),null;case 19:if(I(V),o=e.memoizedState,o===null)return nt(e),null;if(n=(e.flags&128)!==0,a=o.rendering,a===null)if(n)wi(o,!1);else{if(Y!==0||t!==null&&t.flags&128)for(t=e.child;t!==null;){if(a=Kn(t),a!==null){for(e.flags|=128,wi(o,!1),n=a.updateQueue,n!==null&&(e.updateQueue=n,e.flags|=4),e.subtreeFlags=0,n=i,i=e.child;i!==null;)o=i,t=n,o.flags&=14680066,a=o.alternate,a===null?(o.childLanes=0,o.lanes=t,o.child=null,o.subtreeFlags=0,o.memoizedProps=null,o.memoizedState=null,o.updateQueue=null,o.dependencies=null,o.stateNode=null):(o.childLanes=a.childLanes,o.lanes=a.lanes,o.child=a.child,o.subtreeFlags=0,o.deletions=null,o.memoizedProps=a.memoizedProps,o.memoizedState=a.memoizedState,o.updateQueue=a.updateQueue,o.type=a.type,t=a.dependencies,o.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext}),i=i.sibling;return D(V,V.current&1|2),e.child}t=t.sibling}o.tail!==null&&U()>ai&&(e.flags|=128,n=!0,wi(o,!1),e.lanes=4194304)}else{if(!n)if(t=Kn(a),t!==null){if(e.flags|=128,n=!0,i=t.updateQueue,i!==null&&(e.updateQueue=i,e.flags|=4),wi(o,!0),o.tail===null&&o.tailMode==="hidden"&&!a.alternate&&!T)return nt(e),null}else 2*U()-o.renderingStartTime>ai&&i!==1073741824&&(e.flags|=128,n=!0,wi(o,!1),e.lanes=4194304);o.isBackwards?(a.sibling=e.child,e.child=a):(i=o.last,i!==null?i.sibling=a:e.child=a,o.last=a)}return o.tail!==null?(e=o.tail,o.rendering=e,o.tail=e.sibling,o.renderingStartTime=U(),e.sibling=null,i=V.current,D(V,n?i&1|2:i&1),e):(nt(e),null);case 22:case 23:return Ma(),n=e.memoizedState!==null,t!==null&&t.memoizedState!==null!==n&&(e.flags|=8192),n&&e.mode&1?dt&1073741824&&(nt(e),e.subtreeFlags&6&&(e.flags|=8192)):nt(e),null;case 24:return null;case 25:return null}throw Error(w(156,e.tag))}function Lc(t,e){switch(pa(e),e.tag){case 1:return pt(e.type)&&Bn(),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return ri(),I(ct),I(ot),Ca(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 5:return Sa(e),null;case 13:if(I(V),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(w(340));ii()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return I(V),null;case 4:return ri(),null;case 10:return ba(e.type._context),null;case 22:case 23:return Ma(),null;case 24:return null;default:return null}}var wn=!1,rt=!1,Ic=typeof WeakSet=="function"?WeakSet:Set,k=null;function He(t,e){var i=t.ref;if(i!==null)if(typeof i=="function")try{i(null)}catch(n){O(t,e,n)}else i.current=null}function Lo(t,e,i){try{i()}catch(n){O(t,e,n)}}var Os=!1;function Tc(t,e){if(wo=Vn,t=ou(),ha(t)){if("selectionStart"in t)var i={start:t.selectionStart,end:t.selectionEnd};else t:{i=(i=t.ownerDocument)&&i.defaultView||window;var n=i.getSelection&&i.getSelection();if(n&&n.rangeCount!==0){i=n.anchorNode;var r=n.anchorOffset,o=n.focusNode;n=n.focusOffset;try{i.nodeType,o.nodeType}catch{i=null;break t}var a=0,s=-1,l=-1,g=0,d=0,m=t,p=null;e:for(;;){for(var v;m!==i||r!==0&&m.nodeType!==3||(s=a+r),m!==o||n!==0&&m.nodeType!==3||(l=a+n),m.nodeType===3&&(a+=m.nodeValue.length),(v=m.firstChild)!==null;)p=m,m=v;for(;;){if(m===t)break e;if(p===i&&++g===r&&(s=a),p===o&&++d===n&&(l=a),(v=m.nextSibling)!==null)break;m=p,p=m.parentNode}m=v}i=s===-1||l===-1?null:{start:s,end:l}}else i=null}i=i||{start:0,end:0}}else i=null;for(vo={focusedElem:t,selectionRange:i},Vn=!1,k=e;k!==null;)if(e=k,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,k=t;else for(;k!==null;){e=k;try{var S=e.alternate;if(e.flags&1024)switch(e.tag){case 0:case 11:case 15:break;case 1:if(S!==null){var y=S.memoizedProps,j=S.memoizedState,h=e.stateNode,u=h.getSnapshotBeforeUpdate(e.elementType===e.type?y:Nt(e.type,y),j);h.__reactInternalSnapshotBeforeUpdate=u}break;case 3:var c=e.stateNode.containerInfo;c.nodeType===1?c.textContent="":c.nodeType===9&&c.documentElement&&c.removeChild(c.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(w(163))}}catch(b){O(e,e.return,b)}if(t=e.sibling,t!==null){t.return=e.return,k=t;break}k=e.return}return S=Os,Os=!1,S}function Ri(t,e,i){var n=e.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var r=n=n.next;do{if((r.tag&t)===t){var o=r.destroy;r.destroy=void 0,o!==void 0&&Lo(e,i,o)}r=r.next}while(r!==n)}}function pr(t,e){if(e=e.updateQueue,e=e!==null?e.lastEffect:null,e!==null){var i=e=e.next;do{if((i.tag&t)===t){var n=i.create;i.destroy=n()}i=i.next}while(i!==e)}}function Io(t){var e=t.ref;if(e!==null){var i=t.stateNode;switch(t.tag){case 5:t=i;break;default:t=i}typeof e=="function"?e(t):e.current=t}}function eg(t){var e=t.alternate;e!==null&&(t.alternate=null,eg(e)),t.child=null,t.deletions=null,t.sibling=null,t.tag===5&&(e=t.stateNode,e!==null&&(delete e[It],delete e[Ji],delete e[ko],delete e[vc],delete e[Sc])),t.stateNode=null,t.return=null,t.dependencies=null,t.memoizedProps=null,t.memoizedState=null,t.pendingProps=null,t.stateNode=null,t.updateQueue=null}function ig(t){return t.tag===5||t.tag===3||t.tag===4}function Bs(t){t:for(;;){for(;t.sibling===null;){if(t.return===null||ig(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.flags&2||t.child===null||t.tag===4)continue t;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function To(t,e,i){var n=t.tag;if(n===5||n===6)t=t.stateNode,e?i.nodeType===8?i.parentNode.insertBefore(t,e):i.insertBefore(t,e):(i.nodeType===8?(e=i.parentNode,e.insertBefore(t,i)):(e=i,e.appendChild(t)),i=i._reactRootContainer,i!=null||e.onclick!==null||(e.onclick=On));else if(n!==4&&(t=t.child,t!==null))for(To(t,e,i),t=t.sibling;t!==null;)To(t,e,i),t=t.sibling}function Vo(t,e,i){var n=t.tag;if(n===5||n===6)t=t.stateNode,e?i.insertBefore(t,e):i.appendChild(t);else if(n!==4&&(t=t.child,t!==null))for(Vo(t,e,i),t=t.sibling;t!==null;)Vo(t,e,i),t=t.sibling}var Z=null,At=!1;function Xt(t,e,i){for(i=i.child;i!==null;)ng(t,e,i),i=i.sibling}function ng(t,e,i){if(Tt&&typeof Tt.onCommitFiberUnmount=="function")try{Tt.onCommitFiberUnmount(or,i)}catch{}switch(i.tag){case 5:rt||He(i,e);case 6:var n=Z,r=At;Z=null,Xt(t,e,i),Z=n,At=r,Z!==null&&(At?(t=Z,i=i.stateNode,t.nodeType===8?t.parentNode.removeChild(i):t.removeChild(i)):Z.removeChild(i.stateNode));break;case 18:Z!==null&&(At?(t=Z,i=i.stateNode,t.nodeType===8?Vr(t.parentNode,i):t.nodeType===1&&Vr(t,i),Vi(t)):Vr(Z,i.stateNode));break;case 4:n=Z,r=At,Z=i.stateNode.containerInfo,At=!0,Xt(t,e,i),Z=n,At=r;break;case 0:case 11:case 14:case 15:if(!rt&&(n=i.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){r=n=n.next;do{var o=r,a=o.destroy;o=o.tag,a!==void 0&&(o&2||o&4)&&Lo(i,e,a),r=r.next}while(r!==n)}Xt(t,e,i);break;case 1:if(!rt&&(He(i,e),n=i.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=i.memoizedProps,n.state=i.memoizedState,n.componentWillUnmount()}catch(s){O(i,e,s)}Xt(t,e,i);break;case 21:Xt(t,e,i);break;case 22:i.mode&1?(rt=(n=rt)||i.memoizedState!==null,Xt(t,e,i),rt=n):Xt(t,e,i);break;default:Xt(t,e,i)}}function Js(t){var e=t.updateQueue;if(e!==null){t.updateQueue=null;var i=t.stateNode;i===null&&(i=t.stateNode=new Ic),e.forEach(function(n){var r=$c.bind(null,t,n);i.has(n)||(i.add(n),n.then(r,r))})}}function jt(t,e){var i=e.deletions;if(i!==null)for(var n=0;nr&&(r=a),n&=~o}if(n=r,n=U()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Fc(n/1960))-n,10t?16:t,re===null)var n=!1;else{if(t=re,re=null,er=0,M&6)throw Error(w(331));var r=M;for(M|=4,k=t.current;k!==null;){var o=k,a=o.child;if(k.flags&16){var s=o.deletions;if(s!==null){for(var l=0;lU()-Ra?xe(t,0):Aa|=i),mt(t,e)}function hg(t,e){e===0&&(t.mode&1?(e=gn,gn<<=1,!(gn&130023424)&&(gn=4194304)):e=1);var i=st();t=Yt(t,e),t!==null&&(Xi(t,e,i),mt(t,i))}function Hc(t){var e=t.memoizedState,i=0;e!==null&&(i=e.retryLane),hg(t,i)}function $c(t,e){var i=0;switch(t.tag){case 13:var n=t.stateNode,r=t.memoizedState;r!==null&&(i=r.retryLane);break;case 19:n=t.stateNode;break;default:throw Error(w(314))}n!==null&&n.delete(e),hg(t,i)}var cg;cg=function(t,e,i){if(t!==null)if(t.memoizedProps!==e.pendingProps||ct.current)ht=!0;else{if(!(t.lanes&i)&&!(e.flags&128))return ht=!1,Gc(t,e,i);ht=!!(t.flags&131072)}else ht=!1,T&&e.flags&1048576&&fu(e,Hn,e.index);switch(e.lanes=0,e.tag){case 2:var n=e.type;An(t,e),t=e.pendingProps;var r=ei(e,ot.current);Xe(e,i),r=_a(null,e,n,t,r,i);var o=xa();return e.flags|=1,typeof r=="object"&&r!==null&&typeof r.render=="function"&&r.$$typeof===void 0?(e.tag=1,e.memoizedState=null,e.updateQueue=null,pt(n)?(o=!0,Jn(e)):o=!1,e.memoizedState=r.state!==null&&r.state!==void 0?r.state:null,wa(e),r.updater=cr,e.stateNode=r,r._reactInternals=e,No(e,n,t,i),e=zo(null,e,n,!0,o,i)):(e.tag=0,T&&o&&ca(e),at(null,e,r,i),e=e.child),e;case 16:n=e.elementType;t:{switch(An(t,e),t=e.pendingProps,r=n._init,n=r(n._payload),e.type=n,r=e.tag=Yc(n),t=Nt(n,t),r){case 0:e=Ro(null,e,n,t,i);break t;case 1:e=Vs(null,e,n,t,i);break t;case 11:e=Is(null,e,n,t,i);break t;case 14:e=Ts(null,e,n,Nt(n.type,t),i);break t}throw Error(w(306,n,""))}return e;case 0:return n=e.type,r=e.pendingProps,r=e.elementType===n?r:Nt(n,r),Ro(t,e,n,r,i);case 1:return n=e.type,r=e.pendingProps,r=e.elementType===n?r:Nt(n,r),Vs(t,e,n,r,i);case 3:t:{if(Yu(e),t===null)throw Error(w(387));n=e.pendingProps,o=e.memoizedState,r=o.element,Cu(t,e),Yn(e,n,null,i);var a=e.memoizedState;if(n=a.element,o.isDehydrated)if(o={element:n,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},e.updateQueue.baseState=o,e.memoizedState=o,e.flags&256){r=oi(Error(w(423)),e),e=Fs(t,e,n,i,r);break t}else if(n!==r){r=oi(Error(w(424)),e),e=Fs(t,e,n,i,r);break t}else for(ft=le(e.stateNode.containerInfo.firstChild),bt=e,T=!0,Rt=null,i=vu(e,null,n,i),e.child=i;i;)i.flags=i.flags&-3|4096,i=i.sibling;else{if(ii(),n===r){e=Kt(t,e,i);break t}at(t,e,n,i)}e=e.child}return e;case 5:return ku(e),t===null&&Po(e),n=e.type,r=e.pendingProps,o=t!==null?t.memoizedProps:null,a=r.children,So(n,r)?a=null:o!==null&&So(n,o)&&(e.flags|=32),Qu(t,e),at(t,e,a,i),e.child;case 6:return t===null&&Po(e),null;case 13:return Ku(t,e,i);case 4:return va(e,e.stateNode.containerInfo),n=e.pendingProps,t===null?e.child=ni(e,null,n,i):at(t,e,n,i),e.child;case 11:return n=e.type,r=e.pendingProps,r=e.elementType===n?r:Nt(n,r),Is(t,e,n,r,i);case 7:return at(t,e,e.pendingProps,i),e.child;case 8:return at(t,e,e.pendingProps.children,i),e.child;case 12:return at(t,e,e.pendingProps.children,i),e.child;case 10:t:{if(n=e.type._context,r=e.pendingProps,o=e.memoizedProps,a=r.value,D($n,n._currentValue),n._currentValue=a,o!==null)if(Gt(o.value,a)){if(o.children===r.children&&!ct.current){e=Kt(t,e,i);break t}}else for(o=e.child,o!==null&&(o.return=e);o!==null;){var s=o.dependencies;if(s!==null){a=o.child;for(var l=s.firstContext;l!==null;){if(l.context===n){if(o.tag===1){l=Ht(-1,i&-i),l.tag=2;var g=o.updateQueue;if(g!==null){g=g.shared;var d=g.pending;d===null?l.next=l:(l.next=d.next,d.next=l),g.pending=l}}o.lanes|=i,l=o.alternate,l!==null&&(l.lanes|=i),Eo(o.return,i,e),s.lanes|=i;break}l=l.next}}else if(o.tag===10)a=o.type===e.type?null:o.child;else if(o.tag===18){if(a=o.return,a===null)throw Error(w(341));a.lanes|=i,s=a.alternate,s!==null&&(s.lanes|=i),Eo(a,i,e),a=o.sibling}else a=o.child;if(a!==null)a.return=o;else for(a=o;a!==null;){if(a===e){a=null;break}if(o=a.sibling,o!==null){o.return=a.return,a=o;break}a=a.return}o=a}at(t,e,r.children,i),e=e.child}return e;case 9:return r=e.type,n=e.pendingProps.children,Xe(e,i),r=xt(r),n=n(r),e.flags|=1,at(t,e,n,i),e.child;case 14:return n=e.type,r=Nt(n,e.pendingProps),r=Nt(n.type,r),Ts(t,e,n,r,i);case 15:return Hu(t,e,e.type,e.pendingProps,i);case 17:return n=e.type,r=e.pendingProps,r=e.elementType===n?r:Nt(n,r),An(t,e),e.tag=1,pt(n)?(t=!0,Jn(e)):t=!1,Xe(e,i),Bu(e,n,r),No(e,n,r,i),zo(null,e,n,!0,t,i);case 19:return qu(t,e,i);case 22:return $u(t,e,i)}throw Error(w(156,e.tag))};function pg(t,e){return Fl(t,e)}function Qc(t,e,i,n){this.tag=t,this.key=i,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=e,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function kt(t,e,i,n){return new Qc(t,e,i,n)}function Da(t){return t=t.prototype,!(!t||!t.isReactComponent)}function Yc(t){if(typeof t=="function")return Da(t)?1:0;if(t!=null){if(t=t.$$typeof,t===ta)return 11;if(t===ea)return 14}return 2}function ce(t,e){var i=t.alternate;return i===null?(i=kt(t.tag,e,t.key,t.mode),i.elementType=t.elementType,i.type=t.type,i.stateNode=t.stateNode,i.alternate=t,t.alternate=i):(i.pendingProps=e,i.type=t.type,i.flags=0,i.subtreeFlags=0,i.deletions=null),i.flags=t.flags&14680064,i.childLanes=t.childLanes,i.lanes=t.lanes,i.child=t.child,i.memoizedProps=t.memoizedProps,i.memoizedState=t.memoizedState,i.updateQueue=t.updateQueue,e=t.dependencies,i.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext},i.sibling=t.sibling,i.index=t.index,i.ref=t.ref,i}function Mn(t,e,i,n,r,o){var a=2;if(n=t,typeof t=="function")Da(t)&&(a=1);else if(typeof t=="string")a=5;else t:switch(t){case Ie:return Pe(i.children,r,o,e);case Zo:a=8,r|=8;break;case Xr:return t=kt(12,i,e,r|2),t.elementType=Xr,t.lanes=o,t;case Zr:return t=kt(13,i,e,r),t.elementType=Zr,t.lanes=o,t;case to:return t=kt(19,i,e,r),t.elementType=to,t.lanes=o,t;case kl:return dr(i,r,o,e);default:if(typeof t=="object"&&t!==null)switch(t.$$typeof){case Sl:a=10;break t;case Cl:a=9;break t;case ta:a=11;break t;case ea:a=14;break t;case Zt:a=16,n=null;break t}throw Error(w(130,t==null?t:typeof t,""))}return e=kt(a,i,e,r),e.elementType=t,e.type=n,e.lanes=o,e}function Pe(t,e,i,n){return t=kt(7,t,n,e),t.lanes=i,t}function dr(t,e,i,n){return t=kt(22,t,n,e),t.elementType=kl,t.lanes=i,t.stateNode={isHidden:!1},t}function $r(t,e,i){return t=kt(6,t,null,e),t.lanes=i,t}function Qr(t,e,i){return e=kt(4,t.children!==null?t.children:[],t.key,e),e.lanes=i,e.stateNode={containerInfo:t.containerInfo,pendingChildren:null,implementation:t.implementation},e}function Kc(t,e,i,n,r){this.tag=e,this.containerInfo=t,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=jr(0),this.expirationTimes=jr(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=jr(0),this.identifierPrefix=n,this.onRecoverableError=r,this.mutableSourceEagerHydrationData=null}function La(t,e,i,n,r,o,a,s,l){return t=new Kc(t,e,i,s,l),e===1?(e=1,o===!0&&(e|=8)):e=0,o=kt(3,null,null,e),t.current=o,o.stateNode=t,o.memoizedState={element:n,isDehydrated:i,cache:null,transitions:null,pendingSuspenseBoundaries:null},wa(o),t}function qc(t,e,i){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(bg)}catch(t){console.error(t)}}bg(),bl.exports=wt;var ip=bl.exports,Xs=ip;Kr.createRoot=Xs.createRoot,Kr.hydrateRoot=Xs.hydrateRoot;const yg="%[a-f0-9]{2}",Zs=new RegExp("("+yg+")|([^%]+?)","gi"),tl=new RegExp("("+yg+")+","gi");function Jo(t,e){try{return[decodeURIComponent(t.join(""))]}catch{}if(t.length===1)return t;e=e||1;const i=t.slice(0,e),n=t.slice(e);return Array.prototype.concat.call([],Jo(i),Jo(n))}function np(t){try{return decodeURIComponent(t)}catch{let e=t.match(Zs)||[];for(let i=1;it==null,lp=t=>encodeURIComponent(t).replaceAll(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`),Uo=Symbol("encodeFragmentIdentifier");function up(t){switch(t.arrayFormat){case"index":return e=>(i,n)=>{const r=i.length;return n===void 0||t.skipNull&&n===null||t.skipEmptyString&&n===""?i:n===null?[...i,[H(e,t),"[",r,"]"].join("")]:[...i,[H(e,t),"[",H(r,t),"]=",H(n,t)].join("")]};case"bracket":return e=>(i,n)=>n===void 0||t.skipNull&&n===null||t.skipEmptyString&&n===""?i:n===null?[...i,[H(e,t),"[]"].join("")]:[...i,[H(e,t),"[]=",H(n,t)].join("")];case"colon-list-separator":return e=>(i,n)=>n===void 0||t.skipNull&&n===null||t.skipEmptyString&&n===""?i:n===null?[...i,[H(e,t),":list="].join("")]:[...i,[H(e,t),":list=",H(n,t)].join("")];case"comma":case"separator":case"bracket-separator":{const e=t.arrayFormat==="bracket-separator"?"[]=":"=";return i=>(n,r)=>r===void 0||t.skipNull&&r===null||t.skipEmptyString&&r===""?n:(r=r===null?"":r,n.length===0?[[H(i,t),e,H(r,t)].join("")]:[[n,H(r,t)].join(t.arrayFormatSeparator)])}default:return e=>(i,n)=>n===void 0||t.skipNull&&n===null||t.skipEmptyString&&n===""?i:n===null?[...i,H(e,t)]:[...i,[H(e,t),"=",H(n,t)].join("")]}}function gp(t){let e;switch(t.arrayFormat){case"index":return(i,n,r)=>{if(e=/\[(\d*)]$/.exec(i),i=i.replace(/\[\d*]$/,""),!e){r[i]=n;return}r[i]===void 0&&(r[i]={}),r[i][e[1]]=n};case"bracket":return(i,n,r)=>{if(e=/(\[])$/.exec(i),i=i.replace(/\[]$/,""),!e){r[i]=n;return}if(r[i]===void 0){r[i]=[n];return}r[i]=[...r[i],n]};case"colon-list-separator":return(i,n,r)=>{if(e=/(:list)$/.exec(i),i=i.replace(/:list$/,""),!e){r[i]=n;return}if(r[i]===void 0){r[i]=[n];return}r[i]=[...r[i],n]};case"comma":case"separator":return(i,n,r)=>{const o=typeof n=="string"&&n.includes(t.arrayFormatSeparator),a=typeof n=="string"&&!o&&Ot(n,t).includes(t.arrayFormatSeparator);n=a?Ot(n,t):n;const s=o||a?n.split(t.arrayFormatSeparator).map(l=>Ot(l,t)):n===null?n:Ot(n,t);r[i]=s};case"bracket-separator":return(i,n,r)=>{const o=/(\[])$/.test(i);if(i=i.replace(/\[]$/,""),!o){r[i]=n&&Ot(n,t);return}const a=n===null?[]:Ot(n,t).split(t.arrayFormatSeparator);if(r[i]===void 0){r[i]=a;return}r[i]=[...r[i],...a]};default:return(i,n,r)=>{if(r[i]===void 0){r[i]=n;return}r[i]=[...[r[i]].flat(),n]}}}function vg(t){if(typeof t!="string"||t.length!==1)throw new TypeError("arrayFormatSeparator must be single character string")}function H(t,e){return e.encode?e.strict?lp(t):encodeURIComponent(t):t}function Ot(t,e){return e.decode?op(t):t}function Sg(t){return Array.isArray(t)?t.sort():typeof t=="object"?Sg(Object.keys(t)).sort((e,i)=>Number(e)-Number(i)).map(e=>t[e]):t}function Cg(t){const e=t.indexOf("#");return e!==-1&&(t=t.slice(0,e)),t}function hp(t){let e="";const i=t.indexOf("#");return i!==-1&&(e=t.slice(i)),e}function el(t,e,i){return i==="string"&&typeof t=="string"?t:typeof i=="function"&&typeof t=="string"?i(t):e.parseBooleans&&t!==null&&(t.toLowerCase()==="true"||t.toLowerCase()==="false")?t.toLowerCase()==="true":i==="number"&&!Number.isNaN(Number(t))&&typeof t=="string"&&t.trim()!==""||e.parseNumbers&&!Number.isNaN(Number(t))&&typeof t=="string"&&t.trim()!==""?Number(t):t}function Fa(t){t=Cg(t);const e=t.indexOf("?");return e===-1?"":t.slice(e+1)}function Wa(t,e){e={decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1,types:Object.create(null),...e},vg(e.arrayFormatSeparator);const i=gp(e),n=Object.create(null);if(typeof t!="string"||(t=t.trim().replace(/^[?#&]/,""),!t))return n;for(const r of t.split("&")){if(r==="")continue;const o=e.decode?r.replaceAll("+"," "):r;let[a,s]=wg(o,"=");a===void 0&&(a=o),s=s===void 0?null:["comma","separator","bracket-separator"].includes(e.arrayFormat)?s:Ot(s,e),i(Ot(a,e),s,n)}for(const[r,o]of Object.entries(n))if(typeof o=="object"&&o!==null&&e.types[r]!=="string")for(const[a,s]of Object.entries(o)){const l=e.types[r]?e.types[r].replace("[]",""):void 0;o[a]=el(s,e,l)}else typeof o=="object"&&o!==null&&e.types[r]==="string"?n[r]=Object.values(o).join(e.arrayFormatSeparator):n[r]=el(o,e,e.types[r]);return e.sort===!1?n:(e.sort===!0?Object.keys(n).sort():Object.keys(n).sort(e.sort)).reduce((r,o)=>{const a=n[o];return r[o]=a&&typeof a=="object"&&!Array.isArray(a)?Sg(a):a,r},Object.create(null))}function kg(t,e){if(!t)return"";e={encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:",",...e},vg(e.arrayFormatSeparator);const i=a=>e.skipNull&&sp(t[a])||e.skipEmptyString&&t[a]==="",n=up(e),r={};for(const[a,s]of Object.entries(t))i(a)||(r[a]=s);const o=Object.keys(r);return e.sort!==!1&&o.sort(e.sort),o.map(a=>{const s=t[a];return s===void 0?"":s===null?H(a,e):Array.isArray(s)?s.length===0&&e.arrayFormat==="bracket-separator"?H(a,e)+"[]":s.reduce(n(a),[]).join("&"):H(a,e)+"="+H(s,e)}).filter(a=>a.length>0).join("&")}function _g(t,e){var r;e={decode:!0,...e};let[i,n]=wg(t,"#");return i===void 0&&(i=t),{url:((r=i==null?void 0:i.split("?"))==null?void 0:r[0])??"",query:Wa(Fa(t),e),...e&&e.parseFragmentIdentifier&&n?{fragmentIdentifier:Ot(n,e)}:{}}}function xg(t,e){e={encode:!0,strict:!0,[Uo]:!0,...e};const i=Cg(t.url).split("?")[0]||"",n=Fa(t.url),r={...Wa(n,{sort:!1}),...t.query};let o=kg(r,e);o&&(o=`?${o}`);let a=hp(t.url);if(typeof t.fragmentIdentifier=="string"){const s=new URL(i);s.hash=t.fragmentIdentifier,a=e[Uo]?s.hash:`#${t.fragmentIdentifier}`}return`${i}${o}${a}`}function Pg(t,e,i){i={parseFragmentIdentifier:!0,[Uo]:!1,...i};const{url:n,query:r,fragmentIdentifier:o}=_g(t,i);return xg({url:n,query:ap(r,e),fragmentIdentifier:o},i)}function cp(t,e,i){const n=Array.isArray(e)?r=>!e.includes(r):(r,o)=>!e(r,o);return Pg(t,n,i)}const Eg=Object.freeze(Object.defineProperty({__proto__:null,exclude:cp,extract:Fa,parse:Wa,parseUrl:_g,pick:Pg,stringify:kg,stringifyUrl:xg},Symbol.toStringTag,{value:"Module"})),il=[{tags:["Commercial"],name:"10x genomics/Loupe",url:"https://support.10xgenomics.com/genome-exome/software/visualization/latest/structural-variants",img:"10xgenomics.png",interactive:["true"],width:1600,height:300},{tags:["Commercial"],name:"Alamut",img:"alamut.png",url:"https://www.interactive-biosoftware.com/alamut-visual/",interactive:["true"],width:938,height:132},{tags:["Commercial","Microbiology"],name:"ATCC Genome Portal",platform:["Silo"],img:"atcc.png",url:"https://docs.onecodex.com/en/articles/3996697-using-the-genome-browser",interactive:["true"],width:2602,height:1276},{tags:["Commercial","Synthetic biology"],name:"Benchling",img:"benchling.png",url:"https://www.benchling.com/",interactive:["true"],width:1710,height:896},{tags:["Commercial","SV"],name:"CLC Genomics workbench",img:"clcgenomics.png",url:"https://digitalinsights.qiagen.com/news/blog/discovery/structural-variant-detection-using-clc-genomics-workbench/",interactive:["true"],width:600,height:455},{tags:["Commercial"],name:"DNASTAR",img:"dnastar.png",url:"https://www.dnastar.com/",interactive:["true"],width:438,height:253},{tags:["Commercial","Synthetic biology"],name:"Geneious",img:"geneious.png",url:"https://www.geneious.com/",interactive:["true"],width:1e3,height:600},{tags:["Commercial"],name:"Genestack",img:"genestack.png",url:"https://genestack.com/blog/2015/05/28/navigation-in-genestack-genome-browser/",interactive:["true"],width:1256,height:556},{tags:["Commercial"],name:"Golden Helix",img:"goldenhelix.png",url:"https://www.goldenhelix.com/products/GenomeBrowse/",note:"Free for academic use",interactive:["true"],width:360,height:245},{tags:["Commercial"],name:"Lucid viewer",img:"lucidalign.png",url:"https://lucidalign.com/",interactive:["true"],width:1024,height:540},{tags:["Commercial"],name:"MacVector",img:"macvector.png",url:"https://macvector.com/",width:598,height:478},{tags:["Commercial","Comparative"],name:"Persephone",img:"persephone.jpg",url:"https://persephonesoft.com/",width:576,height:313},{tags:["Commercial"],img:"snapgene.png",name:"SnapGene",url:"https://www.snapgene.com/",width:777,height:436},{tags:["Commercial"],img:"strandngs.png",name:"Strand NGS",url:"https://www.strand-ngs.com/",width:786,height:478},{tags:["Commercial","SV"],img:"bionano.png",name:"Bionano",url:"https://bionanogenomics.com/technology/structural-variation/",width:568,height:295},{tags:["MSA"],name:"AA (alignment annotator)",pub:{doi:"10.1093/nar/gku400",year:2014,citations:52},note:"also see STRAP",img:"aa.png",language:["JS"],url:"http://www.bioinformatics.org/strap/aa",platform:["Web"],width:1222,height:539},{tags:["MSA"],name:"abrowse (MSA viewer)",language:["JS"],img:"abrowse.png",url:"https://github.com/ihh/abrowse",platform:["Web"],width:1848,height:533,github_stars:11},{tags:["MSA"],name:"alignment.js",img:"alignmentjs.png",url:"https://github.com/veg/alignment.js",language:["JS"],platform:["Web"],width:2006,height:454,github_stars:8},{tags:["MSA"],name:"AlignmentComparator",img:"alignmentcomparator.png",github:"https://github.com/bioinfweb/AlignmentComparator",url:"http://bioinfweb.info/AlignmentComparator/",note:"Uses http://bioinfweb.info/LibrAlign/",language:["Java"],width:756,height:592,github_stars:1},{tags:["MSA"],name:"AlignmentViewer",img:"alignmentviewer.png",language:["JS"],github:"https://github.com/sanderlab/alignmentviewer",url:"https://alignmentviewer.org/",pub:{url:"https://f1000research.com/articles/9-213",doi:"https://doi.org/10.12688/f1000research.22242.2",year:2020,citations:5},platform:["Web"],width:1848,height:716,github_stars:27},{tags:["MSA"],name:"AliView",img:"aliview.png",url:"http://www.ormbunkar.se/aliview/",github:"https://github.com/AliView/AliView",pub:{doi:"10.1093/bioinformatics/btu531",year:2014,citations:2412},platform:["Desktop"],language:["Java"],width:400,height:241,github_stars:116},{tags:["MSA"],name:"BioJS/MSA",language:["JS"],url:"https://msa.biojs.net/",img:"biojsmsa.png",github:"https://github.com/wilzbach/msa",platform:["Web"],pub:{url:"https://academic.oup.com/bioinformatics/article/32/22/3501/2525598?login=true",doi:"10.1093/bioinformatics/btw474",year:2016,citations:151},width:1956,height:634,github_stars:168},{name:"rMSA",url:"https://github.com/mhahsler/rMSA/blob/master/vignettes/rMSA_vignette.pdf",note:"Can automate boxshade",github:"https://github.com/mhahsler/rMSA",img:"rmsa.png",tags:["MSA"],language:["R"],width:650,height:407,github_stars:10},{tags:["MSA","Deadlink"],name:"Boxshade",note:"Also available as a command line tool with `apt install boxshade`. See also rMSA which can automate running boxshade from within R",img:"boxshade.png",url:"https://embnet.vital-it.ch/software/BOX_form.html",pub:{url:"https://genomebiology.biomedcentral.com/articles/10.1186/gb-2000-1-2-reports2047",doi:"10.1186/gb-2000-1-2-reports2047",year:2e3,citations:9},platform:["Web","CLI"],width:915,height:249},{tags:["MSA"],name:"ESPript",img:"espript.png",pub:{doi:"10.1093/bioinformatics/15.4.305",year:1999,citations:2409},url:"http://espript.ibcp.fr/ESPript/ESPript/",platform:["Web","CLI"],note:"Primarily a web interface but can download a binary for linux https://espript.ibcp.fr/ESPript/ESPript/esp_faq.php",width:830,height:204},{tags:["MSA"],name:"Jalview",img:"jalview.jpg",url:"https://www.jalview.org/",pub:{doi:"10.1093/bioinformatics/btp033",year:2009,citations:7935},platform:["Desktop"],language:["Java"],width:520,height:377},{tags:["MSA"],name:"JSAV",img:"jsav.png",github:"https://github.com/AndrewCRMartin/JSAV",url:"http://www.bioinf.org.uk/software/jsav",language:["JS"],platform:["Web"],pub:{url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4304231/",doi:"10.12688/f1000research.5486.1",year:2014,citations:14},width:1e3,height:836,github_stars:11},{tags:["Logo"],name:"LogoJS",img:"logojs.png",github:"https://github.com/weng-lab/logojs-package",language:["JS"],url:"https://logojs.wenglab.org/app/gallery/",pub:{doi:"10.1093/bioinformatics/btaa192",year:2020,citations:9},platform:["Web"],width:413,height:254,github_stars:15},{tags:["MSA"],name:"MSABrowser",img:"msabrowser.png",language:["JS"],github:"https://github.com/thekaplanlab/msabrowser",url:"https://thekaplanlab.github.io/",pub:{doi:"https://doi.org/10.1093/bioadv/vbab009",year:2021,citations:3},platform:["Web"],width:1654,height:290,github_stars:31},{tags:["MSA"],name:"msaR",url:"https://github.com/zachcp/msaR",img:"msar.png",note:"uses BioJS/MSA",language:["R","JS"],platform:["Desktop","R/htmlwidget"],width:1e3,height:580,github_stars:8},{tags:["MSA"],name:"MView",url:"https://www.ebi.ac.uk/Tools/msa/mview/",pub:{doi:"https://doi.org/10.1093/bioinformatics/14.4.380",year:1998,citations:306},img:"mview.png",note:"See also their web versions of clustal omega etc. which have similar outputs",platform:["Web","Silo"],width:1222,height:550},{tags:["MSA"],name:"NCBI MSA Viewer",url:"https://www.ncbi.nlm.nih.gov/projects/msaviewer/",img:"ncbimsa.png",platform:["Web","CGI","Silo"],width:1222,height:459},{tags:["MSA"],name:"pyBoxshade",img:"pyboxshade.png",url:"https://github.com/mdbaron42/pyBoxshade",language:["Python"],note:"also see boxshade",platform:["Desktop"],width:519,height:304,github_stars:23},{tags:["MSA"],name:"pymsaplotter",language:["Python"],img:"pymsaplotter.png",url:"https://github.com/orangeSi/pymsaploter",width:1e3,height:513,github_stars:13},{tags:["MSA"],name:"React MSAViewer",img:"react-msa-viewer.png",language:["JS","React"],url:"https://github.com/plotly/react-msa-viewer",platform:["Web"],width:595,height:243,github_stars:25},{tags:["MSA"],name:"react-msaview",img:"react-msaview.png",language:["JS","React"],url:"https://github.com/GMOD/react-msaview",width:1177,height:413,github_stars:18},{tags:["MSA"],name:"seqotron",img:"seqotron.png",url:"https://github.com/4ment/seqotron",pub:{doi:"10.1186/s13104-016-1927-4",year:2016,citations:35},language:["Objective-C"],platform:["Desktop"],width:826,height:602,github_stars:28},{tags:["MSA"],name:"STRAP",note:"also see AA",img:"strap.png",url:"http://www.bioinformatics.org/strap/",pub:{doi:"10.1093/nar/gku400",year:2014,citations:52},platform:["Web","Applet"],width:725,height:380},{tags:["MSA"],name:"TeXShade",img:"texshade.png",pub:{doi:"https://doi.org/10.1093/bioinformatics/16.2.135",year:2e3,citations:268},url:"http://mirrors.ibiblio.org/CTAN/macros/latex/contrib/texshade/texshade.pdf",platform:["Desktop"],width:2872,height:761},{tags:["MSA"],name:"Wasabi",img:"wasabi.png",url:"http://wasabiapp.org/",github:"https://github.com/veidenberg/wasabi",language:["JS","Python"],pub:{doi:"https://doi.org/10.1093/molbev/msv333",year:2015,citations:53},platform:["Web"],width:1378,height:496,github_stars:16},{tags:["CNV","Static"],name:"aCNVViewer",img:"acnvviewer.png",language:["Python"],url:"https://github.com/FJD-CEPH/aCNViewer",pub:{url:"https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0189334",doi:"https://doi.org/10.1371/journal.pone.0189334",year:2017,citations:7},width:4e3,height:1800,github_stars:28},{name:"CNVkit",tags:["CNV"],img:"cnvkit.png",url:"https://cnvkit.readthedocs.io/en/stable/plots.html",github:"https://github.com/etal/cnvkit",language:["Python"],pub:{url:"https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1004873",doi:"https://doi.org/10.1371/journal.pcbi.1004873",year:2016,citations:1356},width:885,height:1555,github_stars:547},{tags:["CNV","Static"],language:["C","R"],name:"BAMScale",img:"bamscale.png",url:"https://github.com/ncbi/BAMscale",pub:{url:"https://epigeneticsandchromatin.biomedcentral.com/articles/10.1186/s13072-020-00343-x",doi:"10.1186/s13072-020-00343-x",year:2020,citations:47},width:2172,height:498,github_stars:67},{tags:["Static","Alignments viewer"],language:["Python"],img:"bamsnap.png",name:"BAMSnap",url:"https://github.com/parklab/bamsnap",pub:{doi:"https://doi.org/10.1093/bioinformatics/btaa1101",year:2021,citations:10},width:1e3,height:1121,github_stars:111},{tags:["Static","Epigenomics"],name:"ChIA-Pipe",img:"chiapipe.png",url:"https://github.com/TheJacksonLaboratory/ChIA-PIPE",pub:{url:"https://www.science.org/doi/10.1126/sciadv.aay2078",doi:"10.1126/sciadv.aay2078",year:2020,citations:26},width:541,height:562,github_stars:27},{tags:["Gene fusion","Circular","Linear"],name:"Chimeraviz",img:"chimeraviz.png",url:"https://github.com/stianlagstad/chimeraviz",pub:{doi:"https://doi.org/10.1093/bioinformatics/btx329",year:2017,citations:25},language:["R"],width:1914,height:1935,github_stars:37},{tags:["Static","CNV"],name:"CNView",img:"cnview.jpg",url:"https://github.com/RCollins13/CNView",pub:{doi:"https://doi.org/10.1101/049536",year:2016,citations:10},language:["R"],width:1260,height:900,github_stars:69},{tags:["Static","CNV"],name:"CNVPlot",img:"cnvplot.jpg",url:"https://github.com/dantaki/CNVplot",pub:{doi:"10.1101/030270",year:2015,citations:0},language:["R"],width:535,height:537,github_stars:15},{tags:["Static","CNV"],name:"CNVpytor",img:"cnvpytor.png",url:"https://github.com/abyzovlab/CNVpytor",pub:{doi:"https://doi.org/10.1093/gigascience/giab074",year:2021,citations:52},language:["Python"],width:1024,height:1024,github_stars:187},{tags:["Static","Synthetic biology"],name:"DNAPlotLib",img:"dnaplotlib.png",url:"https://github.com/VoigtLab/dnaplotlib",pub:{doi:"10.1021/acssynbio.6b00252",year:2016,citations:49},language:["Python"],width:960,height:810,github_stars:287},{name:"ExonIntron",url:"http://wormweb.org/exonintron",img:"exonintron.png",tags:["Static","Gene structure"],width:387,height:78},{tags:["Static","Gene structure"],name:"FeatureViewer",img:"featureviewer.png",pub:{doi:"https://doi.org/10.5281/zenodo.596941"},url:"https://github.com/calipho-sib/feature-viewer",platform:["Web"],width:2736,height:970,github_stars:112},{tags:["Static","Gene structure"],name:"Geneviz",img:"geneviz.png",url:"https://jrderuiter.github.io/geneviz/usage.html",github:"https://github.com/jrderuiter/geneviz",language:["Python"],width:640,height:152,github_stars:15},{tags:["Static"],name:"Genome STRiP",github:"https://github.com/broadinstitute/genomestrip-gatk",img:"genomestrip.png",pub:{doi:"10.1038/ng.3200",year:2015,citations:356},url:"http://software.broadinstitute.org/software/genomestrip/",width:1133,height:466,github_stars:2},{tags:["Static","Gene structure"],name:"GenomeTools",img:"genometools.png",github:"https://github.com/genometools/genometools",url:"http://genometools.org/",pub:{doi:"10.1109/TCBB.2013.68",year:2013,citations:355},language:["C"],width:700,height:326,github_stars:296},{tags:["Static","SV","Alignments viewer"],name:"GenomeView",img:"genomeview.png",url:"https://github.com/nspies/genomeview",pub:{doi:"https://doi.org/10.1101/355636",year:2018,citations:3},language:["Python"],width:900,height:591,github_stars:142},{name:"GenomeView (java app)",img:"genomeview_java.png",url:"https://genomeview.org/content/quick-start-guide",github:"https://github.com/GenomeView/genomeview",pub:{doi:"https://doi.org/10.1093/nar/gkr995",year:2011,citations:119},language:["Java"],tags:["Alignments viewer"],width:640,height:496,github_stars:8},{tags:["Static","Comparative"],name:"genoPlotR",img:"genoplotr.png",url:"http://genoplotr.r-forge.r-project.org/",pub:{doi:"https://doi.org/10.1093/bioinformatics/btq413",year:2010,citations:581},language:["R"],width:500,height:300},{tags:["Static","Ideogram","Circular"],name:"ggbio",url:"http://www.bioconductor.org/packages/2.11/bioc/vignettes/ggbio/inst/doc/ggbio.pdf",github:"https://github.com/lawremi/ggbio",img:"ggbio.png",language:["R","ggplot2"],pub:{url:"https://genomebiology.biomedcentral.com/articles/10.1186/gb-2012-13-8-r77",doi:"https://doi.org/10.1186/gb-2012-13-8-r77",year:2012,citations:266},width:600,height:600,github_stars:111},{tags:["Static","Comparative"],name:"GGgenes",img:"gggenes.png",url:"https://github.com/wilkox/gggenes",language:["R","ggplot2"],width:768,height:768,github_stars:498},{tags:["Static"],name:"GGsashimi",img:"ggsashimi.png",url:"https://github.com/guigolab/ggsashimi",pub:{doi:"https://dx.doi.org/10.1371%2Fjournal.pcbi.1006360",year:2018,citations:177},language:["R","ggplot2"],width:3600,height:3330,github_stars:121},{name:"GSSPlayground",img:"gssplayground.png",url:"https://github.com/orangeSi/GSSplayground",language:["Perl"],tags:["Comparative","Static","Alignments viewer"],width:1300,height:700,github_stars:31},{tags:["Static","Ideogram","Quantitative","CNV"],name:"gtrellis",github:"https://github.com/jokergoo/gtrellis",img:"gtrellis.png",url:"http://bioconductor.org/packages/devel/bioc/vignettes/gtrellis/inst/doc/gtrellis.html",pub:{doi:"https://doi.org/10.1186/s12859-016-1051-4",year:2016,citations:20},language:["R"],width:720,height:576,github_stars:39},{tags:["Static","Alignments viewer","Quantitative"],name:"Gviz",img:"gviz.png",url:"https://bioconductor.org/packages/release/bioc/html/Gviz.html",github:"https://github.com/ivanek/Gviz",pub:{doi:"https://doi.org/10.1007/978-1-4939-3578-9_16",year:2016,citations:717},language:["R"],width:720,height:480,github_stars:76},{tags:["Static","Coverage"],name:"Hagfish",img:"hagfish.png",url:"https://github.com/mfiers/hagfish/wiki/Plots",github:"https://github.com/mfiers/hagfish",language:["Python"],width:957,height:284,github_stars:36},{tags:["Static","Hi-C"],name:"HiCPlotter",img:"hicplotter.jpg",pub:{doi:"https://doi.org/10.1186/s13059-015-0767-1",year:2015,citations:164},url:"https://github.com/kcakdemir/HiCPlotter",language:["Python"],width:600,height:840,github_stars:17},{tags:["Static","Alignments viewer"],name:"JVarKit/BamToSVG",img:"bamtosvg.jpg",pub:{doi:"10.6084/m9.figshare.1425030"},url:"http://lindenb.github.io/jvarkit/BamToSVG.html",language:["Java"],width:599,height:591},{tags:["Static","Protein","Lollipops"],name:"Lollipops",img:"lollipops.png",url:"https://github.com/joiningdata/lollipops",language:["Go"],width:1776,height:200,github_stars:185,pub:{doi:"https://doi.org/10.1371/journal.pone.0160519",year:2016,citations:107}},{tags:["Static","Protein"],name:"Mason",img:"mason.png",url:"http://www.yeastrc.org/mason/",platform:["Web","Deadlink"],width:1378,height:496},{tags:["Static","Epigenomics","Methylation"],name:"Methplotlib",url:"https://github.com/wdecoster/methplotlib",pub:{doi:"https://doi.org/10.1093/bioinformatics/btaa093",year:2020,citations:26},img:"methplotlib.jpg",language:["Python"],width:700,height:450,github_stars:90},{tags:["Single cell"],name:"Millefy",img:"millefy.png",url:"https://github.com/yuifu/millefy",pub:{doi:"https://dx.doi.org/10.1186%2Fs12864-020-6542-z",year:2020,citations:5},language:["R"],platform:["Package"],width:1418,height:2157,github_stars:27},{name:"Pairoscope",url:"http://pairoscope.sourceforge.net/",language:["C++"],img:"pairoscope.png",tags:["Static","SV"],width:1024,height:768},{name:"pauvre",github:"https://github.com/conchoecia/pauvre",tags:["Static","Comparative","Multi-way synteny"],img:"pauvre.png",language:["Python"],platform:["CLI"],url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6991124/figure/fig-3/",pub:{doi:"https://dx.doi.org/10.7717%2Fpeerj.8356",year:2020,citations:19},width:2428,height:748,github_stars:52},{name:"PureScript genetics browser",url:"https://github.com/chfi/purescript-genetics-browser",img:"purescript.png",language:["Purescript"],platform:["Web"],tags:["GWAS"],width:1848,height:663,github_stars:5},{name:"pyGenomeTracks",url:"https://github.com/deeptools/pyGenomeTracks",language:["Python"],note:"See also https://pypi.org/project/gtracks/ which is a separate project that is powered by pyGenomeTracks",img:"pygenometracks.png",pub:{doi:"https://doi.org/10.1093/bioinformatics/btaa692",year:2020,citations:290},tags:["Static","Hi-C","General"],width:743,height:591,github_stars:771},{name:"RACER",url:"https://oliviasabik.github.io/RACERweb/articles/IntroToRACER.html",github:"https://github.com/oliviasabik/RACER",language:["R"],img:"racer.png",tags:["Static","GWAS"],pub:{doi:"https://doi.org/10.1101/495366",year:2018,citations:5},width:1400,height:865,github_stars:18},{name:"RepViz",url:"https://bmcresnotes.biomedcentral.com/articles/10.1186/s13104-019-4473-z",github:"https://github.com/elolab/RepViz",language:["R"],pub:{doi:"10.1186/s13104-019-4473-z",year:2019,citations:0},img:"repviz.png",tags:["Static","Quantitative"],width:1677,height:2482,github_stars:2},{name:"Samplot",url:"https://github.com/ryanlayer/samplot",language:["Python"],pub:{doi:"10.1186/s13059-021-02380-5",year:2021,citations:62},img:"samplot.jpg",tags:["Static","SV","Alignments viewer"],width:1202,height:602,github_stars:527},{name:"SashimiPlot",url:"https://miso.readthedocs.io/en/fastmiso/sashimi.html",language:["Python"],img:"sashimi-plot-example.png",github:"https://github.com/yarden/MISO",pub:{doi:"https://dx.doi.org/10.1093%2Fbioinformatics%2Fbtv034",year:2015,citations:139},tags:["Static","Expression","Splicing"],note:"See also rmats2sashimiplot which uses MISO. MATS stands for Multivariate Analysis of Transcript Splicing",width:1012,height:683,github_stars:132},{name:"shabam",url:"https://github.com/dlrice/shabam",language:["Python"],img:"shabam.png",tags:["Static"],width:790,height:203,github_stars:6},{name:"shinyChromosome",url:"http://150.109.59.144:3838/shinyChromosome/",platform:["Web"],tags:["Dotplot","Linear","Ideogram"],github:"https://github.com/YaoLab-Bioinfo/shinyChromosome",img:"shinychromosome.png",language:["R","Shiny"],pub:{url:"https://www.sciencedirect.com/science/article/pii/S1672022919301883",doi:"https://doi.org/10.1016/j.gpb.2019.07.003",year:2019,citations:16},width:950,height:550,github_stars:45},{name:"SparK",url:"https://github.com/harbourlab/SparK",language:["Python"],img:"spark.png",tags:["Static","Hi-C","Quantitative"],pub:{doi:"https://doi.org/10.1101/845529",year:2019,citations:41},width:4553,height:821,github_stars:107},{name:"Spliceclust",url:"https://github.com/pkimes/spliceclust",img:"spliceclust.png",language:["R"],tags:["Static","Splicing"],width:1152,height:384,github_stars:11},{name:"Sushi",url:"https://www.bioconductor.org/packages/release/bioc/vignettes/Sushi/inst/doc/Sushi.pdf",language:["R"],img:"sushi.png",github:"https://github.com/PhanstielLab/Sushi",pub:{doi:"https://doi.org/10.1093/bioinformatics/btu379",year:2014,citations:179},tags:["Static"],width:589,height:247,github_stars:67},{name:"svist4get",url:"https://link.springer.com/article/10.1186/s12859-019-2706-8",language:["Python"],tags:["Static"],img:"svis4get.png",pub:{doi:"10.1186/s12859-019-2706-8",year:2019,citations:38},width:973,height:403},{name:"svv",url:"https://github.com/ryanlayer/svv",language:["Python"],img:"svv.png",tags:["Static","SV","Coverage"],width:489,height:999,github_stars:25},{name:"svviz",url:"https://github.com/svviz/svviz",language:["Python"],tags:["Static","SV","Insertion"],img:"svviz.png",pub:{doi:"https://doi.org/10.1093/bioinformatics/btv478",year:2015,citations:47},width:1604,height:893,github_stars:81},{name:"svviz2",url:"https://github.com/nspies/svviz2",language:["Python"],tags:["Static","SV","Insertion"],img:"svviz2.png",pub:{doi:"https://doi.org/10.1093/bioinformatics/btv478",year:2015,citations:47},width:1834,height:1129,github_stars:49},{name:"TnT",url:"https://tnt.marlin.pub/articles/introduction",language:["R","JS"],github:"https://github.com/tntvis/tnt.genome",img:"tnt.png",pub:{doi:"https://doi.org/10.1093/bioinformatics/btw210",year:2016,citations:3},tags:["Gene structure"],platform:["Web","Interactive"],width:741,height:215,github_stars:19},{name:"trackViewer",url:"https://bioconductor.org/packages/release/bioc/vignettes/trackViewer/inst/doc/trackViewer.html",language:["R"],img:"trackviewer.png",github:"https://github.com/jianhong/trackViewer",pub:{doi:"https://doi.org/10.1038/s41592-019-0430-y",year:2019,citations:148},tags:["Static","Lollipops","Quantitative"],width:1152,height:960,github_stars:66},{tags:["Comparative","Deadlink"],name:"Aequatus",img:"aequatus.png",pub:{doi:"https://doi.org/10.1093/gigascience/giy128",year:2018,citations:1},url:"https://github.com/TGAC/Aequatus",language:["JS","Java"],platform:["Web","Silo"],width:626,height:281,github_stars:7},{tags:["Comparative"],name:"AliTV",img:"alitv.png",url:"https://alitvteam.github.io/AliTV/d3/AliTV.html",pub:{doi:"https://doi.org/10.7717/peerj-cs.116",year:2017,citations:64},platform:["Web"],language:["JS","D3","Perl"],width:2500,height:1923},{tags:["Comparative"],name:"Artemis comparison tool (ACT)",github:"https://github.com/sanger-pathogens/Artemis",img:"artemis_act.png",url:"https://www.sanger.ac.uk/science/tools/artemis-comparison-tool-act",pub:{doi:"https://doi.org/10.1093/bioinformatics/bti553",year:2005,citations:1365},language:["Java"],platform:["Desktop"],width:648,height:530,github_stars:238},{tags:["Comparative"],name:"Biodalliance comparative demo",github:"https://github.com/dasmoth/dalliance",url:"http://biodalliance.org/dev/test-comparative.html",pub:{doi:"http://doi.org/10.1093/bioinformatics/btr020",year:2011,citations:89},language:["JS"],img:"biodalliance_comparative.png",platform:["Web"],width:1222,height:681,github_stars:227},{tags:["Comparative","Pangenome","Microbiology"],name:"Chromatiblock",url:"https://github.com/mjsull/chromatiblock",platform:["Web"],language:["Python"],img:"chromatiblock.png",pub:{doi:"https://doi.org/10.21105/joss.02451",year:2020,citations:1},width:1654,height:1079,github_stars:30},{tags:["Comparative"],name:"CMap",github:"https://github.com/gmod/cmap",url:"http://gmod.org/wiki/CMap",language:["Perl"],img:"cmap.jpg",pub:{doi:"https://dx.doi.org/10.1093%2Fbioinformatics%2Fbtp458",year:2009,citations:64},platform:["Web"],width:620,height:831,github_stars:5},{tags:["Comparative","Dotplot","Linear","JBrowse integration"],name:"CoGe",github:"https://github.com/LyonsLab/coge",img:"coge.png",url:"https://genomevolution.org/coge/",pub:{doi:"https://doi.org/10.1093/bioinformatics/btx144",year:2017,citations:134},language:["Perl"],platform:["Web","Silo"],width:1313,height:469,github_stars:44},{tags:["Comparative","UCSC integration"],name:'Comparative assembly hub / "snake track"',url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4296145/",platform:["Web"],img:"comparative_assembly_hub.png",pub:{url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4296145/",doi:"https://dx.doi.org/10.1093%2Fbioinformatics%2Fbtu534",year:2014,citations:27},width:440,height:140},{tags:["Comparative"],name:"CrossBrowse",url:"https://github.com/shenkers/CrossBrowse",language:["Java"],platform:["Desktop"],img:"crossbrowse.png",pub:{doi:"https://doi.org/10.1101/272880",year:2018,citations:0},width:1101,height:652,github_stars:8},{tags:["Comparative","Ideogram"],name:"CVit",url:"https://sourceforge.net/projects/cvit/",github:"https://github.com/ekcannon/CViT",pub:{doi:"10.1155/2011/373875",year:2011,citations:27},img:"cvit.png",language:["Perl"],platform:["Web"],width:1100,height:850,github_stars:2},{tags:["Comparative","Ideogram"],name:"Cvit.js",language:["JS"],img:"cvitjs.png",url:"https://github.com/LegumeFederation/cvitjs",platform:["Web"],width:1e3,height:500,github_stars:10},{tags:["Comparative"],name:"EasyFig",github:"https://github.com/mjsull/Easyfig",img:"easyfig.png",language:["Python"],url:"https://mjsull.github.io/Easyfig/",platform:["CLI"],pub:{url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3065679/",doi:"https://dx.doi.org/10.1093%2Fbioinformatics%2Fbtr039",year:2011,citations:2706},width:5e3,height:2171,github_stars:89},{name:"Edinburgh-Genome-Foundry/DnaFeaturesViewer",url:"https://github.com/Edinburgh-Genome-Foundry/DnaFeaturesViewer",img:"dnafeaturesviewer.png",platform:["Desktop"],language:["Python"],note:"See also https://github.com/Edinburgh-Genome-Foundry/Caravagene",tags:["Microbiology","Synthetic biology"],pub:{url:"https://academic.oup.com/bioinformatics/article-abstract/36/15/4350/5868559?redirectedFrom=PDF",doi:"https://doi.org/10.1093/bioinformatics/btaa213",year:2020,citations:89},width:1e3,height:300,github_stars:598},{tags:["Comparative"],name:"GBrowse_syn",github:"https://github.com/GMOD/GBrowse",url:"http://gmod.org/wiki/GBrowse_syn",pub:{doi:"https://dx.doi.org/10.1002%2F0471250953.bi0912s31",year:2010,citations:32},img:"gbrowse_syn.png",language:["Perl"],platform:["Web"],width:1340,height:428,github_stars:49},{tags:["Comparative","Gene order","Pangenome"],name:"Genome Context Viewer",github:"https://github.com/legumeinfo/gcv",url:"https://www.legumefederation.org/gcv/phytozome_10_2/",pub:{doi:"https://doi.org/10.1093/bioinformatics/btx757",year:2017,citations:25},img:"genome_context_viewer.png",platform:["Web","Silo"],language:["JS","Typescript"],width:2550,height:2010,github_stars:42},{tags:["Comparative"],name:"Genome-plots-processing",img:"genome_plots_processing.png",pub:{doi:"https://dx.doi.org/10.1073%2Fpnas.1603910113",year:2016,citations:225},url:"https://github.com/filip-husnik/genome-plots-processing",language:["Processing"],width:1712,height:1114,github_stars:1},{tags:["Comparative","Ideogram","Dotplot"],name:"Genomicus",url:"https://www.genomicus.biologie.ens.fr/genomicus/",pub:{doi:"10.1093/nar/gkab1091",year:2021,citations:47},img:"genomicus.png",platform:["Web","Silo"],width:1459,height:1438},{tags:["Comparative"],name:"gggenomes",url:"https://github.com/thackl/gggenomes",img:"gggenomes.png",pub:{doi:"http://dx.doi.org/10.1101/2020.11.30.404863",year:2020,citations:4},language:["R"],platform:["Package"],width:3e3,height:1200,github_stars:594},{tags:["Comparative","Linear","Quantitative"],name:"GIVE",github:"https://github.com/Zhong-Lab-UCSD/Genomic-Interactive-Visualization-Engine",img:"give_hic.png",url:"https://zhong-lab-ucsd.github.io/GIVE_homepage/",language:["JS"],pub:{doi:"https://doi.org/10.1186/s13059-018-1465-6",year:2018,citations:16},platform:["Web"],width:1680,height:1050,github_stars:145},{tags:["Comparative"],name:"mauve-viewer",img:"mauve_viewer.png",url:"https://github.com/nconrad/mauve-viewer",language:["JS"],platform:["Web"],width:2112,height:1367,github_stars:42},{tags:["Comparative","Dotplot","Linear"],name:"MCScan (python version)",img:"mcscan_python.png",url:"https://github.com/tanghaibao/jcvi/wiki/MCscan-(Python-version)",github:"https://github.com/tanghaibao/jcvi",note:"Also has 2024 citation here https://onlinelibrary.wiley.com/doi/10.1002/imt2.211",language:["Python"],pub:{doi:"10.1186/s13059-014-0573-1",year:2015,citations:339},platform:["CLI"],width:833,height:257,github_stars:758},{name:"MCScanX",tags:["Comparative","Dotplot","Circular","Linear","Ideogram"],url:"https://github.com/wyp1125/MCScanX",img:"mcscanx.png",pub:{doi:"https://dx.doi.org/10.1093%2Fnar%2Fgkr1293",year:2012,citations:4524},language:["Perl"],platform:["CLI"],width:1424,height:1380,github_stars:230},{tags:["Comparative","Deadlink"],name:"mGSV (multiple genome synteny viewer)",img:"mgsv.jpg",url:"https://github.com/kashmatic/mGSV",pub:{doi:"https://dx.doi.org/10.1186%2F1471-2105-13-190",year:2012,citations:17},platform:["Web","Silo"],width:600,height:322,github_stars:5},{tags:["Comparative"],name:"MizBee",img:"mizbee.jpg",language:["Processing"],url:"http://www.cs.utah.edu/~miriah/mizbee/Overview.html",platform:["Desktop"],pub:{url:"https://ieeexplore.ieee.org/document/5290692",doi:"10.1109/TVCG.2009.167",year:2009,citations:122},width:550,height:355},{tags:["Comparative"],name:"Multiple genome viewer",img:"mgv.png",url:"http://www.informatics.jax.org/mgv/",github:"https://github.com/mgijax/mgv",language:["JS","VueJS"],platform:["Web","Silo"],pub:{doi:"https://doi.org/10.1007/s00335-021-09904-1",year:2021,citations:4},width:512,height:341,github_stars:11},{tags:["Comparative","Gene order"],name:"OMA local synteny browser",img:"oma.png",pub:{doi:"http://doi.org/10.1093/nar/gkaa1007",year:2020,citations:158},url:"https://omabrowser.org/oma/synteny/ADH1A_HUMAN/",platform:["Web","Silo"],width:1848,height:688},{tags:["Comparative","Dotplot","Linear"],name:"pafr",img:"pafr.png",url:"https://github.com/dwinter/pafr",language:["R","ggplot2"],width:672,height:960,github_stars:67},{tags:["Comparative"],name:"Parasight",img:"parasight.png",url:"https://baileylab.brown.edu/parasight/galframe.html",note:"Examples at https://ratparalogy.gs.washington.edu/",pub:{doi:"https://doi.org/10.1038/ng1562",year:2005,citations:745},language:["Perl"],width:570,height:285},{tags:["Comparative"],name:"progressiveMauve viewer",img:"progressive_mauve.png",pub:{doi:"10.1101/gr.2289704",year:2004,citations:3732},github:"https://github.com/koadman/mauve",language:["Java"],url:"http://darlinglab.org/mauve/user-guide/viewer.html",platform:["Desktop"],width:638,height:512,github_stars:25},{tags:["Comparative","Dotplot","Linear"],name:"SyMap",url:"http://www.agcol.arizona.edu/software/symap/",platform:["Desktop"],img:"symap.png",pub:{doi:"https://dx.doi.org/10.1101%2Fgr.5396706",year:2006,citations:158},width:640,height:1131},{tags:["Comparative"],name:"Synima",img:"synima.png",url:"https://github.com/rhysf/Synima",platform:["CLI"],language:["Perl"],pub:{doi:"https://dx.doi.org/10.1186%2Fs12859-017-1939-7",year:2017,citations:37},width:778,height:539,github_stars:60},{tags:["Comparative"],img:"jax_synteny_browser.png",name:"JAX Synteny browser",url:"https://github.com/TheJacksonLaboratory/syntenybrowser",pub:{doi:"10.1007/s00335-019-09821-4",year:2019,citations:18},platform:["Web"],width:1848,height:815,github_stars:4},{tags:["Comparative","Dotplot","Linear","Microbiology"],name:"SynTView",img:"syntview.png",url:"http://hub18.hosting.pasteur.fr/SynTView/documentation/",platform:["Desktop","Web","Flash"],pub:{url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3849071/",doi:"https://dx.doi.org/10.1186%2F1471-2105-14-277",year:2013,citations:23},width:1361,height:1152},{tags:["Comparative","Linear","Dotplot"],name:"SynVisio",img:"synvisio.png",language:["JS","D3"],url:"https://synvisio.github.io/",github:"https://github.com/kiranbandi/synvisio",pub:{doi:"10.1007/978-1-0716-2067-0_16",year:2022,citations:17},width:1920,height:1080,github_stars:82},{tags:["Comparative","Ideogram"],name:"Tripal MapViewer",language:["PHP","JS"],github:"https://github.com/statonlab/tripal_map",img:"tripal_mapviewer.png",pub:{doi:"https://doi.org/10.1093/database/baz100",year:2019,citations:4},width:1e3,height:435,github_stars:1},{tags:["Comparative"],name:"VISTA browser",url:"http://pipeline.lbl.gov/cgi-bin/gateway2",img:"vista.png",platform:["Web","Silo"],pub:{doi:"https://dx.doi.org/10.1093%2Fnar%2Fgkh458",year:2004,citations:1883},width:1222,height:348},{tags:["Comparative"],name:"XMatchView",img:"xmatchview.png",github:"https://github.com/bcgsc/xmatchview",language:["Python"],url:"https://www.bcgsc.ca/resources/software/xmatchview",platform:["Desktop"],pub:{doi:"https://doi.org/10.21105/joss.00497",year:2018,citations:3},width:1e3,height:500,github_stars:36},{tags:["Graph"],name:"AGB assembly graph browser",img:"agb.jpeg",github:"https://github.com/almiheenko/AGB",platform:["Web"],language:["Python"],pub:{url:"https://academic.oup.com/bioinformatics/article/35/18/3476/5306331",doi:"https://doi.org/10.1093/bioinformatics/btz072",year:2019,citations:13},github_stars:80,width:1975,height:1044},{tags:["Graph"],name:"Bandage",img:"bandage.png",url:"https://github.com/rrwick/Bandage/",note:"See also BandageNG https://github.com/asl/BandageNG",language:["C++"],platform:["Desktop"],pub:{url:"https://academic.oup.com/bioinformatics/article/31/20/3350/196114",doi:"https://doi.org/10.1093/bioinformatics/btv383",year:2015,citations:1770},width:440,height:157,github_stars:586},{tags:["Graph"],name:"gfaestus",img:"gfaestus.png",url:"https://github.com/chfi/gfaestus",note:"See demo video displaying GFF3 annotations on graph https://www.youtube.com/watch?v=A-HnKXIrJl4",language:["Rust"],width:679,height:448,github_stars:68},{tags:["SV","CNV","Breakends","Graph"],name:"gGnomes",img:"ggnomesr.png",url:"https://github.com/mskilab/gGnome",language:["R"],platform:["Web"],width:1536,height:1920,github_stars:39},{tags:["SV","CNV","Breakends","Graph"],name:"gGnomes.js",img:"ggnomes.png",url:"https://github.com/mskilab/gGnome.js",language:["JS"],platform:["Web"],width:1222,height:575,github_stars:26},{tags:["Graph"],name:"graphgenomeviewer",img:"graphgenomeviewer.png",url:"https://cmdcolin.github.io/graphgenomeviewer/",github:"https://github.com/cmdcolin/graphgenomeviewer/",language:["JS"],platform:["Web"],width:1222,height:575,github_stars:10},{tags:["Graph","Alignments viewer","Circular","SV"],name:"MoMi-G",img:"momig.png",url:"https://github.com/MoMI-G/MoMI-G",pub:{doi:"10.1186/s12859-019-3145-2",year:2019,citations:21},language:["JS"],platform:["Web"],width:2880,height:1754,github_stars:87},{tags:["Graph"],name:"odgi draw + odgi viz + odgi inject",language:["C++"],github:"https://github.com/pangenome/odgi",img:"odgi.png",pub:{doi:"https://doi.org/10.1101/2021.11.10.467921",year:2021,citations:14},note:"Example from https://github.com/pangenome/pggb, see also gene arrow map https://odgi.readthedocs.io/en/latest/rst/tutorials/injecting_gene_arrows.html",url:"https://odgi.readthedocs.io/en/latest/index.html",width:1389,height:1587,github_stars:194},{tags:["Graph"],name:"sequence tube map",img:"sequence_tube_map.png",url:"https://github.com/vgteam/sequenceTubeMap",pub:{doi:"https://doi.org/10.1093/bioinformatics/btz597",year:2019,citations:32},language:["JS"],platform:["Web"],width:1594,height:422,github_stars:182},{tags:["Text based","MSA"],name:"Alan",img:"alan.png",url:"https://github.com/mpdunne/alan",language:["Bash"],platform:["CLI"],width:1096,height:712,github_stars:115},{tags:["Text based","MSA"],name:"Alv",img:"alv.png",url:"https://github.com/arvestad/alv",pub:{doi:"https://doi.org/10.21105/joss.00955",year:2018,citations:3},platform:["CLI"],language:["Python"],width:2244,height:598,github_stars:107},{tags:["Text based","Alignments viewer"],name:"ASCIIGenome",img:"asciigenome.png",url:"https://github.com/dariober/ASCIIGenome",pub:{doi:"https://doi.org/10.1093/bioinformatics/btx007",year:2017,citations:4},language:["Java"],platform:["CLI"],width:1368,height:632,github_stars:206},{tags:["Text based","Coverage"],name:"Bamcov",img:"bamcov.png",url:"https://github.com/fbreitwieser/bamcov",language:["C"],platform:["CLI"],width:637,height:166,github_stars:99},{tags:["Text based"],name:"BLAST+ (reading -outfmt 0 pairwise output is the original CLI bioinformatics!)",url:"ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/",pub:{doi:"10.1186/1471-2105-10-421",year:2009,citations:14524},language:["C++"],platform:["CLI"]},{tags:["Text based"],name:"Hapviz",url:"https://github.com/ekg/hapviz",img:"hapviz.png",language:["C"],platform:["CLI"],width:870,height:416,github_stars:11},{tags:["Text based"],name:"plotReads",img:"plotreads.png",url:"http://campuspress.yale.edu/knightlab/ruddle/plotreads/",platform:["CLI","Static"],width:2842,height:1634},{name:"pyBamView",tags:["Alignments viewer","Static"],url:"https://mgymrek.github.io/pybamview/",platform:["CLI"],img:"pybamview.png",pub:{doi:"https://doi.org/10.1093/bioinformatics/btu565",year:2014,citations:8},note:"See supplementary info for more figures, supports padded SAM/BAM which is fairly rare",language:["Python"],width:644,height:695},{tags:["Text based"],name:"Rna Alignment Viewers (Colorstock, SScolor, Ratón)",url:"http://biowiki.org/wiki/index.php?title=Rna_Alignment_Viewers&redirect=no",img:"rnaalignment.png",platform:["CLI"],language:["Perl"],pub:{url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7109877/",doi:"https://dx.doi.org/10.1093%2Fbioinformatics%2Fbtm635",year:2008,citations:3},width:544,height:286},{tags:["Text based"],name:"Sam2pairwise",url:"https://github.com/mlafave/sam2pairwise",pub:{doi:"https://doi.org/10.5281/zenodo.11377"},language:["C++"],platform:["CLI"],github_stars:42},{tags:["Text based","Coverage"],name:"Samtools depth visualization",language:["C"],img:"depthplot.png",url:"https://twitter.com/yokofakun/status/1178686978541441025",platform:["CLI","GNUplot"],width:1101,height:446},{tags:["Text based","Alignments viewer"],name:"Samtools tview",url:"http://www.htslib.org/",github:"https://github.com/samtools/samtools",language:["C"],platform:["CLI"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btp352",year:2009,citations:47880},img:"tview.png",width:1290,height:875,github_stars:1626},{tags:["Text based"],name:"SvABA",img:"svaba.png",url:"https://github.com/walaj/svaba#alignmentstxtgz",pub:{doi:"https://doi.org/10.1101/gr.221028.117",year:2018,citations:297},platform:["CLI"],width:5360,height:1587,github_stars:234},{tags:["Text based"],name:"VizAln (from HipSTR)",img:"hipstr.png",url:"https://github.com/tfwillems/HipSTR",pub:{doi:"https://doi.org/10.1038/nmeth.4267",year:2017,citations:219},width:4750,height:2046,github_stars:95},{tags:["Circular"],name:"Anvio",github:"https://github.com/merenlab/anvio",pub:{doi:"https://doi.org/10.7717/peerj.1319",year:2015,citations:1428},url:"https://peerj.com/articles/1319/",language:["Python"],github_stars:441},{tags:["Circular"],name:"BioCircos.js",img:"biocircos.png",language:["JS"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btw041",year:2016,citations:117},url:"http://bioinfo.ibp.ac.cn/biocircos/",platform:["Web"],width:900,height:600},{tags:["Commercial","Circular"],name:"Circa",img:"circa.png",url:"https://omgenomics.com/circa",platform:["Desktop"],width:1158,height:1158},{tags:["Circular","Static"],name:"Circleator",github:"https://github.com/jonathancrabtree/Circleator",img:"circleator.png",url:"http://jonathancrabtree.github.io/Circleator/index.html",pub:{doi:"https://dx.doi.org/10.1093%2Fbioinformatics%2Fbtu505",year:2014,citations:32},language:["Perl"],width:420,height:420,github_stars:47},{tags:["Circular","Static"],name:"circlize",img:"circlize.jpeg",url:"https://github.com/jokergoo/circlize",pub:{doi:"https://doi.org/10.1093/bioinformatics/btu393",year:2014,citations:2857},language:["R"],width:1181,height:1181,github_stars:966},{tags:["Circular","Static"],name:"Circos",img:"circos.png",note:"no official github to my knowledge",url:"http://circos.ca/",pub:{doi:"https://dx.doi.org/10.1101%2Fgr.092759.109",year:2009,citations:8404},language:["Perl"],width:310,height:427,github_stars:68},{tags:["Circular"],name:"CircosJS",language:["JS"],img:"circosjs.png",url:"https://github.com/nicgirault/circosJS",platform:["Web"],width:888,height:905,github_stars:509},{tags:["Circular"],name:"DNAPlotter",img:"dnaplotter.jpg",url:"https://www.sanger.ac.uk/science/tools/dnaplotter",pub:{doi:"http://dx.doi.org/10.1093%2Fbioinformatics%2Fbtn578",year:2008,citations:707},platform:["Desktop"],language:["Java"],width:663,height:577},{tags:["Circular","Linear"],name:"GenomeProjector",url:"https://github.com/gaou/g-language/wiki",github:"https://github.com/gaou/g-language",img:"glanguage.jpg",platform:["Desktop"],language:["Perl"],pub:{url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2636772/",doi:"https://dx.doi.org/10.1186%2F1471-2105-10-31",year:2009,citations:32},width:1024,height:768,github_stars:1},{tags:["Circular","Static","Comparative"],name:"JupiterPlot",img:"jupiterplot.png",url:"https://github.com/JustinChu/JupiterPlot",pub:{doi:"https://doi.org/10.5281/zenodo.1241235"},language:["Perl"],width:324,height:324,github_stars:69},{tags:["Static"],name:"mummer2circos",img:"mummer2circos.png",url:"https://github.com/metagenlab/mummer2circos",language:["Python"],width:3e3,height:3e3,github_stars:100},{tags:["Circular","Static"],name:"OGDRAW",img:"ogdraw.png",url:"https://chlorobox.mpimp-golm.mpg.de/OGDraw.html",platform:["Web"],pub:{doi:"https://doi.org/10.1093/nar/gkz238",year:2019,citations:1297},width:1250,height:1250},{tags:["Synthetic biology"],img:"seqviz.png",name:"seqviz",url:"https://github.com/Lattice-Automation/seqviz#viewer",platform:["Web"],width:1848,height:633,github_stars:244},{tags:["Synthetic biology"],img:"aplasmideditor.png",twitter:"https://twitter.com/apeplasmid?lang=en",name:"ApE (a plasmid editor)",url:"https://jorgensen.biology.utah.edu/wayned/ape/",platform:["Desktop"],width:828,height:1725},{tags:["Historical","Deadlink","Gene structure","Annotation","Comparative"],name:"Apollo",img:"apollo.jpg",url:"https://web.archive.org/web/20060927154956/http://www.fruitfly.org/annot/apollo/",note:"URL is an archive.org link",platform:["Desktop"],language:["Java"],pub:{url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC151184/",doi:"https://dx.doi.org/10.1186%2Fgb-2002-3-12-research0082",year:2002,citations:304},width:600,height:247},{tags:["Gene structure","Annotation","JBrowse integration"],img:"webapollo.jpg",name:"Apollo aka WebApollo",github:"https://github.com/gmod/apollo",url:"https://genomearchitect.readthedocs.io/en/latest/",platform:["Web"],pub:{doi:"https://doi.org/10.1186/gb-2013-14-8-r93",year:2013,citations:312},language:["Java","Groovy","JS"],width:685,height:384,github_stars:128},{tags:["Synthetic biology"],name:"Chopchop",img:"chopchop.png",url:"http://chopchop.cbu.uib.no/",pub:{doi:"https://doi.org/10.1093/nar/gkz365",year:2019,citations:1256},width:1378,height:575},{tags:["Alignments viewer"],name:"Chromatic",url:"https://chromatic.nci.nih.gov/",img:"chromatic.png",platform:["Web"],language:["WASM"],pub:{url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5987889/",doi:"https://dx.doi.org/10.1177%2F1176935118771972",year:2018,citations:4},width:1019,height:673},{tags:["CNV","Annotation","Deadlink"],name:"cnvCurator",url:"http://www.acsu.buffalo.edu/~lm69/cnvCurator",platform:["Desktop"],img:"cnvcurator.png",interactive:["true"],language:["Java"],pub:{url:"http://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-015-0766-y",doi:"10.1186/s12859-015-0766-y",year:2015,citations:2},width:778,height:476},{tags:["Gene structure","Coverage","Variation"],interactive:["true"],name:"D3GB",github:"https://github.com/BioinfoUSAL/D3GB",note:"Live link http://d3gb.usal.es/docs/HumanGenomeBrowser/index.html?r=12:121113963-121213963 doesn't work anymore",img:"d3gb.png",url:"http://d3gb.usal.es/",language:["JS","D3","R"],pub:{doi:"https://doi.org/10.1089/cmb.2016.0213",year:2017,citations:14},platform:["Web"],width:970,height:360,github_stars:0},{tags:["Exotic"],img:"dnaskittle.png",github:"https://github.com/josiahseaman/skittle",language:["Python","JS"],name:"DNASkittle",url:"https://www.dnaskittle.com/",pub:{doi:"10.1186/1471-2105-10-452",year:2009,citations:7},platform:["Web"],width:1194,height:441,github_stars:7},{tags:["Epigenomics"],name:"EaSeq",img:"easeq.png",url:"https://easeq.net/screenshots/",platform:["Desktop"],pub:{url:"https://www.nature.com/articles/nsmb.3180",doi:"https://doi.org/10.1038/nsmb.3180",year:2016,citations:232},width:243,height:312},{tags:["Exotic"],name:"FluentDNA",img:"fluentdna.jpeg",url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7203487/",pub:{doi:"https://dx.doi.org/10.3389%2Ffgene.2020.00292",year:2020,citations:3},platform:["Web"],width:256,height:256},{tags:["Alignments viewer","Linear"],name:"Gambit",img:"gambit.png",url:"http://labsergen.langebio.cinvestav.mx/bioinformatics/jacob/?p=473",platform:["Desktop"],width:1024,height:671},{tags:["SV","Alignments viewer"],name:"Ribbon",language:["JS"],url:"http://genomeribbon.com/",github:"https://github.com/MariaNattestad/ribbon",img:"genomeribbon.png",platform:["Web"],interactive:["true"],pub:{url:"https://academic.oup.com/bioinformatics/advance-article-abstract/doi/10.1093/bioinformatics/btaa680/5885081?redirectedFrom=fulltext",doi:"https://doi.org/10.1093/bioinformatics/btaa680",year:2020,citations:49},width:720,height:405,github_stars:268},{tags:["CNV","GWAS","Linear","MSA"],name:"GenomeSpy",pub:{doi:"https://doi.org/10.1093/gigascience/giae040",year:2024,citations:0},img:"genomespy.png",github:"https://github.com/genome-spy/genome-spy",url:"https://genomespy.app/",language:["JS","WebGL"],platform:["Web"],interactive:["true"],width:738,height:800,github_stars:176},{tags:["General","Linear"],name:"Genoverse",url:"https://github.com/wtsi-web/Genoverse",language:["JS"],img:"genoverse.png",platform:["Web"],width:1194,height:476,github_stars:108},{tags:["Linear","Population"],name:"Gnomad browser",url:"https://github.com/macarthur-lab/gnomadjs",language:["JS"],pub:{doi:"https://doi.org/10.1038/s41586-020-2308-7",year:2020,citations:6588},img:"gnomad.png",twitter:"https://twitter.com/gnomad_project",platform:["Web","Silo"],width:1081,height:599,github_stars:81},{tags:["SV","Linear"],name:"Gremlin",img:"gremlin.png",url:"http://compbio.cs.brown.edu/projects/gremlin/",pub:{doi:"https://doi.org/10.1109/tvcg.2010.163",year:2010,citations:23},platform:["Web"],width:1072,height:745},{tags:["Expression","Linear","Linkage disequilibrium"],img:"gtex_locus.png",name:"GTEX Locus browser",pub:{doi:"https://doi.org/10.1126/science.aaz1776",year:2020,citations:2821},url:"https://gtexportal.org/home/locusBrowserPage/ACTN3",platform:["Web"],width:1194,height:767},{tags:["Population","Linkage disequilibrium","GWAS"],name:"GWAS catalog browser",img:"gwascatalog.png",pub:{doi:"https://doi.org/10.1093/nar/gky1120",year:2018,citations:3312},url:"https://www.ebi.ac.uk/gwas/variants/rs1558902",platform:["Web"],twitter:"https://twitter.com/gwascatalog?lang=en",width:748,height:533},{tags:["Alignments viewer","Assembly QC"],name:"Hawkeye",github:"https://github.com/peterhj/amos",language:["C++"],img:"hawkeye.png",pub:{url:"https://genomebiology.biomedcentral.com/articles/10.1186/gb-2007-8-3-r34",doi:"10.1186/gb-2007-8-3-r34",year:2007,citations:55},platform:["Desktop"],width:1200,height:765,github_stars:0},{tags:["Population","GWAS"],name:"Human genome dating",url:"https://human.genome.dating/region/chr1_13250000",language:["JS"],platform:["Web"],img:"human_genome_dating.png",pub:{doi:"https://doi.org/10.1371/journal.pbio.3000586",year:2020,citations:149},note:"made with vega/d3",width:1746,height:1352},{tags:["Assembly QC","Graph"],name:"Icarus QUAST",img:"icarus.png",url:"http://quast.sourceforge.net/icarus.html",github:"https://github.com/ablab/quast",platform:["Web"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btw379",year:2016,citations:115},width:1504,height:797,github_stars:404},{tags:["SV","Alignments viewer"],name:"InGAP-SV",img:"ingap_sv.png",language:["Java"],url:"http://ingap.sourceforge.net/",pub:{doi:"10.1093/nar/gkr506",year:2011,citations:67},platform:["Desktop"],width:417,height:510},{tags:["SV","Introgression"],name:"Introgression browser",img:"introgression_browser.png",url:"https://git.wageningenur.nl/aflit001/ibrowser",pub:{url:"https://onlinelibrary.wiley.com/doi/pdf/10.1111/tpj.12800",doi:"10.1111/tpj.12800",year:2015,citations:17},language:["Python"],platform:["Web"],width:619,height:359},{tags:["Microbiology","Circular","Linear"],name:"IslandViewer and IslandPlot",url:"https://bl.ocks.org/lairdm/c6c235dbfa6e6ee61565",img:"islandplot.png",language:["JS","D3"],platform:["Web"],github:"https://github.com/lairdm/islandplot",pub:{doi:"https://doi.org/10.1093/nar/gkv401",year:2015,citations:253},note:"web app using it here https://pathogenomics.sfu.ca/islandviewer uses D3, SVG",width:937,height:374,github_stars:33},{tags:["Alignments viewer"],name:"MagicViewer",language:["Java"],img:"magicviewer.jpeg",url:"http://bioinformatics.zj.cn/magicviewer/",platform:["Desktop"],pub:{url:"https://academic.oup.com/nar/article/38/suppl_2/W732/1096410",doi:"https://doi.org/10.1093/nar/gkq302",year:2010,citations:40},width:1280,height:960},{tags:["GWAS","Population"],name:"Locuszoom",github:"https://github.com/statgen/locuszoom",img:"locuszoom.png",url:"http://locuszoom.org/",language:["R","Python"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btq419",year:2010,citations:2241},platform:["Web"],width:488,height:310,github_stars:155},{name:"Locuszoom.js",url:"http://locuszoom.org/locuszoomjs.php",github:"https://github.com/statgen/locuszoom",platform:["Web"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btab186",year:2021,citations:182},github_stars:155},{tags:["Alignments viewer"],name:"LookSeq",github:"https://github.com/magnusmanske/lookseq",img:"lookseq.png",url:"https://www.sanger.ac.uk/tool/lookseq/",pub:{doi:"10.1101/gr.093443.109",year:2009,citations:51},platform:["Web"],width:1918,height:1049,github_stars:5},{tags:["Population"],name:"Panoptes",img:"panoptes.png",github:"https://github.com/cggh/panoptes",language:["Python","JS"],url:"https://www.malariagen.net/apps/ag1000g/phase1-AR3/index.html",pub:{doi:"https://doi.org/10.1093/bioinformatics/btx410",year:2017,citations:6},width:1378,height:476,github_stars:36},{tags:["Alignments viewer"],name:"MapView",img:"mapview.jpg",url:"https://sites.google.com/site/wjwdavy/",platform:["Desktop"],note:"links in original paper are dead, but URL provided here works",pub:{url:"https://academic.oup.com/bioinformatics/article/25/12/1554/193807",doi:"https://doi.org/10.1093/bioinformatics/btp255",year:2009,citations:66},width:500,height:397},{tags:["Alignments viewer"],name:"NGB",img:"ngb.png",url:"https://github.com/epam/NGB",platform:["Web"],language:["Java"],width:1920,height:921,github_stars:161},{tags:["Coverage"],name:"SeqCover",img:"seqcover.png",github:"https://github.com/brentp/seqcover",platform:["Web"],url:"https://brentp.github.io/seqcover/#gene=AIFM1",width:1378,height:476,github_stars:50},{tags:["Special-purpose"],name:"SEQing",img:"seqing.png",url:"https://github.com/malewins/SEQing",pub:{doi:"https://doi.org/10.1186/s12859-020-3434-9",year:2020,citations:9},language:["Python"],platform:["Web"],width:1169,height:950,github_stars:8},{tags:["CNV"],name:"SFARI",url:"https://gene.sfari.org/database/human-gene/",pub:{doi:"https://doi.org/10.1242/dmm.005439",year:2010,citations:241},img:"sfari.jpg",platform:["Web","Silo"],width:745,height:367},{tags:["CNV"],name:"SNPitty",url:"https://bitbucket.org/ccbc/snpitty/src/master/",language:["R"],img:"snpitty.jpg",platform:["Web"],pub:{url:"https://www.jmdjournal.org/article/S1525-1578(17)30166-6/fulltext",doi:"https://doi.org/10.1016/j.jmoldx.2017.11.011",year:2018,citations:14},width:753,height:361},{tags:["MSA","Deadlink"],name:"SNIPViz",github:"https://github.com/yeastrc/snipviz",pub:{doi:"https://doi.org/10.1186/1756-0500-7-468",year:2014,citations:7},url:"http://www.yeastrc.org/snipviz/4.HTML_Config_retrieve_newick_and_fasta_from_server/snip_viz_HTML_config_with_newick_clustering.html",img:"snpviz.png",platform:["Web"],width:1377,height:519,github_stars:19},{tags:["SV","CNV"],name:"SplitThreader",img:"splitthreader.png",github:"https://github.com/MariaNattestad/SplitThreader",language:["JS","PHP"],url:"http://splitthreader.com/",pub:{doi:"https://doi.org/10.1101/087981",year:2016,citations:11},platform:["Web"],width:2698,height:1778,github_stars:68},{tags:["Alignments viewer","Assembly QC"],name:"Staden",language:["C","Tcl/Tk"],img:"staden.png",url:"https://sourceforge.net/projects/staden/",pub:{doi:"https://doi.org/10.1093/bioinformatics/btq268",year:2010,citations:192},platform:["Desktop"],width:640,height:939},{tags:["Pangenome"],name:"TASUKE",img:"tasuke.png",url:"https://ricegenome.dna.affrc.go.jp/",note:"info about multi-genome-browser https://tasuke.dna.affrc.go.jp/",pub:{doi:"https://doi.org/10.1093/dnares/dsz022",year:2019,citations:25},platform:["Web"],width:1377,height:572},{tags:["Transposons","Repeats","Deadlink"],language:["Perl"],platform:["Web","CGI","Server"],name:"TE-nest",img:"tenest.jpg",github:"https://github.com/cmdcolin/TEnest",pub:{doi:"https://doi.org/10.1104/pp.107.110353",year:2007,citations:56},note:"this was an online tool that does not appear to exist anymore see https://web.archive.org/web/20170712104431/http://www.plantgdb.org/tool/TEnest/. the github link is re-hosted source code also downloaded from archive.org",width:637,height:847,github_stars:3},{tags:["Transposons","Repeats"],name:"Transposcope",github:"https://github.com/FenyoLab/transposcope",img:"transposcope.png",pub:{doi:"https://doi.org/10.1093/bioinformatics/btaa244",year:2020,citations:0},language:["JS"],platform:["Web"],width:1374,height:510,github_stars:9},{tags:["Special-purpose"],name:"UGENE",language:["C++"],img:"ugene.png",url:"http://ugene.net/",github:"https://github.com/ugeneunipro/ugene",platform:["Desktop"],pub:{doi:"10.1093/bioinformatics/bts091",year:2012,citations:2139},width:796,height:602,github_stars:213},{tags:["Annotation"],name:"Varsome",img:"varsome.png",pub:{doi:"https://doi.org/10.1093/bioinformatics/bty897",year:2018,citations:1213},url:"https://varsome.com/security-validation/?next=/variant/hg19/NM_000088.3(COL1A1):c.658C%3ET",platform:["Web","Silo"],width:1378,height:572},{tags:["Splicing"],name:"Vials",pub:{doi:"10.1109/TVCG.2015.2467911",year:2016,citations:20},url:"http://vials.io/",github:"https://github.com/Caleydo/vials",platform:["Web"],github_stars:13},{tags:["Quantitative"],name:"wasm bigwig demo browser",img:"wasm_bigwig.png",url:"https://shk656461.github.io/index.html",language:["WASM"],platform:["Web"],width:977,height:279},{tags:["General"],name:"BasePlayer",url:"https://baseplayer.fi/",github:"https://github.com/rkataine/BasePlayer",img:"baseplayer.png",platform:["Desktop"],language:["Java"],pub:{doi:"https://doi.org/10.1038/s41596-018-0052-3",year:2018,citations:29},width:858,height:486,github_stars:4},{tags:["General","Historical","Alignments viewer"],img:"celera.jpeg",name:"Celera genome browser",url:"https://www.csee.umbc.edu/~turner/presentations/bvw2002/sld009.htm",platform:["Desktop"],width:800,height:600},{tags:["General","Alignments viewer"],name:"IGB",img:"igb.jpg",url:"https://bioviz.org/",platform:["Desktop"],language:["Java"],pub:{url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4937187/",doi:"https://dx.doi.org/10.1093%2Fbioinformatics%2Fbtw069",year:2016,citations:322},width:800,height:398},{tags:["General","Alignments viewer","SV","Quantitative"],name:"IGV",img:"igv.jpg",language:["Java"],url:"https://igv.org/",github:"https://github.com/igvteam/igv",platform:["Desktop"],pub:{doi:"https://dx.doi.org/10.1038%2Fnbt.1754",year:2011,citations:11670},width:1124,height:1280,github_stars:645},{tags:["General","SV","Alignments viewer"],name:"Savant",img:"savant.jpg",github:"https://github.com/compbio-UofT/savant",language:["Java"],url:"http://bioinformatics-ca.github.io/savant_genome_browser_lab_2015/",platform:["Desktop"],pub:{url:"https://pubmed.ncbi.nlm.nih.gov/22638571/",doi:"https://doi.org/10.1093/nar/gks427",year:2012,citations:44},width:800,height:561,github_stars:12},{tags:["General","Alignments viewer"],name:"Tablet",github:"https://github.com/cropgeeks/tablet",img:"tablet.jpeg",language:["Java"],url:"https://ics.hutton.ac.uk/tablet/",pub:{doi:"https://doi.org/10.1093/bib/bbs012",year:2012,citations:791},platform:["Desktop"],width:520,height:408,github_stars:37},{tags:["Exotic","GWAS"],name:"BigTop",language:["JS"],img:"bigtop.png",url:"https://blog.dnanexus.com/2019-05-21-bigtop-data-visualization/",github:"https://github.com/dnanexus/bigtop",platform:["Web"],width:537,height:310,github_stars:5},{tags:["Exotic"],name:"Cylindrical alignment app",github:"https://github.com/lesfoster/cylindrical-alignment-app",img:"cylindrical_alignment_viewer.png",url:"https://sourceforge.net/projects/cylindrical-alignment-app/",alt_url:"https://sourceforge.net/projects/cyl-viewer/",platform:["Desktop"],width:1920,height:1080,github_stars:0},{tags:["General","Alignments viewer"],name:"Biodalliance",github:"https://github.com/dasmoth/dalliance",url:"http://www.biodalliance.org/",platform:["Web"],img:"biodalliance.png",pub:{doi:"http://doi.org/10.1093/bioinformatics/btr020",year:2011,citations:89},language:["JS"],width:2002,height:766,github_stars:227},{tags:["General","Comparative"],name:"Ensembl genome browser",img:"ensembl.png",pub:{doi:"https://doi.org/10.1093/nar/30.1.38",year:2002,citations:1162},url:"https://useast.ensembl.org/Homo_sapiens/Location/View?r=17:63992802-64038237",platform:["Web","Silo"],width:1121,height:583},{tags:["General","Comparative"],img:"2020ensembl.png",name:"Ensembl genome browser 2020 edition",url:"http://2020.ensembl.org/",platform:["Web"],width:1378,height:648},{tags:["General"],name:"GBrowse 2",github:"https://github.com/GMOD/GBrowse",img:"gbrowse.png",url:"http://gmod.org/wiki/GBrowse",language:["Perl"],platform:["Web"],pub:{doi:"https://dx.doi.org/10.1093%2Fbib%2Fbbt001",year:2013,citations:105},note:"Original gbrowse paper https://doi.org/10.1101/gr.403602",width:800,height:552,github_stars:49},{name:"GenomeMaps",img:"genomemaps.jpg",github:"https://github.com/opencb/genome-maps",url:"http://www.genomemaps.org/",pub:{url:"https://academic.oup.com/nar/article/41/W1/W41/1113984",doi:"https://doi.org/10.1093/nar/gkt530",year:2013,citations:25},tags:["General","Deadlink"],language:["JS"],width:489,height:640,github_stars:39},{tags:["General","Epigenomics","Higlass integration","Linear","Circular","Comparative","Quantitative"],name:"Gosling",img:"gosling.png",github:"https://github.com/gosling-lang/gosling.js",language:["JS","WebGL","Typescript","React"],platform:["Web"],url:"https://gosling.js.org/",pub:{doi:"10.1109/TVCG.2021.3114876",year:2022,citations:27},width:1549,height:777,github_stars:166},{tags:["General","Epigenomics","Hi-C"],name:"HiGlass",img:"higlass.png",github:"https://github.com/higlass/higlass",language:["JS","WebGL"],pub:{doi:"10.1186/s13059-018-1486-1",year:2018,citations:1198},url:"https://higlass.io",platform:["Web","Server"],width:1250,height:956,github_stars:311},{tags:["General","Alignments viewer"],name:"IGV.js",language:["JS"],img:"igvjs.png",pub:{doi:"https://doi.org/10.1101/2020.05.03.075499",year:2020,citations:48},url:"https://github.com/igvteam/igv.js/",platform:["Web"],width:1116,height:605,github_stars:643},{tags:["General","Alignments viewer","SV","Quantitative","Gene structure"],name:"JBrowse",note:"See also JBrowse plugin registry https://gmod.github.io/jbrowse-registry. Runs on the web or as a desktop app using Electron",img:"jbrowse.png",url:"http://jbrowse.org/jbrowse1.html",github:"https://github.com/GMOD/jbrowse",language:["JS"],platform:["Web","Desktop"],pub:{doi:"https://doi.org/10.1186/s13059-016-0924-1",year:2016,citations:643},width:2120,height:1310,github_stars:464},{tags:["General","SV","Comparative","Dotplot","Circular","Alignments viewer","Quantitative","Hi-C"],name:"JBrowse 2",note:"See gallery for more examples https://jbrowse.org/jb2/gallery",img:"jbrowse2.png",github:"https://github.com/GMOD/jbrowse-components",url:"http://jbrowse.org/jb2",language:["JS","Typescript","React"],pub:{doi:"https://doi.org/10.1101/2022.07.28.501447",year:2022,citations:15},platform:["Web"],width:1848,height:1964,github_stars:208},{tags:["General","SV","Alignments viewer","Comparative"],name:"Kero-BROWSE",img:"kerobrowse.png",url:"https://kero.hgc.jp/examples/CLCL/hg38/index.html",github:"https://github.com/DBKERO/genome_browser",platform:["Web"],pub:{doi:"https://doi.org/10.1093/nar/gkx1001",year:2017,citations:48},language:["JS"],note:"Also can visualize basic synteny, see tracks e.g. https://kero.hgc.jp/tool/keyword.html#kero:chrX:153,724,868-153,744,762 human vs chimp",width:602,height:397,github_stars:7},{tags:["General","SV","Epigenomics","Gene structure","Splicing"],name:"NCBI Genome Data Viewer",img:"gdv.png",url:"https://www.ncbi.nlm.nih.gov/genome/gdv/",pub:{doi:"10.1101/gr.266932.120",year:2020,citations:124},platform:["Web","Silo"],width:1848,height:697},{tags:["General"],name:"Nucleome browser",img:"nucleome.png",url:"https://vis.nucleome.org/v1/main.html",pub:{doi:"https://doi.org/10.1101/2022.02.21.481225",year:2022,citations:1},language:["JS"],twitter:"https://twitter.com/4DNucleome",note:"github at https://github.com/nucleome",platform:["Web"],width:1377,height:471},{tags:["General","SV"],name:"Pileup.js",pub:{doi:"https://doi.org/10.1093/bioinformatics/btw167",year:2016,citations:18},img:"pileupjs.png",url:"https://github.com/hammerlab/pileup.js",language:["JS"],platform:["Web"],width:1086,height:597,github_stars:277},{tags:["General"],name:"Trackster",img:"trackster.png",pub:{doi:"https://doi.org/10.1038/nbt.2404",year:2012,citations:23},url:"https://galaxyproject.org/learn/visualization/",platform:["Web"],width:472,height:238},{tags:["General"],img:"ucsc.jpg",name:"UCSC genome browser",url:"https://genome.ucsc.edu/",github:"https://github.com/ucscGenomeBrowser/kent",pub:{doi:"10.1101/gr.229102",year:2002,citations:5749},platform:["Web","Silo"],width:512,height:131,github_stars:219},{tags:["General","Quantitative","Epigenomics","Deadlink"],name:"Valis browser",url:"https://valis.bio/",img:"valis.png",github:"https://github.com/VALIS-software/valis-hpgv",language:["JS","WebGL"],platform:["Web"],width:2836,height:1444,github_stars:14},{tags:["General","Epigenomics","Hi-C","Comparative"],name:"WashU epigenomics browser",github:"https://github.com/lidaof/eg-react",img:"washu.png",url:"https://epigenomegateway.wustl.edu/",pub:{doi:"https://doi.org/10.1093/nar/gkz348",year:2019,citations:235},language:["JS","React"],note:"The ReactJS is a redesign, there is also a legacy version. Note also, there are comparative features https://www.biorxiv.org/content/10.1101/2022.11.29.518374v1",platform:["Web"],width:1852,height:849,github_stars:68},{tags:["General"],name:"Zenbu",img:"zenbu.png",url:"http://fantom.gsc.riken.jp/zenbu/",pub:{doi:"https://doi.org/10.1038/nbt.2840",year:2014,citations:145},platform:["Web"],width:640,height:416},{name:"cgplot",img:"cgplot.png",url:"https://github.com/dfguan/cgplot",language:["Python"],tags:["Static","Dotplot","Comparative"],width:3e3,height:3e3,github_stars:9},{tags:["Dotplot","Comparative"],name:"D-GENIES",github:"https://github.com/genotoul-bioinfo/dgenies",pub:{doi:"https://dx.doi.org/10.7717%2Fpeerj.4958",year:2018,citations:474},url:"http://dgenies.toulouse.inra.fr/",img:"dgenies.png",language:["JS","Python","D3"],platform:["Web"],width:500,height:500,github_stars:98},{tags:["Dotplot","Static","Comparative"],name:"Delly-maze",img:"maze.png",url:"https://github.com/dellytools/maze",note:"see also https://www.gear-genomics.com/maze/",pub:{doi:"https://dx.doi.org/10.1093%2Fbioinformatics%2Fbts378",year:2012,citations:1796},language:["Python"],width:2560,height:1304,github_stars:9},{tags:["Dotplot","Static","Comparative"],name:"Discoplot",img:"discoplot.png",url:"https://github.com/mjsull/DiscoPlot",pub:{doi:"https://doi.org/10.7287/peerj.preprints.1038v1",year:2015,citations:0},language:["Python"],width:1500,height:1564,github_stars:14},{tags:["Dotplot","Comparative"],name:"Dot",language:["JS","Python"],url:"https://dot.sandbox.bio/",github:"https://github.com/MariaNattestad/dot",img:"dot.png",platform:["Web"],note:"Python data preparation script",width:2500,height:1324,github_stars:33},{tags:["Dotplot"],name:"Dotlet",img:"dotlet.png",github:"https://github.com/sib-swiss/dotlet",pub:{doi:"https://doi.org/10.1093/bioinformatics/16.2.178",year:2e3,citations:78},language:["JS","React"],platform:["Web"],url:"https://dotlet.vital-it.ch/",note:"The original publication was 2000 but updated ~2020 with reactjs",width:1377,height:640,github_stars:4},{tags:["Dotplot","Deadlink"],name:"Dotplot (chirimoyo)",url:"https://chirimoyo.ac.uma.es/bitlab/portfolio/dotplot/",platform:["Web"]},{tags:["Dotplot"],name:"iLambda/Dotplot",url:"https://github.com/iLambda/dotplot",platform:["Web"],github_stars:1},{tags:["Dotplot","Comparative"],name:"dotPlotly",url:"https://github.com/tpoorten/dotPlotly/",img:"dotplotly.png",language:["R","Shiny"],platform:["Web"],width:700,height:450,github_stars:191},{tags:["Dotplot"],name:"Dottup",img:"dottup.png",url:"https://www.bioinformatics.nl/cgi-bin/emboss/help/dottup",note:"also seen here http://eichlerlab.gs.washington.edu/pubs/chm1-structural-variation/data/GRCh37/heterochromatic_extensions.pdf",width:539,height:454},{tags:["Dotplot"],name:"FlexiDot",img:"flexidot.png",url:"https://github.com/molbio-dresden/flexidot",pub:{doi:"https://doi.org/10.1093/bioinformatics/bty395",year:2018,citations:63},language:["Python"],platform:["CLI"],width:759,height:564,github_stars:90},{tags:["Dotplot","Comparative"],name:"Gepard",github:"https://github.com/univieCUBE/gepard",url:"http://cube.univie.ac.at/gepard",language:["Java"],img:"gepard.jpeg",platform:["Desktop"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btm039",year:2007,citations:591},width:1088,height:856,github_stars:61},{tags:["Dotplot","Comparative"],name:"Jdot",url:"https://github.com/LyonsLab/jdot",img:"jdot.png",language:["JS"],platform:["Web"],width:689,height:320,github_stars:1},{tags:["Dotplot","Comparative"],name:"last-dotplot",img:"last_dotplot.png",language:["Python","C++"],url:"https://gitlab.com/mcfrith/last",platform:["CLI","Web-server"],width:493,height:421},{tags:["Dotplot","Static","Comparative"],name:"mcutils",img:"mcutils_dotplot.jpeg",language:["R","C++"],url:"https://github.com/mchaisso/mcutils",note:"https://twitter.com/mjpchaisson/status/1040363992206569472",width:470,height:404,github_stars:12},{tags:["Dotplot","Static","Comparative"],name:"Minidot",img:"minidot.png",url:"https://github.com/thackl/minidot",language:["R"],width:1179,height:683,github_stars:74},{tags:["Dotplot","Comparative"],name:"Mummer-idotplot",url:"https://github.com/ryought/mummer-idotplot",language:["JS","Python"],platform:["Web","CLI"],github_stars:25},{tags:["Dotplot","Static","Comparative"],name:"Mummerplot",img:"mummerplot.png",github:"https://github.com/mummer4/mummer",url:"http://mummer.sourceforge.net/",pub:{doi:"10.1186/gb-2004-5-2-r12",year:2004,citations:4464},language:["GNUPlot"],width:3300,height:2550,github_stars:464},{tags:["Dotplot","Comparative"],img:"mummerplot_ggplot2.png",name:"ggplot2 mummerplot",url:"https://jmonlong.github.io/Hippocamplus/2017/09/19/mummerplots-with-ggplot2/",language:["R"],width:1920,height:1536},{tags:["Dotplot","Comparative"],name:"Redotable",img:"redotable.png",url:"https://github.com/s-andrews/redotable",language:["Java"],platform:["Desktop"],width:606,height:585,github_stars:10},{tags:["Dotplot","Comparative","Static"],name:"syntenyPlotByR",img:"synteny_plot_by_r.png",url:"https://github.com/shingocat/syntenyPlotByR",language:["R"],width:800,height:800,github_stars:19},{tags:["Epigenomics"],name:"Chip Monk",img:"chipmonk.png",url:"http://www.bioinformatics.babraham.ac.uk/projects/chipmonk/",note:"Also see SeqMonk https://www.bioinformatics.babraham.ac.uk/projects/seqmonk/",pub:{doi:"10.1186/1752-0509-1-S1-P80",year:2007,citations:3},language:["Java"],platform:["Desktop"],width:800,height:600},{tags:["Epigenomics","CNV"],name:"Chipster",img:"chipster.jpg",github:"https://github.com/chipster/chipster",language:["Java"],note:"Copy number tutorial https://chipster.csc.fi/manual/cn-tutorial.pdf",url:"https://chipster.csc.fi/",pub:{doi:"10.1186/1471-2164-12-507",year:2011,citations:286},platform:["Desktop"],width:1201,height:913,github_stars:33},{tags:["Epigenomics"],name:"cisGenome Browser",img:"cisgenome.png",pub:{doi:"https://doi.org/10.1093/bioinformatics/btq286",year:2010,citations:38},url:"https://jhui2014.github.io/browser/screenshots.html",language:["C"],platform:["Desktop"],width:1022,height:857},{tags:["Epigenomics","Higlass integration"],name:"Epilogos",language:["Python"],img:"epilogos.jpg",github:"https://github.com/meuleman/epilogos",url:"https://epilogos.altius.org/",platform:["Web"],width:2048,height:868,github_stars:41},{tags:["Epigenomics"],name:"Epiviz",img:"epiviz.png",github:"https://github.com/epiviz/epiviz",url:"https://epiviz.github.io/",platform:["Web"],language:["JS","R","D3"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btaa591",year:2020,citations:5},width:1377,height:507,github_stars:68},{tags:["Epigenomics","Hi-C","Higlass integration"],name:"HiPiler",language:["JS"],img:"hipiler.png",github:"https://github.com/flekschas/hipiler",pub:{doi:"10.1109/TVCG.2017.2745978",year:2018,citations:34},platform:["Web"],url:"http://hipiler.higlass.io",width:1116,height:507,github_stars:13},{tags:["Epigenomics","Hi-C"],name:"Juicebox",img:"juicebox.jpg",url:"https://github.com/aidenlab/Juicebox",language:["Java"],platform:["Desktop"],pub:{url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5596920/",doi:"https://dx.doi.org/10.1016%2Fj.cels.2015.07.012",year:2016,citations:1405},width:765,height:674,github_stars:244},{tags:["Epigenomics","Hi-C"],name:"Juicebox.js",github:"https://github.com/igvteam/juicebox.js",img:"juiceboxjs.jpg",url:"http://www.igv.org/doc/juiceboxjs.html",language:["JS"],platform:["Web"],pub:{url:"https://www.cell.com/fulltext/S2405-4712(18)30001-2",doi:"https://doi.org/10.1016/j.cels.2018.01.001",year:2018,citations:324},width:761,height:467,github_stars:19},{tags:["Epigenomics","Higlass integration"],name:"Peax",img:"peax.png",language:["JS"],pub:{doi:"https://doi.org/10.1111/cgf.13971",year:2020,citations:23},platform:["Web"],url:"https://github.com/Novartis/peax",width:640,height:427,github_stars:68},{tags:["Ideogram"],name:"eweitz/Ideogram",img:"eweitz_ideogram.png",url:"https://github.com/eweitz/ideogram",language:["JS"],platform:["Web"],width:1116,height:507,github_stars:294},{tags:["Ideogram","Static"],name:"Ideogram",img:"rcollins_ideogram.png",url:"https://github.com/RCollins13/HumanIdiogramLibrary",pub:{doi:"https://doi.org/10.5281/zenodo.1210135"},language:["SVG"],width:5113,height:1680,github_stars:92},{tags:["Ideogram","Static"],name:"Ideoplot",url:"https://github.com/mchaisso/Ideoplot",language:["R"],github_stars:12},{tags:["Ideogram","Static"],name:"karyoploteR",img:"karyoploter.png",url:"https://github.com/bernatgel/karyoploteR",pub:{doi:"https://dx.doi.org/10.1093%2Fbioinformatics%2Fbtx346",year:2017,citations:539},language:["R"],width:2329,height:1e3,github_stars:298},{tags:["Ideogram"],name:"KaryotypeSVG",url:"https://github.com/andreasprlic/karyotypeSVG",img:"karyotypesvg.png",language:["JS","SVG"],platform:["Web"],width:1814,height:280,github_stars:6},{tags:["Ideogram"],name:"NCBI Genome Decoration",note:"Was located at https://www.ncbi.nlm.nih.gov/genome/tools/gdp/, sunsetted in 2023",img:"ncbi_genome_decoration.png",platform:["Web","Form","Silo","Historical"],width:456,height:306},{tags:["Ideogram"],name:"UCSC Genome Graphs",img:"ucsc_genome_graph.png",url:"http://genome.ucsc.edu/cgi-bin/hgGenome",github:"https://github.com/ucscGenomeBrowser/kent",pub:{doi:"10.1101/gr.229102",year:2002,citations:5749},platform:["Web","Form","Silo"],width:950,height:546,github_stars:219},{tags:["Mobile app","Alignments viewer"],name:"iGenomics",language:["Objective-C"],github:"https://github.com/stuckinaboot/iGenomics",img:"igenomics.png",pub:{doi:"https://doi.org/10.1093/gigascience/giaa138",year:2020,citations:18},width:1521,height:1299,github_stars:37},{tags:["Pangenome"],name:"Pan-Tetris",img:"pantetris.png",url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4547177/",pub:{doi:"https://dx.doi.org/10.1186%2F1471-2105-16-S11-S3",year:2015,citations:16},width:1200,height:899},{tags:["Pangenome"],name:"Panacaea",language:["Perl"],pub:{doi:"https://doi.org/10.1186/s12859-018-2250-y",year:2018,citations:10},img:"panacaea.png",url:"https://github.com/JCVenterInstitute/PanACEA",width:584,height:405,github_stars:7},{tags:["Pangenome"],name:"Panache",language:["JS","VueJS"],img:"panache.png",pub:{doi:"https://doi.org/10.1093/bioinformatics/btab688",year:2021,citations:11},url:"https://github.com/SouthGreenPlatform/panache",width:726,height:381,github_stars:44},{tags:["Pangenome"],name:"panX",github:"https://github.com/neherlab/pan-genome-analysis",img:"panx.jpeg",url:"http://pangenome.tuebingen.mpg.de/",pub:{url:"https://academic.oup.com/nar/article/46/1/e5/4564799",doi:"https://doi.org/10.1093/nar/gkx977",year:2017,citations:210},width:2756,height:1813,github_stars:134},{tags:["Pangenome","JBrowse integration"],name:"RPAN (3kricedb)",img:"rpan.png",pub:{doi:"https://doi.org/10.1093/nar/gkw958",year:2016,citations:129},platform:["Web"],url:"http://cgm.sjtu.edu.cn/3kricedb/visualization/?tracks=DNA%2Cgene%2CPF",width:1663,height:633},{tags:["Protein","MSA"],name:"Protael",img:"protael.png",github:"https://github.com/sanshu/protaeljs",url:"http://sanshu.github.io/protaelweb/",pub:{url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5963358/",doi:"https://dx.doi.org/10.1093%2Fbioinformatics%2Fbtv605",year:2015,citations:8},platform:["Web"],language:["JS"],width:1711,height:1161,github_stars:19},{tags:["Protein","Cancer","Lollipops","SV","Canvas"],name:"ProteinPaint",img:"proteinpaint.png",url:"https://pecan.stjude.cloud/proteinpaint",github:"https://github.com/stjude/proteinpaint",pub:{url:"https://www.nature.com/articles/ng.3466",doi:"https://doi.org/10.1038/ng.3466",year:2015,citations:259},platform:["Web"],language:["JS"],width:1663,height:633,github_stars:19},{tags:["CNV","Linear","Cancer","Lollipops","SV","Alignments viewer"],name:"GenomePaint",img:"genomepaint.png",url:"https://genomepaint.stjude.cloud/",github:"https://github.com/stjude/proteinpaint",pub:{url:"https://www.cell.com/cancer-cell/fulltext/S1535-6108(20)30659-0",doi:"https://doi.org/10.1016/j.ccell.2020.12.011",year:2021,citations:24},platform:["Web"],note:"Demos https://proteinpaint.stjude.org/bam/",width:1663,height:648,github_stars:19},{tags:["Protein"],name:"pViz",img:"pviz.jpg",language:["JS"],url:"https://github.com/Genentech/pviz",pub:{doi:"https://doi.org/10.1093/bioinformatics/btu567",year:2014,citations:19},platform:["Web"],width:959,height:259,github_stars:69},{tags:["Heatmap","Population"],name:"UCSC Xena",language:["JS"],img:"xena.png",github:"https://github.com/ucscXena/ucsc-xena-client",url:"https://xena.ucsc.edu/",pub:{doi:"https://doi.org/10.1038/s41587-020-0546-8",year:2020,citations:2353},platform:["Web"],width:550,height:286,github_stars:57},{tags:["Heatmap","Population","Variation"],name:"VIVA",img:"viva.png",url:"https://www.biorxiv.org/content/10.1101/589879v1.full.pdf",pub:{doi:"https://doi.org/10.1038/s41598-019-49114-z",year:2019,citations:11},github:"https://github.com/compbiocore/VariantVisualization.jl",platform:["Web"],width:433,height:390,github_stars:85},{tags:["Dotplot"],name:"Dotter",pub:{doi:"https://doi.org/10.1016/0378-1119(95)00714-8",year:1995,citations:487},img:"dotter.png",url:"https://sonnhammer.sbc.su.se/Dotter.html",platform:["CLI"],width:567,height:429},{tags:["Repeats","Dotplot","Static","Linear"],img:"repaver.jpg",url:"https://gitlab.com/gringer/bioinfscripts/",language:["R","C++"],platform:["CLI"],name:"REPAVER",pub:{url:"https://www.researchgate.net/pub/346507956_REPAVER_Paving_the_Way_for_Repeat_Discovery_in_Complex_Genomes?channel=doi&linkId=5fc58ba4a6fdcce95268fe60&showFulltext=true",doi:"http://dx.doi.org/10.13140/RG.2.2.15289.39522"},width:879,height:620},{name:"LinearDisplay.pl",url:"https://github.com/JCVenterInstitute/LinearDisplay",img:"lineardisplay.png",language:["Perl"],platform:["CLI"],pub:{doi:"https://doi.org/10.1038/s41586-019-1742-x",year:2019,citations:538},note:"readme says to cite this paper",tags:["Comparative"],width:2050,height:2384,github_stars:5},{name:"Gview",tags:["Circular","Linear","Pangenome","Microbiology"],url:"https://server.gview.ca/examples",img:"gview.png",pub:{doi:"https://doi.org/10.1093/bioinformatics/btq588",year:2010,citations:293},platform:["Web"],language:["Perl","Java","Java web start"],width:890,height:969},{name:"FastANI",tags:["Comparative","Microbiology"],img:"fastani.jpg",url:"https://github.com/ParBLiSS/FastANI",pub:{doi:"https://doi.org/10.1038/s41467-018-07641-9",year:2018,citations:3049},language:["C++"],width:1050,height:1050,github_stars:374},{name:"JGI/IMG",tags:["Dotplot","Linear","Microbiology"],platform:["Web","Silo"],note:"Dotplot use MUMmer",url:"https://img.jgi.doe.gov/",img:"jgiimg.png",width:812,height:717},{name:"covviz",github:"https://github.com/brwnj/covviz",tags:["CNV","Coverage","Population"],language:["JS"],url:"https://brwnj.github.io/covviz/",img:"covviz.png",width:1177,height:735,github_stars:56},{name:"clinker",tags:["Comparative","Gene order","Multi-way synteny"],language:["JS"],img:"clinker.png",url:"https://github.com/gamcil/clinker",platform:["Web"],pub:{url:"https://academic.oup.com/bioinformatics/advance-article-abstract/doi/10.1093/bioinformatics/btab007/6103786",doi:"https://doi.org/10.1093/bioinformatics/btab007",year:2021,citations:700},width:2482,height:1753,github_stars:530},{name:"PopSV",tags:["Population","SV"],platform:["Web"],language:["R"],url:"https://github.com/jmonlong/PopSV/blob/master/3-Visualization.md",github:"https://github.com/jmonlong/PopSV",pub:{doi:"https://doi.org/10.1371/journal.pgen.1007285",year:2018,citations:41},img:"popsv.png",width:959,height:443,github_stars:30},{name:"Shasta",tags:["Graph"],url:"https://chanzuckerberg.github.io/shasta/ComputationalMethods.html#ReadGraph",note:"Uses graphviz",img:"shasta.png",language:["C++"],platform:["Web","Localhost","CLI"],pub:{doi:"https://doi.org/10.1038/s41587-020-0503-6",year:2020,citations:383},width:1272,height:1334},{name:"LINX",note:"part of the PURPLE/GRIDSS/LINX pipeline",url:"https://github.com/hartwigmedical/hmftools/blob/master/linx/README.md",language:["Java","Circos integration"],github:"https://github.com/hartwigmedical/hmftools",pub:{doi:"https://doi.org/10.1101/781013",year:2019,citations:39},img:"linx.png",tags:["Graph","SV","Breakends","Circular","Linear","Gene fusion","Cancer"],width:1542,height:1690,github_stars:195},{name:"PURPLE",pub:{doi:"https://doi.org/10.1101/781013",year:2019,citations:39},note:"intermutation-distance rainfall plots/katagesis plots are not technically in genomic coordinates, but do indicate genomic cluster of variatnts",url:"https://github.com/hartwigmedical/hmftools/blob/master/purity-ploidy-estimator/README.md",github:"https://github.com/hartwigmedical/hmftools",tags:["CNV","Cancer"],img:"purple.png",width:600,height:675,github_stars:195},{name:"SMRT View",tags:["SV"],note:"wiki page https://github.com/PacificBiosciences/DevNet/wiki/SMRT-View",github:"https://github.com/PacificBiosciences/DevNet",url:"http://files.pacb.com/software/smrtanalysis/2.3.0/doc/smrtview/help/Webhelp/App_View_Epipro.htm",img:"smrtview.png",width:1095,height:247,github_stars:115},{name:"sockeye",tags:["Exotic","Comparative","Historical"],pub:{url:"https://genome.cshlp.org/content/14/5/956.full",doi:"10.1101/gr.1890304",year:2004,citations:21},url:"https://www.bcgsc.ca/resources/software/sockeye",img:"sockeye.jpg",width:1280,height:1028},{name:"spinteny",language:["JS"],tags:["Exotic","Comparative"],url:"https://github.com/skinner/spinteny",img:"spinteny.png",width:656,height:323,github_stars:1},{name:"Internet Contig Explorer",tags:["Historical"],url:"https://www.bcgsc.ca/resources/software/ice",pub:{url:"https://genome.cshlp.org/content/13/6a/1244.long",doi:"10.1101/gr.819303",year:2003,citations:19},img:"internet_contig_explorer.jpg",width:1280,height:804},{name:"bcftools roh",img:"bcftools_roh.png",tags:["Static"],url:"https://samtools.github.io/bcftools/howtos/roh-calling.html",github:"https://github.com/samtools/bcftools",note:"Plots runs of homozygosity, has interactive plot-roh.py helper too",language:["Python","C","Matplotlib"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btw044",year:2016,citations:505},width:1622,height:760,github_stars:676},{name:"bcftools cnv",tags:["CNV"],language:["Python","C","Matplotlib"],img:"bcftools_cnv.png",github:"https://github.com/samtools/bcftools",url:"https://samtools.github.io/bcftools/howtos/cnv-calling.html",width:1e3,height:800,github_stars:676},{name:"mocha",img:"mocha.png",url:"https://github.com/freeseek/mocha",note:"Has a full analysis pipeline associated with end result visualizations",tags:["CNV"],pub:{doi:"10.1038/s41586-018-0321-x",year:2018,citations:292},language:["C","WDL","R"],width:525,height:525,github_stars:81},{name:"ALVIS (MSA viewer)",language:["Java"],url:"https://www.ebi.ac.uk/research/goldman/software/alvis",note:"Introduces sequence bundles concept, also see web app version https://www.ebi.ac.uk/goldman-srv/sequencebundles/ source code https://bitbucket.org/schwarzlab/alvis/src/master/",pub:{url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4856975/",doi:"https://dx.doi.org/10.1093%2Fnar%2Fgkw022",year:2016,citations:9},tags:["MSA"],img:"alvis.png",width:600,height:462},{name:"ALVIS (chimeric alignment viewer)",language:["Java"],url:"https://github.com/SR-Martin/alvis",pub:{url:"https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-021-04056-0",doi:"https://doi.org/10.1186/s12859-021-04056-0",year:2021,citations:13},tags:["Assembly QC"],img:"alvis_chimeric.png",width:708,height:396,github_stars:19},{name:"genevisR",img:"genevisr.png",github:"https://github.com/griffithlab/GenVisR",url:"https://bioconductor.org/packages/release/bioc/vignettes/GenVisR/inst/doc/Intro.html",pub:{doi:"https://doi.org/10.1093/bioinformatics/btw325",year:2016,citations:246},tags:["CNV"],language:["R"],width:939,height:1026,github_stars:210},{name:"NanoMethViz",github:"https://github.com/Shians/NanoMethViz",pub:{doi:"10.1371/journal.pcbi.1009524",year:2021,citations:9},url:"http://www.bioconductor.org/packages/release/bioc/html/NanoMethViz.html",img:"nanomethviz.png",tags:["Methylation"],language:["R"],width:672,height:480,github_stars:24},{name:"GfaViz",img:"gfaviz.png",github:"https://github.com/ggonnella/gfaviz",language:["C++"],pub:{url:"https://academic.oup.com/bioinformatics/article/35/16/2853/5267826",doi:"https://doi.org/10.1093/bioinformatics/bty1046",year:2018,citations:22},tags:["Graph"],width:951,height:351,github_stars:63},{name:"Nextclade",img:"nextclade.png",url:"https://clades.nextstrain.org/",language:["JS","React","D3"],tags:["Phylogenetics","Microbiology"],pub:{doi:"https://doi.org/10.21105/joss.03773",year:2021,citations:602},note:"Related usage on nextstrain app also",width:1378,height:431},{name:"vcfR",img:"vcfr.png",language:["R"],tags:["Population","Coverage"],note:"image shows chromoqc output",url:"https://knausb.github.io/vcfR_documentation/",github:"https://github.com/knausb/vcfR",pub:{doi:"http://dx.doi.org/10.1111/1755-0998.12549",year:2016,citations:670},width:1344,height:1344,github_stars:247},{name:"asgart",img:"asgart.png",language:["Rust"],github:"https://github.com/delehef/asgart",tags:["SV","Ideogram","Circular","Linear"],pub:{url:"https://academic.oup.com/bioinformatics/article/34/16/2708/4948616",doi:"https://doi.org/10.1093/bioinformatics/bty172",year:2018,citations:13},width:500,height:581,github_stars:31},{name:"MashMap",img:"mashmap.png",tags:["Dotplot"],language:["Perl","C++"],pub:{doi:"https://doi.org/10.1093/bioinformatics/bty597",year:2018,citations:116},url:"https://github.com/marbl/MashMap/blob/master/scripts/generateDotPlot",github:"https://github.com/marbl/MashMap",width:521,height:521,github_stars:269},{name:"udon",img:"udon.png",tags:["Alignments viewer"],url:"https://github.com/ocxtal/udon",language:["Rust"],note:"Uses an advanced data structure for pileup, so visually a basic example but likely just a small demo",width:652,height:140,github_stars:20},{name:"AnnoJ",img:"annoj.png",tags:["Methylation"],language:["JS"],platform:["Web"],url:"https://brainome.ucsd.edu/howto_annoj.html",note:"See list of instances of the browser here https://ecker.salk.edu/genome-browser/",github:"https://github.com/mukamel-lab/annoj_cndd",width:859,height:722,github_stars:0},{name:"methylartist",img:"methylartist.png",language:["Python"],tags:["Long reads","Methylation"],pub:{doi:"https://doi.org/10.1101/2021.07.22.453313",year:2021,citations:7},url:"https://github.com/adamewing/methylartist",width:1330,height:683,github_stars:130},{name:"SWAV",tags:["Population","Deadlink"],pub:{url:"https://www.nature.com/articles/s41598-019-57038-x",doi:"https://doi.org/10.1038/s41598-019-57038-x",year:2020,citations:13},url:"http://swav.popgenetics.net/",img:"swav.png",width:1900,height:1386},{name:"gingko",url:"http://qb.cshl.edu/ginkgo/?q=/9EiUttUP0CBHs3WnuBa0",img:"gingko.jpeg",language:["PHP","JS"],github:"https://github.com/robertaboukhalil/ginkgo",pub:{doi:"https://doi.org/10.1038/nmeth.3578",year:2015,citations:223},platform:["Web"],tags:["Single cell","CNV"],width:2e3,height:1400,github_stars:47},{name:"copynumber",url:"https://www.bioconductor.org/packages/release/bioc/vignettes/copynumber/inst/doc/copynumber.pdf",img:"copynumber.png",pub:{doi:"https://doi.org/10.1186/1471-2164-13-591",year:2012,citations:244},tags:["CNV"],language:["R"],width:925,height:621},{name:"alignfigR",img:"alignfigr.png",url:"https://cran.r-project.org/web/packages/alignfigR/vignettes/my-vignette.html",tags:["MSA"],language:["R"],width:528,height:240},{name:"copykat",img:"copykat.png",url:"https://github.com/navinlabcode/copykat/blob/master/vignettes/copycat-vignettes.pdf",github:"https://github.com/navinlabcode/copykat",pub:{doi:"10.1038/s41587-020-00795-2",year:2021,citations:403},tags:["Single cell","CNV"],language:["R"],width:812,height:752,github_stars:207},{name:"scCNV_heatmap",url:"https://github.com/StefanKurtenbach/scCNV_heatmap",language:["Python"],img:"sccnv_heatmap.png",tags:["Single cell","CNV"],width:228,height:304,github_stars:3},{name:"casper",url:"https://github.com/akdess/CaSpER",pub:{url:"https://www.nature.com/articles/s41467-019-13779-x",doi:"https://doi.org/10.1038/s41467-019-13779-x",year:2020,citations:110},language:["R"],img:"casper.png",tags:["Single cell","CNV"],width:580,height:935,github_stars:77},{name:"RectChr",img:"rectchr.png",url:"https://github.com/BGI-shenzhen/RectChr",tags:["Comparative","Ideogram","Static","Limited code available"],language:["Binary blob","Perl"],width:635,height:760,github_stars:80},{name:"LDBlockShow",url:"https://github.com/BGI-shenzhen/LDBlockShow",pub:{url:"https://academic.oup.com/bib/advance-article-abstract/doi/10.1093/bib/bbaa227/5939575?redirectedFrom=fulltext",doi:"https://doi.org/10.1093/bib/bbaa227",year:2020,citations:214},img:"ldblockshow.png",language:["C++","Perl"],tags:["GWAS","Population"],width:260,height:275,github_stars:136},{name:"clinker (gene fusion software)",url:"https://github.com/Oshlack/Clinker/",pub:{url:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6065480/",doi:"https://dx.doi.org/10.1093%2Fgigascience%2Fgiy079",year:2018,citations:18},img:"clinker_fusion.png",tags:["Gene fusion"],language:["R"],width:644,height:717,github_stars:51},{name:"arriba",img:"arriba.png",tags:["Gene fusion"],url:"https://github.com/suhrig/arriba",pub:{url:"https://genome.cshlp.org/content/31/3/448",doi:"10.1101/gr.257246.119",year:2021,citations:263},language:["C++","R"],width:480,height:280,github_stars:226},{name:"FusionInspector",img:"fusioninspector.png",url:"https://github.com/FusionInspector/FusionInspector/wiki",github:"https://github.com/FusionInspector/FusionInspector",pub:{doi:"https://doi.org/10.1101/2021.08.02.454639",year:2021,citations:3},tags:["Gene fusion"],note:"Uses igv.js",language:["Perl","JS"],width:1889,height:811,github_stars:56},{name:"NeoLoopFinder",img:"neoloopfinder.png",url:"https://github.com/XiaoTaoWang/NeoLoopFinder",tags:["SV","Hi-C"],pub:{doi:"https://doi.org/10.1038/s41592-021-01164-w",year:2021,citations:89},language:["Python"],width:992,height:609,github_stars:59},{name:"alen",url:"https://github.com/jakobnissen/alen",tags:["MSA","Text based"],language:["Rust"],img:"alen.png",width:823,height:486,github_stars:78},{name:"Aquaria",url:"http://aquaria.ws/Q9HD67/5i0i/A",tags:["Protein","MSA"],pub:{doi:"https://doi.org/10.1038/nmeth.3258",year:2015,citations:55},platform:["Web"],img:"aquaria.png",width:1244,height:701},{name:"vega",url:"http://vega.archive.ensembl.org/Homo_sapiens/Location/Chromosome?r=6-QBL",tags:["Assembly QC","Historical","Genetic map"],platform:["Web"],pub:{doi:"https://doi.org/10.1093/nar/gki135",year:2004,citations:91},img:"vega.png",note:"Mentioned in https://www.biorxiv.org/content/10.1101/2021.07.02.450883v1.full.pdf also note: vega standards for vertebrate genome annotation database",width:1523,height:798},{name:"nightingale/protvista",github:"https://github.com/ebi-webcomponents/nightingale",url:"https://ebi-webcomponents.github.io/nightingale/#/msa",tags:["Protein","MSA"],platform:["Web"],pub:{doi:"https://dx.doi.org/10.1093%2Fbioinformatics%2Fbtx120",year:2017,citations:56},img:"nightingale.png",language:["JS","Typescript"],note:"Used on InterProScan website https://www.ebi.ac.uk/interpro/",width:1211,height:425,github_stars:121},{name:"ArchR",github:"https://github.com/GreenleafLab/ArchR",url:"https://www.archrproject.com/articles/Articles/tutorial.html",pub:{doi:"https://doi.org/10.1038/s41588-021-00790-6",year:2021,citations:765},tags:["Single cell"],language:["R"],img:"archr.png",width:1500,height:1500,github_stars:387},{name:"PGAP-X",img:"pgapx.png",tags:["Pangenome"],language:["C++"],platform:["Desktop"],url:"https://pgapx.zhaopage.com/",pub:{url:"https://bmcgenomics.biomedcentral.com/articles/10.1186/s12864-017-4337-7",doi:"https://doi.org/10.1186/s12864-017-4337-7",year:2018,citations:23},width:778,height:248},{name:"MAVIS",img:"mavis.png",github:"https://github.com/bcgsc/mavis",tags:["Gene fusion","SV"],language:["Python"],url:"http://mavis.bcgsc.ca/",pub:{doi:"https://doi.org/10.1093/bioinformatics/bty621",year:2018,citations:22},width:1200,height:494,github_stars:74},{name:"ProViz",img:"proviz.png",tags:["MSA","Protein"],language:["JS"],url:"http://slim.icr.ac.uk/proviz/index.php",note:"See also alphafold visualization as tracks http://slim.icr.ac.uk/projects/alphafold?page=alphafold_proviz_homepage",pub:{url:"https://academic.oup.com/nar/article/44/W1/W11/2499309",doi:"https://doi.org/10.1093/nar/gkw265",year:2016,citations:70},width:1847,height:925},{name:"panGraphViewer",url:"https://github.com/TF-Chan-Lab/panGraphViewer",img:"pangraphviewer.jpg",tags:["Graph","Pangenome"],language:["Python"],width:479,height:260,github_stars:53},{name:"SVPV",img:"svpv.jpg",language:["Python"],url:"https://github.com/VCCRI/SVPV",tags:["SV","Coverage"],pub:{url:"https://academic.oup.com/bioinformatics/article/33/13/2032/3056003",doi:"https://doi.org/10.1093/bioinformatics/btx117",year:2017,citations:9},width:380,height:597,github_stars:31},{name:"wiggleplotr",github:"https://github.com/kauralasoo/wiggleplotr",img:"wiggleplotr.png",url:"http://bioconductor.org/packages/devel/bioc/vignettes/wiggleplotr/inst/doc/wiggleplotr.html",tags:["Coverage"],language:["R"],width:576,height:384,github_stars:37},{name:"pretzel",url:"https://github.com/plantinformatics/pretzel",img:"pretzel.png",language:["JS","D3"],pub:{doi:"10.1101/517953",year:2019,citations:20},tags:["Comparative","Genetic map"],width:1114,height:765,github_stars:44},{name:"splicejam",language:["R"],img:"splicejam.png",tags:["Splicing","Sashimi"],pub:{doi:"https://doi.org/10.1016/j.celrep.2019.08.093",year:2019,citations:72},url:"https://github.com/jmw86069/splicejam",width:384,height:288,github_stars:27},{name:"genomegraphs",language:["R"],img:"genomegraphs.png",tags:["Ideogram","Quantitative","Splicing"],url:"http://bioconductor.org/packages/2.5/bioc/vignettes/GenomeGraphs/inst/doc/GenomeGraphs.pdf",pub:{doi:"https://doi.org/10.1186/1471-2105-10-2",year:2009,citations:53},width:408,height:775},{name:"IdeoViz",language:["R"],img:"ideoviz.png",tags:["Ideogram","Quantitative","Splicing"],github:"https://github.com/shraddhapai/IdeoViz",url:"https://www.bioconductor.org/packages/release/bioc/vignettes/IdeoViz/inst/doc/Vignette.pdf",width:290,height:455,github_stars:1},{name:"Flash Gviewer",language:["Flash","ActionScript"],img:"flashgviewer.png",tags:["Ideogram","Genetic map","Historical"],url:"http://gmod.org/wiki/Flashgviewer/",width:499,height:806},{name:"Plotgardener",language:["R"],img:"plotgardener.png",tags:["Hi-C","Coverage"],url:"https://github.com/PhanstielLab/plotgardener/",pub:{doi:"10.1093/bioinformatics/btac057",year:2022,citations:48},width:840,height:510,github_stars:301},{name:"MIRA",language:["C++"],img:"mira.png",tags:["Assembly QC","Alignments viewer","Historical"],url:"http://mira-assembler.sourceforge.net/docs/DefinitiveGuideToMIRA.html",pub:{doi:"https://dx.doi.org/10.1101%2Fgr.1917404",year:2004,citations:875},note:"orig paper also describes mira here http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.23.7465&rep=rep1&type=pdf",width:1066,height:720},{name:"oxford-plots",url:"https://github.com/jherrero/oxford-plots",img:"oxford.png",tags:["Dotplot"],language:["R","Perl"],note:"Has nice description of a synteny pipeline here https://github.com/jherrero/oxford-plots/blob/master/examples/pig_X_Y.txt",width:2e3,height:2e3,github_stars:11},{name:"IGGE",tags:["Graph","Exotic"],note:"Not open source",img:"igge.png",url:"https://github.com/immersivegraphgenomeexplorer/IGGE",pub:{doi:"10.1109/SEGAH52098.2021.9551857",year:2021,citations:8},width:247,height:249,github_stars:2},{name:"PipMaker",tags:["Comparative","Repeats","Annotation"],url:"http://pipmaker.bx.psu.edu/pipmaker/",note:"See also MultiPipMaker http://pipmaker.bx.psu.edu/pipmaker/mpm-example/index.html",img:"pipmaker.png",pub:{doi:"https://dx.doi.org/10.1101%2Fgr.10.4.577",year:2e3,citations:896},width:501,height:382},{name:"GraphAlignmentViewer",language:["Python"],img:"graphalignmentviewer.png",url:"https://github.com/Illumina/GraphAlignmentViewer",tags:["Repeats"],width:865,height:755,github_stars:35},{name:"MEGA-X",img:"megax.png",language:["Pascal"],github:"https://github.com/KumarMEGALab/MEGA-source-code",url:"https://www.megasoftware.net/",platform:["Desktop"],pub:{doi:"https://doi.org/10.1093/molbev/msab120",year:2021,citations:8924},note:"original paper from 1994 but actively updated. requires EULA for download",tags:["MSA","Phylogenetics"],width:665,height:450,github_stars:6},{name:"Haploview",tags:["Population","Linkage disequilibrium"],img:"haploview.png",url:"https://www.broadinstitute.org/haploview/haploview",platform:["Desktop"],pub:{doi:"https://doi.org/10.1093/bioinformatics/bth457",year:2004,citations:11733},language:["Java"],width:800,height:600},{name:"AliTreeViz",img:"alitreeviz.png",github:"https://github.com/lipme/alitreeviz",url:"https://www.npmjs.com/package/alitreeviz",tags:["MSA","Phylogenetics"],language:["JS"],width:1905,height:918,github_stars:4},{name:"WGDI",img:"wgdi.png",url:"https://github.com/SunPengChuan/wgdi",language:["Python"],pub:{doi:"https://doi.org/10.1101/2021.04.29.441969",year:2021,citations:45},tags:["Comparative","Dotplot","Circular"],width:1247,height:392,github_stars:123},{name:"AmpliconArchitect",note:"The term amplicon refers essentially to extrachromosomal DNA in cancer",img:"ampliconarchitect.png",url:"https://github.com/virajbdeshpande/AmpliconArchitect",pub:{doi:"https://doi.org/10.1038/s41467-018-08200-y",year:2019,citations:182},language:["Python"],tags:["SV","Cancer"],width:643,height:323,github_stars:135},{name:"PGV (pangenome tool)",img:"pgv1.png",url:"https://github.com/ucrbioinfo/PGV",language:["Python"],platform:["Web"],pub:{url:"https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-021-04424-w",doi:"https://doi.org/10.1186/s12859-021-04424-w",year:2021,citations:4},tags:["Pangenome","Dotplot","Comparative"],width:1914,height:2132,github_stars:18},{name:"REViewer",img:"reviewer.png",tags:["Repeats"],url:"https://github.com/Illumina/REViewer",language:["C++"],note:"See also GraphAlignmentViewer, similar look and from illumina also",pub:{doi:"https://doi.org/10.1101/2021.10.20.465046",year:2021,citations:3},width:3841,height:1789,github_stars:80},{name:"Trackplot (R)",img:"trackplot.png",url:"https://github.com/PoisonAlien/trackplot",pub:{doi:"https://doi.org/10.1093/bioadv/vbae031",year:2024,citations:3},tags:["Coverage","Gene structure","Epigenomics"],language:["R"],width:850,height:500,github_stars:139},{name:"gcMapExplorer",img:"gcmapexplorer.png",url:"https://github.com/rjdkmr/gcMapExplorer",pub:{doi:"https://doi.org/10.1093/nar/gkx644",year:2017,citations:24},tags:["Hi-C"],language:["Python"],width:576,height:309,github_stars:21},{name:"BRIG",img:"brig.jpg",github:"https://github.com/happykhan/BRIG",tags:["Comparative","Circular"],url:"http://brig.sourceforge.net",pub:{url:"https://bmcgenomics.biomedcentral.com/articles/10.1186/1471-2164-12-402",doi:"https://doi.org/10.1186/1471-2164-12-402",year:2011,citations:2451},language:["Java"],platform:["Desktop"],width:1200,height:1075,github_stars:28},{name:"Ideogram viewer",url:"https://bioinformatics.mdanderson.org/public-software/ideogramviewer/",img:"ideogramviewer.png",language:["JS"],platform:["Web"],tags:["Ideogram"],width:926,height:394},{name:"GENESPACE",url:"https://github.com/jtlovell/GENESPACE/",tags:["Comparative","Pangenome"],img:"genespace.png",pub:{doi:"https://doi.org/10.7554/eLife.78526",year:2022,citations:111},note:"Includes a powerful analysis pipeline, worth reading the paper",language:["R"],width:730,height:593,github_stars:191},{name:"ggplot2 manhattan plot",url:"https://danielroelfs.com/blog/how-i-create-manhattan-plots-using-ggplot/",note:"This is not a preconfigured tool but a blog post tutorial with tidy data and ggplot2",img:"ggplot2_manhattan.png",tags:["GWAS"],language:["R","ggplot2"],width:2304,height:960},{name:"ete",github:"https://github.com/etetoolkit/ete",url:"http://etetoolkit.org/gallery/",language:["Python"],pub:{doi:"https://doi.org/10.1093/molbev/msw046",year:2016,citations:1657},tags:["MSA","Phylogenetics"],img:"ete.png",width:640,height:500,github_stars:792},{name:"ggtree",url:"https://github.com/YuLab-SMU/ggtree",language:["R"],tags:["MSA","Phylogenetics","ggplot2"],img:"ggtree.png",note:"see https://yulab-smu.top/treedata-book/chapter7.html?q=msa#msaplot for MSA example",pub:{doi:"https://doi.org/10.1111/2041-210X.12628",year:2016,citations:3116},width:2100,height:1050,github_stars:838},{name:"Phandango",url:"https://jameshadfield.github.io/phandango/#/examples",github:"https://github.com/jameshadfield/phandango",img:"phandango.png",language:["JS"],tags:["Pangenome","GWAS","MSA","Phylogenetics","Microbiology"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btx610",year:2017,citations:422},width:463,height:474,github_stars:117},{url:"http://athina.biol.uoa.gr/bioinformatics/GENEVITO/",name:"GeneViTo",img:"genevito.jpg",tags:["Microbiology","General"],pub:{doi:"https://doi.org/10.1186/1471-2105-4-53",year:2003,citations:7},platform:["Desktop"],language:["Java"],width:1024,height:768},{name:"RegulomeExplorer",url:"http://explorer.cancerregulome.org/all_pairs/?dataset=TCGA_ACC",img:"cancerregulome.png",tags:["Circular","Cancer","SV"],platform:["Web"],language:["JS"],github:"https://github.com/cancerregulome/RegulomeExplorer",width:1852,height:801,github_stars:4},{name:"CGView",tags:["Circular","Microbiology"],url:"http://cgview.ca/",github:"https://github.com/paulstothard/cgview",pub:{doi:"https://dx.doi.org/10.1093%2Fnar%2Fgkn179",year:2008,citations:1109},platform:["Web"],language:["JS"],img:"cgview.png",note:"See also CGView comparison tool and other related https://paulstothard.github.io/cgview_comparison_tool/",width:926,height:443,github_stars:42},{name:"miropeats",img:"miropeats.png",tags:["Comparative","Repeats","Historical"],language:["Perl","C"],note:"image from 2021 paper https://www.biorxiv.org/content/10.1101/2021.12.08.471837v1.full.pdf",pub:{url:"https://academic.oup.com/bioinformatics/article-abstract/11/6/615/187092?redirectedFrom=fulltext",doi:"https://doi.org/10.1093/bioinformatics/11.6.615",year:1995,citations:38},url:"http://www.littlest.co.uk/software/bioinf/old_packages/miropeats/",width:654,height:219},{name:"Slinker",img:"slinker.png",tags:["Splicing","Coverage"],language:["Python"],pub:{url:"https://f1000research.com/articles/10-1255/v1",doi:"https://doi.org/10.12688/f1000research.74836.1",year:2021,citations:2},url:"https://github.com/Oshlack/Slinker",note:"See also, clinker (gene fusion software)",width:819,height:644,github_stars:19},{name:"syntenyPlotteR",img:"syntenyplotter.png",tags:["Comparative"],url:"https://github.com/marta-fb/syntenyPlotteR",language:["R","ggplot2"],pub:{doi:"https://doi.org/10.1093/bioadv/vbad161",year:2023,citations:4},width:1440,height:720,github_stars:39},{name:"chromoMap",img:"chromomap.png",tags:["Comparative","Ideogram"],pub:{url:"https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-021-04556-z",doi:"https://doi.org/10.1186/s12859-021-04556-z",year:2022,citations:100},url:"https://lakshay-anand.github.io/chromoMap/index.html",github:"https://github.com/Lakshay-Anand/chromoMap",language:["R"],width:708,height:621,github_stars:4},{name:"SafFire",img:"saffire.png",tags:["Comparative"],github:"https://github.com/mrvollger/SafFire",language:["JS"],url:"https://mrvollger.github.io/SafFire/#ref=CHM13_v1.1&query=GRCh38",width:1776,height:700,github_stars:26},{name:"Gingr",img:"gingr.png",github:"https://github.com/marbl/gingr",language:["C++"],tags:["Phylogenetics","Comparative","Microbiology"],pub:{doi:"https://doi.org/10.1186/s13059-014-0524-x",year:2014,citations:1288},url:"https://harvest.readthedocs.io/en/latest/content/gingr.html",width:2551,height:1558,github_stars:13},{name:"StainedGlass",img:"stainedglass.png",language:["R","Python","JS"],github:"https://github.com/mrvollger/StainedGlass",tags:["Repeats","Heatmap","Higlass integration"],platform:["Web","CLI"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btac018",year:2022,citations:64},width:703,height:393,github_stars:105},{name:"SimpleSynteny",img:"simplesynteny.jpg",url:"https://www.dveltri.com/simplesynteny/about.html",platform:["Web","Server"],pub:{doi:"https://doi.org/10.1093/nar/gkw330",year:2016,citations:98},tags:["Comparative"],width:796,height:277},{name:"Cinteny",pub:{doi:"https://doi.org/10.1186/1471-2105-8-82",year:2007,citations:105},img:"cinteny.png",tags:["Comparative"],url:"http://cinteny.cchmc.org/",platform:["Web","Server"],width:1200,height:334},{name:"DAGchainer",url:"http://dagchainer.sourceforge.net/",img:"dagchainer.png",tags:["Dotplot","Comparative"],pub:{doi:"https://doi.org/10.1093/bioinformatics/bth397",year:2004,citations:301},language:["Perl","Java"],width:813,height:809},{name:"AutoGraph",img:"autograph.png",url:"http://autograph.genouest.org/",tags:["Comparative","Deadlink","Historical"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btl618",year:2006,citations:43},width:989,height:1261},{name:"EvolutionHighway",img:"evolutionaryhighway.jpg",url:"http://eh-demo.ncsa.illinois.edu/",tags:["Comparative","Historical"],note:"The 'evolutionary highway' image type is reproduced in some other packages e.g. https://github.com/marta-fb/syntenyPlotteR, paper https://doi.org/10.1126/science.1111387",language:["Java","Applet"],width:715,height:567},{name:"Smash++",language:["C++"],img:"smashpp.png",url:"https://github.com/smortezah/smashpp",pub:{doi:"https://doi.org/10.1093/gigascience/giaa048",year:2020,citations:13},tags:["Comparative"],width:483,height:203,github_stars:56},{name:"plotsr",img:"plotsr.png",url:"https://github.com/schneebergerlab/plotsr",language:["Python"],pub:{doi:"https://doi.org/10.1101/2022.01.24.477489",year:2022,citations:5},tags:["Comparative","SV","Pangenome"],note:"see also https://github.com/schneebergerlab/syri",width:1298,height:863,github_stars:282},{name:"seqvisr",img:"seqvisr.png",url:"https://github.com/vragh/seqvisr/",language:["R"],tags:["MSA","Protein"],github_stars:10,width:307,height:346},{name:"drawProteins",img:"drawprotein.png",github:"https://github.com/brennanpincardiff/drawProteins",pub:{doi:"https://doi.org/10.12688/f1000research.14541.1",year:2018,citations:46},tags:["Protein"],language:["R","ggplot2"],github_stars:34,width:1649,height:1933},{name:"IBS (Illustrator for Biological Sequences)",img:"ibs.jpg",url:"http://ibs.biocuckoo.org/",pub:{doi:"https://doi.org/10.1093/bioinformatics/btv362",year:2015,citations:766},tags:["Protein"],platform:["Silo","Web","Desktop"],language:["Java"],width:800,height:600},{name:"PFAM generate_graphic",img:"pfam.png",url:"https://pfam.xfam.org/generate_graphic",note:"Also see guide here https://pfam.xfam.org/help#tabview=tab10",tags:["Protein"],platform:["Silo","Web"],width:1370,height:115},{name:"SnoopCGH",img:"snoopcgh.jpg",url:"http://snoopcgh.sourceforge.net/",playform:["Desktop"],tags:["CNV","ArrayCGH"],language:["Java"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btp488",year:2009,citations:8},width:640,height:388},{name:"Genovar",img:"genovar.png",tags:["CNV","ArrayCGH","Alignments viewer"],language:["Java"],pub:{doi:"https://dx.doi.org/10.1186%2F1471-2105-13-S7-S12",year:2012,citations:2},url:"http://genovar.sourceforge.net/",width:575,height:472},{name:"VAMP",img:"vamp.jpg",language:["Java"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btl359",year:2006,citations:89},tags:["Deadlink","CNV","ArrayCGH"],platform:["Applet","Desktop"],width:520,height:399},{name:"CGH-Explorer",img:"cghexplorer.jpg",language:["Java"],pub:{doi:"https://doi.org/10.1093/bioinformatics/bti113",year:2004,citations:114},tags:["Deadlink","CNV","ArrayCGH"],platform:["Desktop"],width:520,height:324},{name:"GenomeMatcher",img:"genomematcher.png",language:["Objective-C"],twitter:"https://twitter.com/GenomeMatcher",url:"http://www.ige.tohoku.ac.jp/joho/gmProject/gmmanual.html",tags:["Comparative"],platform:["Desktop","Mac"],pub:{doi:"https://doi.org/10.1186/1471-2105-9-376",year:2008,citations:232},width:600,height:679},{name:"DNAVis",img:"dnavis.png",language:["C++","OpenGL"],platform:["Desktop"],pub:{doi:"https://doi.org/10.1093/bioinformatics/bti807",year:2005,citations:6},tags:["Deadlink","Comparative"],width:679,height:803},{name:"SynBrowse",img:"synbrowse.png",language:["Perl"],platform:["Web"],pub:{doi:"https://doi.org/10.1093/bioinformatics/bti555",year:2005,citations:53},tags:["Comparative","GBrowse integration"],width:520,height:446},{name:"Sybil",img:"sybil.png",language:["Perl"],platform:["Web"],pub:{doi:"https://doi.org/10.1007/978-1-59745-547-3_6",year:2007,citations:52},tags:["Comparative","GBrowse integration"],url:"http://sybil.sourceforge.net/",note:"Download https://sourceforge.net/projects/sybil/",width:687,height:627},{name:"SyntenyPortal",img:"syntenyportal.png",language:["JS"],platform:["Web"],pub:{doi:"https://doi.org/10.1093/nar/gkw310",year:2016,citations:43},url:"http://bioinfo.konkuk.ac.kr/synteny_portal/",tags:["Comparative","Circular"],width:1280,height:647},{name:"CHROMEISTER",img:"chromeister.png",github:"https://github.com/estebanpw/chromeister",pub:{doi:"https://doi.org/10.1038/s41598-019-46773-w",year:2019,citations:30},tags:["Comparative","Dotplot"],language:["C","R"],width:1e3,height:1e3,github_stars:39},{name:"r2cat",img:"r2cat.jpeg",github:"https://github.com/phuseman/r2cat",pub:{doi:"https://dx.doi.org/10.1093%2Fbioinformatics%2Fbtp690",year:2009,citations:106},tags:["Comparative","Dotplot"],language:["Java"],github_stars:3,width:1800,height:1598},{name:"Seaview",img:"seaview.png",language:["C++"],platform:["Desktop"],tags:["MSA","Phylogenetics"],url:"http://doua.prabi.fr/software/seaview",pub:{doi:"https://doi.org/10.1093/molbev/msp259",year:2009,citations:4713},width:927,height:524},{name:"SequenceServer",img:"sequenceserver.png",language:["Ruby","JS"],tags:["BLAST","Comparative","Circular"],platform:["Web"],url:"https://sequenceserver.com/",github:"https://github.com/wurmlab/sequenceserver",pub:{doi:"https://doi.org/10.1093/molbev/msz185",year:2019,citations:171},width:1059,height:355,github_stars:272},{name:"numbat",img:"numbat.png",language:["R"],tags:["Single cell","CNV"],pub:{doi:"https://doi.org/10.1101/2022.02.07.479314",year:2022,citations:10},url:"https://kharchenkolab.github.io/numbat/",github:"https://github.com/kharchenkolab/numbat",width:840,height:672,github_stars:166},{name:"ggtranscript",img:"ggtranscript.png",language:["R"],tags:["Gene structure"],url:"https://github.com/dzhang32/ggtranscript",pub:{doi:"https://doi.org/10.1101/2022.03.28.486050",year:2022,citations:2},width:2100,height:900,github_stars:131},{name:"CIAlign",note:"Has useful utility functions to clean gaps and trim MSAs",img:"cialign.png",language:["Python"],tags:["MSA"],pub:{doi:"https://doi.org/10.7717/peerj.12983",year:2022,citations:46},github:"https://github.com/KatyBrown/CIAlign",width:480,height:286,github_stars:116},{name:"CoolBox",img:"coolbox.png",pub:{doi:"https://doi.org/10.1186/s12859-021-04408-w",year:2021,citations:26},github:"https://github.com/GangCaoLab/CoolBox",platform:["CLI","Web"],tags:["Epigenomics","Hi-C"],note:"fork of pyGenomeTracks",language:["Python"],width:760,height:408,github_stars:227},{name:"CNANorm",language:["R"],url:"https://www.bioconductor.org/packages/release/bioc/html/CNAnorm.html",pub:{doi:"https://doi.org/10.1093/bioinformatics/btr593",year:2011,citations:145},img:"cnanorm.png",tags:["CNV"],width:436,height:267},{name:"GECO",language:["Java"],tags:["Microbiology","Comparative"],img:"geco.png",url:"http://bioinfo.mikrobio.med.uni-giessen.de/geco2/GecoMainServlet",platform:["Web","Deadlink","No binary or source available"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btl556",year:2006,citations:21},width:900,height:615},{name:"Orchestral",language:["C++","OpenGL"],img:"orchestral.png",pub:{doi:"https://doi.org/10.1109/BioVis.2013.6664351",year:2013,citations:7},tags:["CNV","Large display","No binary or source available"],width:770,height:355},{name:"SequenceSurveyor",language:["Adobe AIR"],img:"sequencesurveyor.png",url:"https://graphics.cs.wisc.edu/Vis/SequenceSurveyor/index.html",pub:{doi:"http://dx.doi.org/10.1109/TVCG.2011.232",year:2011,citations:39},tags:["Comparative"],width:2016,height:1027},{name:"BactoGENIE",img:"bactogenie.png",pub:{doi:"https://doi.org/10.1186/1471-2105-16-S11-S6",year:2015,citations:9},tags:["Comparative","Microbiology","Large display","No binary or source available"],width:600,height:199},{name:"PSAT",img:"psat.png",pub:{doi:"https://doi.org/10.1186/1471-2105-9-170",year:2008,citations:27},tags:["Comparative","Deadlink","No binary or source available"],platform:["Web","Silo"],url:"http://www.nwrce.org/psat",width:496,height:200},{name:"TreeBrowser (MicrobesOnline)",img:"treegenome.png",tags:["Comparative","GBrowse integration"],pub:{doi:"https://doi.org/10.1093/nar/gkp919",year:2009,citations:383},url:"http://www.microbesonline.org/cgi-bin/treeBrowse.cgi?locus=17761",platform:["Web","Silo"],language:["Perl"],width:462,height:431},{name:"UTGB (University of Tokyo Genome Browser)",img:"utgb.png",language:["Java"],platform:["Web","Servlet"],pub:{doi:"https://doi.org/10.1093/bioinformatics/btp350",year:2009,citations:11},tags:["General"],github:"https://github.com/utgenome/utgb",url:"http://utgenome.org/",width:359,height:236,github_stars:2},{name:"Argo",img:"argo.png",language:["Java","Applet"],tags:["General","Deadlink"],url:"https://web.archive.org/web/20070924141423/http://www.broad.mit.edu/annotation/argo/",notes:"See also the tool 'Combo', a comparative version",width:450,height:338},{name:"Combo",img:"combo.png",note:"Based on the tool 'Argo'",pub:{doi:"https://doi.org/10.1093/bioinformatics/btl193",year:2006,citations:37},tags:["Comparative"],language:["Java"],width:640,height:253},{name:"Consed",img:"consed.png",url:"http://bozeman.mbt.washington.edu/consed/consed.html",pub:{doi:"https://doi.org/10.1101/gr.8.3.195",year:1998,citations:2690},tags:["Academic license","Assembly QC","Alignments viewer"],width:650,height:994},{name:"CNSpector",img:"cnspector.png",url:"https://github.com/PapenfussLab/CNspector",pub:{doi:"https://doi.org/10.1038/s41598-019-42858-8",year:2019,citations:18},tags:["CNV"],width:312,height:287,github_stars:4,language:["R","Shiny"]},{name:"GenomicBreaks",img:"genomicbreaks.png",url:"https://oist.github.io/GenomicBreaks/articles/GenomicBreaks.html",github:"https://github.com/oist/GenomicBreaks/",language:["R","ggplot2"],tags:["Comparative","Dotplot"],width:700,height:866,github_stars:4},{name:"GenomeSyn",img:"genomesyn.png",url:"https://github.com/jmsong2/GenomeSyn",tags:["Comparative","Ideogram","Deadlink"],language:["Perl"],platform:["Web","Desktop"],width:856,height:522,github_stars:23},{name:"CMPlot",img:"cmplot.png",tags:["GWAS"],language:["R"],github:"https://github.com/YinLiLin/CMplot",pub:{doi:"10.1016/j.gpb.2020.10.007",year:2021,citations:487},width:525,height:675,github_stars:528},{name:"chromPlot",img:"chromplot.png",pub:{doi:"https://doi.org/10.1093/bioinformatics/btw137",year:2016,citations:46},language:["R"],tags:["Ideogram","QTL"],url:"https://www.bioconductor.org/packages/release/bioc/vignettes/chromPlot/inst/doc/chromPlot.pdf",width:440,height:328},{name:"PhenoGram",img:"phenogram.png",url:"https://ritchielab.org/software/phenogram-downloads",pub:{doi:"https://doi.org/10.1186/1756-0381-6-18",year:2013,citations:178},note:"Can be web server or download",language:["Ruby"],platform:["Web","Silo","CLI"],tags:["Ideogram"],width:1200,height:1083},{name:"RIdeogram",img:"rideogram.png",url:"https://github.com/TickingClock1992/RIdeogram",pub:{doi:"https://doi.org/10.7717/peerj-cs.251",year:2020,citations:297},language:["R"],tags:["Ideogram","Comparative"],width:620,height:646,github_stars:162},{name:"CrowsNest",img:"crowsnest.png",tags:["Comparative"],url:"https://pgsb.helmholtz-muenchen.de/crowsnest/help.html",pub:{doi:"10.1007/978-1-4939-3167-5_8",year:2016,citations:2},width:699,height:383},{tags:["Commercial","MSA","SV","Coverage","Alignments viewer","Comparative","Annotation","Variation","Expression"],name:"ERGO",img:"ergo.png",url:"https://www.igenbio.com/ergo",width:2590,height:2018,pub:{url:"https://pubmed.ncbi.nlm.nih.gov/12519973/",doi:"https://doi.org/10.1093/nar/gkg148",year:2003,citations:167}},{name:"modbamtools",img:"modbamtools.png",url:"https://github.com/rrazaghi/modbamtools",language:["Python"],tags:["Methylation","Epigenomics"],pub:{doi:"https://doi.org/10.1101/2022.07.07.499188",year:2022,citations:9},width:750,height:619,github_stars:48},{name:"sequenza",img:"sequenza.png",url:"https://cran.r-project.org/web/packages/sequenza/vignettes/sequenza.html#plots-and-results",note:"also see https://sequenzatools.bitbucket.io/#/home",language:["R"],tags:["CNV"],pub:{doi:"https://doi.org/10.1093/annonc/mdu479",year:2015,citations:610},width:960,height:1056},{name:"pyCircos",img:"pycircos.png",url:"https://github.com/ponnhide/pyCircos",note:"See also https://github.com/ponnhide/plasmidviewer",width:738,height:268,github_stars:339,tags:["Circular"],language:["Python"]},{name:"GeneticsMakie.jl",url:"https://github.com/mmkim1210/GeneticsMakie.jl",img:"geneticsmakie.png",pub:{doi:"https://doi.org/10.1101/2022.04.18.488573",year:2022,citations:2},width:1632,height:2147,github_stars:82,tags:["GWAS","Gene structure","Linkage disequilibrium"],language:["Julia"]},{name:"fineSTRUCTURE aka ChromoPainter",img:"finestructure.png",url:"http://www.paintmychromosomes.com/",pub:{doi:"https://doi.org/10.1371/journal.pgen.1002453",year:2012,citations:977},tags:["Local ancestry"],width:1024,height:768},{name:"MOSAIC",img:"mosaic.png",url:"https://maths.ucd.ie/~mst/MOSAIC/",language:["R"],tags:["Local ancestry"],pub:{doi:"https://doi.org/10.1534/genetics.119.302139",year:2019,citations:59},width:727,height:320},{name:"Prosite/MyDomains",img:"prosite.png",url:"https://prosite.expasy.org/mydomains",tags:["Protein"],platform:["Web","Silo"],pub:{doi:"https://doi.org/10.1093/nar/gkm977",year:2007,citations:343},width:561,height:40},{name:"snpit",img:"snpit.png",url:"https://github.com/aineniamh/snipit",tags:["Variation","Population"],language:["Python"],width:750,height:306,github_stars:149},{name:"local-rearrangements",img:"local-rearrangements.png",url:"https://github.com/mcfrith/local-rearrangements",tags:["Dotplot","SV"],language:["Python"],note:"Can color dotplots with annotations for e.g. exons, transposons, low complexity regions. See also last-dotplot. Nice figure using it here https://genomemedicine.biomedcentral.com/articles/10.1186/s13073-020-00762-1/figures/4",width:199,height:713,github_stars:12},{name:"GeCoViz",img:"gecoviz.png",url:"https://gecoviz.cgmlab.org/",platform:["Web","Silo"],tags:["Microbiology","Comparative"],pub:{doi:"https://doi.org/10.1093/nar/gkac367",year:2022,citations:16},width:472,height:443},{name:"GGisy",img:"ggisy.png",url:"https://github.com/Sanrrone/GGisy",language:["Python","R"],width:544,height:516,github_stars:23,tags:["Comparative","Circular"]},{name:"multiGenomicContext",url:"https://github.com/Sanrrone/multiGenomicContext",img:"multicontext.png",language:["Python","R"],width:1145,height:577,github_stars:8,tags:["Comparative"]},{name:"ggmsa",note:"See also ggtree",url:"http://yulab-smu.top/ggmsa/",github:"https://github.com/YuLab-SMU/ggmsa",pub:{doi:"https://doi.org/10.1093/bib/bbac222",year:2022,citations:98},img:"ggmsa.png",language:["R"],width:825,height:188,github_stars:202,tags:["MSA"]},{name:"AccuSyn",language:["JS"],tags:["Comparative"],url:"https://accusyn.usask.ca/",github:"https://github.com/jorgenunezsiri/accusyn",img:"accusyn.png",github_stars:16,width:611,height:514},{name:"CView",img:"cview.png",tags:["MSA"],language:["Java"],url:"https://sourceforge.net/projects/cview/",pub:{doi:"https://doi.org/10.1371/journal.pone.0259726",year:2022,citations:0},width:1500,height:802},{name:"bigly",img:"bigly.png",tags:["SV","Coverage"],language:["Go","Python"],url:"https://github.com/brentp/bigly",width:900,height:500,github_stars:42},{name:"signac",img:"signac.png",tags:["Coverage","Single cell"],url:"https://github.com/timoast/signac/",language:["R"],pub:{doi:"https://doi.org/10.1038/s41592-021-01282-5",year:2021,citations:805},width:1400,height:1920,github_stars:328},{name:"pyGenomeViz",url:"https://github.com/moshi4/pyGenomeViz",tags:["Comparative"],language:["Python"],img:"pygenomeviz.png",width:1291,height:693,github_stars:280,note:"See also https://github.com/moshi4/MGCplotter https://github.com/moshi4/GBKviz https://github.com/moshi4/plot_genome_align_fig"},{name:"SODA",url:"https://sodaviz.org/",github:"https://github.com/sodaviz/soda",language:["JS","Typescript"],tags:["Repeats","Circular","Linear"],img:"soda.png",pub:{doi:"https://doi.org/10.1093/nargab/lqac077",year:2022,citations:5},note:"Describes itself as a low-level library to create larger applications with",width:971,height:667,github_stars:8},{name:"ShinySyn",img:"shinysyn.png",pub:{doi:"https://doi.org/10.1093/bioinformatics/btac503",year:2022,citations:12},tags:["Comparative"],language:["R","Shiny"],width:480,height:808},{name:"JBR",img:"jbr.png",doi:{doi:"https://doi.org/10.1093/bioinformatics/btab376"},tags:["Epigenomics"],language:["Java"],note:"Not open source, at least not on github",url:"https://artyomovlab.wustl.edu/jbr/2018_h3k27ac_aging/",github:"https://github.com/Jetbrains-Research/jbr",width:555,height:283,github_stars:11},{name:"clonifier",img:"clonifier.png",github:"https://github.com/dlesl/clonifier",language:["Rust","Typescript","React"],tags:["Microbiology","Synthetic biology"],note:"per github: 'A web app for viewing plasmid maps & genomes, and simulating PCR and Gibson assembly'",platform:["Web"],url:"https://dlesl.github.io/clonifier/",width:1860,height:955,github_stars:6},{name:"ctag",img:"ctag.png",github:"https://github.com/AbeelLab/ctag",tags:["Graph","Population"],note:"See also hygene https://github.com/ProgrammingLife2017/hygene",language:["Java","Scala"],width:916,height:639,github_stars:1},{name:"NCBI CGV",img:"cgv.png",tags:["Comparative"],platform:["Silo"],url:"https://ncbiinsights.ncbi.nlm.nih.gov/2022/07/05/cgv-beta-release/",width:512,height:371},{name:"vcfPlotein",img:"vcfplotein.png",language:["JS","D3","VueJS"],tags:["Variation"],url:"https://vcfplotein.liigh.unam.mx/#/",github:"https://github.com/redcpp/vcfplotein",width:1162,height:254,github_stars:8},{name:"CoveragePlotter",img:"coverageplotter.png",language:["Java"],note:"See also http://lindenb.github.io/jvarkit/WGSCoveragePlotter.html for multi-chromosome",tags:["CNV","Coverage"],url:"http://lindenb.github.io/jvarkit/CoveragePlotter.html",width:282,height:109},{name:"tagore",img:"tagore.png",language:["Python"],tags:["Ideogram","Local ancestry","Chromosome painting"],url:"https://github.com/jordanlab/tagore",width:600,height:258,github_stars:39},{name:"pileuppy",img:"pileuppy.png",language:["Python"],tags:["Text based"],url:"https://gitlab.com/tprodanov/pileuppy",width:1213,height:805},{name:"ggcoverage",img:"ggcoverage.png",language:["R"],tags:["Coverage","Ideogram","CNV","Splicing"],pub:{doi:"https://doi.org/10.1101/2022.09.01.503744",year:2022,citations:1},url:"https://cran.r-project.org/web/packages/ggcoverage/vignettes/ggcoverage.html",github:"https://github.com/showteeth/ggcoverage",width:1024,height:717,github_stars:227},{name:"python-genome-browser aka pygbrowse",url:"https://github.com/phageghost/python-genome-browser/blob/master/pygbrowse_demonstration.ipynb",github:"https://github.com/phageghost/python-genome-browser/",img:"pygbrowse.png",tags:["Epigenomics","Hi-C","Coverage","Gene structure"],language:["Python"],width:994,height:503,github_stars:30},{name:"wally",language:["C++"],img:"wally.png",tags:["Alignments viewer","Dotplot","SV"],url:"https://github.com/tobiasrausch/wally",github_stars:108,width:676,height:538},{name:"alignoth",language:["Rust","Vega"],tags:["Alignments viewer"],github:"https://github.com/koesterlab/alignoth",url:"http://htmlpreview.github.io/?https://github.com/koesterlab/alignoth/blob/main/examples/plot.html",img:"alignoth.png",width:1776,height:440,github_stars:56},{name:"ezcharts",img:"ezcharts.png",tags:["Ideogram"],language:["Python"],github:"https://github.com/epi2me-labs/ezcharts",width:1141,height:569,github_stars:17},{name:"gw",img:"gw.png",tags:["Alignments viewer","Variation"],language:["C++","OpenGL"],github:"https://github.com/kcleal/gw",pub:{doi:"10.1101/2024.07.26.605272",year:2024,citations:0},width:2492,height:618,github_stars:279},{name:"PretextView",img:"pretextview.jpg",tags:["Hi-C","OpenGL"],language:["C++"],github:"https://github.com/wtsi-hpag/PretextView",width:1616,height:1616,github_stars:29},{name:"pyCirclize",img:"pycirclize.png",tags:["Circular"],language:["Python"],github:"https://github.com/moshi4/pyCirclize",width:1292,height:865,github_stars:763},{name:"plasmapR",img:"plasmapr.png",tags:["Synthetic biology","Circular"],language:["R"],github:"https://github.com/BradyAJohnston/plasmapR",width:2100,height:2100,github_stars:80},{name:"DrukBam",img:"drukbam.png",github:"https://github.com/StephanHolgerD/DrukBam",language:["Python"],tags:["Alignments viewer"],width:1270,height:742,github_stars:19},{github:"https://github.com/matted/genome_coverage_plotter",name:"genome_coverage_plotter",img:"genome-coverage-plotter.png",language:["Python"],tags:["CNV","Coverage"],github_stars:5,width:1600,height:400},{github:"https://github.com/mrvollger/NucFreq",name:"NucFreq",img:"nucfreq.png",tags:["Variation","Coverage"],language:["Python","R"],width:1600,height:400,github_stars:32},{name:"PGR-TK",github:"https://github.com/cschin/pgr-tk",pub:{doi:"10.1038/s41592-023-01914-y",year:2023,citations:13},tags:["Graph","Pangenome"],language:["Rust"],img:"pgrtk.png",width:1109,height:385,github_stars:12},{name:"asynt",github:"https://github.com/simonhmartin/asynt",tags:["Comparative","Dotplot"],img:"asynt.png",language:["R"],width:884,height:594,github_stars:27},{name:"GeMo",tags:["Chromosome painting","Ideogram"],img:"gemo.png",language:["JS"],github:"https://github.com/SouthGreenPlatform/GeMo",pub:{doi:"10.1093/database/baac057",year:2022,citations:3},github_stars:14,width:2250,height:2130},{name:"NGenomeSyn",tags:["Comparative","Multi-way synteny"],img:"ngenomesyn.png",language:["Perl"],pub:{doi:"10.1093/bioinformatics/btad121",year:2023,citations:39},github:"https://github.com/hewm2008/NGenomeSyn",note:"See also RectChr",width:710,height:612,github_stars:159},{name:"chromsyn",img:"chromsyn.png",github:"https://github.com/slimsuite/chromsyn",tags:["Comparative","Multi-way synteny"],language:["R"],doi:{pub:"10.1101/2022.04.22.489119"},width:1500,height:975,github_stars:28},{name:"pixy",img:"pixy.png",github:"https://github.com/ksamuk/pixy/",url:"https://pixy.readthedocs.io/en/latest/plotting.html#a-genome-wide-plot-of-summary-statistics",note:"The link in readthedocs shows a nice general purpose way to plot multi-chromosome plots in ggplot2 with facet grid. Alternative methods for multi-chromosome plots shown by the manhattan ggplot2 tutorial (https://danielroelfs.com/blog/how-i-create-manhattan-plots-using-ggplot/ uses cumulative bp instead of facet_grid)",language:["Python","R","ggplot2"],tags:["Population","Variation"],doi:{pub:"https://doi.org/10.1111/1755-0998.13326"},github_stars:119,width:1800,height:900},{name:"vcf2circos",url:"https://github.com/bioinfo-chru-strasbourg/vcf2circos",img:"vcf2circos.png",note:"Based on PCircos https://github.com/CJinny/PCircos",language:["Python","Plotly"],tags:["SV","CNV","Circular"],width:1514,height:1002,github_stars:32},{name:"OmicCircos",tags:["Circular","CNV","Comparative","SV","Coverage"],language:["R"],url:"http://bioconductor.org/packages/release/bioc/html/OmicCircos.html",img:"omiccircos.png",pub:{doi:"10.4137/CIN.S13495",year:2014,citations:137},github:"https://github.com/CBIIT-CGBB/OmicCircos2",width:831,height:1568,github_stars:7},{name:"ABrowse (genome browser)",img:"abrowse2.png",tags:["General","Historical"],language:["JS"],platform:["Web"],note:"Had integrations with BioMart, Taverna",pub:{doi:"10.1186/1471-2105-13-2",year:2012,citations:17},width:1200,height:727},{name:"VRPG",tags:["Graph","Pangenome"],img:"vrpg.png",language:["C++","Python"],platform:["Web"],url:"https://github.com/codeatcg/VRPG",pub:{doi:"10.1101/2023.01.20.524991",year:2023,citations:1},github_stars:23,width:949,height:696},{name:"Taxonium",note:"Genome variation visualisation in Taxonium is provided by the 'Treenome Viewer': https://academic.oup.com/bioinformatics/article/39/1/btac772/6858450",tags:["Phylogenetics","Microbiology"],img:"taxonium.png",language:["JS","Python"],platform:["Web"],url:"https://taxonium.org",pub:{doi:"10.7554/eLife.82392",year:2022,citations:37},github_stars:86,width:1e3,height:525},{name:"MosaicCatcher pipeline",tags:["Single cell","Strand-seq"],img:"mosaicatcher.png",github:"https://github.com/friendsofstrandseq/mosaicatcher-pipeline",language:["R","Python","SnakeMake"],width:2483,height:3524,github_stars:21},{name:"TogoStanza Protein Browser",img:"togostanza.png",tags:["Protein"],language:["JS"],url:"https://db-dev.jpostdb.org/ts/stanza/protein_browser/help.html",width:1474,height:889},{name:"ReConPlot",img:"reconplot.png",github:"https://github.com/cortes-ciriano-lab/ReConPlot",language:["R"],tags:["SV","CNV"],pub:{doi:"10.1101/2023.02.24.529890",year:2023,citations:1},width:917,height:430,github_stars:21},{name:"rich-msa",language:["Python"],tags:["Text based","MSA"],github:"https://github.com/althonos/rich-msa",img:"richmsa.png",width:933,height:921,github_stars:78},{name:"gtracks",tags:["General"],language:["Python"],note:"Powered by pyGenomeTracks",url:"https://gitlab.com/salk-tm/gtracks",img:"gtracks.png",width:1133,height:297},{name:"bamscope",tags:["Alignments viewer"],language:["Kotlin"],url:"https://github.com/jslfree080/bamscope",img:"bamscope.png",width:1199,height:1591,github_stars:10},{name:"syntR",img:"syntr.png",github:"https://github.com/ksamuk/syntR",url:"https://www.samuklab.com/syntR/articles/syntr_tutorial.html",language:["R"],tags:["Comparative","Dotplot"],width:1152,height:1152,github_stars:5},{name:"GCSnap",img:"gcsnap.png",tags:["Comparative"],github:"https://github.com/JoanaMPereira/GCsnap",pub:{doi:"https://doi.org/10.1016/j.jmb.2021.166943",year:2021,citations:8},language:["Python"],github_stars:25,width:4226,height:1981},{name:"trackplot (python)",img:"trackplot_python.png",tags:["General","Gene structure","Sashimi"],language:["Python"],pub:{doi:"https://doi.org/10.1371/journal.pcbi.1011477",year:2023,citations:2},url:"https://github.com/ygidtu/trackplot",width:491,height:355,github_stars:75},{name:"BAMdash",url:"https://github.com/jonas-fuchs/BAMdash/",img:"bamdash.png",language:["Python"],tags:["Coverage"],width:1494,height:636,github_stars:38},{name:"ModDotPlot",img:"moddotplot.png",url:"https://github.com/marbl/ModDotPlot",language:["Python"],pub:{doi:"10.1101/2024.04.15.589623",year:2024,citations:4},tags:["Comparative","Dotplot","Heatmap","Repeats"],width:1926,height:1296,github_stars:119},{name:"odp (oxford dot plots)",img:"odp.png",tags:["Comparative","Dotplot","Snakemake","Multi-way synteny"],url:"https://github.com/conchoecia/odp",language:["Python"],pub:{doi:"https://doi.org/10.1038/s41586-023-05936-6",year:2023,citations:144},note:"Pub is not for visualization tool, but it is suggested to cite this paper",width:1e3,height:618,github_stars:133},{name:"genoVi",img:"genovi.png",url:"https://github.com/robotoD/GenoVi",language:["Python"],pub:{doi:"https://doi.org/10.1371/journal.pcbi.1010998",year:2023,citations:22},tags:["Circular","Comparative","Microbiology"],width:1500,height:1500,github_stars:81},{name:"TRVZ (TRGT tandem repeat genotyping visualizer)",img:"trvz.png",language:["Rust"],url:"https://github.com/PacificBiosciences/trgt",tags:["Repeats","Graph"],pub:{doi:"https://doi.org/10.1101/2023.05.12.540470",year:2023,citations:11},width:3154,height:2261,github_stars:106},{name:"BRICK (BRIG-like circular knowledgebase)",note:"See also BRIG",github:"https://github.com/esteinig/brick",url:"https://brick.ink/",img:"brick.png",language:["JS"],tags:["Circular","Comparative","Microbiology"],width:1096,height:836,github_stars:12},{name:"SGTK (scaffold graph toolkit)",interactive:["true"],language:["JS","C++"],tags:["Graph"],img:"sgtk.png",url:"https://olga24912.github.io/SGTK/",github:"https://github.com/olga24912/SGTK",pub:{doi:"https://doi.org/10.1093/bioinformatics/bty956",year:2018,citations:9},width:1371,height:337,github_stars:30},{name:"pgv (graph tool)",github:"https://github.com/w-gao/pgv",url:"https://w-gao.github.io/pgv/",img:"pgv2.png",tags:["Graph"],language:["JS","Python"],width:1281,height:874,github_stars:19},{name:"Panagram",tags:["K-mer","Pangenome"],url:"https://github.com/kjenike/panagram",language:["Python"],img:"panagram.png",width:693,height:500,github_stars:58},{name:"VAG",pub:{doi:"https://doi.org/10.1101/2023.01.20.524849",year:2023,citations:0},tags:["Graph","Pangenome"],img:"vag.jpg",github:"https://github.com/lipingfangs/VAG",language:["Python","JS"],width:1694,height:667,github_stars:20},{name:"ntSynt",img:"ntsynt.png",language:["R"],tags:["Comparative","Multi-way synteny"],github:"https://github.com/bcgsc/ntSynt/",url:"https://github.com/bcgsc/ntSynt/tree/main/visualization_scripts",pub:{doi:"https://doi.org/10.1101/2024.02.07.579356",year:2024,citations:1},note:"Uses gggenomes",width:5905,height:2362,github_stars:71},{tags:["Static","Comparative"],name:"geneviewer",img:"geneviewer.png",url:"https://nvelden.github.io/geneviewer/",github:"https://github.com/nvelden/geneviewer",language:["R"],width:1492,height:1247,github_stars:31},{name:"figeno",img:"figeno.png",tags:["Hi-C","Epigenomics","Methylation","Alignments viewer"],language:["Python","JS"],url:"https://github.com/CompEpigen/figeno",pub:{doi:"https://doi.org/10.1093/bioinformatics/btae354",year:2024,citations:1},width:2882,height:1197,github_stars:250},{name:"SVhawkeye",img:"svhawkeye.jpg",tags:["SV","Alignments viewer"],language:["Python","R"],url:"https://github.com/yywan0913/SVhawkeye",pub:{doi:"https://doi.org/10.3389/fgene.2024.1352443",year:2024,citations:0},github_stars:24,width:1065,height:576},{name:"SeeNV",img:"seenv.png",url:"https://github.com/MSBradshaw/SeeNV",pub:{doi:"https://doi.org/10.1101/2024.05.08.593244",year:2024,citations:0},language:["Python"],tags:["CNV","Population","SV","Coverage"],width:4868,height:5454,github_stars:3},{name:"SYNY",img:"syny.png",url:"https://github.com/PombertLab/SYNY",pub:{doi:"https://doi.org/10.1101/2024.05.09.593317",year:2024,citations:0},language:["Perl","Python"],tags:["Comparative","Dotplot","Circular","Ideogram","Multi-way synteny"],width:1692,height:2446,github_stars:35},{name:"chrov",img:"chrov.png",url:"https://github.com/rraadd88/chrov",language:["Python"],tags:["Ideogram","Lollipops","Circular","CNV"],note:"See also usage in https://github.com/rraadd88/beditor",width:576,height:1106,github_stars:9},{name:"waragraph",img:"waragraph.png",tags:["Graph"],url:"https://chfi.github.io/waragraph/",github:"https://github.com/chfi/waragraph",note:"Deployed to the web via wasm",language:["Rust"],platform:["Web","Desktop"],width:1783,height:901,github_stars:26},{name:"gff2ps",url:"https://genome.crg.es/software/gfftools/GFF2PS.html",pub:{doi:"10.1093/bioinformatics/16.8.743",year:2e3,citations:40},img:"gff2ps.png",tags:["Historical"],note:"Used to make original figures for the human Celera genome",width:1114,height:985},{name:"SVbyEye",img:"svbyeye.png",github:"https://github.com/daewoooo/SVbyEye/",url:"https://htmlpreview.github.io/?https://github.com/daewoooo/SVbyEye/blob/master/vignettes/SVbyEye.html",tags:["Multi-way synteny","Comparative"],pub:{doi:"10.1101/2024.09.11.612418",year:2024,citations:0},language:["R"],width:1455,height:903,github_stars:71},{name:"GeneFuse",img:"genefuse.png",github:"https://github.com/OpenGene/GeneFuse",url:"https://opengene.org/GeneFuse/report.html",language:["C","C++"],tags:["Gene fusion","Text based"],pub:{doi:"10.7150/ijbs.24626",year:2018,citations:34},width:1422,height:487,github_stars:115},{name:"plascad",img:"plascad.png",github:"https://github.com/David-OConnor/plascad",language:["Rust"],tags:["Synthetic biology","Plasmid","Circular"],width:1157,height:1690,github_stars:102},{name:"circularMT",img:"circularmt.png",language:["C#"],tags:["Circular"],url:"https://github.com/msjimc/circularMT",pub:{doi:"https://doi.org/10.1093/bioinformatics/btae450",year:2024,citations:0},width:1262,height:1040,github_stars:8},{name:"AGFusion",img:"agfusion.png",tags:["Gene fusion"],url:"https://github.com/murphycj/AGFusion",pub:{doi:"https://doi.org/10.1101/080903",year:2016,citations:17},note:"See also https://www.agfusion.app/ for web based version",width:837,height:560,github_stars:59},{name:"lovis4u",img:"lovis4u.png",url:"https://github.com/art-egorov/lovis4u",tags:["Microbiology","Comparative","Multi-way synteny"],language:["Python"],pub:{doi:"10.1101/2024.09.11.612399",year:2024,citations:0},width:1871,height:912,github_stars:71},{name:"wgatools",img:"wgatools.png",tags:["Text based","MSA","Dotplot","Multi-way","Comparative"],url:"https://github.com/wjwei-handsome/wgatools",pub:{doi:"https://doi.org/10.48550/arXiv.2409.08569"},language:["Rust"],width:1421,height:791,github_stars:119}],nl=t=>{let e;const i=new Set,n=(g,d)=>{const m=typeof g=="function"?g(e):g;if(!Object.is(m,e)){const p=e;e=d??(typeof m!="object"||m===null)?m:Object.assign({},e,m),i.forEach(v=>v(e,p))}},r=()=>e,s={setState:n,getState:r,getInitialState:()=>l,subscribe:g=>(i.add(g),()=>i.delete(g))},l=e=t(n,r,s);return s},pp=t=>t?nl(t):nl,mp=t=>t;function dp(t,e=mp){const i=Ha.useSyncExternalStore(t.subscribe,()=>e(t.getState()),()=>e(t.getInitialState()));return Ha.useDebugValue(i),i}const fp=t=>{const e=pp(t),i=n=>dp(e,n);return Object.assign(i,e),i},bp=t=>fp,{selected:yp,language:wp,tag:vp,platform:Sp,interactive:Cp,mode:kp,latest:_p,citations:xp,year:Pp,stars:Ep}=Eg.parse(window.location.search);function Yr(t){return t?Number(t):void 0}function De(t){return t?String(t):void 0}function jp(t){return t?JSON.parse(`${t}`):void 0}const gi=bp()(t=>({mode:De(kp)??"list",filters:{language:De(wp),tag:De(vp),platform:De(Sp),interactive:De(Cp)},selected:De(yp),sort:{latest:jp(_p)??!0,citations:Yr(xp),stars:Yr(Ep),year:Yr(Pp)},setMode:e=>{t(()=>({mode:e}))},setSort:e=>{t(()=>({sort:e}))},setFilters:e=>{t(()=>({filters:e}))},setSelected:e=>{t(()=>({selected:e}))}}));function Np({tools:t}){const e=gi(),{filters:i}=e,{interactive:n=""}=i,r=new Set;for(const o of t)if(o.interactive)for(const a of o.interactive)r.add(a);return f.jsxs("div",{children:[f.jsx("label",{htmlFor:"interactive-select",children:"Filter on interactivity: "}),f.jsxs("select",{value:n,id:"interactive-select",onChange:o=>{e.setFilters({...i,interactive:o.target.value})},children:[f.jsx("option",{value:"",children:"-- select an option --"}),[...r].sort().map(o=>f.jsx("option",{id:o,children:o},o))]})]})}function Ap({tools:t}){const e=gi(),{filters:i}=e,{platform:n=""}=i,r=new Set;for(const o of t)if(o.platform)for(const a of o.platform)r.add(a);return f.jsxs("div",{children:[f.jsx("label",{htmlFor:"platform-select",children:"Filter on platform: "}),f.jsxs("select",{value:n,id:"platform-select",onChange:o=>{e.setFilters({...i,platform:o.target.value})},children:[f.jsx("option",{value:"",children:"-- select an option --"}),[...r].sort().map(o=>f.jsx("option",{id:o,children:o},o))]})]})}function Rp({tools:t}){const e=gi(),{filters:i}=e,{tag:n=""}=i,r=new Set;for(const o of t)if(o.tags)for(const a of o.tags)r.add(a);return f.jsxs("div",{className:"form-group",children:[f.jsx("label",{htmlFor:"tag-select",children:"Filter on tag: "}),f.jsxs("select",{id:"tag-select",value:n,onChange:o=>{e.setFilters({...i,tag:o.target.value})},children:[f.jsx("option",{value:"",children:"-- select an option --"}),[...r].sort().map(o=>f.jsx("option",{id:o,children:o},o))]})]})}function zp({tools:t}){const e=gi(),{filters:i}=e,{language:n=""}=i,r=new Set;for(const o of t)if(o.language)for(const a of o.language)r.add(a);return f.jsxs("div",{children:[f.jsx("label",{htmlFor:"language-select",children:"Filter on language: "}),f.jsxs("select",{value:n,id:"language-select",onChange:o=>{e.setFilters({...i,language:o.target.value})},children:[f.jsx("option",{value:"",children:"-- select an option --"}),[...r].sort().map(o=>f.jsx("option",{id:o,children:o},o))]})]})}var jg={exports:{}};(function(t,e){(function(i,n,r){t.exports=r(),t.exports.default=r()})("slugify",Ag,function(){var i=JSON.parse(`{"$":"dollar","%":"percent","&":"and","<":"less",">":"greater","|":"or","¢":"cent","£":"pound","¤":"currency","¥":"yen","©":"(c)","ª":"a","®":"(r)","º":"o","À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","Æ":"AE","Ç":"C","È":"E","É":"E","Ê":"E","Ë":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ð":"D","Ñ":"N","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","Ù":"U","Ú":"U","Û":"U","Ü":"U","Ý":"Y","Þ":"TH","ß":"ss","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","æ":"ae","ç":"c","è":"e","é":"e","ê":"e","ë":"e","ì":"i","í":"i","î":"i","ï":"i","ð":"d","ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","ù":"u","ú":"u","û":"u","ü":"u","ý":"y","þ":"th","ÿ":"y","Ā":"A","ā":"a","Ă":"A","ă":"a","Ą":"A","ą":"a","Ć":"C","ć":"c","Č":"C","č":"c","Ď":"D","ď":"d","Đ":"DJ","đ":"dj","Ē":"E","ē":"e","Ė":"E","ė":"e","Ę":"e","ę":"e","Ě":"E","ě":"e","Ğ":"G","ğ":"g","Ģ":"G","ģ":"g","Ĩ":"I","ĩ":"i","Ī":"i","ī":"i","Į":"I","į":"i","İ":"I","ı":"i","Ķ":"k","ķ":"k","Ļ":"L","ļ":"l","Ľ":"L","ľ":"l","Ł":"L","ł":"l","Ń":"N","ń":"n","Ņ":"N","ņ":"n","Ň":"N","ň":"n","Ō":"O","ō":"o","Ő":"O","ő":"o","Œ":"OE","œ":"oe","Ŕ":"R","ŕ":"r","Ř":"R","ř":"r","Ś":"S","ś":"s","Ş":"S","ş":"s","Š":"S","š":"s","Ţ":"T","ţ":"t","Ť":"T","ť":"t","Ũ":"U","ũ":"u","Ū":"u","ū":"u","Ů":"U","ů":"u","Ű":"U","ű":"u","Ų":"U","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","ź":"z","Ż":"Z","ż":"z","Ž":"Z","ž":"z","Ə":"E","ƒ":"f","Ơ":"O","ơ":"o","Ư":"U","ư":"u","Lj":"LJ","lj":"lj","Nj":"NJ","nj":"nj","Ș":"S","ș":"s","Ț":"T","ț":"t","ə":"e","˚":"o","Ά":"A","Έ":"E","Ή":"H","Ί":"I","Ό":"O","Ύ":"Y","Ώ":"W","ΐ":"i","Α":"A","Β":"B","Γ":"G","Δ":"D","Ε":"E","Ζ":"Z","Η":"H","Θ":"8","Ι":"I","Κ":"K","Λ":"L","Μ":"M","Ν":"N","Ξ":"3","Ο":"O","Π":"P","Ρ":"R","Σ":"S","Τ":"T","Υ":"Y","Φ":"F","Χ":"X","Ψ":"PS","Ω":"W","Ϊ":"I","Ϋ":"Y","ά":"a","έ":"e","ή":"h","ί":"i","ΰ":"y","α":"a","β":"b","γ":"g","δ":"d","ε":"e","ζ":"z","η":"h","θ":"8","ι":"i","κ":"k","λ":"l","μ":"m","ν":"n","ξ":"3","ο":"o","π":"p","ρ":"r","ς":"s","σ":"s","τ":"t","υ":"y","φ":"f","χ":"x","ψ":"ps","ω":"w","ϊ":"i","ϋ":"y","ό":"o","ύ":"y","ώ":"w","Ё":"Yo","Ђ":"DJ","Є":"Ye","І":"I","Ї":"Yi","Ј":"J","Љ":"LJ","Њ":"NJ","Ћ":"C","Џ":"DZ","А":"A","Б":"B","В":"V","Г":"G","Д":"D","Е":"E","Ж":"Zh","З":"Z","И":"I","Й":"J","К":"K","Л":"L","М":"M","Н":"N","О":"O","П":"P","Р":"R","С":"S","Т":"T","У":"U","Ф":"F","Х":"H","Ц":"C","Ч":"Ch","Ш":"Sh","Щ":"Sh","Ъ":"U","Ы":"Y","Ь":"","Э":"E","Ю":"Yu","Я":"Ya","а":"a","б":"b","в":"v","г":"g","д":"d","е":"e","ж":"zh","з":"z","и":"i","й":"j","к":"k","л":"l","м":"m","н":"n","о":"o","п":"p","р":"r","с":"s","т":"t","у":"u","ф":"f","х":"h","ц":"c","ч":"ch","ш":"sh","щ":"sh","ъ":"u","ы":"y","ь":"","э":"e","ю":"yu","я":"ya","ё":"yo","ђ":"dj","є":"ye","і":"i","ї":"yi","ј":"j","љ":"lj","њ":"nj","ћ":"c","ѝ":"u","џ":"dz","Ґ":"G","ґ":"g","Ғ":"GH","ғ":"gh","Қ":"KH","қ":"kh","Ң":"NG","ң":"ng","Ү":"UE","ү":"ue","Ұ":"U","ұ":"u","Һ":"H","һ":"h","Ә":"AE","ә":"ae","Ө":"OE","ө":"oe","Ա":"A","Բ":"B","Գ":"G","Դ":"D","Ե":"E","Զ":"Z","Է":"E'","Ը":"Y'","Թ":"T'","Ժ":"JH","Ի":"I","Լ":"L","Խ":"X","Ծ":"C'","Կ":"K","Հ":"H","Ձ":"D'","Ղ":"GH","Ճ":"TW","Մ":"M","Յ":"Y","Ն":"N","Շ":"SH","Չ":"CH","Պ":"P","Ջ":"J","Ռ":"R'","Ս":"S","Վ":"V","Տ":"T","Ր":"R","Ց":"C","Փ":"P'","Ք":"Q'","Օ":"O''","Ֆ":"F","և":"EV","ء":"a","آ":"aa","أ":"a","ؤ":"u","إ":"i","ئ":"e","ا":"a","ب":"b","ة":"h","ت":"t","ث":"th","ج":"j","ح":"h","خ":"kh","د":"d","ذ":"th","ر":"r","ز":"z","س":"s","ش":"sh","ص":"s","ض":"dh","ط":"t","ظ":"z","ع":"a","غ":"gh","ف":"f","ق":"q","ك":"k","ل":"l","م":"m","ن":"n","ه":"h","و":"w","ى":"a","ي":"y","ً":"an","ٌ":"on","ٍ":"en","َ":"a","ُ":"u","ِ":"e","ْ":"","٠":"0","١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","پ":"p","چ":"ch","ژ":"zh","ک":"k","گ":"g","ی":"y","۰":"0","۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","฿":"baht","ა":"a","ბ":"b","გ":"g","დ":"d","ე":"e","ვ":"v","ზ":"z","თ":"t","ი":"i","კ":"k","ლ":"l","მ":"m","ნ":"n","ო":"o","პ":"p","ჟ":"zh","რ":"r","ს":"s","ტ":"t","უ":"u","ფ":"f","ქ":"k","ღ":"gh","ყ":"q","შ":"sh","ჩ":"ch","ც":"ts","ძ":"dz","წ":"ts","ჭ":"ch","ხ":"kh","ჯ":"j","ჰ":"h","Ṣ":"S","ṣ":"s","Ẁ":"W","ẁ":"w","Ẃ":"W","ẃ":"w","Ẅ":"W","ẅ":"w","ẞ":"SS","Ạ":"A","ạ":"a","Ả":"A","ả":"a","Ấ":"A","ấ":"a","Ầ":"A","ầ":"a","Ẩ":"A","ẩ":"a","Ẫ":"A","ẫ":"a","Ậ":"A","ậ":"a","Ắ":"A","ắ":"a","Ằ":"A","ằ":"a","Ẳ":"A","ẳ":"a","Ẵ":"A","ẵ":"a","Ặ":"A","ặ":"a","Ẹ":"E","ẹ":"e","Ẻ":"E","ẻ":"e","Ẽ":"E","ẽ":"e","Ế":"E","ế":"e","Ề":"E","ề":"e","Ể":"E","ể":"e","Ễ":"E","ễ":"e","Ệ":"E","ệ":"e","Ỉ":"I","ỉ":"i","Ị":"I","ị":"i","Ọ":"O","ọ":"o","Ỏ":"O","ỏ":"o","Ố":"O","ố":"o","Ồ":"O","ồ":"o","Ổ":"O","ổ":"o","Ỗ":"O","ỗ":"o","Ộ":"O","ộ":"o","Ớ":"O","ớ":"o","Ờ":"O","ờ":"o","Ở":"O","ở":"o","Ỡ":"O","ỡ":"o","Ợ":"O","ợ":"o","Ụ":"U","ụ":"u","Ủ":"U","ủ":"u","Ứ":"U","ứ":"u","Ừ":"U","ừ":"u","Ử":"U","ử":"u","Ữ":"U","ữ":"u","Ự":"U","ự":"u","Ỳ":"Y","ỳ":"y","Ỵ":"Y","ỵ":"y","Ỷ":"Y","ỷ":"y","Ỹ":"Y","ỹ":"y","–":"-","‘":"'","’":"'","“":"\\"","”":"\\"","„":"\\"","†":"+","•":"*","…":"...","₠":"ecu","₢":"cruzeiro","₣":"french franc","₤":"lira","₥":"mill","₦":"naira","₧":"peseta","₨":"rupee","₩":"won","₪":"new shequel","₫":"dong","€":"euro","₭":"kip","₮":"tugrik","₯":"drachma","₰":"penny","₱":"peso","₲":"guarani","₳":"austral","₴":"hryvnia","₵":"cedi","₸":"kazakhstani tenge","₹":"indian rupee","₺":"turkish lira","₽":"russian ruble","₿":"bitcoin","℠":"sm","™":"tm","∂":"d","∆":"delta","∑":"sum","∞":"infinity","♥":"love","元":"yuan","円":"yen","﷼":"rial","ﻵ":"laa","ﻷ":"laa","ﻹ":"lai","ﻻ":"la"}`),n=JSON.parse('{"bg":{"Й":"Y","Ц":"Ts","Щ":"Sht","Ъ":"A","Ь":"Y","й":"y","ц":"ts","щ":"sht","ъ":"a","ь":"y"},"de":{"Ä":"AE","ä":"ae","Ö":"OE","ö":"oe","Ü":"UE","ü":"ue","ß":"ss","%":"prozent","&":"und","|":"oder","∑":"summe","∞":"unendlich","♥":"liebe"},"es":{"%":"por ciento","&":"y","<":"menor que",">":"mayor que","|":"o","¢":"centavos","£":"libras","¤":"moneda","₣":"francos","∑":"suma","∞":"infinito","♥":"amor"},"fr":{"%":"pourcent","&":"et","<":"plus petit",">":"plus grand","|":"ou","¢":"centime","£":"livre","¤":"devise","₣":"franc","∑":"somme","∞":"infini","♥":"amour"},"pt":{"%":"porcento","&":"e","<":"menor",">":"maior","|":"ou","¢":"centavo","∑":"soma","£":"libra","∞":"infinito","♥":"amor"},"uk":{"И":"Y","и":"y","Й":"Y","й":"y","Ц":"Ts","ц":"ts","Х":"Kh","х":"kh","Щ":"Shch","щ":"shch","Г":"H","г":"h"},"vi":{"Đ":"D","đ":"d"},"da":{"Ø":"OE","ø":"oe","Å":"AA","å":"aa","%":"procent","&":"og","|":"eller","$":"dollar","<":"mindre end",">":"større end"},"nb":{"&":"og","Å":"AA","Æ":"AE","Ø":"OE","å":"aa","æ":"ae","ø":"oe"},"it":{"&":"e"},"nl":{"&":"en"},"sv":{"&":"och","Å":"AA","Ä":"AE","Ö":"OE","å":"aa","ä":"ae","ö":"oe"}}');function r(o,a){if(typeof o!="string")throw new Error("slugify: string argument expected");a=typeof a=="string"?{replacement:a}:a||{};var s=n[a.locale]||{},l=a.replacement===void 0?"-":a.replacement,g=a.trim===void 0?!0:a.trim,d=o.normalize().split("").reduce(function(m,p){var v=s[p];return v===void 0&&(v=i[p]),v===void 0&&(v=p),v===l&&(v=" "),m+v.replace(a.remove||/[^\w\s$*_+~.()'"!\-:@]+/g,"")},"");return a.strict&&(d=d.replace(/[^A-Za-z0-9\s]/g,"")),g&&(d=d.trim()),d=d.replace(/\s+/g,l),a.lower&&(d=d.toLowerCase()),d}return r.extend=function(o){Object.assign(i,o)},r})})(jg);var Mp=jg.exports;const Gp=ol(Mp);function Dp(t){const e=Ut.useRef(null),i=Ut.useRef(!1);return Ut.useEffect(()=>{e.current&&(t?(i.current||e.current.showModal(),i.current=!0):(i.current&&e.current.close(),i.current=!1))},[t]),e}function Lp({open:t,img:e}){const i=Dp(t);return f.jsx("dialog",{ref:i,children:f.jsx("img",{src:e,className:"w-full max-h-screen object-contain"})})}function rl(t="",e=40){return t.slice(0,e)+(t.length>e?"...":"")}function Ip({tool:{name:t,url:e,language:i,tags:n,img:r,width:o,height:a,github:s,twitter:l,platform:g,github_stars:d,pub:m,note:p,alt_url:v,interactive:S}}){const y=gi(),{filters:j}=y,[h,u]=Ut.useState(!1),c=Gp(t,{remove:/[!"'()*+.:@~]/g});return f.jsxs("div",{className:"bg-white dark:bg-[#333] flex flex-col lg:flex-row justify-between border border-[#ccc] dark:border-[#666] border-solid p-4 shadow-sm shadow-[#ccc] dark:shadow-[#333]",children:[f.jsxs("div",{children:[f.jsx("h3",{className:"m-0",children:f.jsx("a",{id:c,href:"#",className:"no-underline hover:underline text-inherit",onClick:b=>{y.setSelected(`#${c}`),b.preventDefault()},children:t})}),f.jsx("p",{children:f.jsx("a",{href:e,children:rl(e)})}),v?f.jsxs("p",{children:["Alt url ",f.jsx("a",{href:v,children:rl(v)})]}):null,S?f.jsxs("p",{className:"interactive",children:["Interactive: ",S.join(",")]}):null,m?f.jsxs("p",{children:["Publication:"," ",m.doi?f.jsx("a",{href:m.doi.startsWith("http")?m.doi:`https://dx.doi.org/${m.doi}`,children:"(doi link)"}):null," ",m.year?` (${m.year})`:null,m.citations===void 0?null:` (# citations ${m.citations})`]}):null,i?f.jsxs("p",{children:["Language:"," ",i.map((b,C)=>[C>0&&", ",f.jsx("a",{href:"#",onClick:x=>{y.setFilters({...j,language:b}),x.preventDefault()},children:b},`${b}-${C}`)])]}):null,n?f.jsxs("p",{children:["Tags:"," ",n.map((b,C)=>[C>0&&", ",f.jsx("a",{href:"#",onClick:x=>{y.setFilters({...j,tag:b}),x.preventDefault()},children:b},`${b}-${C}`)])]}):null,p?f.jsxs("p",{children:["Note: ",p]}):null,l?f.jsxs("p",{className:"link",children:["Twitter: ",f.jsx("a",{href:l,children:l})]}):null,s?f.jsxs("p",{className:"link",children:["Github: ",f.jsx("a",{href:s,children:s})]}):null,d?f.jsxs("p",{children:["Github Stargazers: ",d]}):null,g?f.jsxs("p",{children:["Platform: ",g.join(", ")]}):null]}),f.jsxs("figure",{className:"m-0",onClick:()=>{u(b=>!b)},children:[r?f.jsx("img",{alt:`screenshot of ${t}`,loading:"lazy",className:"max-w-sm max-h-sm w-full h-auto",width:o,height:a,src:r}):f.jsx("p",{children:"No screenshot"}),h&&r?f.jsx(Lp,{open:!0,img:r}):null]})]})}function Tp({tools:t}){const e="border border-solid dark:border-[#555] border-[#aaa] max-w-80 text-ellipsis overflow-hidden p-1";return f.jsxs("table",{className:"border-collapse text-xs",children:[f.jsx("thead",{children:f.jsxs("tr",{children:[f.jsx("th",{className:e,children:"Name"}),f.jsx("th",{className:e,children:"Tags"}),f.jsx("th",{className:e,children:"Pub"}),f.jsx("th",{className:e,children:"URL"}),f.jsx("th",{className:e,children:"IMG"})]})}),f.jsx("tbody",{children:t.map(({name:i,github:n,pub:r,tags:o,img:a,url:s})=>f.jsxs("tr",{children:[f.jsx("td",{className:e,children:i}),f.jsx("td",{className:e,children:o==null?void 0:o.join(", ")}),f.jsx("td",{className:e,children:r?f.jsx(f.Fragment,{children:r.doi?f.jsxs("a",{href:r.doi.startsWith("http")?r.doi:`https://dx.doi.org/${r.doi}`,children:["link ",r.year?`(${r.year})`:""," ",r.citations===void 0?"":`(${r.citations} citations)`]}):null}):null}),f.jsxs("td",{className:e,children:[f.jsx("a",{href:s,target:"_blank",rel:"noreferrer",children:s})," ",n&&n!==s?f.jsx("a",{href:n,children:n}):null]}),f.jsx("td",{className:e,children:f.jsx("a",{href:a,target:"_blank",rel:"noreferrer",children:a})})]},i))})]})}function Vp(){const t=gi(),{selected:e,mode:i,filters:n,sort:r}=t,{language:o,tag:a,platform:s,interactive:l}=n;Ut.useEffect(()=>{const y=Eg.stringify({...n,...r,selected:e});y&&window.history.replaceState(null,"",`?${y}`)},[n,r,e]),Ut.useEffect(()=>{if(e){const y=document.querySelector(e);y&&y.scrollIntoView({block:"start"})}},[e]);let g=r.latest?[...il].reverse():[...il];const d=r.year;d!==void 0&&(g=g.sort((y,j)=>{var h,u;return+(((h=y.pub)==null?void 0:h.year)??Number.POSITIVE_INFINITY*d)-+(((u=j.pub)==null?void 0:u.year)??Number.POSITIVE_INFINITY*d)}),r.year===-1&&(g=g.reverse()));const m=r.citations;m!==void 0&&(g=g.sort((y,j)=>{var h,u;return+(((h=y.pub)==null?void 0:h.citations)??Number.POSITIVE_INFINITY*m)-+(((u=j.pub)==null?void 0:u.citations)??Number.POSITIVE_INFINITY*m)}),r.citations===-1&&(g=g.reverse()));const p=r.stars;p!==void 0&&(g=g.sort((y,j)=>+(y.github_stars??Number.POSITIVE_INFINITY*p)-+(j.github_stars??Number.POSITIVE_INFINITY*p)),r.stars===-1&&(g=g.reverse()));const v=g.filter(y=>{var j;return o?(j=y.language)==null?void 0:j.includes(o):!0}).filter(y=>{var j;return a?(j=y.tags)==null?void 0:j.includes(a):!0}).filter(y=>{var j;return s?(j=y.platform)==null?void 0:j.includes(s):!0}).filter(y=>{var j;return l?(j=y.interactive)==null?void 0:j.includes(l):!0}),S="https://github.com/cmdcolin/awesome-genome-visualization";return f.jsxs("main",{className:"m-auto max-w-7xl",children:[f.jsx("h1",{children:"awesome-genome-visualization"}),f.jsxs("p",{children:["This is a companion website for the github repo"," ",f.jsx("a",{href:S,children:S})]}),f.jsxs("p",{children:["Also check out our twitter account"," ",f.jsx("a",{href:"https://twitter.com/awesomegenomev1",children:"@awesomegenomev1"})]}),f.jsx("p",{children:"Feel free to submit PRs to add more tools"}),f.jsxs("p",{className:"max-w-lg",children:["Filters:",f.jsx("button",{onClick:()=>{t.setFilters({})},children:"Clear filters"}),f.jsx("button",{onClick:()=>{t.setFilters({tag:"General"})},children:"General-purpose genome browsers"}),f.jsx("button",{onClick:()=>{t.setFilters({tag:"Comparative"})},children:"Synteny/comparative browsers"}),f.jsx("button",{onClick:()=>{t.setFilters({tag:"Dotplot"})},children:"Dotplot viewer"}),f.jsx("button",{onClick:()=>{t.setFilters({tag:"MSA"})},children:"MSA viewer"}),f.jsx("button",{onClick:()=>{t.setFilters({tag:"Graph"})},children:"Graph genome"}),f.jsx("button",{onClick:()=>{t.setFilters({tag:"Text based"})},children:"Text based"})]}),f.jsxs("p",{className:"max-w-lg",children:["Sorts:",f.jsx("button",{onClick:()=>{t.setSort({latest:!0})},children:"Recently added"}),f.jsx("button",{onClick:()=>{t.setSort({latest:!1})},children:"Least recently added"}),f.jsx("button",{onClick:()=>{t.setSort({year:-1})},children:"Year (dec)"}),f.jsx("button",{onClick:()=>{t.setSort({year:1})},children:"Year (asc)"}),f.jsx("button",{onClick:()=>{t.setSort({citations:-1})},children:"Number citations (dec)"}),f.jsx("button",{onClick:()=>{t.setSort({citations:1})},children:"Number citations (asc)"}),f.jsx("button",{onClick:()=>{t.setSort({stars:-1})},children:"Github stars (dec)"}),f.jsx("button",{onClick:()=>{t.setSort({stars:1})},children:"Github stars (asc)"})]}),f.jsxs("p",{children:["Selection:",f.jsx("button",{onClick:()=>{t.setSelected()},children:"Clear selection"})]}),f.jsxs("div",{children:[f.jsx(Rp,{tools:g}),f.jsx(zp,{tools:g}),f.jsx(Ap,{tools:g}),f.jsx(Np,{tools:g})]}),f.jsxs("div",{children:[f.jsx("label",{htmlFor:"grid",children:"Grid"}),f.jsx("input",{id:"grid",type:"radio",checked:i==="grid",onChange:()=>{t.setMode("grid")}}),f.jsx("label",{htmlFor:"list",children:"List"}),f.jsx("input",{id:"list",type:"radio",checked:i==="list",onChange:()=>{t.setMode("list")}})]}),i==="list"?f.jsx("div",{className:"mt-6 flex flex-col space-y-8 overflow-hidden",children:v.map(y=>f.jsx(Ip,{tool:y},y.name))}):f.jsx(Tp,{tools:v}),f.jsx("p",{children:"Note: if you would like your tool removed or screenshot removed (for copyright purposes for example) let me know"})]})}Kr.createRoot(document.querySelector("#root")).render(f.jsx(Vp,{})); -//# sourceMappingURL=index-B1iXqpR7.js.map +`+o.stack}return{value:t,source:e,stack:r,digest:null}}function Ur(t,e,i){return{value:t,source:null,stack:i??null,digest:e??null}}function No(t,e){try{console.error(e.value)}catch(i){setTimeout(function(){throw i})}}var Rc=typeof WeakMap=="function"?WeakMap:Map;function Ju(t,e,i){i=Ht(-1,i),i.tag=3,i.payload={element:null};var n=e.value;return i.callback=function(){tr||(tr=!0,Fo=n),No(t,e)},i}function Uu(t,e,i){i=Ht(-1,i),i.tag=3;var n=t.type.getDerivedStateFromError;if(typeof n=="function"){var r=e.value;i.payload=function(){return n(r)},i.callback=function(){No(t,e)}}var o=t.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(i.callback=function(){No(t,e),typeof n!="function"&&(ge===null?ge=new Set([this]):ge.add(this));var a=e.stack;this.componentDidCatch(e.value,{componentStack:a!==null?a:""})}),i}function Gs(t,e,i){var n=t.pingCache;if(n===null){n=t.pingCache=new Rc;var r=new Set;n.set(e,r)}else r=n.get(e),r===void 0&&(r=new Set,n.set(e,r));r.has(i)||(r.add(i),t=Uc.bind(null,t,e,i),e.then(t,t))}function Ds(t){do{var e;if((e=t.tag===13)&&(e=t.memoizedState,e=e!==null?e.dehydrated!==null:!0),e)return t;t=t.return}while(t!==null);return null}function Ls(t,e,i,n,r){return t.mode&1?(t.flags|=65536,t.lanes=r,t):(t===e?t.flags|=65536:(t.flags|=128,i.flags|=131072,i.flags&=-52805,i.tag===1&&(i.alternate===null?i.tag=17:(e=Ht(-1,1),e.tag=2,ue(i,e,1))),i.lanes|=1),t)}var zc=qt.ReactCurrentOwner,ht=!1;function at(t,e,i,n){e.child=t===null?vu(e,null,i,n):ni(e,t.child,i,n)}function Is(t,e,i,n,r){i=i.render;var o=e.ref;return Xe(e,r),n=_a(t,e,i,n,o,r),i=xa(),t!==null&&!ht?(e.updateQueue=t.updateQueue,e.flags&=-2053,t.lanes&=~r,Kt(t,e,r)):(T&&i&&ca(e),e.flags|=1,at(t,e,n,r),e.child)}function Ts(t,e,i,n,r){if(t===null){var o=i.type;return typeof o=="function"&&!Da(o)&&o.defaultProps===void 0&&i.compare===null&&i.defaultProps===void 0?(e.tag=15,e.type=o,Hu(t,e,o,n,r)):(t=Mn(i.type,null,n,e,e.mode,r),t.ref=e.ref,t.return=e,e.child=t)}if(o=t.child,!(t.lanes&r)){var a=o.memoizedProps;if(i=i.compare,i=i!==null?i:Wi,i(a,n)&&t.ref===e.ref)return Kt(t,e,r)}return e.flags|=1,t=ce(o,n),t.ref=e.ref,t.return=e,e.child=t}function Hu(t,e,i,n,r){if(t!==null){var o=t.memoizedProps;if(Wi(o,n)&&t.ref===e.ref)if(ht=!1,e.pendingProps=n=o,(t.lanes&r)!==0)t.flags&131072&&(ht=!0);else return e.lanes=t.lanes,Kt(t,e,r)}return Ro(t,e,i,n,r)}function $u(t,e,i){var n=e.pendingProps,r=n.children,o=t!==null?t.memoizedState:null;if(n.mode==="hidden")if(!(e.mode&1))e.memoizedState={baseLanes:0,cachePool:null,transitions:null},D($e,dt),dt|=i;else{if(!(i&1073741824))return t=o!==null?o.baseLanes|i:i,e.lanes=e.childLanes=1073741824,e.memoizedState={baseLanes:t,cachePool:null,transitions:null},e.updateQueue=null,D($e,dt),dt|=t,null;e.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=o!==null?o.baseLanes:i,D($e,dt),dt|=n}else o!==null?(n=o.baseLanes|i,e.memoizedState=null):n=i,D($e,dt),dt|=n;return at(t,e,r,i),e.child}function Qu(t,e){var i=e.ref;(t===null&&i!==null||t!==null&&t.ref!==i)&&(e.flags|=512,e.flags|=2097152)}function Ro(t,e,i,n,r){var o=pt(i)?Ee:ot.current;return o=ei(e,o),Xe(e,r),i=_a(t,e,i,n,o,r),n=xa(),t!==null&&!ht?(e.updateQueue=t.updateQueue,e.flags&=-2053,t.lanes&=~r,Kt(t,e,r)):(T&&n&&ca(e),e.flags|=1,at(t,e,i,r),e.child)}function Vs(t,e,i,n,r){if(pt(i)){var o=!0;Jn(e)}else o=!1;if(Xe(e,r),e.stateNode===null)Nn(t,e),Bu(e,i,n),Ao(e,i,n,r),n=!0;else if(t===null){var a=e.stateNode,s=e.memoizedProps;a.props=s;var l=a.context,g=i.contextType;typeof g=="object"&&g!==null?g=xt(g):(g=pt(i)?Ee:ot.current,g=ei(e,g));var d=i.getDerivedStateFromProps,m=typeof d=="function"||typeof a.getSnapshotBeforeUpdate=="function";m||typeof a.UNSAFE_componentWillReceiveProps!="function"&&typeof a.componentWillReceiveProps!="function"||(s!==n||l!==g)&&Ms(e,a,n,g),te=!1;var p=e.memoizedState;a.state=p,Yn(e,n,a,r),l=e.memoizedState,s!==n||p!==l||ct.current||te?(typeof d=="function"&&(jo(e,i,d,n),l=e.memoizedState),(s=te||zs(e,i,s,n,p,l,g))?(m||typeof a.UNSAFE_componentWillMount!="function"&&typeof a.componentWillMount!="function"||(typeof a.componentWillMount=="function"&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount=="function"&&a.UNSAFE_componentWillMount()),typeof a.componentDidMount=="function"&&(e.flags|=4194308)):(typeof a.componentDidMount=="function"&&(e.flags|=4194308),e.memoizedProps=n,e.memoizedState=l),a.props=n,a.state=l,a.context=g,n=s):(typeof a.componentDidMount=="function"&&(e.flags|=4194308),n=!1)}else{a=e.stateNode,Cu(t,e),s=e.memoizedProps,g=e.type===e.elementType?s:At(e.type,s),a.props=g,m=e.pendingProps,p=a.context,l=i.contextType,typeof l=="object"&&l!==null?l=xt(l):(l=pt(i)?Ee:ot.current,l=ei(e,l));var v=i.getDerivedStateFromProps;(d=typeof v=="function"||typeof a.getSnapshotBeforeUpdate=="function")||typeof a.UNSAFE_componentWillReceiveProps!="function"&&typeof a.componentWillReceiveProps!="function"||(s!==m||p!==l)&&Ms(e,a,n,l),te=!1,p=e.memoizedState,a.state=p,Yn(e,n,a,r);var S=e.memoizedState;s!==m||p!==S||ct.current||te?(typeof v=="function"&&(jo(e,i,v,n),S=e.memoizedState),(g=te||zs(e,i,g,n,p,S,l)||!1)?(d||typeof a.UNSAFE_componentWillUpdate!="function"&&typeof a.componentWillUpdate!="function"||(typeof a.componentWillUpdate=="function"&&a.componentWillUpdate(n,S,l),typeof a.UNSAFE_componentWillUpdate=="function"&&a.UNSAFE_componentWillUpdate(n,S,l)),typeof a.componentDidUpdate=="function"&&(e.flags|=4),typeof a.getSnapshotBeforeUpdate=="function"&&(e.flags|=1024)):(typeof a.componentDidUpdate!="function"||s===t.memoizedProps&&p===t.memoizedState||(e.flags|=4),typeof a.getSnapshotBeforeUpdate!="function"||s===t.memoizedProps&&p===t.memoizedState||(e.flags|=1024),e.memoizedProps=n,e.memoizedState=S),a.props=n,a.state=S,a.context=l,n=g):(typeof a.componentDidUpdate!="function"||s===t.memoizedProps&&p===t.memoizedState||(e.flags|=4),typeof a.getSnapshotBeforeUpdate!="function"||s===t.memoizedProps&&p===t.memoizedState||(e.flags|=1024),n=!1)}return zo(t,e,i,n,o,r)}function zo(t,e,i,n,r,o){Qu(t,e);var a=(e.flags&128)!==0;if(!n&&!a)return r&&_s(e,i,!1),Kt(t,e,o);n=e.stateNode,zc.current=e;var s=a&&typeof i.getDerivedStateFromError!="function"?null:n.render();return e.flags|=1,t!==null&&a?(e.child=ni(e,t.child,null,o),e.child=ni(e,null,s,o)):at(t,e,s,o),e.memoizedState=n.state,r&&_s(e,i,!0),e.child}function Yu(t){var e=t.stateNode;e.pendingContext?ks(t,e.pendingContext,e.pendingContext!==e.context):e.context&&ks(t,e.context,!1),va(t,e.containerInfo)}function Fs(t,e,i,n,r){return ii(),ma(r),e.flags|=256,at(t,e,i,n),e.child}var Mo={dehydrated:null,treeContext:null,retryLane:0};function Go(t){return{baseLanes:t,cachePool:null,transitions:null}}function Ku(t,e,i){var n=e.pendingProps,r=V.current,o=!1,a=(e.flags&128)!==0,s;if((s=a)||(s=t!==null&&t.memoizedState===null?!1:(r&2)!==0),s?(o=!0,e.flags&=-129):(t===null||t.memoizedState!==null)&&(r|=1),D(V,r&1),t===null)return Po(e),t=e.memoizedState,t!==null&&(t=t.dehydrated,t!==null)?(e.mode&1?t.data==="$!"?e.lanes=8:e.lanes=1073741824:e.lanes=1,null):(a=n.children,t=n.fallback,o?(n=e.mode,o=e.child,a={mode:"hidden",children:a},!(n&1)&&o!==null?(o.childLanes=0,o.pendingProps=a):o=dr(a,n,0,null),t=Pe(t,n,i,null),o.return=e,t.return=e,o.sibling=t,e.child=o,e.child.memoizedState=Go(i),e.memoizedState=Mo,t):ja(e,a));if(r=t.memoizedState,r!==null&&(s=r.dehydrated,s!==null))return Mc(t,e,a,n,s,r,i);if(o){o=n.fallback,a=e.mode,r=t.child,s=r.sibling;var l={mode:"hidden",children:n.children};return!(a&1)&&e.child!==r?(n=e.child,n.childLanes=0,n.pendingProps=l,e.deletions=null):(n=ce(r,l),n.subtreeFlags=r.subtreeFlags&14680064),s!==null?o=ce(s,o):(o=Pe(o,a,i,null),o.flags|=2),o.return=e,n.return=e,n.sibling=o,e.child=n,n=o,o=e.child,a=t.child.memoizedState,a=a===null?Go(i):{baseLanes:a.baseLanes|i,cachePool:null,transitions:a.transitions},o.memoizedState=a,o.childLanes=t.childLanes&~i,e.memoizedState=Mo,n}return o=t.child,t=o.sibling,n=ce(o,{mode:"visible",children:n.children}),!(e.mode&1)&&(n.lanes=i),n.return=e,n.sibling=null,t!==null&&(i=e.deletions,i===null?(e.deletions=[t],e.flags|=16):i.push(t)),e.child=n,e.memoizedState=null,n}function ja(t,e){return e=dr({mode:"visible",children:e},t.mode,0,null),e.return=t,t.child=e}function yn(t,e,i,n){return n!==null&&ma(n),ni(e,t.child,null,i),t=ja(e,e.pendingProps.children),t.flags|=2,e.memoizedState=null,t}function Mc(t,e,i,n,r,o,a){if(i)return e.flags&256?(e.flags&=-257,n=Ur(Error(w(422))),yn(t,e,a,n)):e.memoizedState!==null?(e.child=t.child,e.flags|=128,null):(o=n.fallback,r=e.mode,n=dr({mode:"visible",children:n.children},r,0,null),o=Pe(o,r,a,null),o.flags|=2,n.return=e,o.return=e,n.sibling=o,e.child=n,e.mode&1&&ni(e,t.child,null,a),e.child.memoizedState=Go(a),e.memoizedState=Mo,o);if(!(e.mode&1))return yn(t,e,a,null);if(r.data==="$!"){if(n=r.nextSibling&&r.nextSibling.dataset,n)var s=n.dgst;return n=s,o=Error(w(419)),n=Ur(o,n,void 0),yn(t,e,a,n)}if(s=(a&t.childLanes)!==0,ht||s){if(n=X,n!==null){switch(a&-a){case 4:r=2;break;case 16:r=8;break;case 64: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:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:r=32;break;case 536870912:r=268435456;break;default:r=0}r=r&(n.suspendedLanes|a)?0:r,r!==0&&r!==o.retryLane&&(o.retryLane=r,Yt(t,r),Mt(n,t,r,-1))}return Ga(),n=Ur(Error(w(421))),yn(t,e,a,n)}return r.data==="$?"?(e.flags|=128,e.child=t.child,e=Hc.bind(null,t),r._reactRetry=e,null):(t=o.treeContext,ft=le(r.nextSibling),bt=e,T=!0,Rt=null,t!==null&&(St[Ct++]=Bt,St[Ct++]=Jt,St[Ct++]=je,Bt=t.id,Jt=t.overflow,je=e),e=ja(e,n.children),e.flags|=4096,e)}function Ws(t,e,i){t.lanes|=e;var n=t.alternate;n!==null&&(n.lanes|=e),Eo(t.return,e,i)}function Hr(t,e,i,n,r){var o=t.memoizedState;o===null?t.memoizedState={isBackwards:e,rendering:null,renderingStartTime:0,last:n,tail:i,tailMode:r}:(o.isBackwards=e,o.rendering=null,o.renderingStartTime=0,o.last=n,o.tail=i,o.tailMode=r)}function qu(t,e,i){var n=e.pendingProps,r=n.revealOrder,o=n.tail;if(at(t,e,n.children,i),n=V.current,n&2)n=n&1|2,e.flags|=128;else{if(t!==null&&t.flags&128)t:for(t=e.child;t!==null;){if(t.tag===13)t.memoizedState!==null&&Ws(t,i,e);else if(t.tag===19)Ws(t,i,e);else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break t;for(;t.sibling===null;){if(t.return===null||t.return===e)break t;t=t.return}t.sibling.return=t.return,t=t.sibling}n&=1}if(D(V,n),!(e.mode&1))e.memoizedState=null;else switch(r){case"forwards":for(i=e.child,r=null;i!==null;)t=i.alternate,t!==null&&Kn(t)===null&&(r=i),i=i.sibling;i=r,i===null?(r=e.child,e.child=null):(r=i.sibling,i.sibling=null),Hr(e,!1,r,i,o);break;case"backwards":for(i=null,r=e.child,e.child=null;r!==null;){if(t=r.alternate,t!==null&&Kn(t)===null){e.child=r;break}t=r.sibling,r.sibling=i,i=r,r=t}Hr(e,!0,i,null,o);break;case"together":Hr(e,!1,null,null,void 0);break;default:e.memoizedState=null}return e.child}function Nn(t,e){!(e.mode&1)&&t!==null&&(t.alternate=null,e.alternate=null,e.flags|=2)}function Kt(t,e,i){if(t!==null&&(e.dependencies=t.dependencies),Ne|=e.lanes,!(i&e.childLanes))return null;if(t!==null&&e.child!==t.child)throw Error(w(153));if(e.child!==null){for(t=e.child,i=ce(t,t.pendingProps),e.child=i,i.return=e;t.sibling!==null;)t=t.sibling,i=i.sibling=ce(t,t.pendingProps),i.return=e;i.sibling=null}return e.child}function Gc(t,e,i){switch(e.tag){case 3:Yu(e),ii();break;case 5:ku(e);break;case 1:pt(e.type)&&Jn(e);break;case 4:va(e,e.stateNode.containerInfo);break;case 10:var n=e.type._context,r=e.memoizedProps.value;D($n,n._currentValue),n._currentValue=r;break;case 13:if(n=e.memoizedState,n!==null)return n.dehydrated!==null?(D(V,V.current&1),e.flags|=128,null):i&e.child.childLanes?Ku(t,e,i):(D(V,V.current&1),t=Kt(t,e,i),t!==null?t.sibling:null);D(V,V.current&1);break;case 19:if(n=(i&e.childLanes)!==0,t.flags&128){if(n)return qu(t,e,i);e.flags|=128}if(r=e.memoizedState,r!==null&&(r.rendering=null,r.tail=null,r.lastEffect=null),D(V,V.current),n)break;return null;case 22:case 23:return e.lanes=0,$u(t,e,i)}return Kt(t,e,i)}var Xu,Do,Zu,tg;Xu=function(t,e){for(var i=e.child;i!==null;){if(i.tag===5||i.tag===6)t.appendChild(i.stateNode);else if(i.tag!==4&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===e)break;for(;i.sibling===null;){if(i.return===null||i.return===e)return;i=i.return}i.sibling.return=i.return,i=i.sibling}};Do=function(){};Zu=function(t,e,i,n){var r=t.memoizedProps;if(r!==n){t=e.stateNode,_e(Vt.current);var o=null;switch(i){case"input":r=io(t,r),n=io(t,n),o=[];break;case"select":r=W({},r,{value:void 0}),n=W({},n,{value:void 0}),o=[];break;case"textarea":r=oo(t,r),n=oo(t,n),o=[];break;default:typeof r.onClick!="function"&&typeof n.onClick=="function"&&(t.onclick=On)}so(i,n);var a;i=null;for(g in r)if(!n.hasOwnProperty(g)&&r.hasOwnProperty(g)&&r[g]!=null)if(g==="style"){var s=r[g];for(a in s)s.hasOwnProperty(a)&&(i||(i={}),i[a]="")}else g!=="dangerouslySetInnerHTML"&&g!=="children"&&g!=="suppressContentEditableWarning"&&g!=="suppressHydrationWarning"&&g!=="autoFocus"&&(Gi.hasOwnProperty(g)?o||(o=[]):(o=o||[]).push(g,null));for(g in n){var l=n[g];if(s=r!=null?r[g]:void 0,n.hasOwnProperty(g)&&l!==s&&(l!=null||s!=null))if(g==="style")if(s){for(a in s)!s.hasOwnProperty(a)||l&&l.hasOwnProperty(a)||(i||(i={}),i[a]="");for(a in l)l.hasOwnProperty(a)&&s[a]!==l[a]&&(i||(i={}),i[a]=l[a])}else i||(o||(o=[]),o.push(g,i)),i=l;else g==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,s=s?s.__html:void 0,l!=null&&s!==l&&(o=o||[]).push(g,l)):g==="children"?typeof l!="string"&&typeof l!="number"||(o=o||[]).push(g,""+l):g!=="suppressContentEditableWarning"&&g!=="suppressHydrationWarning"&&(Gi.hasOwnProperty(g)?(l!=null&&g==="onScroll"&&L("scroll",t),o||s===l||(o=[])):(o=o||[]).push(g,l))}i&&(o=o||[]).push("style",i);var g=o;(e.updateQueue=g)&&(e.flags|=4)}};tg=function(t,e,i,n){i!==n&&(e.flags|=4)};function wi(t,e){if(!T)switch(t.tailMode){case"hidden":e=t.tail;for(var i=null;e!==null;)e.alternate!==null&&(i=e),e=e.sibling;i===null?t.tail=null:i.sibling=null;break;case"collapsed":i=t.tail;for(var n=null;i!==null;)i.alternate!==null&&(n=i),i=i.sibling;n===null?e||t.tail===null?t.tail=null:t.tail.sibling=null:n.sibling=null}}function nt(t){var e=t.alternate!==null&&t.alternate.child===t.child,i=0,n=0;if(e)for(var r=t.child;r!==null;)i|=r.lanes|r.childLanes,n|=r.subtreeFlags&14680064,n|=r.flags&14680064,r.return=t,r=r.sibling;else for(r=t.child;r!==null;)i|=r.lanes|r.childLanes,n|=r.subtreeFlags,n|=r.flags,r.return=t,r=r.sibling;return t.subtreeFlags|=n,t.childLanes=i,e}function Dc(t,e,i){var n=e.pendingProps;switch(pa(e),e.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return nt(e),null;case 1:return pt(e.type)&&Bn(),nt(e),null;case 3:return n=e.stateNode,ri(),I(ct),I(ot),Ca(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(t===null||t.child===null)&&(fn(e)?e.flags|=4:t===null||t.memoizedState.isDehydrated&&!(e.flags&256)||(e.flags|=1024,Rt!==null&&(Bo(Rt),Rt=null))),Do(t,e),nt(e),null;case 5:Sa(e);var r=_e(Hi.current);if(i=e.type,t!==null&&e.stateNode!=null)Zu(t,e,i,n,r),t.ref!==e.ref&&(e.flags|=512,e.flags|=2097152);else{if(!n){if(e.stateNode===null)throw Error(w(166));return nt(e),null}if(t=_e(Vt.current),fn(e)){n=e.stateNode,i=e.type;var o=e.memoizedProps;switch(n[It]=e,n[Ji]=o,t=(e.mode&1)!==0,i){case"dialog":L("cancel",n),L("close",n);break;case"iframe":case"object":case"embed":L("load",n);break;case"video":case"audio":for(r=0;r<_i.length;r++)L(_i[r],n);break;case"source":L("error",n);break;case"img":case"image":case"link":L("error",n),L("load",n);break;case"details":L("toggle",n);break;case"input":Ka(n,o),L("invalid",n);break;case"select":n._wrapperState={wasMultiple:!!o.multiple},L("invalid",n);break;case"textarea":Xa(n,o),L("invalid",n)}so(i,o),r=null;for(var a in o)if(o.hasOwnProperty(a)){var s=o[a];a==="children"?typeof s=="string"?n.textContent!==s&&(o.suppressHydrationWarning!==!0&&dn(n.textContent,s,t),r=["children",s]):typeof s=="number"&&n.textContent!==""+s&&(o.suppressHydrationWarning!==!0&&dn(n.textContent,s,t),r=["children",""+s]):Gi.hasOwnProperty(a)&&s!=null&&a==="onScroll"&&L("scroll",n)}switch(i){case"input":sn(n),qa(n,o,!0);break;case"textarea":sn(n),Za(n);break;case"select":case"option":break;default:typeof o.onClick=="function"&&(n.onclick=On)}n=r,e.updateQueue=n,n!==null&&(e.flags|=4)}else{a=r.nodeType===9?r:r.ownerDocument,t==="http://www.w3.org/1999/xhtml"&&(t=jl(i)),t==="http://www.w3.org/1999/xhtml"?i==="script"?(t=a.createElement("div"),t.innerHTML=" - + +