@datagrok/bio 2.4.26 → 2.4.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +1 -1
- package/css/msa.css +6 -0
- package/dist/package-test.js +1 -1
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +1 -1
- package/dist/package.js.map +1 -1
- package/package.json +1 -1
- package/src/analysis/sequence-space.ts +17 -5
- package/src/package.ts +15 -5
- package/src/tests/renderers-test.ts +1 -1
- package/src/tests/splitters-test.ts +4 -7
- package/src/utils/constants.ts +16 -0
- package/src/utils/multiple-sequence-alignment-ui.ts +73 -38
- package/src/utils/multiple-sequence-alignment.ts +13 -3
- package/src/utils/types.ts +7 -1
package/dist/package.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var bio;(()=>{var t={2012:(t,e,n)=>{"use strict";n.d(e,{f:()=>s});var i=n(9976);class s extends i.B{static get Lesk(){return void 0===this.lesk&&(this.lesk=this.makePalette([[["G","A","S","T"],"orange"],[["C","V","I","L","P","F","Y","M","W"],"all_green"],[["N","Q","H"],"magenta"],[["D","E"],"red"],[["K","R"],"all_blue"]],!1,s)),this.lesk}static get GrokGroups(){return void 0===this.grokGroups&&(this.grokGroups=this.makePalette([[["C","U"],"yellow"],[["G","P"],"red"],[["A","V","I","L","M","F","Y","W"],"all_green"],[["R","H","K"],"light_blue"],[["D","E"],"dark_blue"],[["S","T","N","Q"],"orange"]],!1,s)),this.grokGroups}static get RasMol(){return void 0===this.rasMol&&(this.rasMol=new s({D:"#E60A0A",E:"#E60A0A",C:"#E6E600",M:"#E6E600",K:"#145AFF",R:"#145AFF",S:"#FA9600",T:"#FA9600",F:"#3232AA",Y:"#3232AA",N:"#00DCDC",Q:"#00DCDC",G:"#EBEBEB",L:"#0F820F",V:"#0F820F",I:"#0F820F",A:"#C8C8C8",W:"#B45AB4",H:"#8282D2",P:"#DC9682",others:"#BEA06E"})),this.rasMol}get(t){const e=t in s.aaSynonyms?s.aaSynonyms[t]:t;return super.get(e)}}s.aaSynonyms={MeNle:"L",MeA:"A",MeG:"G",MeF:"F"};class o{static getPalette(t="grok"){switch(t){case"grok":return s.GrokGroups;case"lesk":return s.Lesk;default:throw new Error(`ChemPalette: scheme \`${t}\` does not exist`)}}static getInnerOuter(t){let e=0,n="",i="";for(const s of t)"("==s?e++:")"==s?e--:e?n+=s:i+=s;return isNaN(parseInt(n))?[i,n]:[i,""]}static getColorAAPivot(t="",e="grok"){var n,i,s;const o=this.getPalette(e);let[r,a]=this.getInnerOuter(t);if(r=r.length>6?`${r.slice(0,3)}...`:r,a=a.length>6?`${a.slice(0,3)}...`:a,1==t.length||"("==t[1]){const e=null===(n=t[0])||void 0===n?void 0:n.toUpperCase();return e in o?[o.get(e),e,a,1]:[this.undefinedColor,r,a,1]}if("d"==t[0]&&t[1]in o&&(2==t.length||"("==t[2])){const e=null===(i=t[1])||void 0===i?void 0:i.toUpperCase();return e in o?[o.get(e),e,a,2]:[this.undefinedColor,r,a,2]}if(t.substring(0,3)in this.AAFullNames&&(3==t.length||"("==t[3])){const e=this.AAFullNames[t.substring(0,3)];return e in o?[o.get(e),e,a,3]:[this.undefinedColor,r,a,3]}if((null===(s=t[0])||void 0===s?void 0:s.toLowerCase())==t[0]&&t.substring(1,3)in this.AAFullNames&&(4==t.length||"("==t[4])){const e=this.AAFullNames[t.substring(1,3)];return e in o?[o.get(e),e,a,4]:[this.undefinedColor,r,a,4]}return[this.undefinedColor,r,a,0]}}o.SemType="Aminoacids",o.SemTypeMultipleAlignment="AminoacidsMultipleAlignment",o.undefinedColor="rgb(100,100,100)",o.Names={G:"Glycine",L:"Leucine",Y:"Tyrosine",S:"Serine",E:"Glutamic acid",Q:"Glutamine",D:"Aspartic acid",N:"Asparagine",F:"Phenylalanine",A:"Alanine",K:"Lysine",R:"Arginine",H:"Histidine",C:"Cysteine",V:"Valine",P:"Proline",W:"Tryptophan",I:"Isoleucine",M:"Methionine",T:"Threonine"},o.AASmiles={G:"NCC(=O)O",L:"N[C@H](CC(C)C)C(=O)O",Y:"NC(CC1=CC=C(O)C=C1)C(=O)O",S:"NC(CO)C(=O)O",E:"N[C@@H](CCC(O)=O)C(=O)O",Q:"N[C@@H](CCC(N)=O)C(=O)O",D:"N[C@@H](CC(O)=O)C(=O)O",N:"N[C@@H](CC(N)=O)C(=O)O",F:"NC(CC1=CC=CC=C1)C(=O)O",A:"N[C@H](C)C(=O)O",K:"NC(CCCCN)C(=O)O",R:"N[C@H](CCCNC(=N)C)C(=O)O",H:"NC(CC1=CN=C[N]1)C(=O)O",C:"N[C@@H](CS)C(=O)O",V:"NC(C(C)C)C(=O)O",P:"N(CCC1)C1C(=O)O",W:"N[C@@H](Cc1c2ccccc2n([H])c1)C(=O)O",I:"N[C@H]([C@H](C)CC)C(=O)O",M:"NC(CCSC)C(=O)O",T:"NC(C(O)C)C(=O)O"},o.AASmilesTruncated={G:"*C*",L:"CC(C)C[C@H](*)*",Y:"C1=CC(=CC=C1CC(*)*)O",S:"OCC(*)C*",E:"*[C@@H](CCC(O)=O)*",Q:"*N[C@@H](CCC(N)=O)*",D:"*[C@@H](CC(O)=O)*",N:"*[C@@H](CC(N)=O)*",F:"C1=CC=C(C=C1)CC(*)*",A:"C[C@H](*)*",K:"C(CCN)CC(*)*",R:"*[C@H](CCCNC(=N)C)*",H:"C1=C(NC=N1)CC(*)*",C:"C([C@@H](*)*)S",V:"CC(C)C(*)*",P:"C1CCN(*)C1*",W:"*[C@@H](Cc1c2ccccc2n([H])c1)*",I:"CC[C@H](C)[C@H](*)*",M:"CSCCC(*)*",T:"CC(O)C(*)*"},o.AAFullNames={Ala:"A",Arg:"R",Asn:"N",Asp:"D",Cys:"C",Gln:"Q",Glu:"E",Gly:"G",His:"H",Ile:"I",Leu:"L",Lys:"K",Met:"M",Phe:"F",Pro:"P",Ser:"S",Thr:"T",Trp:"W",Tyr:"Y",Val:"V"}},7228:(t,e,n)=>{"use strict";n.d(e,{DC:()=>r,JN:()=>l,Xk:()=>a});var i=n(976),s=(n(4469),n(1047)),o=(n(585),function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))});const r=["symbol","name","molfile","rgroups","polymerType","monomerType"];function a(t){const e=[];for(let n=0;n<t.rowCount;n++){const i={};Object.keys(s.K4).forEach((e=>{if("symbol"===e){const o=t.get(s.K4[e],n);i[e]="."===o?t.get(s.At,n):o}else if("rgroups"===e){const o=t.get(s.K4[e],n).split("\n"),r=[];o.forEach((t=>{const e={},n=t.substring(t.lastIndexOf("]")+1),i=t.match(/\[R(\d+)\]/)[1];e.capGroupSmiles="H"===n?`[*:${i}][H]`:`O[*:${i}]`,e.alternateId="H"===n?`R${i}-H`:`R${i}-OH`,e.capGroupName="H"===n?"H":"OH",e.label=`R${i}`,r.push(e)})),i[e]=r}else s.K4[e]&&(i[e]=t.get(s.K4[e],n))})),e.push(i)}return e}function l(){return o(this,void 0,void 0,(function*(){const t=i.Func.find({package:"Bio",name:"getMonomerLibHelper"});if(0===t.length)throw new Error('Package "Bio" must be installer for MonomerLibraryHelper.');return(yield t[0].prepare().call()).getOutputParamValue()}))}},6103:(t,e,n)=>{"use strict";n.d(e,{i0:()=>P});var i=n(4469),s=n(976),o=n(1047),r=n(585),a=n(7767),l=n(7604),h=n(499),c=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const u=8,d="M RGP",f="A ",m=14,p=7,g="\nDatagrok macromolecule handler\n\n",y=" 0 0 0 0 0 0 999 V3000\n",v="M V30 BEGIN CTAB\n",b="M V30 END CTAB\n",w="M V30 COUNTS ",C=" 0 0 0\n",S="M V30 BEGIN ATOM\n",M="M V30 END ATOM\n",T="M V30 BEGIN BOND\n",x="M V30 END BOND\n",N=" CFG=",E="M V30 ",A="M END",I=1e4,L="d",_="r",R="p",k="O",G="H";function P(t,e,n){return c(this,void 0,void 0,(function*(){if(0===s.Func.find({package:"Chem",name:"getRdKitModule"}).length)return{col:null,warnings:['Transformation to atomic level requires the package "Chem" installed.']};if(e.semType!==s.SEMTYPE.MACROMOLECULE)return{col:null,warnings:[`Only the ${s.SEMTYPE.MACROMOLECULE} columns can be converted to atomic level, the chosen column has semType '${e.semType}'`]};let u=e;new h.C(e).isHelm()&&(u=new a.L(e).convert("separator","."),u.name=e.name);const d=new h.C(u).alphabet;let f;if("PT"===d||"UN"===d)f="PEPTIDE";else{if("RNA"!==d&&"DNA"!==d)return{col:null,warnings:[`Unexpected column's '${u.name}' alphabet '${d}'.`]};f="RNA"}const m=function(t){const e=t.length,n=new Array(e),i=t.getTag(s.TAGS.UNITS),o=t.getTag("separator"),a=(0,r.vU)(i,o);for(let i=0;i<e;++i){const e=t.get(i);n[i]=e?a(e).filter((t=>""!==t)):[]}return n}(u),p=yield function(t,e,n,s){return c(this,void 0,void 0,(function*(){const r=function(t,e,n){const i=new Map;for(const s of t.getTypes())for(const r of t.getMonomerNamesByType(s)){const a=t.getMonomer(s,r);if(a.polymerType===e&&("RNA"===e&&("Branch"===a.monomerType||"DNA"===n&&a.symbol===L||"RNA"===n&&a.symbol===_||a.symbol===R)||"PEPTIDE"===e&&"Branch"!==a.monomerType)){const t={};o.rx.forEach((e=>{t[e]=a[e]})),i.set(a.symbol,t)}}return i}(e,n,s),a=new Map,h=yield i.functions.call("Chem:getRdKitModule"),c={value:null};if("RNA"===n){const t="RNA"===s?[_,R]:[L,R];for(const e of t)O(a,e,r,h,n,c)}for(let e=0;e<t.length;++e){const i=t[e];for(const t of i)if(""!==t)try{O(a,t,r,h,n,c)}catch(e){const n=(0,l.O)(e);throw console.error(`bio lib: getMonomersDictFromLib() sym='${t}', error:\n`+n),new Error(`Сan't get monomer '${t}' from library: ${n}`)}}return a}))}(m,n,f,d),g=u.length,y=new Array(g),v=new Array(0);for(let t=0;t<g;++t)try{const e=m[t];y[t]=X(e,p,d,f,0)}catch(e){const n=`Cannot get molfile of row #${t}: ${e instanceof Error?e.message:e.toString()}.`;v.push(n)}if(v.length>.05*g)throw new Error("Too many errors getting molfiles.");const b=`molfile(${u.name})`,w=t.columns.getUnusedName(b),C=s.Column.fromStrings(w,y);return C.semType=s.SEMTYPE.MOLECULE,C.setTag(s.TAGS.UNITS,s.UNITS.Molecule.MOLBLOCK),{col:C,warnings:v}}))}function O(t,e,n,i,s,o){if(!t.has(e)){const r=function(t,e,n,i,s){if(e.has(t)){const o=e.get(t),r=function(t){const e=[];for(const n of t){let t=n.capGroupSmiles;t||(t=n.capGroupSMILES),t=t.replace(/(\[|\]|\*|:|\d)/g,""),e.push(t)}return e}(o.rgroups),a=function(t){const e=new Map;let n=t.indexOf(f,0),i=n;for(;-1!==n;){i=t.indexOf("\n",n);const s=parseInt(t.substring(n,i).replace(/^A\s+/,""));n=t.indexOf("R",i),i=t.indexOf("\n",n);const o=parseInt(t.substring(n,i).replace(/^R/,""));e.set(s,o),n=t.indexOf(f,i)}for(n=t.indexOf(d,0),i=t.indexOf("\n",n);-1!==n;){n+=u,i=t.indexOf("\n",n);const s=t.substring(n,i).replaceAll(/\s+/g," ").split(" ").map((t=>parseInt(t))).slice(1);for(let t=0;t<s.length;t+=2){if(e.has(s[t])&&e.get(s[t])!==s[t+1])throw new Error(`r-group index ${s[t]} has already been added with a different value`);e.set(s[t],s[t+1])}n=t.indexOf(d,i)}return e}(o.molfile),l=function(t,e){const n=e.get_mol(t),i=n.get_v3Kmolblock();return n.delete(),i}(function(t){let e=t.indexOf(f,0);-1===e&&(e=t.indexOf(d));const n=t.indexOf(A,e);return t.substring(0,e)+t.substring(n)}(o.molfile),n),h=function(t){let e=(t=t.replaceAll("\r","")).indexOf(w)+m,n=t.indexOf(" ",e+1);const i=parseInt(t.substring(e,n));return e=n+1,n=t.indexOf(" ",e+1),{atomCount:i,bondCount:parseInt(t.substring(e,n))}}(l),c=function(t,e){const n=new Array(e),i=new Float32Array(e),s=new Float32Array(e),o=new Array(e);let r=t.indexOf(S);r=t.indexOf("\n",r);let a=r;for(let l=0;l<e;l++){r=t.indexOf(E,r)+p,a=t.indexOf(" ",r),r=a+1,a=t.indexOf(" ",r),n[l]=t.substring(r,a);const e=new Array(2);for(let n=0;n<2;++n)r=a+1,a=t.indexOf(" ",r),e[n]=parseFloat(t.substring(r,a));i[l]=e[0],s[l]=e[1],r=a,a=t.indexOf("\n",r)+1,o[l]=t.slice(r,a),r=a}return{atomTypes:n,x:i,y:s,kwargs:o}}(l,h.atomCount),g=function(t,e){const n=new Uint32Array(e),i=new Array(e),s=new Map,o=new Map;let r=t.indexOf(T);r=t.indexOf("\n",r);let a=r;for(let l=0;l<e;++l){const e=new Array(3);r=t.indexOf(E,a)+p,a=t.indexOf(" ",r);for(let n=0;n<3;++n)r=a+1,a=Math.min(t.indexOf("\n",r),t.indexOf(" ",r)),e[n]=parseInt(t.slice(r,a));n[l]=e[0],i[l]=e.slice(1);const h=t.indexOf("\n",r);let c=t.slice(a,h),u=c.indexOf(N);if(-1!==u){u=c.indexOf("=",u)+1;let t=c.indexOf(" ",u);-1===t&&(t=c.length);const e=parseInt(c.slice(u,t));s.set(l,e);const n=N+e.toString();c=c.replace(n,"")}c||o.set(l,c)}return{bondTypes:n,atomPairs:i,bondConfiguration:s,kwargs:o}}(l,h.bondCount),y={atoms:c,bonds:g,meta:F(c,g,r,a)};return"PEPTIDE"===i?function(t){const e=t.meta.terminalNodes[0]-1,n=t.meta.rNodes[0]-1,i=t.atoms.x,s=t.atoms.y;z(t,-i[e],-s[e]);const o=D(i[n],s[n]);B(t.atoms,-o),i[t.meta.rNodes[1]-1]<0&&function(t){Y(t,!1)}(t);const r=function(t){const e=function(t){var e;const n=new Map;for(const i of t.bonds.atomPairs)for(let t=0;t<2;t++){const s=i[t],o=i[(t+1)%2];n.has(s)?null===(e=n.get(s))||void 0===e||e.push(o):n.set(s,new Array(1).fill(o))}return n}(t);let n=0,i=0;for(;0===n;){const s=e.get(t.meta.terminalNodes[1])[i];t.atoms.atomTypes[s-1]===k&&s!==t.meta.rNodes[1]&&(n=s),i++}return n}(t);!function(t,e){t.atoms.y[t.meta.rNodes[1]-1]<0&&t.atoms.y[e-1]<0&&(function(t){Y(t,!0)}(t),B(t.atoms,-function(t,e){return D(t,e)+Math.PI/2}(t.atoms.x[t.meta.terminalNodes[1]-1],t.atoms.y[t.meta.terminalNodes[1]-1])))}(t,r),function(t,e){const n=t.atoms.x;n[t.meta.rNodes[1]-1]>n[e-1]&&function(t,e,n){const i=e-1,s=n-1,o=t.atoms.x,r=t.atoms.y,a=o[i],l=r[i];o[i]=o[s],r[i]=r[s],o[s]=a,r[s]=l}(t,e,t.meta.rNodes[1])}(t,r)}(y):t===_||t===L?function(t,e){const n=t.atoms.x,i=t.atoms.y;let s=t.meta.terminalNodes[0]-1;const o=t.meta.rNodes[1]-1;z(t,-n[s],-i[s]);const r=D(n[o],i[o]);B(t.atoms,3*Math.PI/2-r),e.value=function(t){const e=t.atoms.x,n=t.atoms.y,i=t.meta.rNodes[2]-1,s=t.meta.terminalNodes[2]-1,o=e[i]-e[s],r=n[i]-n[s];return Math.atan(r/o)+Math.PI/2}(t),s=t.meta.terminalNodes[0]-1,z(t,-n[s],-i[s])}(y,s):t===R?function(t){const e=t.meta.terminalNodes[0]-1,n=t.meta.rNodes[0]-1,i=t.atoms.x,s=t.atoms.y;z(t,-i[e],-s[e]);const o=D(i[n],s[n]);B(t.atoms,Math.PI/2-o)}(y):function(t,e){const n=t.atoms.x,i=t.atoms.y,s=t.meta.terminalNodes[0]-1,o=t.meta.rNodes[0]-1;z(t,-n[s],-i[s]);const r=D(n[o],i[o]),a=e.value;if(!a)throw new Error("The value of sugarBranchToOYAngle is null");B(t.atoms,Math.PI-r+a);const l=function(t,e){return et(Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)))}({x:n[t.meta.rNodes[0]-1],y:i[t.meta.rNodes[0]-1]},{x:n[t.meta.terminalNodes[0]-1],y:i[t.meta.terminalNodes[0]-1]});if(1!=l)for(let t=0;t<n.length;++t)n[t]=et(n[t]/l),i[t]=et(i[t]/l)}(y,s),function(t,e,n){"PEPTIDE"===t?(V(e,t),Z(e,e.meta.rNodes[1])):n===_||n===L?(Z(e,e.meta.rNodes[1]),e.meta.rNodes[1]=e.meta.terminalNodes[1],W(e.bonds,e.meta),V(e,t),Z(e,e.meta.rNodes[1]),Z(e,e.meta.rNodes[0]),Z(e,e.meta.rNodes[2])):n===R&&(e.meta.terminalNodes[0]=e.meta.rNodes[0],z(e,-e.atoms.x[e.meta.terminalNodes[0]-1],-e.atoms.y[e.meta.terminalNodes[0]-1]),V(e,t),Z(e,e.meta.rNodes[1]))}(i,y,t),function(t){let e=0;for(;e<t.atoms.atomTypes.length;)t.atoms.atomTypes[e]===G&&(Z(t,e+1),--e),++e}(y),y}return null}(e,n,i,s,o);if(!r)throw new Error(`Monomer with symbol '${e}' is absent the monomer library`);t.set(e,r)}}function F(t,e,n,i){const s={backboneShift:null,branchShift:null,terminalNodes:[],rNodes:[]};return void 0!==n&&void 0!==i?(function(t,e,n){for(const[i,s]of n)t.atomTypes[i-1]=e[s-1]}(t,n,i),function(t,e){e.rNodes=Array.from(t.keys());for(let n=0;n<e.rNodes.length;n++)for(const i of[1,2])if(t.get(e.rNodes[n])===i){const t=e.rNodes[i-1];e.rNodes[i-1]=e.rNodes[n],e.rNodes[n]=t}}(i,s)):s.rNodes=[0,t.x.length],W(e,s),s}function W(t,e){const n=e.rNodes;e.terminalNodes=new Array(n.length).fill(0);const i=e.terminalNodes,s=t.atomPairs;let o=0,r=0;for(;o<s.length&&r<i.length;){for(let t=0;t<i.length;++t)for(let e=0;e<2;++e)s[o][e]===n[t]&&(i[t]=s[o][(e+1)%2],n.length,++r);++o}}function V(t,e){t.meta.rNodes.length>1&&(t.meta.backboneShift=H(t,t.meta.rNodes[1]-1,t.meta.terminalNodes[0]-1)),"RNA"===e&&t.meta.rNodes.length>2&&(t.meta.branchShift=H(t,t.meta.rNodes[2]-1,t.meta.terminalNodes[0]-1))}function H(t,e,n){return[et(t.atoms.x[e]-t.atoms.x[n]),et(t.atoms.y[e]-t.atoms.y[n])]}function Z(t,e){if(void 0!==e){const n=e-1,i=t.atoms,s=t.bonds,o=t.meta;i.atomTypes.splice(n,1),i.x=U(Float32Array,i.x,n,1),i.y=U(Float32Array,i.y,n,1),i.kwargs.splice(n,1);for(let t=0;t<o.terminalNodes.length;++t)o.terminalNodes[t]>e?--o.terminalNodes[t]:o.terminalNodes[t]===e&&(o.terminalNodes[t]=-1);for(let t=0;t<o.rNodes.length;++t)o.rNodes[t]>e?--o.rNodes[t]:o.rNodes[t]===e&&(o.rNodes[t]=-1);let r=0;for(;r<s.atomPairs.length;){const t=s.atomPairs[r][0],n=s.atomPairs[r][1];t===e||n===e?(s.atomPairs.splice(r,1),s.bondTypes=U(Uint32Array,s.bondTypes,r,1),s.bondConfiguration.has(r)&&s.bondConfiguration.delete(r),s.kwargs.has(r)&&s.kwargs.delete(r),--r):(s.atomPairs[r][0]=t>e?t-1:t,s.atomPairs[r][1]=n>e?n-1:n),++r}let a=Array.from(s.bondConfiguration.keys());a.forEach((t=>{if(s.bondConfiguration.has(t)&&t>n){const e=s.bondConfiguration.get(t);s.bondConfiguration.delete(t),s.bondConfiguration.set(t-1,e)}})),a=Array.from(s.kwargs.keys()),a.forEach((t=>{if(s.kwargs.has(t)&&t>n){const e=s.kwargs.get(t);s.kwargs.delete(t),s.kwargs.set(t-1,e)}}))}}function U(t,e,n,i){const s=new t(e.length-i);let o=0,r=0;for(;o<e.length;)o===n&&(o+=i),s[r]=e[o],++r,++o;return s}function D(t,e){let n;if(0===t)n=e>0?0:Math.PI;else if(0===e)n=t>0?-Math.PI/2:Math.PI/2;else{const i=e/t,s=Math.atan(i);n=t<0?Math.PI/2+s:-Math.PI/2+s}return n}function B(t,e){if(0!==e){const n=t.x,i=t.y,s=Math.cos(e),o=Math.sin(e);for(let t=0;t<n.length;++t){const e=n[t];n[t]=et(e*s-i[t]*o),i[t]=et(e*o+i[t]*s)}}}function Y(t,e){if(e){const e=t.atoms.y;for(let t=0;t<e.length;t++)e[t]=-e[t]}else{const e=t.atoms.x;for(let t=0;t<e.length;t++)e[t]=-e[t]}const n=t.bonds.bondConfiguration;for(const[t,e]of n){const i=1===e?3:1;n.set(t,i)}}function z(t,e,n){const i=t.atoms.x,s=t.atoms.y;for(let t=0;t<i.length;++t)i[t]=et(i[t]+e),void 0!==n&&(s[t]=et(s[t]+n))}function X(t,e,n,i,s){if(0===t.length)return"";const o=0===s?tt:nt,{atomCount:r,bondCount:a}=o(t,e,n,i,s),l=new Array(r),h=new Array(a);let c,u=null,d=null;0===s?"PEPTIDE"===i?c=q:(c=$,u="DNA"===n?e.get(L):e.get(_),d=e.get(R)):c=K;const f={i:0,nodeShift:0,bondShift:0,backbonePositionShift:new Array(2).fill(0),branchPositionShift:new Array(2).fill(0),backboneAttachNode:0,branchAttachNode:0,flipFactor:1},m={sugar:u,phosphate:d,seqLength:t.length,atomCount:r,bondCount:a};for(f.i=0;f.i<m.seqLength;++f.i)c(e.get(t[f.i]),l,h,f,m);!function(t,e,n,i,s){if(0===s){const s=n.nodeShift+1;t[i.atomCount]=E+s+" "+k+" "+et(n.backbonePositionShift[0])+" "+n.flipFactor*et(n.backbonePositionShift[1])+" 0.000000 0\n";const o=n.backboneAttachNode,r=s;e[i.bondCount]=E+n.bondShift+" 1 "+o+" "+r+"\n"}}(l,h,f,m,s);let p="";return p+=g,p+=y,p+=v,p+=w+r+" "+a+C,p+=S,p+=l.join(""),p+=M,p+=T,p+=h.join(""),p+=x,p+=b,p+=A,p}function q(t,e,n,i){i.flipFactor=Math.pow(-1,i.i%2),j(t,e,n,i)}function K(t,e,n,i){J(t,e,n,i)}function j(t,e,n,i){!function(t,e,n){for(let i=0;i<t.atoms.atomTypes.length;++i){const s=n.nodeShift+i+1;e[n.nodeShift+i]=E+s+" "+t.atoms.atomTypes[i]+" "+et(n.backbonePositionShift[0]+t.atoms.x[i])+" "+et(n.backbonePositionShift[1]+n.flipFactor*t.atoms.y[i])+" "+t.atoms.kwargs[i]}}(t,e,i),Q(t,n,i),function(t,e,n){if(0!==n.backboneAttachNode){const i=n.bondShift,s=n.backboneAttachNode,o=t.meta.terminalNodes[0]+n.nodeShift;e[n.bondShift-1]=E+i+" 1 "+s+" "+o+"\n"}}(t,n,i),null!==t.meta.branchShift&&t.meta.terminalNodes.length>2&&function(t,e){e.branchAttachNode=e.nodeShift+t.meta.terminalNodes[2];for(let n=0;n<2;++n)e.branchPositionShift[n]=e.backbonePositionShift[n]+t.meta.branchShift[n]}(t,i),function(t,e){e.backboneAttachNode=e.nodeShift+t.meta.terminalNodes[1],e.bondShift+=t.bonds.atomPairs.length+1,e.nodeShift+=t.atoms.atomTypes.length,e.backbonePositionShift[0]+=t.meta.backboneShift[0],e.backbonePositionShift[1]+=e.flipFactor*t.meta.backboneShift[1]}(t,i)}function $(t,e,n,i,s){if(0===i.i)j(s.sugar,e,n,i);else for(const t of[s.phosphate,s.sugar])j(t,e,n,i);J(t,e,n,i)}function J(t,e,n,i){!function(t,e,n){for(let i=0;i<t.atoms.atomTypes.length;++i){const s=n.nodeShift+i+1;e[n.nodeShift+i]=E+s+" "+t.atoms.atomTypes[i]+" "+et(n.branchPositionShift[0]+t.atoms.x[i])+" "+et(n.branchPositionShift[1]+n.flipFactor*t.atoms.y[i])+" "+t.atoms.kwargs[i]}}(t,e,i),Q(t,n,i),function(t,e,n){const i=n.bondShift,s=n.branchAttachNode,o=t.meta.terminalNodes[0]+n.nodeShift;e[i-1]=E+i+" 1 "+s+" "+o+"\n"}(t,n,i);const s=i.bondShift,o=i.branchAttachNode,r=t.meta.terminalNodes[0]+i.nodeShift;n[s-1]=E+s+" 1 "+o+" "+r+"\n",i.bondShift+=t.bonds.atomPairs.length+1,i.nodeShift+=t.atoms.atomTypes.length}function Q(t,e,n){for(let i=0;i<t.bonds.atomPairs.length;++i){const s=n.bondShift+i+1,o=t.bonds.atomPairs[i][0]+n.nodeShift,r=t.bonds.atomPairs[i][1]+n.nodeShift;let a="";if(t.bonds.bondConfiguration.has(i)){let e=t.bonds.bondConfiguration.get(i);n.flipFactor<0&&(e=1===e?3:1),a=" CFG="+e}const l=t.bonds.kwargs.has(i)?" "+t.bonds.kwargs.get(i):"";e[n.bondShift+i]=E+s+" "+t.bonds.bondTypes[i]+" "+o+" "+r+a+l+"\n"}}function tt(t,e,n,i,s){let o=0,r=0;for(const n of t){if(""===n)continue;const t=e.get(n);o+=t.atoms.x.length,r+=t.bonds.bondTypes.length}if(0===s)if("PEPTIDE"===i)o+=1,r+=t.length;else{const i="DNA"===n?e.get(L):e.get(_),s=e.get(R);o+=(t.length-1)*s.atoms.x.length,o+=t.length*i.atoms.x.length,o+=1,r+=(t.length-1)*s.bonds.bondTypes.length,r+=t.length*i.bonds.bondTypes.length,r-=1,r+=3*t.length}return{atomCount:o,bondCount:r}}function et(t){return Math.round(I*t)/I}function nt(t,e,n,i){let s=0,o=0;for(const n of t){const t=e.get(n);s+=t.atoms.x.length,o+=t.bonds.bondTypes.length}if("PEPTIDE"===i)s+=1,o+=t.length;else{const i="DNA"===n?e.get(L):e.get(_),r=e.get(R);s+=t.length*(r.atoms.x.length+i.atoms.x.length),s+=1,o+=t.length*(r.bonds.bondTypes.length+i.bonds.bondTypes.length),o+=3*t.length}return{atomCount:s,bondCount:o}}},6137:(t,e,n)=>{"use strict";n.d(e,{J:()=>s});var i=n(9976);class s extends i.B{static get Chromatogram(){return void 0===this.chromatogram&&(this.chromatogram=new s({A:"green",C:"blue",G:"black",T:"red",U:"red",others:"gray"})),this.chromatogram}}class o{}o.SemType="Nucleotides",o.SemTypeMultipleAlignment="NucleotidesMultipleAlignment",o.Names={A:"Adenine",C:"Cytosine",G:"Guanine",T:"Thymine",U:"Uracil"}},9976:(t,e,n)=>{"use strict";n.d(e,{B:()=>i});class i{static makePalette(t,e=!1,n=i){const s={};return t.forEach((t=>{const n=t[0],i=t[1];n.forEach(((t,n)=>{s[t]=this.colourPalette[i][e?0:n]}))})),new n(s)}constructor(t){this._palette=t}get(t){return this._palette[t]}}i.undefinedColor="rgb(100,100,100)",i.colourPalette={orange:["rgb(255,187,120)","rgb(245,167,100)","rgb(235,137,70)","rgb(205, 111, 71)"],all_green:["rgb(44,160,44)","rgb(74,160,74)","rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)","rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],all_blue:["rgb(31,119,180)","rgb(23,190,207)","rgb(122, 102, 189)","rgb(158,218,229)","rgb(141, 124, 217)","rgb(31, 120, 150)"],magenta:["rgb(162,106,192)","rgb(197,165,224)","rgb(208,113,218)"],red:["rgb(214,39,40)","rgb(255,152,150)"],st_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(31,119,180)"],dark_blue:["rgb(31,119,180)","rgb(31, 120, 150)"],light_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(108, 218, 229)","rgb(23,190,227)"],lilac_blue:["rgb(124,102,211)","rgb(149,134,217)","rgb(97, 81, 150)"],dark_green:["rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)"],green:["rgb(44,160,44)","rgb(74,160,74)"],light_green:["rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],st_green:["rgb(44,160,44)","rgb(152,223,138)","rgb(39, 174, 96)","rgb(74,160,74)"],pink:["rgb(247,182,210)"],brown:["rgb(140,86,75)","rgb(102, 62, 54)"],gray:["rgb(127,127,127)","rgb(199,199,199)","rgb(196,156,148)","rgb(222, 222, 180)"],yellow:["rgb(188,189,34)"],white:["rgb(230,230,230)"]}},6535:(t,e,n)=>{"use strict";n.d(e,{H:()=>i});class i{get data(){return this._data}get size(){return this._size}constructor(t,e){if(null==e){if(null==t)throw new Error("Arguments error: data or size is required.");if(this._data=t,this._size=(1+Math.sqrt(1+8*this._data.length))/2,this._size!=Math.floor(this._size))throw new Error(`Invalid data length ${this._data.length} leads to non integer size ${this._size}`)}else{this._size=e;const n=e*(e-1)/2;if(t){if(t.length!=n)throw new Error(`Invalid data length. Observations size ${e} requires data length ${n}.`);this._data=t}else this._data=new Float32Array(n)}}_linearizeIJ(t,e){if(!(t<e))throw new Error("i must be less than j");return this._size*t+e-Math.floor((t+2)*(t+1)/2)}get(t,e){return t==e?0:t<e?this._data[this._linearizeIJ(t,e)]:this._data[this._linearizeIJ(e,t)]}set(t,e,n){this._data[this._linearizeIJ(t,e)]=n}static calc(t,e){const n=t.length,s=new i(void 0,n);for(let i=0;i<n;i++)for(let o=i+1;o<n;o++)s.set(i,o,e(t[i],t[o]));return s}square(){for(let t=0;t<this._data.length;t++)this._data[t]=Math.pow(this._data[t],2)}add(t){if(this._size!==t._size)throw new Error(`Matrices must have the same size. This size: ${this._size}, other size: ${t._size}`);for(let e=0;e<this._data.length;e++)this._data[e]+=t._data[e]}sqrt(){for(let t=0;t<this._data.length;t++)this._data[t]=Math.sqrt(this._data[t])}normalize(){let t=this._data[0],e=this._data[0];for(let n=0;n<this._data.length;n++)this._data[n]<t&&(t=this._data[n]),this._data[n]>e&&(e=this._data[n]);const n=e-t;for(let i=0;i<this._data.length;i++)this._data[i]=0===n?this._data[i]-t:(this._data[i]-t)/(e-t)}}},7331:(t,e,n)=>{"use strict";n.d(e,{UE:()=>h});var i=n(976),s=n(9976);class o{static hashCode(t){let e=0;if(0===t.length)return e;for(let n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n),e|=0;return e}}class r{}class a extends r{get(t){return"#666666"}}class l extends r{static buildPalette(){return[].concat(...Object.values(s.B.colourPalette))}get(t){const e=o.hashCode(t)%l.palette.length;return function(t){if(null==t)return"rgb(100,100,100)";const e=i.Color.fromHtml(t),n=i.Color.g(e),s=i.Color.r(e),o=i.Color.b(e),r=Math.sqrt(Math.pow(0-s,2)+Math.pow(0-n,2)+Math.pow(0-o,2));return r>210?`rgb(${s/r*210},${n/r*210},${o/r*210})`:i.Color.toRgb(e)}(l.palette[e])}}l.palette=l.buildPalette();class h extends s.B{static get Gray(){return void 0===this.gray&&(this.gray=new a),this.gray}static get Color(){return void 0===this.color&&(this.color=new l),this.color}}},1047:(t,e,n)=>{"use strict";n.d(e,{At:()=>s,K4:()=>o,rx:()=>i});const i=["symbol","molfile","rgroups","name"],s="MonomerName",o={monomerType:null,smiles:null,name:"MonomerName",author:null,molfile:"molecule",naturalAnalog:"MonomerNaturalAnalogCode",rgroups:"MonomerCaps",createDate:null,id:null,polymerType:"MonomerType",symbol:"MonomerCode"}},5226:(t,e,n)=>{"use strict";n.d(e,{i:()=>o});var i=n(976),s=n(499);class o{get descriptionsArray(){return this._descriptionsArray}get sequencesArray(){return this._sequencesArray}parseMacromolecule(t,e){return this._fileContent.slice(t,e).split(/\s/).join("")}parseColumns(){const t=/^>(.*)$/gm;let e,n=0;for(;e=t.exec(this._fileContent);){const i=this._fileContent.substring(e.index+1,t.lastIndex);this._descriptionsArray.push(i),0!==n&&this._sequencesArray.push(this.parseMacromolecule(n,e.index)),n=t.lastIndex+1}this._sequencesArray.push(this.parseMacromolecule(n,-1))}importFasta(){const t=i.Column.fromStrings("description",this.descriptionsArray),e=i.Column.fromStrings("sequence",this.sequencesArray);return e.semType=i.SEMTYPE.MACROMOLECULE,e.setTag(i.TAGS.UNITS,"fasta"),s.C.setUnitsToFastaColumn(e),[i.DataFrame.fromColumns([t,e])]}constructor(t){this._descriptionsArray=[],this._sequencesArray=[],this._fileContent=t,this.parseColumns()}}},1821:(t,e,n)=>{"use strict";n.d(e,{BM:()=>s,XS:()=>r});var i=n(6286);const s=/\[(\w+)\]|(\w)|(-)/g,o=new class{constructor(){this.fasta={peptide:new Set(["G","L","Y","S","E","Q","D","N","F","A","K","R","H","C","V","P","W","I","M","T"]),dna:new Set(["A","C","G","T"]),rna:new Set(["A","C","G","U"])}}},r=[new i.L("PT",o.fasta.peptide,.5),new i.L("DNA",o.fasta.dna,.55),new i.L("RNA",o.fasta.rna,.55)]},8447:(t,e,n)=>{"use strict";n.d(e,{GU:()=>i.GU,dQ:()=>i.dQ,fy:()=>i.fy,gP:()=>i.gP,kB:()=>i.kB,py:()=>i.py,up:()=>i.up,vU:()=>i.vU});var i=n(585)},6286:(t,e,n)=>{"use strict";n.d(e,{L:()=>i,d:()=>s});class i{constructor(t,e,n){this.name=t,this.alphabet=e,this.cutoff=n}}class s extends i{constructor(t,e,n){super(t.name,t.alphabet,t.cutoff),this.freq=e,this.similarity=n}}},585:(t,e,n)=>{"use strict";n.d(e,{Ar:()=>g,GU:()=>M,Mj:()=>C,dQ:()=>x,fy:()=>m,gP:()=>b,kB:()=>p,py:()=>N,up:()=>E,vU:()=>w,w4:()=>T});var i=n(976),s=n(6414),o=n.n(s),r=n(6286),a=n(1821),l=n(499),h=n(3659),c=n(850),u=n(2012),d=n(6137),f=n(7331);function m(t,e,n){const i={};let s=!0,o=null;for(const r of t.categories){const t=n(r);if(null==o?o=t.length:t.length!==o&&(s=!1),t.length>=e)for(const e of t)e in i||(i[e]=0),i[e]+=1}return{freq:i,sameLength:s}}function p(t){return o()(t.toString().matchAll(a.BM)).map((t=>{const e=t[0];return e.length>1?t[1]:e})).toArray()}function g(t,e=undefined){return n=>n.split(t,e)}const y=/(PEPTIDE1|DNA1|RNA1)\{([^}]+)}/g,v=/\[([^\[\]]+)]/g;function b(t){y.lastIndex=0;const e=y.exec(t.toString()),n=e?e[2]:null;return(n?n.split("."):[]).map((t=>{v.lastIndex=0;const e=v.exec(t);return e&&e.length>=2?e[1]:t}))}function w(t,e,n=undefined){if(t.toLowerCase().startsWith("fasta"))return p;if(t.toLowerCase().startsWith("separator"))return g(e,n);if(t.toLowerCase().startsWith("helm"))return b;throw new Error(`Unexpected units ${t} .`)}function C(t){if(t.semType!==i.SEMTYPE.MACROMOLECULE)throw new Error(`Get splitter for semType "${i.SEMTYPE.MACROMOLECULE}" only.`);return w(t.getTag(i.TAGS.UNITS),t.getTag("separator"))}const S=/(\w+)/g;function M(t,e){var n,i;const s=t.match(S),o=t.length>e||(null!==(n=null==s?void 0:s.length)&&void 0!==n?n:0)>1,r=null!==(i=null==s?void 0:s[0])&&void 0!==i?i:" ";return o?r.substring(0,e)+"…":r}function T(t,e,n="-"){const i=e.map((e=>{const i=function(t,e,n="-"){const i=new Set([...new Set(Object.keys(t)),...e]);i.delete(n);const s=[],o=[];for(const n of i)s.push(n in t?t[n]:0),o.push(e.has(n)?1:0);const r=new h.OW(s),a=new h.OW(o);return(0,c.MA)(r,a)/((0,c.$G)(r)*(0,c.$G)(a))}(t,e.alphabet,n);return new r.d(e,t,i)}));let s;const o=Math.max(...i.map((t=>t.similarity>t.cutoff?t.similarity:-1)));return s=o>0?i.find((t=>t.similarity===o)).name:"UN",s}function x(t,e=5){let n;return n=t.semType==i.SEMTYPE.MACROMOLECULE?new l.C(t).alphabet:T(m(t,e,p).freq,a.XS),N(n)}function N(t){switch(t){case"PT":return u.f.GrokGroups;case"DNA":case"RNA":return d.J.Chromatogram;default:return f.UE.Color}}function E(t){var e;const n=t.columns.bySemTypeAll(i.SEMTYPE.MACROMOLECULE);let s=null!==(e=n.find((t=>{const e=t.getTag(i.TAGS.UNITS);return!!e&&-1!==e.indexOf("MSA")})))&&void 0!==e?e:null;return!s&&n.length>0&&(s=n[0]),s}},7767:(t,e,n)=>{"use strict";n.d(e,{L:()=>r});var i=n(976),s=n(499),o=n(585);class r extends s.C{get splitter(){return null===this._splitter&&(this._splitter=(0,o.Mj)(this.column)),this._splitter}toFasta(t){return"fasta"===t}toSeparator(t){return"separator"===t}toHelm(t){return"helm"===t}convertFastaToSeparator(t,e=null){null===e&&(e=this.defaultGapSymbol);const n=this.getNewColumn("separator",t);return n.init((n=>{const i=this.column.get(n),o=this.splitter(i);for(let t=0;t<o.length;t++)o[t]===e&&(o[t]=s.C._defaultGapSymbolsDict.SEPARATOR);return o.join(t)})),n.setTag(i.TAGS.UNITS,"separator"),n}getHelmWrappers(){const t=this.isDna()?"DNA1{":this.isRna()||this.isHelmCompatible()?"RNA1{":this.isPeptide()?"PEPTIDE1{":"Unknown";if("Unknown"===t)throw new Error("Neither peptide, nor nucleotide");return[t,this.isDna()?"D(":this.isRna()?"R(":"",this.isDna()||this.isRna()?")P":"","}$$$$"]}convertToHelmHelper(t,e,n,i,o,r){return`${n}${this.splitter(t).map((t=>t===e?s.C._defaultGapSymbolsDict.HELM:`${i}${t}${o}`)).join(".")}${r}`}convertStringToHelm(t,e=null){null===e&&(e=this.defaultGapSymbol);const[n,i,s,o]=this.getHelmWrappers();return this.convertToHelmHelper(t,e,n,i,s,o)}convertToHelm(t=null){null===t&&(t=this.defaultGapSymbol);const[e,n,s,o]=this.getHelmWrappers(),r=this.getNewColumn("helm");return r.init((i=>{const r=this.column.get(i);return this.convertToHelmHelper(r,t,e,n,s,o)})),r.setTag(i.TAGS.UNITS,"helm"),r}convertSeparatorToFasta(t=null){null===t&&(t=s.C._defaultGapSymbolsDict.FASTA);const e=this.getNewColumn("fasta");return e.init((e=>{const n=this.column.get(e),i=this.splitter(n),s=[];for(let e=0;e<i.length;e++){const n=i[e];if(0===n.length)s.push(t);else if(n.length>1){const t="["+n+"]";s.push(t)}else s.push(n)}return s.join("")})),e.setTag(i.TAGS.UNITS,"fasta"),e}convertHelmToFastaSeparator(t,e,n,i){i||(i=this.toFasta(e)?s.C._defaultGapSymbolsDict.FASTA:s.C._defaultGapSymbolsDict.SEPARATOR),n||(n=this.toFasta(e)?"":this.separator);const o=/(R\(|D\(|\)|P)/g,r=t.startsWith("DNA")||t.startsWith("RNA"),a=this.splitter(t),l=[];for(let t=0;t<a.length;t++){let n=a[t];if(r&&(n=n.replace(o,"")),n===s.C._defaultGapSymbolsDict.HELM)l.push(i);else if(this.toFasta(e)&&n.length>1){const t="["+n+"]";l.push(t)}else l.push(n)}return l.join(n)}convertHelm(t,e,n){const i=this.getNewColumn(t,e);i.init((i=>{const s=this.column.get(i);return this.convertHelmToFastaSeparator(s,t,e,n)}));const s=(0,o.Mj)(i),r=(0,o.fy)(i,5,s).sameLength?"SEQ.MSA":"SEQ";return i.setTag("aligned",r),i}convertHelmToSeparator(){return this.getNewColumn("separator")}convert(t,e=null){if(this.notation===t)throw new Error("tgt notation is invalid");if(this.toSeparator(t)&&null===e)throw new Error("tgt separator is not specified");if(this.isFasta()&&this.toSeparator(t)&&null!==e)return this.convertFastaToSeparator(e);if((this.isFasta()||this.isSeparator())&&this.toHelm(t))return this.convertToHelm();if(this.isSeparator()&&this.toFasta(t))return this.convertSeparatorToFasta();if(this.isHelm()&&this.toFasta(t))return this.convertHelm(t);if(this.isHelm()&&this.toSeparator(t))return this.convertHelm(t,e);throw new Error(`Not supported conversion from source notation '${this.notation}' to target notation '${t}'.`)}constructor(t){super(t),this._splitter=null}}},499:(t,e,n)=>{"use strict";n.d(e,{C:()=>l});var i=n(976),s=n(1821),o=n(585),r=n(489),a=n(7228);class l{static setUnitsToFastaColumn(t){if(t.semType!==i.SEMTYPE.MACROMOLECULE||"fasta"!==t.getTag(i.TAGS.UNITS))throw new Error(`The column of notation 'fasta' must be '${i.SEMTYPE.MACROMOLECULE}'.`);t.setTag(i.TAGS.UNITS,"fasta"),l.setTags(t,o.kB)}static setUnitsToSeparatorColumn(t,e){if(t.semType!==i.SEMTYPE.MACROMOLECULE||"separator"!==t.getTag(i.TAGS.UNITS))throw new Error(`The column of notation 'separator' must be '${i.SEMTYPE.MACROMOLECULE}'.`);if(!e)throw new Error("The column of notation 'separator' must have the separator tag.");t.setTag(i.TAGS.UNITS,"separator"),t.setTag("separator",e),l.setTags(t,(0,o.Ar)(e))}static setUnitsToHelmColumn(t){if(t.semType!==i.SEMTYPE.MACROMOLECULE)throw new Error(`The column of notation 'helm' must be '${i.SEMTYPE.MACROMOLECULE}'`);t.setTag(i.TAGS.UNITS,"helm"),l.setTags(t,o.gP)}static setTags(t,e){const n=t.getTag(i.TAGS.UNITS),r=(0,o.fy)(t,5,e);if(Object.keys(r.freq).some((t=>t.length>1)),["fasta","separator"].includes(n)){if(0===Object.keys(r.freq).length)throw new Error("Alphabet is empty");const e=r.sameLength?"SEQ.MSA":"SEQ";t.setTag("aligned",e);const n=(0,o.w4)(r.freq,s.XS);if(t.setTag("alphabet",n),"UN"===n){const e=Object.keys(r.freq).length,n=Object.keys(r.freq).some((t=>t.length>1));t.setTag(".alphabetSize",e.toString()),t.setTag(".alphabetIsMultichar",n?"true":"false")}}}get units(){return this._units}get column(){return this._column}get notation(){return this._notation}get defaultGapSymbol(){return this._defaultGapSymbol}get separator(){var t;const e=null!==(t=this.column.getTag("separator"))&&void 0!==t?t:void 0;if("separator"===this.notation&&void 0===e)throw new Error(`Separator is mandatory for column '${this.column.name}' of notation '${this.notation}'.`);return e}get aligned(){const t=this.column.getTag("aligned");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag aligned not set");return t}get alphabet(){const t=this.column.getTag("alphabet");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag alphabet not set");return t}get helmCompatible(){return this.column.getTag(".isHelmCompatible")}getAlphabetSize(){if("helm"==this.notation||"UN"==this.alphabet){const t=this.column.getTag(".alphabetSize");let e;if(t)e=parseInt(t);else{const t=(0,o.Mj)(this.column),n=(0,o.fy)(this.column,1,t);e=Object.keys(n.freq).length}return e}switch(this.alphabet){case"PT":return 20;case"DNA":case"RNA":return 4;case"NT":return console.warn("Unexpected alphabet 'NT'."),4;default:throw new Error(`Unexpected alphabet '${this.alphabet}'.`)}}getAlphabetIsMultichar(){return"helm"===this.notation||"UN"===this.alphabet&&"true"===this.column.getTag(".alphabetIsMultichar")}isFasta(){return"fasta"===this.notation}isSeparator(){return"separator"===this.notation}isHelm(){return"helm"===this.notation}isRna(){return"RNA"===this.alphabet}isDna(){return"DNA"===this.alphabet}isPeptide(){return"PT"===this.alphabet}isMsa(){return!!this.aligned&&this.aligned.toUpperCase().includes("MSA")}isHelmCompatible(){return"true"===this.helmCompatible}getNotation(){if(this.units.toLowerCase().startsWith("fasta"))return"fasta";if(this.units.toLowerCase().startsWith("separator"))return"separator";if(this.units.toLowerCase().startsWith("helm"))return"helm";throw new Error(`Column '${this.column.name}' has unexpected notation '${this.units}'.`)}getNewColumn(t,e){const n=this.column,s=n.length,o=t.toLowerCase()+"("+n.name+")",r=n.dataFrame.columns.getUnusedName(o),a=i.Column.fromList("string",r,new Array(s).fill(""));if(a.semType=i.SEMTYPE.MACROMOLECULE,a.setTag(i.TAGS.UNITS,t),"separator"===t){if(!e)throw new Error("Notation 'separator' requires separator value.");a.setTag("separator",e)}a.setTag(i.TAGS.CELL_RENDERER,"Macromolecule");const l=n.getTag("aligned");l&&a.setTag("aligned",l);const h=n.getTag("alphabet");h&&a.setTag("alphabet",h);let c=n.getTag(".alphabetSize");c&&a.setTag(".alphabetSize",c);const u=n.getTag(".alphabetIsMultichar");return void 0!==u&&a.setTag(".alphabetIsMultichar",u),"helm"==t&&(c=this.getAlphabetSize().toString(),a.setTag(".alphabetSize",c)),a}static getNewColumn(t){const e=new l(t),n=e.notation;return e.getNewColumn(n)}static unitsStringIsValid(t){return t=t.toLowerCase(),["fasta","separator","helm"].some((e=>t.startsWith(e.toLowerCase())))}static getNewColumnFromParams(t,e,n){if(!l.unitsStringIsValid(n))throw new Error("Invalid format of 'units' parameter");const s=i.Column.fromList("string",e,new Array(t).fill(""));return s.semType=i.SEMTYPE.MACROMOLECULE,s.setTag(i.TAGS.UNITS,n),s}getDistanceFunctionName(){if(!this.isFasta())throw new Error("Only FASTA notation is supported");if(this.isMsa())return r.U.HAMMING;switch(this.alphabet){case"DNA":case"RNA":default:return r.U.LEVENSHTEIN;case"PT":return r.U.NEEDLEMANN_WUNSCH}}getDistanceFunction(){return r.o[this.getDistanceFunctionName()]()}checkHelmCompatibility(){return t=this,e=void 0,i=function*(){if(this.column.tags.has(".isHelmCompatible"))return"true"===this.column.getTag(".isHelmCompatible");const t=(yield(0,a.JN)()).getBioLib().getMonomerNamesByType("PEPTIDE".toString()),e=new Set(t),n=(0,o.Ar)(this.separator);for(const t of this.column.categories){const i=n(t);for(const t of i)if(!e.has(t))return this.column.setTag(".isHelmCompatible","false"),!1}return this.column.setTag(".isHelmCompatible","true"),!0},new((n=void 0)||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}));var t,e,n,i}constructor(t){this._column=t;const e=this._column.getTag(i.TAGS.UNITS);if(null==e)throw new Error("Units are not specified in column");if(this._units=e,this._notation=this.getNotation(),this._defaultGapSymbol=this.isFasta()?l._defaultGapSymbolsDict.FASTA:this.isHelm()?l._defaultGapSymbolsDict.HELM:l._defaultGapSymbolsDict.SEPARATOR,!this.column.tags.has("aligned")||!this.column.tags.has("alphabet")||!this.column.tags.has(".alphabetIsMultichar")&&!this.isHelm()&&"UN"===this.alphabet)if(this.isFasta())l.setUnitsToFastaColumn(this.column);else if(this.isSeparator()){const e=t.getTag("separator");l.setUnitsToSeparatorColumn(this.column,e)}else{if(!this.isHelm())throw new Error(`Unexpected units '${this.column.getTag(i.TAGS.UNITS)}'.`);l.setUnitsToHelmColumn(this.column)}if(!this.column.tags.has(".alphabetIsMultichar"))if(this.isHelm())this.column.setTag(".alphabetIsMultichar","true");else if(["UN"].includes(this.alphabet))throw new Error(`For column '${this.column.name}' of alphabet '${this.alphabet}' tag '.alphabetIsMultichar' is mandatory.`)}}l._defaultGapSymbolsDict={HELM:"*",SEPARATOR:"",FASTA:"-"}},9298:(t,e,n)=>{"use strict";var i,s,o,r,a;n.d(e,{CI:()=>h,Ct:()=>a,DX:()=>c,ES:()=>i,dE:()=>r,iD:()=>o,vS:()=>l,vw:()=>s}),function(t){t.Entropy="Entropy",t.full="100%"}(i||(i={})),function(t){t.TOP="top",t.MIDDLE="middle",t.BOTTOM="bottom"}(s||(s={})),function(t){t.LEFT="left",t.CENTER="center",t.RIGHT="right"}(o||(o={})),function(t){t.AUTO="auto",t.ON="on",t.OFF="off"}(r||(r={})),function(t){t.Filtered="Filtered",t.Selected="Selected"}(a||(a={}));const l=new class{constructor(){this.sequenceColumnName=null,this.startPositionName=null,this.endPositionName=null,this.skipEmptySequences=!0,this.skipEmptyPositions=!1,this.shrinkEmptyTail=!0,this.backgroundColor=4294967295,this.positionHeight=i.full,this.positionWidth=16,this.verticalAlignment=s.MIDDLE,this.horizontalAlignment=o.CENTER,this.fixWidth=!1,this.fitArea=!0,this.minHeight=50,this.maxHeight=100,this.positionMarginState=r.AUTO,this.positionMargin=0,this.filterSource=a.Filtered}},h=", ";var c;!function(t){t.positionNames=".positionNames"}(c||(c={}))},779:(t,e,n)=>{"use strict";function i(){return(t,e)=>{let n=0;t.length!==e.length&&(n=Math.abs(t.length-e.length));let i=0;for(let n=0;n<Math.min(t.length,e.length);n++)t[n]!==e[n]&&i++;return i+n}}n.d(e,{j:()=>i})},489:(t,e,n)=>{"use strict";n.d(e,{U:()=>i.U,o:()=>i.o});var i=n(5540)},458:(t,e,n)=>{"use strict";n.d(e,{r:()=>s});var i=n(1811);function s(){return(t,e)=>(0,i.T)(t,e)}},5540:(t,e,n)=>{"use strict";n.d(e,{U:()=>i,o:()=>a});var i,s=n(779),o=n(458),r=n(6683);!function(t){t.HAMMING="Hamming",t.LEVENSHTEIN="Levenshtein",t.NEEDLEMANN_WUNSCH="Needlemann-Wunsch"}(i||(i={}));const a={[i.HAMMING]:s.j,[i.LEVENSHTEIN]:o.r,[i.NEEDLEMANN_WUNSCH]:r.n}},6683:(t,e,n)=>{"use strict";n.d(e,{n:()=>s});const i={gapOpen:8,gapExtend:2,scoringMatrix:[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],alphabetIndexes:{A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23}};function s(t){return(e,n)=>{const{gapOpen:s,gapExtend:o,scoringMatrix:r,alphabetIndexes:a}=Object.assign(Object.assign({},i),t),l=[new Array(e.length+1).fill(0),new Array(e.length+1).fill(0)],h=new Array(e.length+1).fill(!1),c=new Array(e.length+1).fill(!1);let u=0,d=1;for(let t=1;t<e.length+1;t++)l[0][t]=-s-(t-1)*o;for(let t=1;t<n.length+1;t++){l[d][0]=-s-(t-1)*o;for(let i=1;i<e.length+1;i++){const f=l[u][i-1]+r[a[e[i-1]]][a[n[t-1]]],m=l[u][i]-(h[i]?o:s),p=l[d][i-1]-(c[i-1]?o:s);l[d][i]=Math.max(f,p,m),l[d][i]===f?(h[i]=!1,c[i]=!1):l[d][i]===p?(h[i]=!1,c[i]=!0):(h[i]=!0,c[i]=!1)}u=d,d=(d+1)%2}return-l[u][e.length]}}},1061:(t,e,n)=>{"use strict";n.d(e,{gw:()=>o}),n(4469),n(976);var i,s=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function o(t){return s(this,void 0,void 0,(function*(){yield new Promise((e=>setTimeout(e,t)))}))}!function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(i||(i={}))},7604:(t,e,n)=>{"use strict";function i(t){var e;return"string"==typeof t||t instanceof String?t:("object"==typeof t||t instanceof Object)&&"$thrownJsError"in t?i(t.$thrownJsError):t instanceof Error?null!==(e=t.stack)&&void 0!==e?e:t.message:t.toString()}n.d(e,{O:()=>i})},3659:(t,e,n)=>{"use strict";n.d(e,{OW:()=>i});class i extends Float32Array{}},850:(t,e,n)=>{"use strict";function i(t=!1,e="Assertion error."){if(!t)throw new Error(e)}function s(t){let e=0;for(let n=0;n<t.length;n++)e+=t[n]*t[n];return Math.sqrt(e)}function o(t,e){if(t.length!=e.length)throw new Error("The dimensionality of the vectors must match");let n=0;for(let i=0;i<t.length;i++)n+=t[i]*e[i];return n}n.d(e,{$G:()=>s,MA:()=>o,hu:()=>i}),n(3659)},7659:(t,e,n)=>{"use strict";e.Z=void 0;var i=n(6215);Object.defineProperty(e,"Z",{enumerable:!0,get:function(){return i.TSNE}})},6215:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TSNE=void 0,e.TSNE=class{constructor(t){this.returnV=!1,this.vValue=0,this.iter=0,t=t||{},this.perplexity=this.getopt(t,"perplexity",30),this.dim=this.getopt(t,"dim",2),this.epsilon=this.getopt(t,"epsilon",10)}assert(t,e){if(!t)throw e||"Assertion failed"}getopt(t,e,n){return t.hasOwnProperty(e)?t[e]:n}gaussRandom(){if(this.returnV)return this.returnV=!1,this.vValue;const t=2*Math.random()-1,e=2*Math.random()-1,n=t*t+e*e;if(0===n||n>1)return this.gaussRandom();const i=Math.sqrt(-2*Math.log(n)/n);return this.vValue=e*i,this.returnV=!0,t*i}randn(t,e){return t+this.gaussRandom()*e}zeros(t){if(void 0===t||isNaN(t))return[];if("undefined"==typeof ArrayBuffer){const e=new Array(t);for(let n=0;n<t;n++)e[n]=0;return e}return new Float64Array(t)}randn2d(t,e,n){const i=void 0!==n,s=[];for(let o=0;o<t;o++){const t=[];for(let s=0;s<e;s++)i?t.push(n):t.push(this.randn(0,1e-4));s.push(t)}return s}L2(t,e){const n=t.length;let i=0;for(let s=0;s<n;s++){const n=t[s],o=e[s];i+=(n-o)*(n-o)}return i}xtod(t){const e=t.length,n=this.zeros(e*e);for(let i=0;i<e;i++)for(let s=i+1;s<e;s++){const o=this.L2(t[i],t[s]);n[i*e+s]=o,n[s*e+i]=o}return n}d2p(t,e,n){const i=Math.sqrt(t.length),s=Math.floor(i);this.assert(s===i,"D should have square number of elements.");const o=Math.log(e),r=this.zeros(s*s),a=this.zeros(s);for(let e=0;e<s;e++){let i=-1/0,l=1/0,h=1,c=!1;const u=50;let d=0;for(;!c;){let r=0;for(let n=0;n<s;n++){let i=Math.exp(-t[e*s+n]*h);e===n&&(i=0),a[n]=i,r+=i}let f=0;for(let t=0;t<s;t++){let e;e=0===r?0:a[t]/r,a[t]=e,e>1e-7&&(f-=e*Math.log(e))}f>o?(i=h,l===1/0?h*=2:h=(h+l)/2):(l=h,i===-1/0?h/=2:h=(h+i)/2),d++,Math.abs(f-o)<n&&(c=!0),d>=u&&(c=!0)}for(let t=0;t<s;t++)r[e*s+t]=a[t]}const l=this.zeros(s*s),h=2*s;for(let t=0;t<s;t++)for(let e=0;e<s;e++)l[t*s+e]=Math.max((r[t*s+e]+r[e*s+t])/h,1e-100);return l}sign(t){return t>0?1:t<0?-1:0}initDataRaw(t){const e=t.length,n=t[0].length;this.assert(e>0," X is empty? You must have some data!"),this.assert(n>0," X[0] is empty? Where is the data?");const i=this.xtod(t);this.P=this.d2p(i,this.perplexity,1e-4),this.N=e,this.initSolution()}initDataDist(t){const e=t.length;this.assert(e>0," X is empty? You must have some data!");const n=this.zeros(e*e);for(let i=0;i<e;i++)for(let s=i+1;s<e;s++){const o=t[i][s];n[i*e+s]=o,n[s*e+i]=o}this.P=this.d2p(n,this.perplexity,1e-4),this.N=e,this.initSolution()}initSolution(){this.Y=this.randn2d(this.N,this.dim),this.gains=this.randn2d(this.N,this.dim,1),this.ystep=this.randn2d(this.N,this.dim,0),this.iter=0}getSolution(){return this.Y}step(){this.iter+=1;const t=this.N,e=this.costGrad(this.Y),n=e.cost,i=e.grad,s=this.zeros(this.dim);for(let e=0;e<t;e++)for(let t=0;t<this.dim;t++){const n=i[e][t],o=this.ystep[e][t],r=this.gains[e][t];let a=this.sign(n)===this.sign(o)?.8*r:r+.2;a<.01&&(a=.01),this.gains[e][t]=a;const l=(this.iter<250?.5:.8)*o-this.epsilon*a*i[e][t];this.ystep[e][t]=l,this.Y[e][t]+=l,s[t]+=this.Y[e][t]}for(let e=0;e<t;e++)for(let n=0;n<this.dim;n++)this.Y[e][n]-=s[n]/t;return n}debugGrad(){const t=this.N,e=this.costGrad(this.Y),n=(e.cost,e.grad),i=1e-5;for(let e=0;e<t;e++)for(let t=0;t<this.dim;t++){const s=this.Y[e][t];this.Y[e][t]=s+i;const o=this.costGrad(this.Y);this.Y[e][t]=s-i;const r=this.costGrad(this.Y),a=n[e][t],l=(o.cost-r.cost)/(2*i);console.log(e+","+t+": gradcheck analytic: "+a+" vs. numerical: "+l),this.Y[e][t]=s}}costGrad(t){const e=this.N,n=this.dim,i=this.P,s=this.iter<100?4:1,o=this.zeros(e*e);let r=0;for(let i=0;i<e;i++)for(let s=i+1;s<e;s++){let a=0;for(let e=0;e<n;e++){const n=t[i][e]-t[s][e];a+=n*n}const l=1/(1+a);o[i*e+s]=l,o[s*e+i]=l,r+=2*l}const a=e*e,l=this.zeros(a);for(let t=0;t<a;t++)l[t]=Math.max(o[t]/r,1e-100);let h=0;const c=[];for(let r=0;r<e;r++){const a=new Array(n);for(let t=0;t<n;t++)a[t]=0;for(let c=0;c<e;c++){h+=-i[r*e+c]*Math.log(l[r*e+c]);const u=4*(s*i[r*e+c]-l[r*e+c])*o[r*e+c];for(let e=0;e<n;e++)a[e]+=u*(t[r][e]-t[c][e])}c.push(a)}return{cost:h,grad:c}}}},9414:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(7537),s=n.n(i),o=n(3645),r=n.n(o)()(s());r.push([t.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;AAChB",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n"],sourceRoot:""}]);const a=r},3645:t=>{"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var n="",i=void 0!==e[5];return e[4]&&(n+="@supports (".concat(e[4],") {")),e[2]&&(n+="@media ".concat(e[2]," {")),i&&(n+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),n+=t(e),i&&(n+="}"),e[2]&&(n+="}"),e[4]&&(n+="}"),n})).join("")},e.i=function(t,n,i,s,o){"string"==typeof t&&(t=[[null,t,void 0]]);var r={};if(i)for(var a=0;a<this.length;a++){var l=this[a][0];null!=l&&(r[l]=!0)}for(var h=0;h<t.length;h++){var c=[].concat(t[h]);i&&r[c[0]]||(void 0!==o&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=o),n&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=n):c[2]=n),s&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=s):c[4]="".concat(s)),e.push(c))}},e}},7537:t=>{"use strict";t.exports=function(t){var e=t[1],n=t[3];if(!n)return e;if("function"==typeof btoa){var i=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(i),o="/*# ".concat(s," */");return[e].concat([o]).join("\n")}return[e].join("\n")}},9133:function(t,e,n){var i;!function(e,s){var o={};!function(t){"use strict";t.__esModule=!0,t.digestLength=32,t.blockSize=64;var e=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function n(t,n,i,s,o){for(var r,a,l,h,c,u,d,f,m,p,g,y,v;o>=64;){for(r=n[0],a=n[1],l=n[2],h=n[3],c=n[4],u=n[5],d=n[6],f=n[7],p=0;p<16;p++)g=s+4*p,t[p]=(255&i[g])<<24|(255&i[g+1])<<16|(255&i[g+2])<<8|255&i[g+3];for(p=16;p<64;p++)y=((m=t[p-2])>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,v=((m=t[p-15])>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,t[p]=(y+t[p-7]|0)+(v+t[p-16]|0);for(p=0;p<64;p++)y=(((c>>>6|c<<26)^(c>>>11|c<<21)^(c>>>25|c<<7))+(c&u^~c&d)|0)+(f+(e[p]+t[p]|0)|0)|0,v=((r>>>2|r<<30)^(r>>>13|r<<19)^(r>>>22|r<<10))+(r&a^r&l^a&l)|0,f=d,d=u,u=c,c=h+y|0,h=l,l=a,a=r,r=y+v|0;n[0]+=r,n[1]+=a,n[2]+=l,n[3]+=h,n[4]+=c,n[5]+=u,n[6]+=d,n[7]+=f,s+=64,o-=64}return s}var i=function(){function e(){this.digestLength=t.digestLength,this.blockSize=t.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return e.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},e.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},e.prototype.update=function(t,e){if(void 0===e&&(e=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var i=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[i++],e--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(i=n(this.temp,this.state,t,i,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[i++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,i=this.bufferLength,s=e/536870912|0,o=e<<3,r=e%64<56?64:128;this.buffer[i]=128;for(var a=i+1;a<r-8;a++)this.buffer[a]=0;this.buffer[r-8]=s>>>24&255,this.buffer[r-7]=s>>>16&255,this.buffer[r-6]=s>>>8&255,this.buffer[r-5]=s>>>0&255,this.buffer[r-4]=o>>>24&255,this.buffer[r-3]=o>>>16&255,this.buffer[r-2]=o>>>8&255,this.buffer[r-1]=o>>>0&255,n(this.temp,this.state,this.buffer,0,r),this.finished=!0}for(a=0;a<8;a++)t[4*a+0]=this.state[a]>>>24&255,t[4*a+1]=this.state[a]>>>16&255,t[4*a+2]=this.state[a]>>>8&255,t[4*a+3]=this.state[a]>>>0&255;return this},e.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},e.prototype._saveState=function(t){for(var e=0;e<this.state.length;e++)t[e]=this.state[e]},e.prototype._restoreState=function(t,e){for(var n=0;n<this.state.length;n++)this.state[n]=t[n];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=i;var s=function(){function t(t){this.inner=new i,this.outer=new i,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new i).update(t).finish(e).clean();else for(var n=0;n<t.length;n++)e[n]=t[n];for(n=0;n<e.length;n++)e[n]^=54;for(this.inner.update(e),n=0;n<e.length;n++)e[n]^=106;for(this.outer.update(e),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),n=0;n<e.length;n++)e[n]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function o(t){var e=(new i).update(t),n=e.digest();return e.clean(),n}function r(t,e){var n=new s(t).update(e),i=n.digest();return n.clean(),i}function a(t,e,n,i){var s=i[0];if(0===s)throw new Error("hkdf: cannot expand more");e.reset(),s>1&&e.update(t),n&&e.update(n),e.update(i),e.finish(t),i[0]++}t.HMAC=s,t.hash=o,t.default=o,t.hmac=r;var l=new Uint8Array(t.digestLength);t.hkdf=function(t,e,n,i){void 0===e&&(e=l),void 0===i&&(i=32);for(var o=new Uint8Array([1]),h=r(e,t),c=new s(h),u=new Uint8Array(c.digestLength),d=u.length,f=new Uint8Array(i),m=0;m<i;m++)d===u.length&&(a(u,c,n,o),d=0),f[m]=u[d++];return c.clean(),u.fill(0),o.fill(0),f},t.pbkdf2=function(t,e,n,i){for(var o=new s(t),r=o.digestLength,a=new Uint8Array(4),l=new Uint8Array(r),h=new Uint8Array(r),c=new Uint8Array(i),u=0;u*r<i;u++){var d=u+1;a[0]=d>>>24&255,a[1]=d>>>16&255,a[2]=d>>>8&255,a[3]=d>>>0&255,o.reset(),o.update(e),o.update(a),o.finish(h);for(var f=0;f<r;f++)l[f]=h[f];for(f=2;f<=n;f++){o.reset(),o.update(h).finish(h);for(var m=0;m<r;m++)l[m]^=h[m]}for(f=0;f<r&&u*r+f<i;f++)c[u*r+f]=l[f]}for(u=0;u<r;u++)l[u]=h[u]=0;for(u=0;u<4;u++)a[u]=0;return o.clean(),c}}(o);var r=o.default;for(var a in o)r[a]=o[a];"object"==typeof t.exports?t.exports=r:void 0===(i=function(){return r}.call(o,n,o,t))||(t.exports=i)}()},1811:(t,e,n)=>{"use strict";n.d(e,{T:()=>s});const i=new Uint32Array(65536),s=(t,e)=>{if(t.length<e.length){const n=e;e=t,t=n}return 0===e.length?t.length:t.length<=32?((t,e)=>{const n=t.length,s=e.length,o=1<<n-1;let r=-1,a=0,l=n,h=n;for(;h--;)i[t.charCodeAt(h)]|=1<<h;for(h=0;h<s;h++){let t=i[e.charCodeAt(h)];const n=t|a;t|=(t&r)+r^r,a|=~(t|r),r&=t,a&o&&l++,r&o&&l--,a=a<<1|1,r=r<<1|~(n|a),a&=n}for(h=n;h--;)i[t.charCodeAt(h)]=0;return l})(t,e):((t,e)=>{const n=e.length,s=t.length,o=[],r=[],a=Math.ceil(n/32),l=Math.ceil(s/32);for(let t=0;t<a;t++)r[t]=-1,o[t]=0;let h=0;for(;h<l-1;h++){let a=0,l=-1;const c=32*h,u=Math.min(32,s)+c;for(let e=c;e<u;e++)i[t.charCodeAt(e)]|=1<<e;for(let t=0;t<n;t++){const n=i[e.charCodeAt(t)],s=r[t/32|0]>>>t&1,h=o[t/32|0]>>>t&1,c=n|a,u=((n|h)&l)+l^l|n|h;let d=a|~(u|l),f=l&u;d>>>31^s&&(r[t/32|0]^=1<<t),f>>>31^h&&(o[t/32|0]^=1<<t),d=d<<1|s,f=f<<1|h,l=f|~(c|d),a=d&c}for(let e=c;e<u;e++)i[t.charCodeAt(e)]=0}let c=0,u=-1;const d=32*h,f=Math.min(32,s-d)+d;for(let e=d;e<f;e++)i[t.charCodeAt(e)]|=1<<e;let m=s;for(let t=0;t<n;t++){const n=i[e.charCodeAt(t)],a=r[t/32|0]>>>t&1,l=o[t/32|0]>>>t&1,h=n|c,d=((n|l)&u)+u^u|n|l;let f=c|~(d|u),p=u&d;m+=f>>>s-1&1,m-=p>>>s-1&1,f>>>31^a&&(r[t/32|0]^=1<<t),p>>>31^l&&(o[t/32|0]^=1<<t),f=f<<1|a,p=p<<1|l,u=p|~(h|f),c=f&h}for(let e=d;e<f;e++)i[t.charCodeAt(e)]=0;return m})(t,e)}},3979:(t,e)=>{"use strict";e.H$=void 0,e.H$=function(t,e,n){var i=function(t,e,n){if(0===t.length||0===e.length)return 0;if(n&&!n.caseSensitive&&(t=t.toUpperCase(),e=e.toUpperCase()),t===e)return 1;for(var i=0,s=t.length,o=e.length,r=Math.floor(Math.max(s,o)/2)-1,a=new Array(s),l=new Array(o),h=0;h<s;h++)for(var c=Math.max(0,h-r);c<=Math.min(o,h+r+1);c++)if(!a[h]&&!l[c]&&t[h]===e[c]){++i,a[h]=l[c]=!0;break}if(0===i)return 0;var u=0,d=0;for(h=0;h<s;h++)if(a[h]){for(;!l[d];)d++;t.charAt(h)!==e.charAt(d++)&&u++}return(i/s+i/o+(i-(u/=2))/i)/3}(t,e,n),s=0;if(i>.7){for(var o=Math.min(t.length,e.length),r=0;t[r]===e[r]&&r<4&&r<o;)++s,r++;i+=.1*s*(1-i)}return i}},9251:(t,e,n)=>{"use strict";n.r(e),n.d(e,{default:()=>P});const i=Object.prototype.toString;function s(t){return i.call(t).endsWith("Array]")}function o(t,e,n){let i=0;const s=n(e);for(let e=0;e<t.x.length;e++)i+=Math.abs(t.y[e]-s(t.x[e]));return i}const r=Object.prototype.toString;function a(t){return r.call(t).endsWith("Array]")}const l=Object.prototype.toString;function h(t){return l.call(t).endsWith("Array]")}const c=Object.prototype.toString;const u=Object.prototype.toString;function d(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!h(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");if(void 0!==n.output){if(!h(n.output))throw new TypeError("output option must be an array if specified");e=n.output}else e=new Array(t.length);var i=function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e=t,!u.call(e).endsWith("Array]"))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var i=n.fromIndex,s=void 0===i?0:i,o=n.toIndex,r=void 0===o?t.length:o;if(s<0||s>=t.length||!Number.isInteger(s))throw new Error("fromIndex must be a positive integer smaller than length");if(r<=s||r>t.length||!Number.isInteger(r))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var a=t[s],l=s+1;l<r;l++)t[l]<a&&(a=t[l]);return a}(t),s=function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e=t,!c.call(e).endsWith("Array]"))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var i=n.fromIndex,s=void 0===i?0:i,o=n.toIndex,r=void 0===o?t.length:o;if(s<0||s>=t.length||!Number.isInteger(s))throw new Error("fromIndex must be a positive integer smaller than length");if(r<=s||r>t.length||!Number.isInteger(r))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var a=t[s],l=s+1;l<r;l++)t[l]>a&&(a=t[l]);return a}(t);if(i===s)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var o=n.min,r=void 0===o?n.autoMinMax?i:0:o,a=n.max,l=void 0===a?n.autoMinMax?s:1:a;if(r>=l)throw new RangeError("min option must be smaller than max option");for(var d=(l-r)/(s-i),f=0;f<t.length;f++)e[f]=(t[f]-i)*d+r;return e}const f=" ".repeat(2),m=" ".repeat(4);function p(t,e={}){const{maxRows:n=15,maxColumns:i=10,maxNumSize:s=8,padMinus:o="auto"}=e;return`${t.constructor.name} {\n${f}[\n${m}${function(t,e,n,i,s){const{rows:o,columns:r}=t,a=Math.min(o,e),l=Math.min(r,n),h=[];if("auto"===s){s=!1;t:for(let e=0;e<a;e++)for(let n=0;n<l;n++)if(t.get(e,n)<0){s=!0;break t}}for(let e=0;e<a;e++){let n=[];for(let o=0;o<l;o++)n.push(g(t.get(e,o),i,s));h.push(`${n.join(" ")}`)}return l!==r&&(h[h.length-1]+=` ... ${r-n} more columns`),a!==o&&h.push(`... ${o-e} more rows`),h.join(`\n${m}`)}(t,n,i,s,o)}\n${f}]\n${f}rows: ${t.rows}\n${f}columns: ${t.columns}\n}`}function g(t,e,n){return(t>=0&&n?` ${y(t,e-1)}`:y(t,e)).padEnd(e)}function y(t,e){let n=t.toString();if(n.length<=e)return n;let i=t.toFixed(e);if(i.length>e&&(i=t.toFixed(Math.max(0,e-(i.length-e)))),i.length<=e&&!i.startsWith("0.000")&&!i.startsWith("-0.000"))return i;let s=t.toExponential(e);return s.length>e&&(s=t.toExponential(Math.max(0,e-(s.length-e)))),s.slice(0)}function v(t,e,n){let i=n?t.rows:t.rows-1;if(e<0||e>i)throw new RangeError("Row index out of range")}function b(t,e,n){let i=n?t.columns:t.columns-1;if(e<0||e>i)throw new RangeError("Column index out of range")}function w(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.columns)throw new RangeError("vector size must be the same as the number of columns");return e}function C(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.rows)throw new RangeError("vector size must be the same as the number of rows");return e}function S(t,e,n,i,s){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(T("startRow",e),T("endRow",n),T("startColumn",i),T("endColumn",s),e>n||i>s||e<0||e>=t.rows||n<0||n>=t.rows||i<0||i>=t.columns||s<0||s>=t.columns)throw new RangeError("Submatrix indices are out of range")}function M(t,e=0){let n=[];for(let i=0;i<t;i++)n.push(e);return n}function T(t,e){if("number"!=typeof e)throw new TypeError(`${t} must be a number`)}function x(t){if(t.isEmpty())throw new Error("Empty matrix has no elements to index")}class N{static from1DArray(t,e,n){if(t*e!==n.length)throw new RangeError("data length does not match given dimensions");let i=new A(t,e);for(let s=0;s<t;s++)for(let t=0;t<e;t++)i.set(s,t,n[s*e+t]);return i}static rowVector(t){let e=new A(1,t.length);for(let n=0;n<t.length;n++)e.set(0,n,t[n]);return e}static columnVector(t){let e=new A(t.length,1);for(let n=0;n<t.length;n++)e.set(n,0,t[n]);return e}static zeros(t,e){return new A(t,e)}static ones(t,e){return new A(t,e).fill(1)}static rand(t,e,n={}){if("object"!=typeof n)throw new TypeError("options must be an object");const{random:i=Math.random}=n;let s=new A(t,e);for(let n=0;n<t;n++)for(let t=0;t<e;t++)s.set(n,t,i());return s}static randInt(t,e,n={}){if("object"!=typeof n)throw new TypeError("options must be an object");const{min:i=0,max:s=1e3,random:o=Math.random}=n;if(!Number.isInteger(i))throw new TypeError("min must be an integer");if(!Number.isInteger(s))throw new TypeError("max must be an integer");if(i>=s)throw new RangeError("min must be smaller than max");let r=s-i,a=new A(t,e);for(let n=0;n<t;n++)for(let t=0;t<e;t++){let e=i+Math.round(o()*r);a.set(n,t,e)}return a}static eye(t,e,n){void 0===e&&(e=t),void 0===n&&(n=1);let i=Math.min(t,e),s=this.zeros(t,e);for(let t=0;t<i;t++)s.set(t,t,n);return s}static diag(t,e,n){let i=t.length;void 0===e&&(e=i),void 0===n&&(n=e);let s=Math.min(i,e,n),o=this.zeros(e,n);for(let e=0;e<s;e++)o.set(e,e,t[e]);return o}static min(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let n=t.rows,i=t.columns,s=new A(n,i);for(let o=0;o<n;o++)for(let n=0;n<i;n++)s.set(o,n,Math.min(t.get(o,n),e.get(o,n)));return s}static max(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let n=t.rows,i=t.columns,s=new this(n,i);for(let o=0;o<n;o++)for(let n=0;n<i;n++)s.set(o,n,Math.max(t.get(o,n),e.get(o,n)));return s}static checkMatrix(t){return N.isMatrix(t)?t:new A(t)}static isMatrix(t){return null!=t&&"Matrix"===t.klass}get size(){return this.rows*this.columns}apply(t){if("function"!=typeof t)throw new TypeError("callback must be a function");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.call(this,e,n);return this}to1DArray(){let t=[];for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.push(this.get(e,n));return t}to2DArray(){let t=[];for(let e=0;e<this.rows;e++){t.push([]);for(let n=0;n<this.columns;n++)t[e].push(this.get(e,n))}return t}toJSON(){return this.to2DArray()}isRowVector(){return 1===this.rows}isColumnVector(){return 1===this.columns}isVector(){return 1===this.rows||1===this.columns}isSquare(){return this.rows===this.columns}isEmpty(){return 0===this.rows||0===this.columns}isSymmetric(){if(this.isSquare()){for(let t=0;t<this.rows;t++)for(let e=0;e<=t;e++)if(this.get(t,e)!==this.get(e,t))return!1;return!0}return!1}isEchelonForm(){let t=0,e=0,n=-1,i=!0,s=!1;for(;t<this.rows&&i;){for(e=0,s=!1;e<this.columns&&!1===s;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>n?(s=!0,n=e):(i=!1,s=!0);t++}return i}isReducedEchelonForm(){let t=0,e=0,n=-1,i=!0,s=!1;for(;t<this.rows&&i;){for(e=0,s=!1;e<this.columns&&!1===s;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>n?(s=!0,n=e):(i=!1,s=!0);for(let n=e+1;n<this.rows;n++)0!==this.get(t,n)&&(i=!1);t++}return i}echelonForm(){let t=this.clone(),e=0,n=0;for(;e<t.rows&&n<t.columns;){let i=e;for(let s=e;s<t.rows;s++)t.get(s,n)>t.get(i,n)&&(i=s);if(0===t.get(i,n))n++;else{t.swapRows(e,i);let s=t.get(e,n);for(let i=n;i<t.columns;i++)t.set(e,i,t.get(e,i)/s);for(let i=e+1;i<t.rows;i++){let s=t.get(i,n)/t.get(e,n);t.set(i,n,0);for(let o=n+1;o<t.columns;o++)t.set(i,o,t.get(i,o)-t.get(e,o)*s)}e++,n++}}return t}reducedEchelonForm(){let t=this.echelonForm(),e=t.columns,n=t.rows,i=n-1;for(;i>=0;)if(0===t.maxRow(i))i--;else{let s=0,o=!1;for(;s<n&&!1===o;)1===t.get(i,s)?o=!0:s++;for(let n=0;n<i;n++){let o=t.get(n,s);for(let r=s;r<e;r++){let e=t.get(n,r)-o*t.get(i,r);t.set(n,r,e)}}i--}return t}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{rows:e=1,columns:n=1}=t;if(!Number.isInteger(e)||e<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(n)||n<=0)throw new TypeError("columns must be a positive integer");let i=new A(this.rows*e,this.columns*n);for(let t=0;t<e;t++)for(let e=0;e<n;e++)i.setSubMatrix(this,this.rows*t,this.columns*e);return i}fill(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,t);return this}neg(){return this.mulS(-1)}getRow(t){v(this,t);let e=[];for(let n=0;n<this.columns;n++)e.push(this.get(t,n));return e}getRowVector(t){return A.rowVector(this.getRow(t))}setRow(t,e){v(this,t),e=w(this,e);for(let n=0;n<this.columns;n++)this.set(t,n,e[n]);return this}swapRows(t,e){v(this,t),v(this,e);for(let n=0;n<this.columns;n++){let i=this.get(t,n);this.set(t,n,this.get(e,n)),this.set(e,n,i)}return this}getColumn(t){b(this,t);let e=[];for(let n=0;n<this.rows;n++)e.push(this.get(n,t));return e}getColumnVector(t){return A.columnVector(this.getColumn(t))}setColumn(t,e){b(this,t),e=C(this,e);for(let n=0;n<this.rows;n++)this.set(n,t,e[n]);return this}swapColumns(t,e){b(this,t),b(this,e);for(let n=0;n<this.rows;n++){let i=this.get(n,t);this.set(n,t,this.get(n,e)),this.set(n,e,i)}return this}addRowVector(t){t=w(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t[n]);return this}subRowVector(t){t=w(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t[n]);return this}mulRowVector(t){t=w(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t[n]);return this}divRowVector(t){t=w(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t[n]);return this}addColumnVector(t){t=C(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t[e]);return this}subColumnVector(t){t=C(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t[e]);return this}mulColumnVector(t){t=C(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t[e]);return this}divColumnVector(t){t=C(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t[e]);return this}mulRow(t,e){v(this,t);for(let n=0;n<this.columns;n++)this.set(t,n,this.get(t,n)*e);return this}mulColumn(t,e){b(this,t);for(let n=0;n<this.rows;n++)this.set(n,t,this.get(n,t)*e);return this}max(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)>t[e]&&(t[e]=this.get(e,n));return t}case"column":{const t=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)>t[n]&&(t[n]=this.get(e,n));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)>t&&(t=this.get(e,n));return t}default:throw new Error(`invalid option: ${t}`)}}maxIndex(){x(this);let t=this.get(0,0),e=[0,0];for(let n=0;n<this.rows;n++)for(let i=0;i<this.columns;i++)this.get(n,i)>t&&(t=this.get(n,i),e[0]=n,e[1]=i);return e}min(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)<t[e]&&(t[e]=this.get(e,n));return t}case"column":{const t=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)<t[n]&&(t[n]=this.get(e,n));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)<t&&(t=this.get(e,n));return t}default:throw new Error(`invalid option: ${t}`)}}minIndex(){x(this);let t=this.get(0,0),e=[0,0];for(let n=0;n<this.rows;n++)for(let i=0;i<this.columns;i++)this.get(n,i)<t&&(t=this.get(n,i),e[0]=n,e[1]=i);return e}maxRow(t){if(v(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let n=1;n<this.columns;n++)this.get(t,n)>e&&(e=this.get(t,n));return e}maxRowIndex(t){v(this,t),x(this);let e=this.get(t,0),n=[t,0];for(let i=1;i<this.columns;i++)this.get(t,i)>e&&(e=this.get(t,i),n[1]=i);return n}minRow(t){if(v(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let n=1;n<this.columns;n++)this.get(t,n)<e&&(e=this.get(t,n));return e}minRowIndex(t){v(this,t),x(this);let e=this.get(t,0),n=[t,0];for(let i=1;i<this.columns;i++)this.get(t,i)<e&&(e=this.get(t,i),n[1]=i);return n}maxColumn(t){if(b(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let n=1;n<this.rows;n++)this.get(n,t)>e&&(e=this.get(n,t));return e}maxColumnIndex(t){b(this,t),x(this);let e=this.get(0,t),n=[0,t];for(let i=1;i<this.rows;i++)this.get(i,t)>e&&(e=this.get(i,t),n[0]=i);return n}minColumn(t){if(b(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let n=1;n<this.rows;n++)this.get(n,t)<e&&(e=this.get(n,t));return e}minColumnIndex(t){b(this,t),x(this);let e=this.get(0,t),n=[0,t];for(let i=1;i<this.rows;i++)this.get(i,t)<e&&(e=this.get(i,t),n[0]=i);return n}diag(){let t=Math.min(this.rows,this.columns),e=[];for(let n=0;n<t;n++)e.push(this.get(n,n));return e}norm(t="frobenius"){let e=0;if("max"===t)return this.max();if("frobenius"===t){for(let t=0;t<this.rows;t++)for(let n=0;n<this.columns;n++)e+=this.get(t,n)*this.get(t,n);return Math.sqrt(e)}throw new RangeError(`unknown norm type: ${t}`)}cumulativeSum(){let t=0;for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t+=this.get(e,n),this.set(e,n,t);return this}dot(t){N.isMatrix(t)&&(t=t.to1DArray());let e=this.to1DArray();if(e.length!==t.length)throw new RangeError("vectors do not have the same size");let n=0;for(let i=0;i<e.length;i++)n+=e[i]*t[i];return n}mmul(t){t=A.checkMatrix(t);let e=this.rows,n=this.columns,i=t.columns,s=new A(e,i),o=new Float64Array(n);for(let r=0;r<i;r++){for(let e=0;e<n;e++)o[e]=t.get(e,r);for(let t=0;t<e;t++){let e=0;for(let i=0;i<n;i++)e+=this.get(t,i)*o[i];s.set(t,r,e)}}return s}strassen2x2(t){t=A.checkMatrix(t);let e=new A(2,2);const n=this.get(0,0),i=t.get(0,0),s=this.get(0,1),o=t.get(0,1),r=this.get(1,0),a=t.get(1,0),l=this.get(1,1),h=t.get(1,1),c=(n+l)*(i+h),u=(r+l)*i,d=n*(o-h),f=l*(a-i),m=(n+s)*h,p=c+f-m+(s-l)*(a+h),g=d+m,y=u+f,v=c-u+d+(r-n)*(i+o);return e.set(0,0,p),e.set(0,1,g),e.set(1,0,y),e.set(1,1,v),e}strassen3x3(t){t=A.checkMatrix(t);let e=new A(3,3);const n=this.get(0,0),i=this.get(0,1),s=this.get(0,2),o=this.get(1,0),r=this.get(1,1),a=this.get(1,2),l=this.get(2,0),h=this.get(2,1),c=this.get(2,2),u=t.get(0,0),d=t.get(0,1),f=t.get(0,2),m=t.get(1,0),p=t.get(1,1),g=t.get(1,2),y=t.get(2,0),v=t.get(2,1),b=t.get(2,2),w=(n-o)*(-d+p),C=(-n+o+r)*(u-d+p),S=(o+r)*(-u+d),M=n*u,T=(-n+l+h)*(u-f+g),x=(-n+l)*(f-g),N=(l+h)*(-u+f),E=(-s+h+c)*(p+y-v),I=(s-c)*(p-v),L=s*y,_=(h+c)*(-y+v),R=(-s+r+a)*(g+y-b),k=(s-a)*(g-b),G=(r+a)*(-y+b),P=M+L+i*m,O=(n+i+s-o-r-h-c)*p+C+S+M+E+L+_,F=M+T+N+(n+i+s-r-a-l-h)*g+L+R+G,W=w+r*(-u+d+m-p-g-y+b)+C+M+L+R+k,V=w+C+S+M+a*v,H=L+R+k+G+o*f,Z=M+T+x+h*(-u+f+m-p-g-y+v)+E+I+L,U=E+I+L+_+l*d,D=M+T+x+N+c*b;return e.set(0,0,P),e.set(0,1,O),e.set(0,2,F),e.set(1,0,W),e.set(1,1,V),e.set(1,2,H),e.set(2,0,Z),e.set(2,1,U),e.set(2,2,D),e}mmulStrassen(t){t=A.checkMatrix(t);let e=this.clone(),n=e.rows,i=e.columns,s=t.rows,o=t.columns;function r(t,e,n){let i=t.rows,s=t.columns;if(i===e&&s===n)return t;{let i=N.zeros(e,n);return i=i.setSubMatrix(t,0,0),i}}i!==s&&console.warn(`Multiplying ${n} x ${i} and ${s} x ${o} matrix: dimensions do not match.`);let a=Math.max(n,s),l=Math.max(i,o);return e=r(e,a,l),function t(e,n,i,s){if(i<=512||s<=512)return e.mmul(n);i%2==1&&s%2==1?(e=r(e,i+1,s+1),n=r(n,i+1,s+1)):i%2==1?(e=r(e,i+1,s),n=r(n,i+1,s)):s%2==1&&(e=r(e,i,s+1),n=r(n,i,s+1));let o=parseInt(e.rows/2,10),a=parseInt(e.columns/2,10),l=e.subMatrix(0,o-1,0,a-1),h=n.subMatrix(0,o-1,0,a-1),c=e.subMatrix(0,o-1,a,e.columns-1),u=n.subMatrix(0,o-1,a,n.columns-1),d=e.subMatrix(o,e.rows-1,0,a-1),f=n.subMatrix(o,n.rows-1,0,a-1),m=e.subMatrix(o,e.rows-1,a,e.columns-1),p=n.subMatrix(o,n.rows-1,a,n.columns-1),g=t(N.add(l,m),N.add(h,p),o,a),y=t(N.add(d,m),h,o,a),v=t(l,N.sub(u,p),o,a),b=t(m,N.sub(f,h),o,a),w=t(N.add(l,c),p,o,a),C=t(N.sub(d,l),N.add(h,u),o,a),S=t(N.sub(c,m),N.add(f,p),o,a),M=N.add(g,b);M.sub(w),M.add(S);let T=N.add(v,w),x=N.add(y,b),E=N.sub(g,y);E.add(v),E.add(C);let A=N.zeros(2*M.rows,2*M.columns);return A=A.setSubMatrix(M,0,0),A=A.setSubMatrix(T,M.rows,0),A=A.setSubMatrix(x,0,M.columns),A=A.setSubMatrix(E,M.rows,M.columns),A.subMatrix(0,i-1,0,s-1)}(e,t=r(t,a,l),a,l)}scaleRows(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:n=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(n))throw new TypeError("max must be a number");if(e>=n)throw new RangeError("min must be smaller than max");let i=new A(this.rows,this.columns);for(let t=0;t<this.rows;t++){const s=this.getRow(t);s.length>0&&d(s,{min:e,max:n,output:s}),i.setRow(t,s)}return i}scaleColumns(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:n=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(n))throw new TypeError("max must be a number");if(e>=n)throw new RangeError("min must be smaller than max");let i=new A(this.rows,this.columns);for(let t=0;t<this.columns;t++){const s=this.getColumn(t);s.length&&d(s,{min:e,max:n,output:s}),i.setColumn(t,s)}return i}flipRows(){const t=Math.ceil(this.columns/2);for(let e=0;e<this.rows;e++)for(let n=0;n<t;n++){let t=this.get(e,n),i=this.get(e,this.columns-1-n);this.set(e,n,i),this.set(e,this.columns-1-n,t)}return this}flipColumns(){const t=Math.ceil(this.rows/2);for(let e=0;e<this.columns;e++)for(let n=0;n<t;n++){let t=this.get(n,e),i=this.get(this.rows-1-n,e);this.set(n,e,i),this.set(this.rows-1-n,e,t)}return this}kroneckerProduct(t){t=A.checkMatrix(t);let e=this.rows,n=this.columns,i=t.rows,s=t.columns,o=new A(e*i,n*s);for(let r=0;r<e;r++)for(let e=0;e<n;e++)for(let n=0;n<i;n++)for(let a=0;a<s;a++)o.set(i*r+n,s*e+a,this.get(r,e)*t.get(n,a));return o}kroneckerSum(t){if(t=A.checkMatrix(t),!this.isSquare()||!t.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let e=this.rows,n=t.rows,i=this.kroneckerProduct(A.eye(n,n)),s=A.eye(e,e).kroneckerProduct(t);return i.add(s)}transpose(){let t=new A(this.columns,this.rows);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.set(n,e,this.get(e,n));return t}sortRows(t=E){for(let e=0;e<this.rows;e++)this.setRow(e,this.getRow(e).sort(t));return this}sortColumns(t=E){for(let e=0;e<this.columns;e++)this.setColumn(e,this.getColumn(e).sort(t));return this}subMatrix(t,e,n,i){S(this,t,e,n,i);let s=new A(e-t+1,i-n+1);for(let o=t;o<=e;o++)for(let e=n;e<=i;e++)s.set(o-t,e-n,this.get(o,e));return s}subMatrixRow(t,e,n){if(void 0===e&&(e=0),void 0===n&&(n=this.columns-1),e>n||e<0||e>=this.columns||n<0||n>=this.columns)throw new RangeError("Argument out of range");let i=new A(t.length,n-e+1);for(let s=0;s<t.length;s++)for(let o=e;o<=n;o++){if(t[s]<0||t[s]>=this.rows)throw new RangeError(`Row index out of range: ${t[s]}`);i.set(s,o-e,this.get(t[s],o))}return i}subMatrixColumn(t,e,n){if(void 0===e&&(e=0),void 0===n&&(n=this.rows-1),e>n||e<0||e>=this.rows||n<0||n>=this.rows)throw new RangeError("Argument out of range");let i=new A(n-e+1,t.length);for(let s=0;s<t.length;s++)for(let o=e;o<=n;o++){if(t[s]<0||t[s]>=this.columns)throw new RangeError(`Column index out of range: ${t[s]}`);i.set(o-e,s,this.get(o,t[s]))}return i}setSubMatrix(t,e,n){if((t=A.checkMatrix(t)).isEmpty())return this;S(this,e,e+t.rows-1,n,n+t.columns-1);for(let i=0;i<t.rows;i++)for(let s=0;s<t.columns;s++)this.set(e+i,n+s,t.get(i,s));return this}selection(t,e){!function(t,e){if(!a(e))throw new TypeError("row indices must be an array");for(let n=0;n<e.length;n++)if(e[n]<0||e[n]>=t.rows)throw new RangeError("row indices are out of range")}(this,t),function(t,e){if(!a(e))throw new TypeError("column indices must be an array");for(let n=0;n<e.length;n++)if(e[n]<0||e[n]>=t.columns)throw new RangeError("column indices are out of range")}(this,e);let n=new A(t.length,e.length);for(let i=0;i<t.length;i++){let s=t[i];for(let t=0;t<e.length;t++){let o=e[t];n.set(i,t,this.get(s,o))}}return n}trace(){let t=Math.min(this.rows,this.columns),e=0;for(let n=0;n<t;n++)e+=this.get(n,n);return e}clone(){let t=new A(this.rows,this.columns);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.set(e,n,this.get(e,n));return t}sum(t){switch(t){case"row":return function(t){let e=M(t.rows);for(let n=0;n<t.rows;++n)for(let i=0;i<t.columns;++i)e[n]+=t.get(n,i);return e}(this);case"column":return function(t){let e=M(t.columns);for(let n=0;n<t.rows;++n)for(let i=0;i<t.columns;++i)e[i]+=t.get(n,i);return e}(this);case void 0:return function(t){let e=0;for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)e+=t.get(n,i);return e}(this);default:throw new Error(`invalid option: ${t}`)}}product(t){switch(t){case"row":return function(t){let e=M(t.rows,1);for(let n=0;n<t.rows;++n)for(let i=0;i<t.columns;++i)e[n]*=t.get(n,i);return e}(this);case"column":return function(t){let e=M(t.columns,1);for(let n=0;n<t.rows;++n)for(let i=0;i<t.columns;++i)e[i]*=t.get(n,i);return e}(this);case void 0:return function(t){let e=1;for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)e*=t.get(n,i);return e}(this);default:throw new Error(`invalid option: ${t}`)}}mean(t){const e=this.sum(t);switch(t){case"row":for(let t=0;t<this.rows;t++)e[t]/=this.columns;return e;case"column":for(let t=0;t<this.columns;t++)e[t]/=this.rows;return e;case void 0:return e/this.size;default:throw new Error(`invalid option: ${t}`)}}variance(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{unbiased:n=!0,mean:i=this.mean(t)}=e;if("boolean"!=typeof n)throw new TypeError("unbiased must be a boolean");switch(t){case"row":if(!a(i))throw new TypeError("mean must be an array");return function(t,e,n){const i=t.rows,s=t.columns,o=[];for(let r=0;r<i;r++){let i=0,a=0,l=0;for(let e=0;e<s;e++)l=t.get(r,e)-n[r],i+=l,a+=l*l;e?o.push((a-i*i/s)/(s-1)):o.push((a-i*i/s)/s)}return o}(this,n,i);case"column":if(!a(i))throw new TypeError("mean must be an array");return function(t,e,n){const i=t.rows,s=t.columns,o=[];for(let r=0;r<s;r++){let s=0,a=0,l=0;for(let e=0;e<i;e++)l=t.get(e,r)-n[r],s+=l,a+=l*l;e?o.push((a-s*s/i)/(i-1)):o.push((a-s*s/i)/i)}return o}(this,n,i);case void 0:if("number"!=typeof i)throw new TypeError("mean must be a number");return function(t,e,n){const i=t.rows,s=t.columns,o=i*s;let r=0,a=0,l=0;for(let e=0;e<i;e++)for(let i=0;i<s;i++)l=t.get(e,i)-n,r+=l,a+=l*l;return e?(a-r*r/o)/(o-1):(a-r*r/o)/o}(this,n,i);default:throw new Error(`invalid option: ${t}`)}}standardDeviation(t,e){"object"==typeof t&&(e=t,t=void 0);const n=this.variance(t,e);if(void 0===t)return Math.sqrt(n);for(let t=0;t<n.length;t++)n[t]=Math.sqrt(n[t]);return n}center(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{center:n=this.mean(t)}=e;switch(t){case"row":if(!a(n))throw new TypeError("center must be an array");return function(t,e){for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)t.set(n,i,t.get(n,i)-e[n])}(this,n),this;case"column":if(!a(n))throw new TypeError("center must be an array");return function(t,e){for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)t.set(n,i,t.get(n,i)-e[i])}(this,n),this;case void 0:if("number"!=typeof n)throw new TypeError("center must be a number");return function(t,e){for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)t.set(n,i,t.get(n,i)-e)}(this,n),this;default:throw new Error(`invalid option: ${t}`)}}scale(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");let n=e.scale;switch(t){case"row":if(void 0===n)n=function(t){const e=[];for(let n=0;n<t.rows;n++){let i=0;for(let e=0;e<t.columns;e++)i+=Math.pow(t.get(n,e),2)/(t.columns-1);e.push(Math.sqrt(i))}return e}(this);else if(!a(n))throw new TypeError("scale must be an array");return function(t,e){for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)t.set(n,i,t.get(n,i)/e[n])}(this,n),this;case"column":if(void 0===n)n=function(t){const e=[];for(let n=0;n<t.columns;n++){let i=0;for(let e=0;e<t.rows;e++)i+=Math.pow(t.get(e,n),2)/(t.rows-1);e.push(Math.sqrt(i))}return e}(this);else if(!a(n))throw new TypeError("scale must be an array");return function(t,e){for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)t.set(n,i,t.get(n,i)/e[i])}(this,n),this;case void 0:if(void 0===n)n=function(t){const e=t.size-1;let n=0;for(let i=0;i<t.columns;i++)for(let s=0;s<t.rows;s++)n+=Math.pow(t.get(s,i),2)/e;return Math.sqrt(n)}(this);else if("number"!=typeof n)throw new TypeError("scale must be a number");return function(t,e){for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)t.set(n,i,t.get(n,i)/e)}(this,n),this;default:throw new Error(`invalid option: ${t}`)}}toString(t){return p(this,t)}}function E(t,e){return t-e}N.prototype.klass="Matrix","undefined"!=typeof Symbol&&(N.prototype[Symbol.for("nodejs.util.inspect.custom")]=function(){return p(this)}),N.random=N.rand,N.randomInt=N.randInt,N.diagonal=N.diag,N.prototype.diagonal=N.prototype.diag,N.identity=N.eye,N.prototype.negate=N.prototype.neg,N.prototype.tensorProduct=N.prototype.kroneckerProduct;class A extends N{constructor(t,e){if(super(),A.isMatrix(t))return t.clone();if(Number.isInteger(t)&&t>=0){if(this.data=[],!(Number.isInteger(e)&&e>=0))throw new TypeError("nColumns must be a positive integer");for(let n=0;n<t;n++)this.data.push(new Float64Array(e))}else{if(!a(t))throw new TypeError("First argument must be a positive number or an array");{const n=t;if("number"!=typeof(e=(t=n.length)?n[0].length:0))throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let i=0;i<t;i++){if(n[i].length!==e)throw new RangeError("Inconsistent array dimensions");if(!n[i].every((t=>"number"==typeof t)))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(n[i]))}}}this.rows=t,this.columns=e}set(t,e,n){return this.data[t][e]=n,this}get(t,e){return this.data[t][e]}removeRow(t){return v(this,t),this.data.splice(t,1),this.rows-=1,this}addRow(t,e){return void 0===e&&(e=t,t=this.rows),v(this,t,!0),e=Float64Array.from(w(this,e)),this.data.splice(t,0,e),this.rows+=1,this}removeColumn(t){b(this,t);for(let e=0;e<this.rows;e++){const n=new Float64Array(this.columns-1);for(let i=0;i<t;i++)n[i]=this.data[e][i];for(let i=t+1;i<this.columns;i++)n[i-1]=this.data[e][i];this.data[e]=n}return this.columns-=1,this}addColumn(t,e){void 0===e&&(e=t,t=this.columns),b(this,t,!0),e=C(this,e);for(let n=0;n<this.rows;n++){const i=new Float64Array(this.columns+1);let s=0;for(;s<t;s++)i[s]=this.data[n][s];for(i[s++]=e[n];s<this.columns+1;s++)i[s]=this.data[n][s-1];this.data[n]=i}return this.columns+=1,this}}!function(t,e){t.prototype.add=function(t){return"number"==typeof t?this.addS(t):this.addM(t)},t.prototype.addS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t);return this},t.prototype.addM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t.get(e,n));return this},t.add=function(t,n){return new e(t).add(n)},t.prototype.sub=function(t){return"number"==typeof t?this.subS(t):this.subM(t)},t.prototype.subS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t);return this},t.prototype.subM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t.get(e,n));return this},t.sub=function(t,n){return new e(t).sub(n)},t.prototype.subtract=t.prototype.sub,t.prototype.subtractS=t.prototype.subS,t.prototype.subtractM=t.prototype.subM,t.subtract=t.sub,t.prototype.mul=function(t){return"number"==typeof t?this.mulS(t):this.mulM(t)},t.prototype.mulS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t);return this},t.prototype.mulM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t.get(e,n));return this},t.mul=function(t,n){return new e(t).mul(n)},t.prototype.multiply=t.prototype.mul,t.prototype.multiplyS=t.prototype.mulS,t.prototype.multiplyM=t.prototype.mulM,t.multiply=t.mul,t.prototype.div=function(t){return"number"==typeof t?this.divS(t):this.divM(t)},t.prototype.divS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t);return this},t.prototype.divM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t.get(e,n));return this},t.div=function(t,n){return new e(t).div(n)},t.prototype.divide=t.prototype.div,t.prototype.divideS=t.prototype.divS,t.prototype.divideM=t.prototype.divM,t.divide=t.div,t.prototype.mod=function(t){return"number"==typeof t?this.modS(t):this.modM(t)},t.prototype.modS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)%t);return this},t.prototype.modM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)%t.get(e,n));return this},t.mod=function(t,n){return new e(t).mod(n)},t.prototype.modulus=t.prototype.mod,t.prototype.modulusS=t.prototype.modS,t.prototype.modulusM=t.prototype.modM,t.modulus=t.mod,t.prototype.and=function(t){return"number"==typeof t?this.andS(t):this.andM(t)},t.prototype.andS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)&t);return this},t.prototype.andM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)&t.get(e,n));return this},t.and=function(t,n){return new e(t).and(n)},t.prototype.or=function(t){return"number"==typeof t?this.orS(t):this.orM(t)},t.prototype.orS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)|t);return this},t.prototype.orM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)|t.get(e,n));return this},t.or=function(t,n){return new e(t).or(n)},t.prototype.xor=function(t){return"number"==typeof t?this.xorS(t):this.xorM(t)},t.prototype.xorS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)^t);return this},t.prototype.xorM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)^t.get(e,n));return this},t.xor=function(t,n){return new e(t).xor(n)},t.prototype.leftShift=function(t){return"number"==typeof t?this.leftShiftS(t):this.leftShiftM(t)},t.prototype.leftShiftS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)<<t);return this},t.prototype.leftShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)<<t.get(e,n));return this},t.leftShift=function(t,n){return new e(t).leftShift(n)},t.prototype.signPropagatingRightShift=function(t){return"number"==typeof t?this.signPropagatingRightShiftS(t):this.signPropagatingRightShiftM(t)},t.prototype.signPropagatingRightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)>>t);return this},t.prototype.signPropagatingRightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)>>t.get(e,n));return this},t.signPropagatingRightShift=function(t,n){return new e(t).signPropagatingRightShift(n)},t.prototype.rightShift=function(t){return"number"==typeof t?this.rightShiftS(t):this.rightShiftM(t)},t.prototype.rightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)>>>t);return this},t.prototype.rightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)>>>t.get(e,n));return this},t.rightShift=function(t,n){return new e(t).rightShift(n)},t.prototype.zeroFillRightShift=t.prototype.rightShift,t.prototype.zeroFillRightShiftS=t.prototype.rightShiftS,t.prototype.zeroFillRightShiftM=t.prototype.rightShiftM,t.zeroFillRightShift=t.rightShift,t.prototype.not=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,~this.get(t,e));return this},t.not=function(t){return new e(t).not()},t.prototype.abs=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.abs(this.get(t,e)));return this},t.abs=function(t){return new e(t).abs()},t.prototype.acos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acos(this.get(t,e)));return this},t.acos=function(t){return new e(t).acos()},t.prototype.acosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acosh(this.get(t,e)));return this},t.acosh=function(t){return new e(t).acosh()},t.prototype.asin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asin(this.get(t,e)));return this},t.asin=function(t){return new e(t).asin()},t.prototype.asinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asinh(this.get(t,e)));return this},t.asinh=function(t){return new e(t).asinh()},t.prototype.atan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atan(this.get(t,e)));return this},t.atan=function(t){return new e(t).atan()},t.prototype.atanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atanh(this.get(t,e)));return this},t.atanh=function(t){return new e(t).atanh()},t.prototype.cbrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cbrt(this.get(t,e)));return this},t.cbrt=function(t){return new e(t).cbrt()},t.prototype.ceil=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.ceil(this.get(t,e)));return this},t.ceil=function(t){return new e(t).ceil()},t.prototype.clz32=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.clz32(this.get(t,e)));return this},t.clz32=function(t){return new e(t).clz32()},t.prototype.cos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cos(this.get(t,e)));return this},t.cos=function(t){return new e(t).cos()},t.prototype.cosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cosh(this.get(t,e)));return this},t.cosh=function(t){return new e(t).cosh()},t.prototype.exp=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.exp(this.get(t,e)));return this},t.exp=function(t){return new e(t).exp()},t.prototype.expm1=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.expm1(this.get(t,e)));return this},t.expm1=function(t){return new e(t).expm1()},t.prototype.floor=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.floor(this.get(t,e)));return this},t.floor=function(t){return new e(t).floor()},t.prototype.fround=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.fround(this.get(t,e)));return this},t.fround=function(t){return new e(t).fround()},t.prototype.log=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log(this.get(t,e)));return this},t.log=function(t){return new e(t).log()},t.prototype.log1p=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log1p(this.get(t,e)));return this},t.log1p=function(t){return new e(t).log1p()},t.prototype.log10=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log10(this.get(t,e)));return this},t.log10=function(t){return new e(t).log10()},t.prototype.log2=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log2(this.get(t,e)));return this},t.log2=function(t){return new e(t).log2()},t.prototype.round=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.round(this.get(t,e)));return this},t.round=function(t){return new e(t).round()},t.prototype.sign=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sign(this.get(t,e)));return this},t.sign=function(t){return new e(t).sign()},t.prototype.sin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sin(this.get(t,e)));return this},t.sin=function(t){return new e(t).sin()},t.prototype.sinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sinh(this.get(t,e)));return this},t.sinh=function(t){return new e(t).sinh()},t.prototype.sqrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sqrt(this.get(t,e)));return this},t.sqrt=function(t){return new e(t).sqrt()},t.prototype.tan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tan(this.get(t,e)));return this},t.tan=function(t){return new e(t).tan()},t.prototype.tanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tanh(this.get(t,e)));return this},t.tanh=function(t){return new e(t).tanh()},t.prototype.trunc=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.trunc(this.get(t,e)));return this},t.trunc=function(t){return new e(t).trunc()},t.pow=function(t,n){return new e(t).pow(n)},t.prototype.pow=function(t){return"number"==typeof t?this.powS(t):this.powM(t)},t.prototype.powS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.pow(this.get(e,n),t));return this},t.prototype.powM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.pow(this.get(e,n),t.get(e,n)));return this}}(N,A);class I extends N{constructor(t){super(),this.data=t,this.rows=t.length,this.columns=t[0].length}set(t,e,n){return this.data[t][e]=n,this}get(t,e){return this.data[t][e]}}class L{constructor(t){let e,n,i,s,o,r,a,l,h,c=(t=I.checkMatrix(t)).clone(),u=c.rows,d=c.columns,f=new Float64Array(u),m=1;for(e=0;e<u;e++)f[e]=e;for(l=new Float64Array(u),n=0;n<d;n++){for(e=0;e<u;e++)l[e]=c.get(e,n);for(e=0;e<u;e++){for(h=Math.min(e,n),o=0,i=0;i<h;i++)o+=c.get(e,i)*l[i];l[e]-=o,c.set(e,n,l[e])}for(s=n,e=n+1;e<u;e++)Math.abs(l[e])>Math.abs(l[s])&&(s=e);if(s!==n){for(i=0;i<d;i++)r=c.get(s,i),c.set(s,i,c.get(n,i)),c.set(n,i,r);a=f[s],f[s]=f[n],f[n]=a,m=-m}if(n<u&&0!==c.get(n,n))for(e=n+1;e<u;e++)c.set(e,n,c.get(e,n)/c.get(n,n))}this.LU=c,this.pivotVector=f,this.pivotSign=m}isSingular(){let t=this.LU,e=t.columns;for(let n=0;n<e;n++)if(0===t.get(n,n))return!0;return!1}solve(t){t=A.checkMatrix(t);let e=this.LU;if(e.rows!==t.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");let n,i,s,o=t.columns,r=t.subMatrixRow(this.pivotVector,0,o-1),a=e.columns;for(s=0;s<a;s++)for(n=s+1;n<a;n++)for(i=0;i<o;i++)r.set(n,i,r.get(n,i)-r.get(s,i)*e.get(n,s));for(s=a-1;s>=0;s--){for(i=0;i<o;i++)r.set(s,i,r.get(s,i)/e.get(s,s));for(n=0;n<s;n++)for(i=0;i<o;i++)r.set(n,i,r.get(n,i)-r.get(s,i)*e.get(n,s))}return r}get determinant(){let t=this.LU;if(!t.isSquare())throw new Error("Matrix must be square");let e=this.pivotSign,n=t.columns;for(let i=0;i<n;i++)e*=t.get(i,i);return e}get lowerTriangularMatrix(){let t=this.LU,e=t.rows,n=t.columns,i=new A(e,n);for(let s=0;s<e;s++)for(let e=0;e<n;e++)s>e?i.set(s,e,t.get(s,e)):s===e?i.set(s,e,1):i.set(s,e,0);return i}get upperTriangularMatrix(){let t=this.LU,e=t.rows,n=t.columns,i=new A(e,n);for(let s=0;s<e;s++)for(let e=0;e<n;e++)s<=e?i.set(s,e,t.get(s,e)):i.set(s,e,0);return i}get pivotPermutationVector(){return Array.from(this.pivotVector)}}function _(t,e){let n=0;return Math.abs(t)>Math.abs(e)?(n=e/t,Math.abs(t)*Math.sqrt(1+n*n)):0!==e?(n=t/e,Math.abs(e)*Math.sqrt(1+n*n)):0}class R{constructor(t){let e,n,i,s,o=(t=I.checkMatrix(t)).clone(),r=t.rows,a=t.columns,l=new Float64Array(a);for(i=0;i<a;i++){let t=0;for(e=i;e<r;e++)t=_(t,o.get(e,i));if(0!==t){for(o.get(i,i)<0&&(t=-t),e=i;e<r;e++)o.set(e,i,o.get(e,i)/t);for(o.set(i,i,o.get(i,i)+1),n=i+1;n<a;n++){for(s=0,e=i;e<r;e++)s+=o.get(e,i)*o.get(e,n);for(s=-s/o.get(i,i),e=i;e<r;e++)o.set(e,n,o.get(e,n)+s*o.get(e,i))}}l[i]=-t}this.QR=o,this.Rdiag=l}solve(t){t=A.checkMatrix(t);let e=this.QR,n=e.rows;if(t.rows!==n)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");let i,s,o,r,a=t.columns,l=t.clone(),h=e.columns;for(o=0;o<h;o++)for(s=0;s<a;s++){for(r=0,i=o;i<n;i++)r+=e.get(i,o)*l.get(i,s);for(r=-r/e.get(o,o),i=o;i<n;i++)l.set(i,s,l.get(i,s)+r*e.get(i,o))}for(o=h-1;o>=0;o--){for(s=0;s<a;s++)l.set(o,s,l.get(o,s)/this.Rdiag[o]);for(i=0;i<o;i++)for(s=0;s<a;s++)l.set(i,s,l.get(i,s)-l.get(o,s)*e.get(i,o))}return l.subMatrix(0,h-1,0,a-1)}isFullRank(){let t=this.QR.columns;for(let e=0;e<t;e++)if(0===this.Rdiag[e])return!1;return!0}get upperTriangularMatrix(){let t,e,n=this.QR,i=n.columns,s=new A(i,i);for(t=0;t<i;t++)for(e=0;e<i;e++)t<e?s.set(t,e,n.get(t,e)):t===e?s.set(t,e,this.Rdiag[t]):s.set(t,e,0);return s}get orthogonalMatrix(){let t,e,n,i,s=this.QR,o=s.rows,r=s.columns,a=new A(o,r);for(n=r-1;n>=0;n--){for(t=0;t<o;t++)a.set(t,n,0);for(a.set(n,n,1),e=n;e<r;e++)if(0!==s.get(n,n)){for(i=0,t=n;t<o;t++)i+=s.get(t,n)*a.get(t,e);for(i=-i/s.get(n,n),t=n;t<o;t++)a.set(t,e,a.get(t,e)+i*s.get(t,n))}}return a}}class k{constructor(t,e={}){if((t=I.checkMatrix(t)).isEmpty())throw new Error("Matrix must be non-empty");let n=t.rows,i=t.columns;const{computeLeftSingularVectors:s=!0,computeRightSingularVectors:o=!0,autoTranspose:r=!1}=e;let a,l=Boolean(s),h=Boolean(o),c=!1;if(n<i)if(r){a=t.transpose(),n=a.rows,i=a.columns,c=!0;let e=l;l=h,h=e}else a=t.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else a=t.clone();let u=Math.min(n,i),d=Math.min(n+1,i),f=new Float64Array(d),m=new A(n,u),p=new A(i,i),g=new Float64Array(i),y=new Float64Array(n),v=new Float64Array(d);for(let t=0;t<d;t++)v[t]=t;let b=Math.min(n-1,i),w=Math.max(0,Math.min(i-2,n)),C=Math.max(b,w);for(let t=0;t<C;t++){if(t<b){f[t]=0;for(let e=t;e<n;e++)f[t]=_(f[t],a.get(e,t));if(0!==f[t]){a.get(t,t)<0&&(f[t]=-f[t]);for(let e=t;e<n;e++)a.set(e,t,a.get(e,t)/f[t]);a.set(t,t,a.get(t,t)+1)}f[t]=-f[t]}for(let e=t+1;e<i;e++){if(t<b&&0!==f[t]){let i=0;for(let s=t;s<n;s++)i+=a.get(s,t)*a.get(s,e);i=-i/a.get(t,t);for(let s=t;s<n;s++)a.set(s,e,a.get(s,e)+i*a.get(s,t))}g[e]=a.get(t,e)}if(l&&t<b)for(let e=t;e<n;e++)m.set(e,t,a.get(e,t));if(t<w){g[t]=0;for(let e=t+1;e<i;e++)g[t]=_(g[t],g[e]);if(0!==g[t]){g[t+1]<0&&(g[t]=0-g[t]);for(let e=t+1;e<i;e++)g[e]/=g[t];g[t+1]+=1}if(g[t]=-g[t],t+1<n&&0!==g[t]){for(let e=t+1;e<n;e++)y[e]=0;for(let e=t+1;e<n;e++)for(let n=t+1;n<i;n++)y[e]+=g[n]*a.get(e,n);for(let e=t+1;e<i;e++){let i=-g[e]/g[t+1];for(let s=t+1;s<n;s++)a.set(s,e,a.get(s,e)+i*y[s])}}if(h)for(let e=t+1;e<i;e++)p.set(e,t,g[e])}}let S=Math.min(i,n+1);if(b<i&&(f[b]=a.get(b,b)),n<S&&(f[S-1]=0),w+1<S&&(g[w]=a.get(w,S-1)),g[S-1]=0,l){for(let t=b;t<u;t++){for(let e=0;e<n;e++)m.set(e,t,0);m.set(t,t,1)}for(let t=b-1;t>=0;t--)if(0!==f[t]){for(let e=t+1;e<u;e++){let i=0;for(let s=t;s<n;s++)i+=m.get(s,t)*m.get(s,e);i=-i/m.get(t,t);for(let s=t;s<n;s++)m.set(s,e,m.get(s,e)+i*m.get(s,t))}for(let e=t;e<n;e++)m.set(e,t,-m.get(e,t));m.set(t,t,1+m.get(t,t));for(let e=0;e<t-1;e++)m.set(e,t,0)}else{for(let e=0;e<n;e++)m.set(e,t,0);m.set(t,t,1)}}if(h)for(let t=i-1;t>=0;t--){if(t<w&&0!==g[t])for(let e=t+1;e<i;e++){let n=0;for(let s=t+1;s<i;s++)n+=p.get(s,t)*p.get(s,e);n=-n/p.get(t+1,t);for(let s=t+1;s<i;s++)p.set(s,e,p.get(s,e)+n*p.get(s,t))}for(let e=0;e<i;e++)p.set(e,t,0);p.set(t,t,1)}let M=S-1,T=0,x=Number.EPSILON;for(;S>0;){let t,e;for(t=S-2;t>=-1&&-1!==t;t--){const e=Number.MIN_VALUE+x*Math.abs(f[t]+Math.abs(f[t+1]));if(Math.abs(g[t])<=e||Number.isNaN(g[t])){g[t]=0;break}}if(t===S-2)e=4;else{let n;for(n=S-1;n>=t&&n!==t;n--){let e=(n!==S?Math.abs(g[n]):0)+(n!==t+1?Math.abs(g[n-1]):0);if(Math.abs(f[n])<=x*e){f[n]=0;break}}n===t?e=3:n===S-1?e=1:(e=2,t=n)}switch(t++,e){case 1:{let e=g[S-2];g[S-2]=0;for(let n=S-2;n>=t;n--){let s=_(f[n],e),o=f[n]/s,r=e/s;if(f[n]=s,n!==t&&(e=-r*g[n-1],g[n-1]=o*g[n-1]),h)for(let t=0;t<i;t++)s=o*p.get(t,n)+r*p.get(t,S-1),p.set(t,S-1,-r*p.get(t,n)+o*p.get(t,S-1)),p.set(t,n,s)}break}case 2:{let e=g[t-1];g[t-1]=0;for(let i=t;i<S;i++){let s=_(f[i],e),o=f[i]/s,r=e/s;if(f[i]=s,e=-r*g[i],g[i]=o*g[i],l)for(let e=0;e<n;e++)s=o*m.get(e,i)+r*m.get(e,t-1),m.set(e,t-1,-r*m.get(e,i)+o*m.get(e,t-1)),m.set(e,i,s)}break}case 3:{const e=Math.max(Math.abs(f[S-1]),Math.abs(f[S-2]),Math.abs(g[S-2]),Math.abs(f[t]),Math.abs(g[t])),s=f[S-1]/e,o=f[S-2]/e,r=g[S-2]/e,a=f[t]/e,c=g[t]/e,u=((o+s)*(o-s)+r*r)/2,d=s*r*(s*r);let y=0;0===u&&0===d||(y=u<0?0-Math.sqrt(u*u+d):Math.sqrt(u*u+d),y=d/(u+y));let v=(a+s)*(a-s)+y,b=a*c;for(let e=t;e<S-1;e++){let s=_(v,b);0===s&&(s=Number.MIN_VALUE);let o=v/s,r=b/s;if(e!==t&&(g[e-1]=s),v=o*f[e]+r*g[e],g[e]=o*g[e]-r*f[e],b=r*f[e+1],f[e+1]=o*f[e+1],h)for(let t=0;t<i;t++)s=o*p.get(t,e)+r*p.get(t,e+1),p.set(t,e+1,-r*p.get(t,e)+o*p.get(t,e+1)),p.set(t,e,s);if(s=_(v,b),0===s&&(s=Number.MIN_VALUE),o=v/s,r=b/s,f[e]=s,v=o*g[e]+r*f[e+1],f[e+1]=-r*g[e]+o*f[e+1],b=r*g[e+1],g[e+1]=o*g[e+1],l&&e<n-1)for(let t=0;t<n;t++)s=o*m.get(t,e)+r*m.get(t,e+1),m.set(t,e+1,-r*m.get(t,e)+o*m.get(t,e+1)),m.set(t,e,s)}g[S-2]=v,T+=1;break}case 4:if(f[t]<=0&&(f[t]=f[t]<0?-f[t]:0,h))for(let e=0;e<=M;e++)p.set(e,t,-p.get(e,t));for(;t<M&&!(f[t]>=f[t+1]);){let e=f[t];if(f[t]=f[t+1],f[t+1]=e,h&&t<i-1)for(let n=0;n<i;n++)e=p.get(n,t+1),p.set(n,t+1,p.get(n,t)),p.set(n,t,e);if(l&&t<n-1)for(let i=0;i<n;i++)e=m.get(i,t+1),m.set(i,t+1,m.get(i,t)),m.set(i,t,e);t++}T=0,S--}}if(c){let t=p;p=m,m=t}this.m=n,this.n=i,this.s=f,this.U=m,this.V=p}solve(t){let e=t,n=this.threshold,i=this.s.length,s=A.zeros(i,i);for(let t=0;t<i;t++)Math.abs(this.s[t])<=n?s.set(t,t,0):s.set(t,t,1/this.s[t]);let o=this.U,r=this.rightSingularVectors,a=r.mmul(s),l=r.rows,h=o.rows,c=A.zeros(l,h);for(let t=0;t<l;t++)for(let e=0;e<h;e++){let n=0;for(let s=0;s<i;s++)n+=a.get(t,s)*o.get(e,s);c.set(t,e,n)}return c.mmul(e)}solveForDiagonal(t){return this.solve(A.diag(t))}inverse(){let t=this.V,e=this.threshold,n=t.rows,i=t.columns,s=new A(n,this.s.length);for(let o=0;o<n;o++)for(let n=0;n<i;n++)Math.abs(this.s[n])>e&&s.set(o,n,t.get(o,n)/this.s[n]);let o=this.U,r=o.rows,a=o.columns,l=new A(n,r);for(let t=0;t<n;t++)for(let e=0;e<r;e++){let n=0;for(let i=0;i<a;i++)n+=s.get(t,i)*o.get(e,i);l.set(t,e,n)}return l}get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]}get norm2(){return this.s[0]}get rank(){let t=Math.max(this.m,this.n)*this.s[0]*Number.EPSILON,e=0,n=this.s;for(let i=0,s=n.length;i<s;i++)n[i]>t&&e++;return e}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return A.diag(this.s)}}function G(t,e,n,i,s){let o=n*i*i,r=A.eye(e.length,e.length,o);const a=s(e);let l=new Float64Array(t.x.length);for(let e=0;e<t.x.length;e++)l[e]=a(t.x[e]);let h=function(t,e,n,i,s){const o=n.length,r=t.x.length;let a=new Array(o);for(let l=0;l<o;l++){a[l]=new Array(r);let o=n.slice();o[l]+=i;let h=s(o);for(let n=0;n<r;n++)a[l][n]=e[n]-h(t.x[n])}return new A(a)}(t,l,e,i,s),c=function(t,e){const n=t.x.length;let i=new Array(n);for(let s=0;s<n;s++)i[s]=[t.y[s]-e[s]];return new A(i)}(t,l),u=function(t,e=!1){return t=I.checkMatrix(t),e?new k(t).inverse():function(t,e,n=!1){return t=I.checkMatrix(t),e=I.checkMatrix(e),n?new k(t).solve(e):t.isSquare()?new L(t).solve(e):new R(t).solve(e)}(t,A.eye(t.rows))}(r.add(h.mmul(h.transpose())));return(e=(e=new A([e])).sub(u.mmul(h).mmul(c).mul(i).transpose())).to1DArray()}function P(t,e,n={}){let{maxIterations:i=100,gradientDifference:r=.1,damping:a=0,errorTolerance:l=.01,minValues:h,maxValues:c,initialValues:u}=n;if(a<=0)throw new Error("The damping option must be a positive number");if(!t.x||!t.y)throw new Error("The data parameter must have x and y elements");if(!s(t.x)||t.x.length<2||!s(t.y)||t.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(t.x.length!==t.y.length)throw new Error("The data parameter elements must have the same size");let d=u||new Array(e.length).fill(1),f=d.length;if(c=c||new Array(f).fill(Number.MAX_SAFE_INTEGER),h=h||new Array(f).fill(Number.MIN_SAFE_INTEGER),c.length!==h.length)throw new Error("minValues and maxValues must be the same size");if(!s(d))throw new Error("initialValues must be an array");let m,p=o(t,d,e),g=p<=l;for(m=0;m<i&&!g;m++){d=G(t,d,a,r,e);for(let t=0;t<f;t++)d[t]=Math.min(Math.max(h[t],d[t]),c[t]);if(p=o(t,d,e),isNaN(p))break;g=p<=l}return{parameterValues:d,parameterError:p,iterations:m}}},3379:t=>{"use strict";var e=[];function n(t){for(var n=-1,i=0;i<e.length;i++)if(e[i].identifier===t){n=i;break}return n}function i(t,i){for(var o={},r=[],a=0;a<t.length;a++){var l=t[a],h=i.base?l[0]+i.base:l[0],c=o[h]||0,u="".concat(h," ").concat(c);o[h]=c+1;var d=n(u),f={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==d)e[d].references++,e[d].updater(f);else{var m=s(f,i);i.byIndex=a,e.splice(a,0,{identifier:u,updater:m,references:1})}r.push(u)}return r}function s(t,e){var n=e.domAPI(e);return n.update(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap&&e.supports===t.supports&&e.layer===t.layer)return;n.update(t=e)}else n.remove()}}t.exports=function(t,s){var o=i(t=t||[],s=s||{});return function(t){t=t||[];for(var r=0;r<o.length;r++){var a=n(o[r]);e[a].references--}for(var l=i(t,s),h=0;h<o.length;h++){var c=n(o[h]);0===e[c].references&&(e[c].updater(),e.splice(c,1))}o=l}}},569:t=>{"use strict";var e={};t.exports=function(t,n){var i=function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(t){n=null}e[t]=n}return e[t]}(t);if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(n)}},9216:t=>{"use strict";t.exports=function(t){var e=document.createElement("style");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},3565:(t,e,n)=>{"use strict";t.exports=function(t){var e=n.nc;e&&t.setAttribute("nonce",e)}},7795:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(n){!function(t,e,n){var i="";n.supports&&(i+="@supports (".concat(n.supports,") {")),n.media&&(i+="@media ".concat(n.media," {"));var s=void 0!==n.layer;s&&(i+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),i+=n.css,s&&(i+="}"),n.media&&(i+="}"),n.supports&&(i+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleTagTransform(i,t,e.options)}(e,t,n)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},4589:t=>{"use strict";t.exports=function(t,e){if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}},7241:(t,e,n)=>{"use strict";n.d(e,{D:()=>h});var i=n(4469),s=n(976),o=n(473),r=n(8447),a=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const l=31;function h(t,e=!1,n){return a(this,void 0,void 0,(function*(){const a=t.tags.separator,h=t.tags[s.TAGS.UNITS],u=(0,r.vU)(h,a);let d;null!=n||(n=new Map);const f="helm"===h?(0,o.getHelmMonomers)(t):Object.keys((0,r.fy)(t,0,u).freq).filter((t=>""!==t));for(let t=0;t<f.length;t++)n.has(f[t])||n.set(f[t],`${n.size+1}`);if("helm"===h)d=yield i.functions.call("HELM:getMolFiles",{col:t}),d=function(t,e,n=!1){const i=new Array(t.length);for(let s=0;s<t.length;s++){let o=0,r=0,a="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";const h=t.get(s);o=h.indexOf("\n",o)+1,o=h.indexOf("\n",o)+1,o=h.indexOf("\n",o)+1;const c=parseInt(h.substring(o,o+3)),u=parseInt(h.substring(o+3,o+6));a+=`M V30 COUNTS ${c} ${u} 0 0 0\n`,a+="M V30 BEGIN ATOM\n";for(let t=0;t<c;t++){o=h.indexOf("\n",o)+1+l,r=h.indexOf(" ",o);const i=h.substring(o,r);a+=n?`M V30 ${t+1} R${e.get(i)} 0.000 0.000 0 0\n`:`M V30 ${t+1} At 0.000 0.000 0 0 MASS=${e.get(i)}\n`}a+="M V30 END ATOM\n",a+="M V30 BEGIN BOND\n";for(let t=0;t<u;t++){o=h.indexOf("\n",o)+1;const e=parseInt(h.substring(o,o+3).trim()),n=parseInt(h.substring(o+3,o+6).trim());a+=`M V30 ${t+1} ${parseInt(h.substring(o+6,o+9).trim())} ${e} ${n}\n`}a+="M V30 END BOND\n",a+="M V30 END CTAB\n",a+="M END",i[s]=a}return i}(d,n,e);else{d=new Array(t.length);for(let i=0;i<t.length;i++){const s=c(u(t.get(i)).filter((t=>""!==t)),n,e);d[i]=s}}return s.Column.fromStrings("monomericMols",d)}))}function c(t,e,n=!1){let i="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";i+=`M V30 COUNTS ${t.length} ${t.length?t.length-1:0} 0 0 0\n`,i+="M V30 BEGIN ATOM\n";for(let s=0;s<t.length;s++)i+=n?`M V30 ${s+1} R${e.get(t[s])} 0.000 0.000 0 0\n`:`M V30 ${s+1} At 0.000 0.000 0 0 MASS=${e.get(t[s])}\n`;i+="M V30 END ATOM\n",i+="M V30 BEGIN BOND\n";for(let e=0;e<t.length-1;e++)i+=`M V30 ${e+1} 1 ${e+1} ${e+2}\n`;return i+="M V30 END BOND\n",i+="M V30 END CTAB\n",i+="M END",i}},473:(t,e,n)=>{"use strict";n.r(e),n.d(e,{SeqActivityCliffsEditor:()=>Qe,SeqPaletteCustom:()=>He,SequenceSpaceEditor:()=>en,_package:()=>Fe,activityCliffs:()=>tn,alignSequences:()=>rn,bioSubstructureFilter:()=>Cn,bioSubstructureSearch:()=>bn,compositionAnalysis:()=>an,convertDialog:()=>cn,demoBioActivityCliffs:()=>Tn,demoBioAtomicLevel:()=>xn,demoBioHelmMsaSequenceSpace:()=>Nn,demoBioSequenceSpace:()=>Mn,demoBioSimilarityDiversity:()=>Sn,diversitySearchTopMenu:()=>vn,diversitySearchViewer:()=>yn,fastaSequenceCellRenderer:()=>ze,getBioLib:()=>De,getHelmMonomers:()=>mn,getMonomerLibHelper:()=>We,hydrophobPalette:()=>Ve,importFasta:()=>hn,initBio:()=>Ze,libraryPanel:()=>Ye,macroMolColumnPropertyPanel:()=>Xe,macromoleculeDifferenceCellRenderer:()=>Ke,manageFiles:()=>Be,monomerCellRenderer:()=>un,multipleSequenceAlignmentDialog:()=>on,saveAsFasta:()=>wn,sdfToJsonLib:()=>ln,separatorSequenceCellRenderer:()=>qe,sequenceAlignment:()=>je,sequenceSpaceTopMenu:()=>nn,sequenceTooltip:()=>Ue,similaritySearchTopMenu:()=>gn,similaritySearchViewer:()=>pn,splitToMonomers:()=>fn,testDetectMacromolecule:()=>dn,toAtomicLevel:()=>sn,vdRegionViewer:()=>Je,webLogoViewer:()=>$e});var i=n(4469),s=n(3870),o=n(976),r=n(585);const a=r.GU;var l;!function(t){t.MSA="MSA",t.classic="classic"}(l||(l={}));const h=(t,e,n,i,s,o,r="rgb(100,100,100)",h=0,c=!1,u=1,d="",f=!1,m=l.classic,p={},g=0,y=null,v=[],b=null)=>{var w,C,S;s.textAlign="start";let M=o.substring(0),T=f?"":d;m===l.MSA&&(T="");let x=!0,N=!0,E="difference";null!=y&&null!=y.cell.column&&(x=null===(w=y.cell.column.temp["color-code"])||void 0===w||w,N=null===(C=y.cell.column.temp["compare-with-current"])||void 0===C||C,E=null!==(S=y.cell.column.temp["highlight-difference"])&&void 0!==S?S:"difference");const A=v[g];N&&v.length>0&&"difference"===E&&(u=M==A?.3:u),N&&v.length>0&&"equal"===E&&(u=M!=A?.3:u),null!=b&&(M=a(M,b));let I=s.measureText(M+T),L=s.measureText(M).width,_=s.measureText(M).width;const R=i/2-(I.fontBoundingBoxAscent+I.fontBoundingBoxDescent)/2+1;function k(n,i){const o=x?r:"rgb(0,0,0)";s.fillStyle=o,s.globalAlpha=u,m===l.classic&&(s.fillText(M,t+n,e+R),s.fillStyle="#808080",s.fillText(T,t+i,e+R)),m===l.MSA&&(s.fillStyle=o,s.fillText(M,t+n+(p[g]-_)/2,e+R))}if(I=I.width,m===l.MSA&&(L=p[g],I=p[g]),c||I>n)return k(5,5+L),t+L+s.measureText(T).width;{const e=(n-I)/2;return k(e,e+L),t+e+L}};var c=n(3553),u=n(8447),d=n(7331);const f="rgb(100,100,100)",m=u.GU;function p(t,e,n,i){return t?Math.min(t.canvas.width-n,i):e.canvas.width-n}function g(t){const e=!t.some(((e,n)=>e.length>1&&0!=n&&n!=t.length-1)),n=[],i=e?"":" ";return t.forEach(((e,s)=>{s<t.length&&(e+=`${e?"":"-"}${i}`),n.push(e)})),[n,e]}class y extends o.GridCellRenderer{get name(){return"sequence"}get cellType(){return"sequence"}get defaultHeight(){return 30}get defaultWidth(){return 230}onClick(t,e){t.cell.column.temp["current-word"]=t.cell.value,t.grid.invalidate()}onMouseMove(t,e){var n,i,o;if("SEQ.MSA"!==t.cell.column.getTag("aligned"))return;const r=t.cell.column.temp,a=r["bio-sum-maxLengthWords"],l=r["bio-maxIndex"],h=e.offsetX-t.gridColumn.left+(t.gridColumn.left-t.bounds.x);let c=0,d=l,f=!1;a[l+1]=h+1;let m=0;if(h>a[0])for(;!f;)m=Math.floor((d+c)/2),h>=a[m]&&h<=a[m+1]?(c=m,f=!0):h<a[m]?d=m-1:h>a[m+1]&&(c=m+1),c==d&&(f=!0);c=h>=a[c]?c+1:c;const p=null!==(n=t.cell.column.getTag("separator"))&&void 0!==n?n:"",g=(0,u.vU)("separator",p)(t.cell.value);(null!==(o=null===(i=g[c])||void 0===i?void 0:i.length)&&void 0!==o?o:0)>0?s.tooltip.show(s.div(g[c]),e.x+16,e.y+16):s.tooltip.hide()}render(t,e,n,i,s,r,a){var c;const d=-1!==r.gridRow?r.grid:null,g=r.cell,y=r.cell.column.getTag("alphabet");i=p(d,t,e,i),t.save(),t.beginPath(),t.rect(e,n,i,s),t.clip(),t.font="12px monospace",t.textBaseline="top";const v=r.cell.column.getTag(o.TAGS.UNITS),b=r.cell.column.getTag("aligned"),w=(0,u.py)(y),C=null!==(c=r.cell.column.getTag("separator"))&&void 0!==c?c:"",S=i/5,M=(0,u.vU)(v,C,S),T=r.cell.column.temp,x=T["reference-sequence"],N=T["current-word"],E=T["monomer-width"],A=M(null!=x&&""!=x?x:null!=N?N:"");let I=5,L=0,_=8;"short"===(null!=E?E:"short")&&(I=12,_=1);let R={};if(r.cell.column.getTag(".calculatedCellRender")!==S.toString()){let t=0;for(;t<Math.min(r.cell.column.length,100);)M(r.cell.column.get(t)).forEach(((t,e)=>{var n;const i=7*m(t,_).length+I;i>(null!==(n=R[e])&&void 0!==n?n:0)&&(R[e]=i),e>L&&(L=e)})),t+=1;const e=21;for(let t=0;t<=L;t++){R[t]<e&&(R[t]=e);const n={};n[0]=R[0];for(let t=1;t<=L;t++)n[t]=n[t-1]+R[t];T["bio-sum-maxLengthWords"]=n,T["bio-maxIndex"]=L,T["bio-maxLengthWords"]=R,r.cell.column.setTag(".calculatedCellRender",S.toString())}}else R=T["bio-maxLengthWords"];const k=M(g.value);let G=e,P=f,O=l.classic;b&&b.includes("MSA")&&"separator"==v&&(O=l.MSA),k.every(((e,o)=>{P=w.get(e),t.fillStyle=f;const a=o===k.length-1;return G=h(G,n,i,s,t,e,P,0,!0,1,C,a,O,R,o,r,A,_),50<=i})),t.restore()}}class v extends o.GridCellRenderer{get name(){return c.Of.MONOMER}get cellType(){return c.Of.MONOMER}get defaultHeight(){return 15}get defaultWidth(){return 30}render(t,e,n,i,s,o,r){t.font="12px monospace",t.textBaseline="middle",t.textAlign="center";const a=(0,u.py)(o.cell.column.getTag("alphabet")),l=o.cell.value;if(!l)return;const h=a.get(l);t.fillStyle=h,t.fillText((0,u.GU)(l,3),e+i/2,n+s/2,i)}}class b extends o.GridCellRenderer{get name(){return"MacromoleculeDifferenceCR"}get cellType(){return c.Of.MACROMOLECULE_DIFFERENCE}get defaultHeight(){return 30}get defaultWidth(){return 230}render(t,e,n,i,s,r,a){var l;const h=r.grid,c=null!==(l=r.cell.value)&&void 0!==l?l:"",d=r.tableColumn.tags.separator,f=r.tableColumn.tags[o.TAGS.UNITS];i=p(h,t,e,i);const[m,g]=c.split("#"),y=(0,u.vU)(f,d);w(t,e,n,i,s,y(m),y(g),f)}}function w(t,e,n,i,s,o,r,a,l,c){if(o.length!==r.length){const t=function(t,e){let n=0,i=0;const s=t.length>e.length?t:e;let o=t.length>e.length?e:t;for(let t=0;t<o.length;t++)s[t]===o[t]&&n++;const r=s.length-o.length;for(let t=s.length-1;t>r;t--)s[t]===o[t-r]&&i++;const a=new Array(Math.abs(t.length-e.length)).fill("");function l(t){return n>i?t.concat(a):a.concat(t)}return t.length>e.length?e=l(e):t=l(t),{subParts1:t,subParts2:e}}(o,r);o=t.subParts1,r=t.subParts2}const f=t.measureText(g(o).join("")),m=t.measureText(g(r).join("")),p=Math.max(f.width,m.width);l&&(i=p+4*o.length,t.canvas.width=p+4*o.length);let y=Math.max(e,e+(i-(p+4*o.length))/2);const v=Math.max(n,n+(s-28)/2);t.save(),t.beginPath(),t.rect(e,n,l?p+4*o.length:i,s),t.clip(),t.font="12px monospace",t.textBaseline="top";let b=d.UE.Color;"HELM"!=a&&(b=(0,u.py)(a.substring(a.length-2)));for(let e=0;e<o.length;e++){const n=o[e],a=r[e],l=b.get(n);if(n!=a){const o=b.get(a),r=h(y,v-7,i,s,t,n,l,0,!0),u=h(y,v+7,i,s,t,a,o,0,!0);y=Math.max(u,r),c&&(c[e]=C(n,a,l,o,v,7,s))}else y=h(y,v,i,s,t,n,l,0,!0,.5);y+=4}t.restore()}function C(t,e,n,i,s,o,r){const a=document.createElement("canvas"),l=a.getContext("2d");l.font="12px monospace";const c=l.measureText(g([t]).join("")).width,u=l.measureText(g([e]).join("")).width,d=Math.max(c,u);return a.height=r,a.width=d+4,l.font="12px monospace",l.textBaseline="top",h(0,s-o,d,r,l,t,n,0,!0),h(0,s+o,d,r,l,e,i,0,!0),a}var S,M=n(701),T=n(2433),x=n(9298);!function(t){t.Unknown="unknown",t.FR="framework",t.CDR="cdr"}(S||(S={})),new class{constructor(){this.regionTypes=[S.CDR],this.chains=["Heavy","Light"],this.skipEmptyPositions=!1,this.positionWidth=16,this.positionHeight=x.ES.Entropy}};var N=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const E=S;class A extends o.JsViewer{constructor(){super(),this.viewed=!1,this.regionsFg=null,this.regionsRoot=null,this.isOpened=!1,this.panelNode=null,this.regions=[],this.viewPromise=Promise.resolve(),this.host=null,this.filterSourceInput=null,this.mainLayout=null,this.logos=[],this.viewSubs=[],this.regionTypes=this.stringList("regionTypes",[E.CDR],{choices:Object.values(E).filter((t=>t!=E.Unknown))}),this.chains=this.stringList("chains",["Heavy","Light"],{choices:["Heavy","Light"]}),this.skipEmptyPositions=this.bool("skipEmptyPositions",!1),this.positionWidth=this.float("positionWidth",16),this.positionHeight=this.string("positionHeight",x.ES.Entropy,{choices:Object.keys(x.ES)})}init(){return N(this,void 0,void 0,(function*(){this.subs.push(s.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),this.subs.push(M.fromEvent(this.root,"mousemove").subscribe(this.rootOnMouseMove.bind(this)))}))}onTableAttached(){const t=Object.create(null,{onTableAttached:{get:()=>super.onTableAttached}});return N(this,void 0,void 0,(function*(){const e=t.onTableAttached.bind(this);this.viewPromise=this.viewPromise.then((()=>N(this,void 0,void 0,(function*(){e(),this.viewed||(yield this.buildView("onTableAttached"),this.viewed=!0)}))))}))}onPropertyChanged(t){if(super.onPropertyChanged(t),t)switch(t&&t.name,t.name){case"skipEmptyPositions":case"positionWidth":case"positionHeight":this.setData(this.dataFrame,this.regions)}else console.warn("Bio: VdRegionsViewer.onPropertyChanged() property is null")}setData(t,e){console.debug("Bio: VdRegionsViewer.setData()"),this.viewPromise=this.viewPromise.then((()=>N(this,void 0,void 0,(function*(){this.viewed&&(yield this.destroyView("setData"),this.viewed=!1)})))),this.regions=e,this.dataFrame=t,this.viewPromise=this.viewPromise.then((()=>N(this,void 0,void 0,(function*(){this.viewed||(yield this.buildView("setData"),this.viewed=!0)}))))}detach(){const t=super.detach.bind(this);this.viewPromise=this.viewPromise.then((()=>N(this,void 0,void 0,(function*(){this.viewed&&(yield this.destroyView("detach"),this.viewed=!1),t()}))))}destroyView(t){return N(this,void 0,void 0,(function*(){console.debug(`Bio: VdRegionsViewer.destroyView( mainLayout = ${this.mainLayout?"value":"none"} ), purpose = '${t}'`),this.filterSourceInput&&s.empty(this.filterSourceInput.root),null!=this.mainLayout&&(this.mainLayout.remove(),this.host.remove(),this.host=null,this.mainLayout=null);for(const t of this.viewSubs)t.unsubscribe()}))}buildView(t){return N(this,void 0,void 0,(function*(){console.debug(`Bio: VdRegionsViewer.buildView() begin, purpose = '${t}'`);const e=this.regions.filter((t=>this.regionTypes.includes(t.type))),n=Array.from(new Set(e.map((t=>t.order)))).sort();this.logos=[];for(let t=0;t<n.length;t++){const i={};for(const s of this.chains){const o=e.find((e=>e.order==n[t]&&e.chain==s));i[s]=yield this.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:o.sequenceColumnName,startPositionName:o.positionStartName,endPositionName:o.positionEndName,fixWidth:!0,skipEmptyPositions:this.skipEmptyPositions,positionWidth:this.positionWidth,positionHeight:this.positionHeight})}this.logos[t]=i}this.mainLayout=s.table(this.chains,(t=>[...n.length>0?[s.div(t,{style:{transform:"rotate(-90deg)",font:"12px Roboto, Roboto Local, sans-serif",textAlign:"center",width:"16px",marginTop:"24px",marginLeft:"6px"}})]:[],...[...Array(n.length).keys()].map((e=>{const n=this.logos[e][t];return n.root.style.height="100%",s.div([n.root],{style:{marginTop:"4px",marginBottom:"4px"}})}))]),["",...[...Array(n.length).keys()].map((t=>e.find((e=>e.order==n[t]&&e.chain==this.chains[0])).name||"Name"))]),this.mainLayout.className="mlb-vd-regions-viewer-table2",this.filterSourceInput=s.boolInput("",!1,this.filterSourceInputOnValueChanged.bind(this)),this.filterSourceInput.root.style.position="absolute",this.filterSourceInput.root.style.left="10px",this.filterSourceInput.root.style.top="-3px",s.tooltip.bind(this.filterSourceInput.root,"Check to filter sequences for selected VRs"),Math.ceil(255*Math.random()).toString(16),this.host=s.div([this.mainLayout,this.filterSourceInput.root],{}),this.root.appendChild(this.host),this.root.style.overflowX="auto",this.calcSize(),console.debug("Bio: VdRegionsViewer.buildView() end")}))}calcSize(){const t=(this.root.clientHeight-54)/this.chains.length,e=Math.min(t,Math.max(...this.logos.map((t=>Math.max(...Object.values(t).map((t=>t.maxHeight)))))));for(let t=0;t<this.logos.length;t++)for(let n=0;n<this.chains.length;n++){const i=this.chains[n];this.logos[t][i].root.style.height=`${e}px`}}rootOnSizeChanged(t){this.calcSize()}rootOnMouseMove(t){}filterSourceInputOnValueChanged(){const t=1==this.filterSourceInput.value?x.Ct.Selected:x.Ct.Filtered;for(let e=0;e<this.logos.length;e++)for(let n=0;n<this.chains.length;n++){const i=this.chains[n];this.logos[e][i].setOptions({[T.bo.filterSource]:t})}}}var I=n(9017);class L extends Float32Array{}function _(t){return Math.random()*t}function R(t){return Math.floor(_(t))}function k(t,e,n=0){return new Array(t).fill(n).map((()=>new L(e).fill(n)))}function G(t,e,n=1){const i=t.length;!function(t=!1,e="Assertion error."){if(!t)throw new Error(e)}(i==e.length,"Vector lengths do not match.");const s=new L(i);for(let i=0;i<t.length;++i)s[i]=t[i]+n*e[i];return s}function P(t,e){const n=function(t){let e=0;for(let n=0;n<t.length;++n)e+=t[n];return e}(function(t){const e=t.length,n=new L(e);for(let e=0;e<t.length;++e)n[e]=t[e]*t[e];return n}(G(t,e,-1)));return Math.sqrt(n)}var O=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function F(t,e,i,s){return O(this,void 0,void 0,(function*(){const o=yield function(t,e,i){return new Promise((function(s,o){const r=new Worker(new URL(n.p+n.u(105),n.b));r.postMessage({columnData:t.data,method:e,measure:t.metric,options:i}),r.onmessage=({data:{error:t,distance:e,embedding:n}})=>{t?o(t):s({distance:e,embedding:n})}}))}({data:t,metric:i},e,s);return o.embedding=o.embedding.map((t=>function(t){let e=0,n=0;for(let n=0;n<t.length;++n)e+=t[n];e/=t.length;for(let i=0;i<t.length;++i)n+=(t[i]-e)*(t[i]-e);n=Math.sqrt(n/t.length);for(let i=0;i<t.length;++i)t[i]=(t[i]-e)/n;return t}(t))),o}))}var W=n(7983),V=n(499),H=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function Z(t){return H(this,void 0,void 0,(function*(){const e=new V.C(t.seqCol);if(e.isFasta()){const n=e.getDistanceFunctionName(),i=yield F(t.seqCol.toList(),t.methodName,n,t.options);console.log(i);const s=t.embedAxesNames.map(((t,e)=>o.Column.fromFloat32Array(t,i.embedding[e])));return{distance:i.distance,coordinates:new o.ColumnList(s)}}return yield function(t){return H(this,void 0,void 0,(function*(){return t.seqCol.version!==t.seqCol.temp["last-invalidated-version"]&&(yield(0,W.HV)(t.seqCol,!1)),yield i.functions.call("Chem:getChemSpaceEmbeddings",{col:t.seqCol.temp["monomeric-mols"],methodName:t.methodName,similarityMetric:t.similarityMetric,xAxis:t.embedAxesNames[0],yAxis:t.embedAxesNames[1],options:t.options})}))}(t)}))}function U(t){const e=["Embed_X","Embed_Y"],n=t.columns.names().filter((t=>t.includes(e[0]))).length+1;return e.map((t=>`${t}_${n}`))}const D=["Tanimoto","Dice","Cosine","Hamming","Euclidean"],B=["Tanimoto","Asymmetric","Cosine","Sokal"];function Y(t){return 1/(1+t)}function z(t){return 1/t-1}var X=n(489),q=n(3379),K=n.n(q),j=n(7795),$=n.n(j),J=n(569),Q=n.n(J),tt=n(3565),et=n.n(tt),nt=n(9216),it=n.n(nt),st=n(4589),ot=n.n(st),rt=n(9414),at={};at.styleTagTransform=ot(),at.setAttributes=et(),at.insert=Q().bind(null,"head"),at.domAPI=$(),at.insertStyleElement=it(),K()(rt.Z,at),rt.Z&&rt.Z.locals&&rt.Z.locals;var lt=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};let ht=0;const ct="cliffsDf",ut=new M.Subject,dt="act_diff",ft="sali",mt="sim",pt="line_index",gt=["1_seq","2_seq"],yt="filterCliffs";function vt(t,e,n){const i=e.getBoundingClientRect(),s=t.clientX-i.left,o=t.clientY-i.top;let r=null,a=0;for(const t of n){const e=Math.abs(Math.hypot(t.a[0]-s,t.a[1]-o)+Math.hypot(t.b[0]-s,t.b[1]-o)-Math.hypot(t.a[0]-t.b[0],t.a[1]-t.b[1]));(!a&&e<2||e<a)&&(a=e,r=t)}return r}var bt,wt,Ct,St,Mt=n(1811),Tt=n(3979);(St=bt||(bt={})).Levenshtein="Levenshtein",St.JaroWinkler="Jaro-Winkler",St.Manhattan="Manhattan",function(t){t.Euclidean="Euclidean"}(wt||(wt={})),function(t){t.Tanimoto="Tanimoto",t.Dice="Dice",t.Asymmetric="Asymmetric",t.BraunBlanquet="Braun-Blanquet",t.Cosine="Cosine",t.Kulczynski="Kulczynski",t.McConnaughey="Mc-Connaughey",t.RogotGoldberg="Rogot-Goldberg",t.Russel="Russel",t.Sokal="Sokal",t.Hamming="Hamming",t.Euclidean="Euclidean"}(Ct||(Ct={}));const xt={[wt.Euclidean]:P},Nt={[bt.Levenshtein]:Mt.T,[bt.JaroWinkler]:Tt.H$,[bt.Manhattan]:function(t,e){if(t.length!==e.length)return 1;{let n=0;for(let i=1;i<t.length;i++)n+=t[i]==e[i]?0:1;return n/t.length}}},Et={[Ct.Tanimoto]:function(t,e){return z(function(t,e){const n=t.trueCount()+e.trueCount();if(0==n)return 1;const i=t.andWithCountBits(e,!0);return i/(n-i)}(t,e))},[Ct.Dice]:function(t,e){return z(function(t,e){const n=t.trueCount()+e.trueCount();return 0==n?0:2*t.andWithCountBits(e,!0)/n}(t,e))},[Ct.Asymmetric]:function(t,e){return z(function(t,e){const n=Math.min(t.trueCount(),e.trueCount());return 0==n?0:t.andWithCountBits(e,!0)/n}(t,e))},[Ct.BraunBlanquet]:function(t,e){return z(function(t,e){const n=Math.max(t.trueCount(),e.trueCount());return 0==n?0:t.andWithCountBits(e,!0)/n}(t,e))},[Ct.Cosine]:function(t,e){return z(function(t,e){const n=t.trueCount()*e.trueCount();return 0==n?0:t.andWithCountBits(e,!0)/Math.sqrt(n)}(t,e))},[Ct.Kulczynski]:function(t,e){return z(function(t,e){const n=t.trueCount()+e.trueCount(),i=t.trueCount()*e.trueCount();return 0==i?0:t.andWithCountBits(e,!0)*n/(2*i)}(t,e))},[Ct.McConnaughey]:function(t,e){return z(function(t,e){const n=t.trueCount()+e.trueCount(),i=t.trueCount()*e.trueCount();return 0==i?0:(t.andWithCountBits(e,!0)*n-i)/i}(t,e))},[Ct.RogotGoldberg]:function(t,e){return z(function(t,e){const n=t.andWithCountBits(e,!0),i=t.countBits(!0)+e.countBits(!0),s=t.length,o=s-i+n;return n==s||o==s?1:n/i+o/(2*s-i)}(t,e))},[Ct.Russel]:function(t,e){return z(function(t,e){return 0==t.length?0:t.andWithCountBits(e,!0)/t.length}(t,e))},[Ct.Sokal]:function(t,e){return z(function(t,e){const n=t.trueCount()+e.trueCount(),i=t.andWithCountBits(e,!0);return i/(2*n-3*i)}(t,e))},[Ct.Hamming]:function(t,e){return t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0)},[Ct.Euclidean]:function(t,e){return Math.sqrt(t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0))}};var At,It;(It=At||(At={})).Vector="Vector",It.String="String",It.BitArray="BitArray",It.MacroMolecule="MacroMolecule";const Lt={[At.Vector]:{[wt.Euclidean]:xt[wt.Euclidean]},[At.String]:{[bt.Levenshtein]:Nt[bt.Levenshtein],[bt.JaroWinkler]:Nt[bt.JaroWinkler],[bt.Manhattan]:Nt[bt.Manhattan]},[At.BitArray]:{[Ct.Tanimoto]:Et[Ct.Tanimoto],[Ct.Dice]:Et[Ct.Dice],[Ct.Asymmetric]:Et[Ct.Asymmetric],[Ct.BraunBlanquet]:Et[Ct.BraunBlanquet],[Ct.Cosine]:Et[Ct.Cosine],[Ct.Kulczynski]:Et[Ct.Kulczynski],[Ct.McConnaughey]:Et[Ct.McConnaughey],[Ct.RogotGoldberg]:Et[Ct.RogotGoldberg],[Ct.Russel]:Et[Ct.Russel],[Ct.Sokal]:Et[Ct.Sokal]},[At.MacroMolecule]:{[X.U.HAMMING]:X.o[X.U.HAMMING],[X.U.LEVENSHTEIN]:X.o[X.U.LEVENSHTEIN],[X.U.NEEDLEMANN_WUNSCH]:X.o[X.U.NEEDLEMANN_WUNSCH]}};Object.keys(Lt).reduce(((t,e)=>{for(const n of Object.keys(Lt[e]))t[n]=e;return t}),{});var _t=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function Rt(t,e,n,s,r){return _t(this,void 0,void 0,(function*(){e.version!==e.temp["last-invalidated-version"]&&(yield(0,W.HV)(e,!1));const n=o.DataFrame.create(e.length);return n.columns.addNewString(s).init((t=>e.temp["monomeric-mols"].get(t))),yield i.functions.call("Chem:getChemSimilaritiesMatrix",{dim:t,col:e.temp["monomeric-mols"],df:n,colName:s,simArr:r})}))}function kt(t){const e=s.divH([]),n=s.divV([s.divText(t.seqCol.name),s.divText(t.activityCol.name)]);return n.style.fontWeight="bold",n.style.display="flex",n.style.justifyContent="space-between",e.append(n),t.line.mols.forEach(((n,i)=>{const o=s.divText(t.activityCol.get(n).toFixed(2));o.style.display="flex",o.style.justifyContent="left",o.style.paddingLeft="30px",e.append(s.divV([s.divText(t.seqCol.get(n)),o]))})),e}function Gt(t){const e=s.div();e.append(s.divText(t.seqCol.name,{style:{fontWeight:"bold"}}));const n=new Array(2),i=new Array(2);t.line.mols.forEach(((e,s)=>{n[s]=t.seqCol.get(e),i[s]=t.activityCol.get(e)}));const r={},a=t.seqCol.getTag(o.TAGS.UNITS),l=t.seqCol.getTag("separator"),h=(0,u.vU)(a,l),c=Ot(h(n[0]),h(n[1]),a,r);return e.append(s.div(c,{style:{width:"300px",overflow:"scroll"}})),e.append(Ft(r)),e.append(Pt("Activity delta",Math.abs(i[0]-i[1]))),e.append(Pt("Cliff",t.sali)),e}function Pt(t,e){return s.divH([s.divText(`${t}: `,{style:{fontWeight:"bold",paddingRight:"5px"}}),s.divText(e.toFixed(2))],{style:{paddingTop:"10px"}})}function Ot(t,e,n,i){const s=document.createElement("canvas"),o=s.getContext("2d");return s.height=30,w(o,0,0,0,30,t,e,n,!0,i),s}function Ft(t){const e=s.div();if(Object.keys(t).length>0){const n=s.divV([]);n.append(s.divH([s.divText("Pos",{style:{fontWeight:"bold",width:"30px",borderBottom:"1px solid"}}),s.divText("Difference",{style:{fontWeight:"bold",borderBottom:"1px solid"}})]));for(const e of Object.keys(t))t[e].style.borderBottom="1px solid lightgray",n.append(s.divH([s.divText((parseInt(e)+1).toString(),{style:{width:"30px",borderBottom:"1px solid lightgray"}}),t[e]]));e.append(n)}return e}function Wt(t,e){const n=o.Column.string("seq_diff",t.rowCount).init((n=>`${t.get(e[0],n)}#${t.get(e[1],n)}`));n.semType="MacromoleculeDifference",n.setTag(o.TAGS.UNITS,t.col(e[0]).getTag(o.TAGS.UNITS)),n.setTag("separator",t.col(e[0]).getTag("separator")),t.columns.add(n);const i=t.plot.grid();return i.col(e[0]).visible=!1,i.col(e[1]).visible=!1,i}var Vt=n(4004),Ht=n(7228),Zt=n(6103),Ut=n(5226);n(9133);var Dt=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};class Bt extends o.JsViewer{constructor(t){super(),this.name="",this.metricsProperties=["distanceMetric","fingerprint"],this.fingerprintChoices=["Morgan","Pattern"],this.initialized=!1,this.tags=[o.TAGS.UNITS,"aligned","separator","alphabet"],this.fingerprint=this.string("fingerprint",this.fingerprintChoices[0],{choices:this.fingerprintChoices}),this.limit=this.int("limit",10),this.distanceMetric=this.string("distanceMetric",D[0],{choices:D}),this.moleculeColumnName=this.string("moleculeColumnName"),this.name=t}init(){this.initialized=!0}detach(){this.subs.forEach((t=>t.unsubscribe()))}onTableAttached(){var t;return Dt(this,void 0,void 0,(function*(){if(this.init(),this.dataFrame){this.subs.push(o.debounce(this.dataFrame.onRowsRemoved,50).subscribe((t=>Dt(this,void 0,void 0,(function*(){return yield this.render()})))));const e="diversity"!==this.name;this.subs.push(o.debounce(this.dataFrame.onCurrentRowChanged,50).subscribe((t=>Dt(this,void 0,void 0,(function*(){return yield this.render(e)}))))),this.subs.push(o.debounce(this.dataFrame.selection.onChanged,50).subscribe((t=>Dt(this,void 0,void 0,(function*(){return yield this.render(!1)}))))),this.subs.push(o.debounce(s.onSizeChanged(this.root),50).subscribe((t=>Dt(this,void 0,void 0,(function*(){return yield this.render(!1)}))))),this.moleculeColumn=this.dataFrame.columns.bySemType(o.SEMTYPE.MACROMOLECULE),this.moleculeColumnName=null===(t=this.moleculeColumn)||void 0===t?void 0:t.name,this.getProperty("limit").fromOptions({min:1,max:this.dataFrame.rowCount})}yield this.render()}))}onPropertyChanged(t){if(super.onPropertyChanged(t),this.initialized){if("moleculeColumnName"===t.name){const e=this.dataFrame.col(t.get(this));e.semType===o.SEMTYPE.MACROMOLECULE&&(this.moleculeColumn=e)}this.render()}}render(t=!0){return Dt(this,void 0,void 0,(function*(){}))}beforeRender(){return!(!this.initialized||this.dataFrame&&this.moleculeColumnName&&this.dataFrame.col(this.moleculeColumnName).semType!==o.SEMTYPE.MACROMOLECULE&&(i.shell.error(`${this.moleculeColumnName} is not Macromolecule type`),1))}}var Yt=n(7241),zt=n(4293);class Xt extends Bt{constructor(){super("similarity"),this.sketchedMolecule="",this.curIdx=0,this.molCol=null,this.idxs=null,this.scores=null,this.gridSelect=!1,this.targetMoleculeIdx=0,this.computeCompleted=new M.Subject,this.cutoff=this.float("cutoff",.01,{min:0,max:1}),this.hotSearch=this.bool("hotSearch",!0),this.similarColumnLabel=this.string("similarColumnLabel",null)}init(){this.hotSearch=!0,this.initialized=!0}render(t=!0){var e,n,s,r,a;return n=this,s=void 0,a=function*(){if(this.beforeRender()&&this.moleculeColumn&&(this.curIdx=-1==this.dataFrame.currentRowIdx?0:this.dataFrame.currentRowIdx,t&&!this.gridSelect)){this.targetMoleculeIdx=-1==this.dataFrame.currentRowIdx?0:this.dataFrame.currentRowIdx;const t=yield(0,Yt.D)(this.moleculeColumn),n=(o.DataFrame.fromColumns([t]),yield i.functions.call("Chem:callChemSimilaritySearch",{df:this.dataFrame,col:t,molecule:t.get(this.targetMoleculeIdx),metricName:this.distanceMetric,limit:this.limit,minScore:this.cutoff,fingerprint:this.fingerprint}));this.idxs=n.getCol("indexes"),this.scores=n.getCol("score");const s=null!=this.similarColumnLabel?this.similarColumnLabel:`similar (${this.moleculeColumnName})`;this.molCol=o.Column.string(s,this.idxs.length).init((t=>{var e,n;return null===(e=this.moleculeColumn)||void 0===e?void 0:e.get(null===(n=this.idxs)||void 0===n?void 0:n.get(t))})),this.molCol.semType=o.SEMTYPE.MACROMOLECULE,this.tags.forEach((t=>this.molCol.setTag(t,this.moleculeColumn.getTag(t))));const r=o.DataFrame.fromColumns([this.idxs,this.molCol,this.scores]);r.onCurrentRowChanged.subscribe((t=>{this.dataFrame.currentRowIdx=r.col("indexes").get(r.currentRowIdx),setTimeout((()=>{this.createPropertyPanel(r)}),1e3),this.gridSelect=!0}));const a=r.plot.grid();a.col("indexes").visible=!1;const l=null===(e=this.idxs)||void 0===e?void 0:e.getRawData().findIndex((t=>t==this.targetMoleculeIdx));a.cell("score",l).cell.value=null,i.shell.v.grid.root.addEventListener("click",(t=>{this.gridSelect=!1})),(0,zt.Y)(this.root,a.root),this.computeCompleted.next(!0)}},new((r=void 0)||(r=Promise))((function(t,e){function i(t){try{l(a.next(t))}catch(t){e(t)}}function o(t){try{l(a.throw(t))}catch(t){e(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r((function(t){t(n)}))).then(i,o)}l((a=a.apply(n,s||[])).next())}))}createPropertyPanel(t){const e=s.div(),n={},r=t.col("sequence").getTag(o.TAGS.UNITS),a=t.col("sequence").getTag("separator"),l=(0,u.vU)(r,a),h=l(this.moleculeColumn.get(this.targetMoleculeIdx)),c=l(t.get("sequence",t.currentRowIdx)),d=Ot(h,c,r,n);e.append(s.div(d,{style:{width:"300px",overflow:"scroll"}})),h.length!==c.length&&e.append(s.divV([s.divText("Different sequence length:",{style:{fontWeight:"bold"}}),s.divText(`target: ${h.length} monomers`),s.divText(`selected: ${c.length} monomers`)],{style:{paddingBottom:"10px"}})),e.append(Ft(n));const f=s.accordion(),m=s.element("i");m.className="grok-icon svg-icon svg-view-layout",f.addTitle(s.span([m,s.label("Similarity search")])),f.addPane("Differences",(()=>e),!0),i.shell.o=f.root}}class qt extends Bt{constructor(){super("diversity"),this.renderMolIds=null,this.columnNames=[],this.computeCompleted=new M.Subject,this.diverseColumnLabel=this.string("diverseColumnLabel",null)}render(t=!0){return e=this,n=void 0,r=function*(){if(this.beforeRender()&&this.dataFrame&&t&&this.moleculeColumn){const t=yield(0,Yt.D)(this.moleculeColumn);o.DataFrame.fromColumns([t]),this.renderMolIds=yield i.functions.call("Chem:callChemDiversitySearch",{col:t,metricName:this.distanceMetric,limit:this.limit,fingerprint:this.fingerprint});const e=null!=this.diverseColumnLabel?this.diverseColumnLabel:`diverse (${this.moleculeColumnName})`,n=o.Column.string(e,this.renderMolIds.length).init((t=>{var e;return null===(e=this.moleculeColumn)||void 0===e?void 0:e.get(this.renderMolIds[t])}));n.semType=o.SEMTYPE.MACROMOLECULE,this.tags.forEach((t=>n.setTag(t,this.moleculeColumn.getTag(t))));const s=o.DataFrame.fromColumns([n]);(0,zt.Y)(this.root,s.plot.grid().root),this.computeCompleted.next(!0)}},new((s=void 0)||(s=Promise))((function(t,i){function o(t){try{l(r.next(t))}catch(t){i(t)}}function a(t){try{l(r.throw(t))}catch(t){i(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof s?n:new s((function(t){t(n)}))).then(o,a)}l((r=r.apply(e,n||[])).next())}));var e,n,s,r}}var Kt=n(9943),jt=n(4413),$t=n(1061),Jt=n(1345);n(4221),n(7659);class Qt{constructor(t){var e,n,i,s,o,r,a;this.steps=null!==(e=null==t?void 0:t.steps)&&void 0!==e?e:0,this.cycles=null!==(n=null==t?void 0:t.cycles)&&void 0!==n?n:1e6,this.cutoff=null!==(i=null==t?void 0:t.cutoff)&&void 0!==i?i:0,this.lambda=null!==(s=null==t?void 0:t.lambda)&&void 0!==s?s:2,this.dlambda=null!==(o=null==t?void 0:t.dlambda)&&void 0!==o?o:.01,this.lambda2=this.lambda/2,this.dlambda2=this.dlambda/2,this.epsilon=null!==(r=null==t?void 0:t.epsilon)&&void 0!==r?r:1e-10,this.distanceFunction=null!==(a=null==t?void 0:t.distance)&&void 0!==a?a:P,this.distance=[]}initDistance(t){this.distance=function(t,e){const n=t.length,i=k(n,n,0);for(let s=0;s<n;++s)for(let o=s+1;o<n;++o){const n=null==t[s]||null==t[o]?0:e(t[s],t[o]);i[s][o]=i[o][s]=n}return i}(t,this.distanceFunction)}calcDistance(t,e,n){return this.distance[e][n]}embed(t){const e=t.length,n=function(t,e,n=1){const i=k(t,e);for(let s=0;s<t;++s)for(let t=0;t<e;++t)i[s][t]=_(n);return i}(e,Qt.dimension,40);let i=this.lambda2;0==this.steps&&(this.steps=t.length-1),this.initDistance(t);for(let s=0;s<this.cycles;++s){for(let s=0;s<this.steps;++s){const s=R(e);let o=R(e);for(;s==o;)o=R(e);const r=n[s],a=n[o],l=this.calcDistance(t,s,o),h=P(r,a);if(0==this.cutoff||l<=this.cutoff||h<l){const t=i*(l-h)/(h+this.epsilon),e=G(r,a,-1);n[s]=G(r,e,t),n[o]=G(a,e,-t)}}if(i-=this.dlambda2,i<=0)break}return n}}Qt.dimension=2;class te{constructor(t,e=!1){if(this._length=0,this._version=0,this._updateLevel=0,this._selectedCount=0,this._selectedCountVersion=-1,this._selectedIndexesVersion=-1,this._versionedName="",this._versionedNameVersion=-1,this.SHRINK_THRESHOLD=256,"number"==typeof t){const n=t,i=te._createBuffer(n);if(e)for(let t=0;t<i.length;t++)i[t]=-1;this._data=i,this._length=n}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=e}}getRawData(){return this._data}assureGoez(t,e){if(t<0)throw new Error(`${e} should be greater than zero`)}assureInRange(t,e,n,i){if(t<e||t>n)throw new Error(`Argument ${i} (${t}) out of range (${e}, ${n})`)}copy(t,e,n){for(let i=0;i<n;i++)e[i]=t[i]}copyFrom(t){if(this._length!=t._length)throw new Error(`Lengths differ (${this._length} != ${t._length})`);this.copy(t._data,this._data,this.lengthInInts),this._version++}get length(){return this._length}get buffer(){return this._data}set buffer(t){this._data=t,this._version++}get version(){return this._version}set version(t){this._version=t}incrementVersion(t=!0){this._version++}get lengthInInts(){return Math.floor((this._length+31)/32)}get versionedName(){return this._version==this._versionedNameVersion?this._versionedName:""}set versionedName(t){this._versionedName=t,this._versionedNameVersion=this._version}get self(){return this}setLength(t){if(t<0)throw new Error("should be >= 0");if(t==this._length)return;const e=Math.floor((t+31)/32);if(e>this._data.length||e+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(e);this.copy(this._data,t,e>this._data.length?this._data.length:e),this._data=t}t>this._length&&(this._length%32>0&&(this._data[this.lengthInInts-1]&=(1<<(this._length%32&31))-1),this._data.fill(0,this.lengthInInts,e)),this._length=t,this._version++}static fromAnd(t,e){if(t._length!=e._length)throw new Error(`Lengths differ (${t._length} != ${e._length})`);const n=new te(t._length);n._length=t._length,n._data=te._createBuffer(n._length),n._version=0;const i=t.lengthInInts;for(let s=0;s<i;s++)n._data[s]=t._data[s]&e._data[s];return n}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const e=new te(t.length);e._version=0;for(let n=0;n<e._length;n++)t[n]&&(e._data[Math.floor(n/32)]|=1<<(n%32&31));return e}static fromSeq(t,e){const n=new te(t);for(let i=0;i<t;++i)n.setBit(i,e(i));return n._version=0,n}static fromString(t){return te.fromSeq(t.length,(e=>"1"==t.charAt(e)))}static fromUint32Array(t,e){const n=new te(t);return n._data=e,n}static fromBytes(t){const e=t.length,n=new te(8*e);n._data=new Uint32Array(Math.floor((e+3)/4)),n._length=8*e;let i=0,s=0;for(;e-s>=4;)n._data[i++]=255&t[s]|(255&t[s+1])<<8|(255&t[s+2])<<16|(255&t[s+3])<<24,s+=4;return e-s==3&&(n._data[i]=(255&t[s+2])<<16),e-s==2&&(n._data[i]|=(255&t[s+1])<<8),e-s==1&&(n._data[i]|=255&t[s]),n._version=0,n}toString(){return`${this._length} bits, ${this.countBits(!0)} set`}equals(t){if(this==t)return!0;if(null==t)return!1;if(this._length!=t._length)return!1;if(0==this._length)return!0;for(let e=0;e<this._data.length-1;e++)if(this._data[e]!=t._data[e])return!1;for(let e=8*(this._data.length-1);e<this._length;e++)if(this.getBit(e)!=t.getBit(e))return!1;return!0}clone(){const t=new te(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,e){this.setAll(!1,!1);for(let e=0;e<this._length;e++)t(e)&&(this._data[Math.floor(e/32)]|=1<<(e%32&31));return this.incrementVersion(e),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,e=!1){const n=t?-1:0,i=this.lengthInInts;for(let t=0;t<i;t++)this._data[t]=n;this.incrementVersion(e)}setIndexes(t,e=!0,n=!0,i=!0){n&&this.setAll(!e,!1);for(const n of t)this.setFast(n,e);this.incrementVersion(i)}everyIndex(t,e=!0){for(const n of t)if(this.getBit(n)!=e)return!1;return!0}anyIndex(t,e=!0){for(const n of t)if(this.getBit(n)==e)return!0;return!1}setWhere(t,e=!0,n=!0,i=!0,s=!0){if(n&&s&&this.setAll(!e,!1),s)for(let n=0;n<this._length;n++)t(n)&&this.setFast(n,e);else for(let n=0;n<this._length;n++)this.setFast(n,t(n)?e:!e);this.incrementVersion(i)}getRange(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const n=[];for(let i=t;i<e;++i)n.push(this.getBit(i));return te.fromValues(n)}getRangeAsList(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const n=[];for(let i=t;i<e;++i)n.push(this.getBit(i));return n}setRange(t,e,n,i=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length-1,"to");const s=Math.min(t,e),o=Math.max(t,e);if(n)for(let t=s;t<=o;t++)this.setTrue(t);else for(let t=s;t<=o;t++)this.setFalse(t);return this.incrementVersion(i),this}setRandom(t,e,n=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!e),this.setAll(!e);for(let n=0;n<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=e&&(this.setFast(t,e),n++)}this.incrementVersion(n)}and(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]&=t._data[e];return this.incrementVersion(e),this}andNot(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const n=this.lengthInInts;for(let e=0;e<n;e++)this._data[e]&=~t._data[e];return this.incrementVersion(e),this}notAnd(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]=~this._data[e]&t._data[e];return this.incrementVersion(e),this}not(t=!0){for(let t=0,e=this.lengthInInts;t<e;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]|=t._data[e];return this.incrementVersion(e),this}xor(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]^=t._data[e];return this.incrementVersion(e),this}insertAt(t,e,n=!1){if(this.assureInRange(t,0,this._length,"pos"),0==e)return;const i=this._length;this.setLength(this._length+e);for(let n=i-1;n>=t;n--)this.setBit(n+e,this.getBit(n));for(let i=t;i<t+e;i++)this.setBit(i,n)}removeAt(t,e=1){if(e<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-e,"pos"),this.contains(!0))for(let n=t;n<this._length-e;n++)this.setBit(n,this.getBit(n+e));this.setLength(this._length-e)}removeByMask(t,e=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!e)),this.setAll(!e);else{let n=0;for(let i=-1;-1!=(i=t.findNext(i,!e));)this.setFast(n++,this.getBit(i));this._length=n,this._version++}return this}getBit(t){return 0!=(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,e,n=!0){this.setFast(t,e),this._version++}setFast(t,e){e?this._data[Math.floor(t/32)]|=1<<(31&t):this._data[Math.floor(t/32)]&=~(1<<(31&t))}setTrue(t){this._data[Math.floor(t/32)]|=1<<(31&t)}setFalse(t){this._data[Math.floor(t/32)]&=~(1<<(31&t))}trueCount(){return this.countBits(!0)}falseCount(){return this.countBits(!1)}countBits(t){if(0==this._length)return 0;if(this._selectedCountVersion!=this._version){this._selectedCount=0;const t=this.lengthInInts;let e=0;for(;e<t-1;e++)for(let t=this._data[e];0!=t;t>>>=8)this._selectedCount+=te._onBitCount[255&t];let n=this._data[e];const i=31&this._length;for(0!=i&&(n&=~(4294967295<<i));0!=n;n>>>=8)this._selectedCount+=te._onBitCount[255&n];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let e=0;if(this.trueCount()==this._length)for(let n=0;n<this._length;n++)e+=t(n)?1:0;else for(let n=-1;-1!=(n=this.findNext(n,!0));)e+=t(n)?1:0;return e}andWithCountBits(t,e){if(0==this._length)return 0;let n=0;const i=this.lengthInInts;let s=0;for(;s<i-1;s++)for(let e=this._data[s]&t._data[s];0!=e;e>>>=8)n+=te._onBitCount[255&e];let o=this._data[s]&t._data[s];const r=31&this._length;for(0!=r&&(o&=~(4294967295<<r));0!=o;o>>>=8)n+=te._onBitCount[255&o];return e?n:this._length-n}clear(){this.setLength(0)}contains(t){return this.findNext(-1,t)>=0}get allTrue(){return this.countBits(!0)==this._length}get allFalse(){return this.countBits(!1)==this._length}get anyTrue(){return this.countBits(!0)>0}get anyFalse(){return this.countBits(!1)>0}findNext(t,e=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let n=31&(t=t<0?0:t+1);const i=this.lengthInInts;for(let s=Math.floor(t/32);s<i;s++){let i=e?this._data[s]:~this._data[s];if(0!=n)i&=4294967295<<n&4294967295,n=0;else if(!e&&-4294967296==i)continue;for(let e=0;0!=i;e+=8,i>>>=8){const n=te._firstOnBit[255&i];if(n>=0)return(t=n+32*s+e)>=this._length?-1:t}}return-1}findPrev(t,e=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let n=1+(t=t<0?this._length-1:t-1)&31;for(let i=Math.floor(t/32);i>=0;i--){let t=e?this._data[i]:~this._data[i];0!=n&&(t&=~(4294967295<<n),n=0);for(let e=24;0!=t;e-=8,t<<=8){const n=te._lastOnBit[t>>>24];if(n>=0)return n+32*i+e}}return-1}}te._onBitCount=Int8Array.from([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]),te._firstOnBit=Int8Array.from([-1,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0]),te._lastOnBit=Int8Array.from([-1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]);const ee="UMAP",ne="t-SNE";class ie{constructor(){this.learningRate={uiName:"Learinig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"},this.nComponents={uiName:"Components",value:2,tooltip:"The number of components (dimensions) to project the data to"},this.nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"},this.nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"},this.spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control the clumped/dispersed nature of the embedding"},this.minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, used with spread to control the clumped/dispersed nature of the embedding"}}}class se{constructor(){this.epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"},this.perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"},this.dim={uiName:"Dimensionality",value:2,tooltip:"Dimensionality of the embedding"}}}const oe={[o.SEMTYPE.MOLECULE]:"Molecules",[o.SEMTYPE.MACROMOLECULE]:"Sequences"};class re{get algorithmOptions(){const t=this.methodsParams[this.methodInput.value],e={};return Object.keys(t).forEach((n=>{null!=t[n].value&&(e[n]=t[n].value)})),e}constructor(t){this.methodSettingsDiv=s.inputs([]),this.methodsParams={[ee]:new ie,[ne]:new se},this.tableInput=s.tableInput("Table",i.shell.tv.dataFrame,void 0,(()=>{this.onTableInputChanged(t)})),this.molColInput=s.columnInput(oe[t],this.tableInput.value,this.tableInput.value.columns.bySemType(t)),this.molColInputRoot=this.molColInput.root,this.methodInput=s.choiceInput("Method",ee,[ee,ne],(()=>{e&&this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value])})),this.methodSettingsIcon=s.icons.settings((()=>{e=!e,e?this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value]):s.empty(this.methodSettingsDiv)}),"Modify methods parameters"),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.methodSettingsDiv=s.inputs([]);let e=!1;this.similarityMetricInput=s.choiceInput("Similarity","Tanimoto",B)}createAlgorithmSettingsDiv(t,e){return s.empty(t),Object.keys(e).forEach((n=>{const i=e[n],o=s.floatInput(i.uiName,i.value,(()=>{i.value=o.value}));s.tooltip.bind(o.root,i.tooltip),t.append(o.root)})),t}onTableInputChanged(t){this.molColInput=s.columnInput(oe[t],this.tableInput.value,this.tableInput.value.columns.bySemType(t)),s.empty(this.molColInputRoot),Array.from(this.molColInput.root.children).forEach((t=>this.molColInputRoot.append(t)))}}class ae extends re{get funcParams(){return{table:this.tableInput.value,molecules:this.molColInput.value,methodName:this.methodInput.value,similarityMetric:this.similarityMetricInput.value,plotEmbeddings:this.plotEmbeddingsInput.value,options:this.algorithmOptions}}get paramsUI(){return this.funcParamsDiv}constructor(t){super(t),this.plotEmbeddingsInput=s.boolInput("Plot Embeddings",!0),this.funcParamsDiv=s.inputs([this.tableInput,this.molColInput,this.methodInput,this.methodSettingsDiv,this.similarityMetricInput,this.plotEmbeddingsInput],{style:{minWidth:"320px"}})}}class le extends re{get funcParams(){return{table:this.tableInput.value,molecules:this.molColInput.value,activities:this.activitiesInput.value,similarity:this.similarityInput.value,methodName:this.methodInput.value,similarityMetric:this.similarityMetricInput.value,options:this.algorithmOptions}}get paramsUI(){return this.funcParamsDiv}constructor(t){super(t),this.activitiesInput=s.columnInput("Activities",this.tableInput.value,this.tableInput.value.columns.byIndex(0)),this.activitiesInputRoot=this.activitiesInput.root,this.similarityInput=s.intInput("Similarity cutoff",80),s.tooltip.bind(this.similarityInput.root,"Pairs of similar (cutoff is used) molecules with high difference in activity are considered 'cliffs'"),this.funcParamsDiv=s.inputs([this.tableInput,this.molColInput,this.activitiesInput,this.similarityInput,this.methodInput,this.methodSettingsDiv,this.similarityMetricInput],{style:{minWidth:"320px"}})}onTableInputChanged(t){super.onTableInputChanged(t),s.empty(this.activitiesInputRoot),this.activitiesInput=s.columnInput("Activities",this.tableInput.value,this.tableInput.value.columns.byIndex(0)),Array.from(this.activitiesInput.root.children).forEach((t=>this.activitiesInputRoot.append(t)))}}var he,ce=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};!function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(he||(he={}));var ue=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};class de{constructor(t,e,n=!1,i){var o;this.name="",this.description="",this._isAutomatic=!1,this._autoStartFirstStep=!1,this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._isStepProcessed=!1,this._root=s.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._steps=[],this._mainHeader=s.panel([],"tutorials-main-header"),this._header=s.h2(""),this._headerDiv=s.divH([],"tutorials-root-header"),this._stopStartBtn=s.button(s.iconFA("pause"),(()=>this._changeStopState()),"Play / pause"),this._restartBtn=s.button(s.iconFA("redo"),(()=>this._restartScript()),"Restart"),this._nextStepBtn=s.button(s.iconFA("play"),(()=>{this._isStepProcessed||this._nextStep()}),"Next step"),this._activity=s.panel([],"tutorials-root-description"),this._progressDiv=s.divV([],"tutorials-root-progress"),this._progress=s.element("progress"),this._progressSteps=s.divText(""),this._closeBtn=s.button(s.iconFA("chevron-left"),(()=>this._closeDock()),"Back to demo"),this.name=t,this.description=e,this._isAutomatic=n,this._autoStartFirstStep=null!==(o=null==i?void 0:i.autoStartFirstStep)&&void 0!==o&&o,this._progress.max=0,this._progress.value=1,de.currentObject=this}get steps(){return this._steps}get stepNumber(){return this._steps.length}_addHeader(){this._createHeaderDiv(),this._createProgressDiv(),this._mainHeader.append(this._headerDiv,this._progressDiv)}_createHeaderDiv(){this._header.innerText=this.name,this._headerDiv.append(this._closeBtn),this._headerDiv.append(this._header),this._nextStepBtn.firstChild.className="grok-icon fas fa-play",this._headerDiv.append(this._isAutomatic?this._stopStartBtn:this._nextStepBtn)}_createProgressDiv(){this._progress.max=this.stepNumber,this._progressDiv.append(this._progress),this._progressSteps=s.divText(`Step: ${this._progress.value} of ${this.stepNumber}`),this._progressDiv.append(this._progressSteps)}_addDescription(){var t;this._activity.append(s.div(this.description,"tutorials-root-description"));for(let e=0;e<this.stepNumber;e++){let n=s.iconFA("clock");this._isAutomatic||0===e&&(n=s.iconFA("play",(()=>this._nextStep()),"Next step"),n.className="grok-icon fas fa-play");const i=s.div(this._steps[e].name,"grok-tutorial-entry-instruction"),o=s.div(null===(t=this._steps[e].options)||void 0===t?void 0:t.description,"grok-tutorial-step-description hidden"),r=s.divH([n,i],"grok-tutorial-entry");this._activity.append(r,o)}}_initRoot(){var t,e,n;i.shell.windows.showContextPanel=!0,i.shell.windows.showHelp=!1;const s=Array.from(i.shell.dockManager.rootNode.children)[0];this._node=i.shell.dockManager.dock(this._root,o.DOCK_TYPE.FILL,s,""),(null===(e=null===(t=s.parent.container.containerElement.firstElementChild)||void 0===t?void 0:t.lastElementChild)||void 0===e?void 0:e.classList.contains("tab-handle-list-container"))&&(null===(n=s.parent.container.containerElement.firstElementChild)||void 0===n||n.lastElementChild.remove()),this._node.container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_nextStep(){var t,e;return ue(this,void 0,void 0,(function*(){this._isStepProcessed=!0,this._isAutomatic||(this._nextStepBtn.classList.add("disabled"),this._nextStepBtn.firstChild.classList.add("fa-disabled"));const n=this._activity.getElementsByClassName("grok-tutorial-entry")[this._currentStep],i=this._activity.getElementsByClassName("grok-icon")[this._currentStep],o=this._activity.getElementsByClassName("grok-tutorial-step-description")[this._currentStep];i.className="grok-icon far fa-spinner-third fa-spin",o.classList.remove("hidden"),o.classList.add("visible");const r=n,a=(null===(t=this._steps[this._currentStep].options)||void 0===t?void 0:t.delay)?null===(e=this._steps[this._currentStep].options)||void 0===e?void 0:e.delay:2e3;yield this._steps[this._currentStep].func(),this._scrollTo(this._root,r.offsetTop-this._mainHeader.offsetHeight),yield this._countdown(n,i,a),yield function(t){return ce(this,void 0,void 0,(function*(){yield new Promise((e=>setTimeout(e,t)))}))}(a);const l=s.iconFA("check");if(i.replaceWith(l),l.className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++,this._isStepProcessed=!1,this._currentStep!==this.stepNumber){if(!this._isAutomatic){const t=this._activity.getElementsByClassName("grok-icon")[this._currentStep],e=s.iconFA("play",(()=>this._nextStep()),"Next step");e.className="grok-icon fas fa-play",t.replaceWith(e),this._nextStepBtn.classList.remove("disabled"),this._nextStepBtn.firstChild.classList.remove("fa-disabled")}}else this._isAutomatic?this._stopStartBtn.replaceWith(this._restartBtn):this._nextStepBtn.replaceWith(this._restartBtn)}))}_startScript(){return ue(this,void 0,void 0,(function*(){for(let t=this._currentStep;t<this.stepNumber&&!this._isStopped&&!this._isCancelled;t++)yield this._nextStep()}))}_scrollTo(t,e){t.focus(),t.scrollTop=e}_countdown(t,e,n){return ue(this,void 0,void 0,(function*(){const i=s.div([],"demo-script-countdown");e.classList.add("hidden");let o=n/1e3;const r=this._createSVGIndicator(o);i.append(r),t.prepend(i);const a=setInterval((()=>{o--,0===o&&(clearInterval(a),i.remove(),e.classList.remove("hidden"),e.classList.add("visible"))}),1e3)}))}_createSVGIndicator(t){const e=document.createElementNS("http://www.w3.org/2000/svg","svg"),n=document.createElementNS("http://www.w3.org/2000/svg","circle");return n.setAttributeNS(null,"cx","7"),n.setAttributeNS(null,"cy","7"),n.setAttributeNS(null,"r","6"),n.setAttributeNS(null,"style",`animation: countdown ${t}s linear infinite forwards`),e.append(n),e}_changeStopState(){const t=this._stopStartBtn.getElementsByClassName("grok-icon");t[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(t[0].className="grok-icon fal fa-pause",this._isStepProcessed||this._startScript())}_restartScript(){i.shell.dockManager.close(this._node),i.shell.closeAll(),this._clearRoot(),this._setInitParams(),this.start()}_clearRoot(){this._root=s.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._mainHeader=s.panel([],"tutorials-main-header"),this._header=s.h2(""),this._headerDiv=s.divH([],"tutorials-root-header"),this._activity=s.panel([],"tutorials-root-description"),this._progressDiv=s.divV([],"tutorials-root-progress"),this._progress=s.element("progress"),this._progressSteps=s.divText(""),this._progress.max=0,this._progress.value=1}_setInitParams(){this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._stopStartBtn.getElementsByClassName("grok-icon")[0].className="grok-icon fal fa-pause",this._nextStepBtn.classList.remove("disabled")}_closeDock(){i.shell.dockManager.close(this._node),this.cancelScript()}cancelScript(){this._isCancelled=!0,de.currentObject=null}step(t,e,n){return this._steps[this.steps.length]={name:t,func:e,options:n},this}start(){return ue(this,void 0,void 0,(function*(){this._initRoot(),i.shell.newView(this.name),this._isAutomatic?this._startScript():this._autoStartFirstStep&&(yield this._nextStep())}))}}de.currentObject=null;var fe,me=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function pe(t){const e=t instanceof Error?t.message:t.toString(),n=t instanceof Error?t.stack:void 0;i.shell.error(e),Fe.logger.error(t.message,void 0,n)}!function(t){t.X="Embed_X",t.Y="Embed_Y"}(fe||(fe={}));var ge=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const ye="data/sample_FASTA_PT_activity.csv";var ve=n(6535),be=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function we(){return be(this,void 0,void 0,(function*(){const t="Dendrogram",e=o.Func.find({package:t,name:"getTreeHelper"});if(0===e.length)throw new Error(`Package "${t}" must be installed for TreeHelper.`);return(yield e[0].prepare().call()).getOutputParamValue()}))}var Ce=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function Se(){return Ce(this,void 0,void 0,(function*(){return yield i.functions.call("Dendrogram:getDendrogramService",{})}))}var Me=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const Te="data/sample_FASTA_PT_activity.csv",xe="sequence";var Ne=n(3336),Ee=n.n(Ne),Ae=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const Ie="data/sample_FASTA_PT_activity.csv";var Le=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))},_e=n(8341),Re=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const ke="samples/sample_HELM.csv";var Ge=n(2568),Pe=n(600),Oe=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const Fe=new o.Package;function We(){return Jt.NT.instance}let Ve=null;class He{constructor(t){this._palette=t}get(t){return this._palette[t]}}function Ze(){return Oe(this,void 0,void 0,(function*(){yield Jt.NT.instance.loadLibraries();const t=Jt.NT.instance.getBioLib(),e=[],n=[],s=yield i.functions.call("Chem:getRdKitModule"),o=t.getMonomerMolsByType("PEPTIDE");Object.keys(o).forEach((t=>{e.push(t);const i=o[t].replaceAll("#R","O "),r=s.get_mol(i),a=JSON.parse(r.get_descriptors()).CrippenClogP;n.push(a),null==r||r.delete()}));const r=n.reduce(((t,e)=>t+e),0)/n.length||0,a={};for(let t=0;t<e.length;t++)a[e[t]]=n[t]<r?"#4682B4":"#DC143C";Ve=new He(a)}))}function Ue(t){return Oe(this,void 0,void 0,(function*(){const e=i.shell.tv,n=yield e.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:t.name,backgroundColor:4294836197,fitArea:!1,positionHeight:"Entropy",fixWidth:!0});return n.root.style.height="50px",n}))}function De(){return Jt.NT.instance.getBioLib()}function Be(){return Oe(this,void 0,void 0,(function*(){const t=s.dialog({title:"Manage files"}).add(s.fileBrowser({path:"System:AppData/Bio/libraries"}).root).addButton("OK",(()=>t.close())).show()}))}function Ye(t){return Oe(this,void 0,void 0,(function*(){const t=s.button("Manage",Be),e=s.div(),n=yield(0,Jt.P4)();new Set(Object.keys(yield i.dapi.userDataStorage.get(Jt.RV,!0)));let r=Promise.resolve();for(const t of n){const n=yield(0,Jt.nW)(),o=s.boolInput(t,!n.exclude.includes(t),(()=>{r=r.then((()=>Oe(this,void 0,void 0,(function*(){1==o.value?n.exclude=n.exclude.filter((e=>e!=t)):n.exclude.includes(t)||n.exclude.push(t),yield(0,Jt.QD)(n),yield Jt.NT.instance.loadLibraries(!0),i.shell.info("Monomer library user settings saved.")}))))}));e.append(o.root)}return new o.Widget(s.splitV([e,s.divV([t])]))}))}function ze(){return new y}function Xe(t){return function(t){const e=Array.from(t.dataFrame.columns).filter((t=>t.semType===o.SEMTYPE.MOLECULE)).map((t=>t.name));new Set(e).delete(t.name);const n=s.choiceInput("Monomer width",null!=(null==t?void 0:t.temp["monomer-width"])?t.temp["monomer-width"]:"short",["short","long"],(e=>{t.temp["monomer-width"]=e,t.setTag(".calculatedCellRender","0"),t.dataFrame.fireValuesChanged()}));n.setTooltip("In short mode, only the first character should be visible, followed by .. if there are more characters");const i=s.boolInput("Color code",null==(null==t?void 0:t.temp["color-code"])||t.temp["color-code"],(e=>{t.temp["color-code"]=e,t.dataFrame.fireValuesChanged()}));i.setTooltip("Color code");const r=s.stringInput("Reference sequence",null!=(null==t?void 0:t.temp["reference-sequence"])?null==t?void 0:t.temp["reference-sequence"]:"",(e=>{t.temp["reference-sequence"]=e,t.dataFrame.fireValuesChanged()}));r.setTooltip("Reference sequence is not empty, then the sequence will be render \nas a difference from the reference sequence");const a=s.boolInput("Compare with current",null==(null==t?void 0:t.temp["compare-with-current"])||t.temp["compare-with-current"],(e=>{t.temp["compare-with-current"]=e,t.dataFrame.fireValuesChanged()}));a.setTooltip('When on, all sequences get rendered in the "diff" mode');const l=s.inputs([n,i,r,a]);return new o.Widget(l)}(t)}function qe(){return new y}function Ke(){return new b}function je(t,e,n,i,s){const o=new I.k(i,s,n,e);return"Local alignment"==t?o.smithWaterman():o.needlemanWunch()}function $e(){return new T.OZ}function Je(){return new A}function Qe(t){const e=new le(o.SEMTYPE.MACROMOLECULE);s.dialog({title:"Activity Cliffs"}).add(e.paramsUI).onOK((()=>Oe(this,void 0,void 0,(function*(){t.func.prepare(e.funcParams).call(!0)})))).show()}function tn(t,e,r,a,l,h){return Oe(this,void 0,void 0,(function*(){if(!(0,Ge.n)(e,"Activity Cliffs"))return;const c=U(t),u={units:e.getTag(o.TAGS.UNITS),aligned:e.getTag("aligned"),separator:e.getTag("separator"),alphabet:e.getTag("alphabet")},d=new V.C(e);let f="Tanimoto";return d.isFasta()&&(f=d.getDistanceFunctionName()),yield function(t,e,r,a,l,h,c,u,d,f,m,p,g,y,v,b,w,C){return lt(this,void 0,void 0,(function*(){ht++;const S=c/100,M=null!=r?r:e;let T=!1,x=!1;const N={};let E,A;const I={seqCol:M,methodName:d,similarityMetric:u,embedAxesNames:a,options:w},{distance:L,coordinates:_}=yield p(I);for(const e of _)t.columns.add(e);let R=L;var k,G;Object.values(X.U).map((t=>t.toString())).includes(u)&&(R=yield(k=e,G=u,new Promise((function(t,e){const i=new Worker(new URL(n.p+n.u(367),n.b));i.postMessage({values:k.toList(),fnName:G,options:void 0}),i.onmessage=({data:{distanceMatrixData:n,error:s}})=>{s?e(s):t(n),i.terminate()}}))));const P=yield function(t,e,n,i){return lt(this,void 0,void 0,(function*(){const s=t.categories,r=t.getRawData(),a=o.Column.string("seq",t.length).init((t=>s[r[t]])),l=o.DataFrame.fromColumns([a]),h=t.length;let c=Array(h-1);return n?function(t,e,n){for(let i=0;i<t-1;++i){const s=new Float32Array(t-i-1).fill(0);for(let n=i+1;n<t;++n)s[n-i-1]=e[i][n]===o.FLOAT_NULL?0:Y(e[i][n]);n[i]=o.Column.fromFloat32Array("similarity",s)}}(h,e,c):c=yield i(h,t,l,"seq",c),c}))}(M,R,!!R,g),O=function(t,e,n){const i=[],s=[],o=[],r=[],a=new Set;for(let l=0;l!=t.length;++l)for(let h=0;h!=t.length-l;++h){const c=t[l]?t[l].get(h):0;if(c>=e){o.push(l),r.push(l+h+1),a.add(l),a.add(l+h+1),i.push(c);const t=Math.abs(n.get(l)-n.get(l+h+1));1!=c?s.push(t/(1-c)):s.push(1/0)}}return{simVals:i,saliVals:s,n1:o,n2:r,cliffsMolIds:a}}(P,S,h),F=function(t,e,n,i,s,r){const a=new Array(t).fill(0);for(let t=0;t!=n.length;++t)e[t]!=1/0&&(r.get(n[t])>r.get(i[t])?a[n[t]]+=e[t]:a[i[t]]+=e[t]);return o.Column.fromList("double",`sali_${s[0].substring(s[0].lastIndexOf("_"))}`,a)}(M.length,O.saliVals,O.n1,O.n2,a,h);t.columns.add(F);const W=function(t,e){const n="containsCliff",i=t.columns.names().filter((t=>t.includes(n))).length+1,s=`${n}_${i}`;return o.Column.bool(s,t.rowCount).init((t=>e.has(t)))}(t,O.cliffsMolIds);t.columns.add(W);const V=function(t){const e=t.filter((t=>t!==1/0)),n=Math.min(...e);return{max:Math.max(...e),min:n}}(O.saliVals),H=.8/(V.max-V.min),Z=i.shell.getTableView(t.name);Z.grid.columns.byName(W.name).visible=!1;const U=Z.addViewer(o.VIEWER.SCATTER_PLOT,{xColumnName:a[0],yColumnName:a[1],size:F.name,color:h.name,showXSelector:!1,showYSelector:!1,showSizeSelector:!1,showColorSelector:!1,markerMinSize:5,markerMaxSize:25,title:l}),D=U.getInfo().canvas,B=function(t,e,n,i,s){const r=new Array(t.n1.length).fill(null);for(let e=0;e<t.n1.length;e++){const n=t.n1[e],i=t.n2[e];r[e]={id:e,mols:[n,i],selected:!1,a:[],b:[]}}const a=o.DataFrame.create(r.length);return gt.forEach(((t,n)=>{a.columns.addNewString(t).init((t=>e.get(r[t].mols[n]))),function(t,e){Object.keys(e).forEach((n=>{t.tags[n]=e[n]}))}(a.col(t),s),a.col(t).semType=i})),a.columns.addNewFloat(dt).init((t=>Math.abs(n.get(r[t].mols[0])-n.get(r[t].mols[1])))),a.columns.addNewInt(pt).init((t=>t)),a.columns.addNewFloat(ft).init((e=>t.saliVals[e])),a.columns.addNewFloat(mt).init((e=>t.simVals[e])),a.name=`${ct}${ht}`,{lines:r,linesDf:a}}(O,e,h,f,m),z=b?b(B.linesDf,gt).sort([ft],[!1]):B.linesDf.plot.grid().sort([ft],[!1]);t.temp[".cliffsDfGrid"]=z;const q=s.button(`${B.linesDf.rowCount} cliffs`,(()=>{Z.dockManager.dock(z,"down",null,"Activity cliffs",null!=C?C:.2)}));q.classList.add("scatter_plot_link","cliffs_grid"),U.root.append(q);const K=s.switchInput("Show only cliffs",!1,(()=>{K.value?(U.dataFrame.setTag(yt,W.name),t.rows.match({[W.name]:!0}).filter(),ut.next(W.name)):(U.dataFrame.setTag(yt,""),t.filter.setAll(!0,!0),ut.next(""))}));K.root.classList.add("scatter_plot_link","show_only_cliffs"),U.root.append(K.root),ut.subscribe((t=>{""!==t?t!==W.name&&(K.enabled=!1):K.enabled=!0}));const j=i.events.onViewerClosed.subscribe((t=>{t.args.viewer===U&&(Z.dockManager.close(z.root),j.unsubscribe(),Z.subs=Z.subs.filter((t=>t!==j)))}));return Z.subs.push(j),B.linesDf.onCurrentCellChanged.subscribe((()=>{T=!0;const n=B.linesDf.currentCol&&B.linesDf.currentCol.name===gt[1]?1:0,o=-1!==B.linesDf.currentRowIdx?B.lines[B.linesDf.currentRowIdx]:null;U.dataFrame.currentRowIdx=o?o.mols[n]:-1,U.dataFrame.filter.set(0,!B.lines[0].selected),U.dataFrame.filter.set(0,B.lines[0].selected),o&&setTimeout((()=>{!function(t,e,n,o,r,a,l,h){const c=e.getPane("Cliff Details");s.empty(c.root);const u=h({cashedData:n,line:o,df:t,seqCol:r,activityCol:a,sali:l});c.root.append(u),setTimeout((()=>{i.shell.o=e.root}),500)}(t,E,N,o,e,h,B.linesDf.get(ft,o.id),v);const n=U.dataFrame.getSortedOrder(Z.grid.sortByColumns,Z.grid.sortTypes);Z.grid.scrollToCell(e.name,n.indexOf(U.dataFrame.currentRowIdx))}),1e3)})),B.linesDf.onSelectionChanged.subscribe((e=>{if(!1===B.linesDf.selection.anyTrue)B.lines.forEach((t=>{t.selected=!1}));else if(-1!==B.linesDf.mouseOverRowIdx){const t=B.lines[B.linesDf.mouseOverRowIdx];t.selected=!t.selected}setTimeout((()=>{const e=o.BitSet.create(t.rowCount);B.lines.forEach((t=>{t.selected&&t.mols.forEach((n=>{e.set(n,t.selected,!0)}))})),t.selection.copyFrom(e),Z.grid.invalidate()}),300)})),t.onSelectionChanged.subscribe((e=>{x?x=!1:!1===t.selection.anyTrue&&"number"==typeof e&&(B.lines.forEach((t=>{t.selected=!1})),z.dataFrame.selection.setAll(!1,!1),z.invalidate())})),D.addEventListener("mousemove",(function(i){clearTimeout(A),A=n.g.setTimeout((function(){const n=vt(i,D,B.lines);n&&-1===t.mouseOverRowIdx&&s.tooltip.show(y({cashedData:N,line:n,df:t,seqCol:e,activityCol:h}),i.clientX,i.clientY)}),500)})),D.addEventListener("mousedown",(function(e){x=!0;const n=vt(e,D,B.lines);if(n&&-1===t.mouseOverRowIdx){e.ctrlKey?(n.selected=!n.selected,B.linesDf.selection.set(n.id,n.selected)):B.linesDf.currentRowIdx!==n.id&&(B.linesDf.currentRowIdx=n.id,t.currentRowIdx=n.mols[0],t.filter.set(0,!B.lines[0].selected),t.filter.set(0,B.lines[0].selected));const i=B.linesDf.getSortedOrder(z.sortByColumns,z.sortTypes);z.scrollToCell(gt[0],i.indexOf(n.id))}})),U.onEvent("d4-before-draw-scene").subscribe((e=>{const n=function(t,e,n,i,s,o,r){const a=i.lines,l=t.getInfo().canvas.getContext("2d"),h=t.dataFrame.columns.byName(e),c=t.dataFrame.columns.byName(n);for(let e=0;e<a.length;e++){const n=t.worldToScreen(h.get(a[e].mols[0]),c.get(a[e].mols[0])),u=t.worldToScreen(h.get(a[e].mols[1]),c.get(a[e].mols[1]));a[e].a=[n.x,n.y],a[e].b=[u.x,u.y];const d=new Path2D;d.moveTo(a[e].a[0],a[e].a[1]);const f=a[e].selected?"255,255,0":"0,128,0",m=s[e]===1/0?1:.2+(s[e]-r)*o;l.strokeStyle=`rgba(${f},${m})`,l.lineWidth=a[e].id===i.linesDf.currentRowIdx?3:1,d.lineTo(a[e].b[0],a[e].b[1]),l.stroke(d)}return a}(U,a[0],a[1],B,O.saliVals,H,V.min);if(T){const t=n[B.linesDf.currentRowIdx];setTimeout((()=>{const{zoomLeft:e,zoomRight:n,zoomTop:i,zoomBottom:s}=function(t,e,n,i,s,o){const r=Math.abs(n-s),a=Math.abs(i-o),l=t/r,h=e/a,c=Math.min(l,h),u=t/c*5,d=e/c*5,f=(n<s?n:s)+r/2-u/2,m=(i>o?i:o)-a/2+d/2;return{zoomLeft:f,zoomRight:f+u,zoomTop:m,zoomBottom:m-d}}(U.viewport.width,U.viewport.height,U.dataFrame.get(a[0],t.mols[0]),U.dataFrame.get(a[1],t.mols[0]),U.dataFrame.get(a[0],t.mols[1]),U.dataFrame.get(a[1],t.mols[1]));U.zoom(e,i,n,s)}),300),T=!1}K.value?t.rows.match({[W.name]:!0}).filter():!0===K.enabled&&t.filter.setAll(!0,!1)})),U.addProperty("similarityLimit","double",S),E=function(){const t=s.accordion(),e=s.element("i");return e.className="grok-icon svg-icon svg-view-layout",t.addTitle(s.span([e,s.label("Activity cliffs")])),t.addPane("Cliff Details",(()=>s.divText("Cliff has not been selected")),!0),i.shell.o=t.root,t}(),U}))}(t,e,null,c,"Activity cliffs",r,a,f,l,o.SEMTYPE.MACROMOLECULE,u,Z,Rt,kt,Gt,Wt,h)}))}function en(t){const e=new ae(o.SEMTYPE.MACROMOLECULE);s.dialog({title:"Sequence Space"}).add(e.paramsUI).onOK((()=>Oe(this,void 0,void 0,(function*(){t.func.prepare(e.funcParams).call(!0)})))).show()}function nn(t,e,n,s="Tanimoto",r,a){return Oe(this,void 0,void 0,(function*(){if(yield(0,$t.gw)(10),!(0,Ge.n)(e,"Sequence space"))return;const l=U(t),h=o.DataFrame.fromColumns([e]).clone(),c=function(t,e){const n=e.categories.map(((t,e)=>t?null:e)).filter((t=>null!==t)),i=[...e.getRawData()],s=[];let o=0;for(let e=0;e<t.rowCount;e++)n.includes(i[e])&&(t.rows.removeAt(e-o),s.push(e),o+=1);return s}(h,e),u={seqCol:h.col(e.name),methodName:n,similarityMetric:s,embedAxesNames:l,options:a},d=(yield Z(u)).coordinates;for(const e of d){const n=e.toList();c.forEach((t=>n.splice(t,0,null))),t.columns.add(o.Column.float(e.name,t.rowCount).init((t=>n[t])))}return r?i.shell.tableView(t.name).scatterPlot({x:l[0],y:l[1],title:"Sequence space"}):void 0}))}function sn(t,e){return Oe(this,void 0,void 0,(function*(){if(0===o.Func.find({package:"Chem",name:"getRdKitModule"}).length)return void i.shell.warning('Transformation to atomic level requires package "Chem" installed.');if(!(0,Ge.n)(e,"To Atomic Level"))return;const n=(yield We()).getBioLib(),r=yield(0,Zt.i0)(t,e,n);null!==r.col&&(t.columns.add(r.col,!0),yield i.data.detectSemanticTypes(t)),r.warnings&&r.warnings.length>0&&i.shell.warning(s.list(r.warnings))}))}function on(){(0,Pe.K)()}function rn(t=null,e=null){return Oe(this,void 0,void 0,(function*(){return(0,Pe.K)({col:t,clustersCol:e})}))}function an(){return Oe(this,void 0,void 0,(function*(){const t=i.shell.tv,e=t.dataFrame.columns.toList().filter((t=>t.semType==o.SEMTYPE.MACROMOLECULE&&(new V.C(t),!0))),n=e=>Oe(this,void 0,void 0,(function*(){if(!(0,Ge.n)(e,"Composition"))return;const n=t.addViewer("WebLogo",{sequenceColumnName:e.name});i.shell.tv.dockManager.dock(n,o.DOCK_TYPE.DOWN,null,"Composition analysis",.25)}));let r=null;if(0!=e.length){if(e.length>1){const t=e.map((t=>t.name)),i=e.find((t=>new V.C(t).isMsa())),o=s.choiceInput("Column",i?i.name:t[0],t);s.dialog({title:"Composition Analysis",helpUrl:"/help/domains/bio/macromolecules.md#composition-analysis"}).add(s.div([o])).onOK((()=>Oe(this,void 0,void 0,(function*(){var t;const i=null!==(t=e.find((t=>t.name==o.value)))&&void 0!==t?t:null;i&&(yield n(i))})))).show()}else r=e[0];r&&(yield n(r))}else i.shell.error("Current table does not contain sequences")}))}function ln(t){return Oe(this,void 0,void 0,(function*(){(0,Ht.Xk)(t)}))}function hn(t){return new Ut.i(t).importFasta()}function cn(){const t=(0,zt.m)();(0,Vt.O)(t)}function un(){return new v}function dn(t){return Oe(this,void 0,void 0,(function*(){const e=o.TaskBarProgressIndicator.create("Test detectMacromolecule..."),n=(yield i.dapi.files.list(t,!0,"")).filter((t=>t.fileName.endsWith(".csv")));let s=0;const r=[];for(const a of n)try{const e=yield i.dapi.files.readAsText(t+a.fullPath),n=o.DataFrame.fromCsv(e);for(const t of n.columns)(yield i.functions.call("Bio:detectMacromolecule",{col:t}))===o.SEMTYPE.MACROMOLECULE&&r.push({file:a.path,result:"detected",column:t.name,message:`units: ${t.getTag(o.TAGS.UNITS)}`})}catch(t){r.push({file:a.path,result:"error",column:null,message:t instanceof Error?t.message:t.toString()})}finally{s+=1,e.update(100*s/n.length,`Test ${a.fileName}`)}i.shell.info("Test Demo:Files for detectMacromolecule finished."),e.close();const a=o.DataFrame.fromObjects(r);return a.name=`datasets_detectMacromolecule_${t}`,a}))}function fn(){const t=(0,zt.m)(),e=function(t){const e=(0,r.Mj)(t),n=t=>{const e=a.columns.addNewString((t+1).toString());return i.push(e),e},i=[],s=t.length,a=o.DataFrame.create(s);for(let o=0;o<s;++o){const s=t.get(o);null!=s&&e(s).forEach(((t,e)=>{var s;((null!==(s=i[e])&&void 0!==s?s:null)||n(e)).set(o,t||"-",!1)}))}return a}(t),n=t.dataFrame;for(const i of e.columns){const e=n.columns.add(i);e.semType=c.Of.MONOMER,e.setTag(o.TAGS.CELL_RENDERER,c.Of.MONOMER),e.setTag("alphabet",t.getTag("alphabet"))}i.shell.tv.grid.invalidate()}function mn(t){const e=(0,u.fy)(t,1,u.gP);return Object.keys(e.freq)}function pn(){return new Xt}function gn(){const t=i.shell.v,e=t.addViewer("Sequence Similarity Search");t.dockManager.dock(e,"down")}function yn(){return new qt}function vn(){const t=i.shell.v,e=t.addViewer("Sequence Diversity Search");t.dockManager.dock(e,"down")}function bn(){const t=(0,zt.m)();(0,W.gQ)(t)}function wn(){(0,Kt.C2)()}function Cn(){return new jt.ST}function Sn(){return Oe(this,void 0,void 0,(function*(){yield function(){return ge(this,void 0,void 0,(function*(){let t,e;try{const n=new de("Similarity, Diversity","Sequence similarity tracking and evaluation dataset diversity");yield n.step("Load DNA sequences",(()=>ge(this,void 0,void 0,(function*(){i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,e=yield Fe.files.readCsv(ye),t=i.shell.addTableView(e),t.grid.columns.byName("cluster").visible=!1,t.grid.columns.byName("sequence_id").visible=!1,t.grid.columns.byName("sequence").width=300,t.grid.columns.byName("activity").visible=!1,t.grid.columns.byName("is_cliff").visible=!1}))),{description:"Load dataset with macromolecules of 'fasta' notation, 'DNA' alphabet.",delay:2e3}).step("Find the most similar sequences to the current one",(()=>ge(this,void 0,void 0,(function*(){const n=yield e.plot.fromType("Sequence Similarity Search",{moleculeColumnName:"sequence",similarColumnLabel:"Similar to current"});t.dockManager.dock(n,o.DOCK_TYPE.RIGHT,null,"Similarity search",.35)}))),{description:"Add 'Sequence Similarity Search' viewer.",delay:2e3}).step("Explore most diverse sequences in a dataset",(()=>ge(this,void 0,void 0,(function*(){const n=yield e.plot.fromType("Sequence Diversity Search",{moleculeColumnName:"sequence",diverseColumnLabel:"Top diverse sequences of all data"});t.dockManager.dock(n,o.DOCK_TYPE.DOWN,null,"Diversity search",.27)}))),{description:"Add 'Sequence Deversity Search' viewer.",delay:2e3}).step("Choose another sequence for similarity search",(()=>ge(this,void 0,void 0,(function*(){e.currentRowIdx=3}))),{description:"Handling current row changed of data frame showing update of similar sequences.",delay:2e3}).step("One more sequence for similarity search",(()=>ge(this,void 0,void 0,(function*(){e.currentRowIdx=7}))),{description:"Just one more sequence to search similar ones.",delay:2e3}).start()}catch(t){pe(t)}}))}()}))}function Mn(){return Oe(this,void 0,void 0,(function*(){yield function(){return Me(this,void 0,void 0,(function*(){let t,e,n,s,r;try{const a=new de("Sequence Space","Exploring sequence space of Macromolecules, comparison with hierarchical clustering results");yield a.step("Load DNA sequences",(()=>Me(this,void 0,void 0,(function*(){[s,t,e]=yield Promise.all([Fe.files.readCsv(Te),we(),Se()]),n=i.shell.addTableView(s),n.grid.props.rowHeight=22,n.grid.columns.byName("cluster").visible=!1,n.grid.columns.byName("sequence").width=200,n.grid.columns.byName("is_cliff").visible=!1,i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1}))),{description:"Load dataset with macromolecules of 'fasta' notation, 'DNA' alphabet.",delay:2e3}).step("Build sequence space",(()=>Me(this,void 0,void 0,(function*(){r=yield function(t,e,n,i){return me(this,void 0,void 0,(function*(){let i;{const t=Object.values(fe);for(let n=0;n<t.length;n++){const i=t[n];if(!e.col(i)){const s=n==t.length-1;e.columns.add(o.Column.float(i,e.rowCount),s)}}if(e.rowCount>=1){const i=e.getCol(n).toList(),s=Date.now();Fe.logger.debug("Bio: demoBio01aUI(), calc reduceDimensionality start...");const o=yield F(i,"UMAP",bt.Levenshtein,{}),r=Date.now();Fe.logger.debug(`Bio: demoBio01aUI(), calc reduceDimensionality ET: ${(r-s)/1e3} s`);for(let n=0;n<t.length;n++){const i=t[n],s=e.getCol(i),r=o.embedding[n];s.init((t=>r[t]))}const a=Date.now();Fe.logger.debug(`MLB: MlbVrSpaceBrowser.buildView(), postprocess reduceDimensionality ET: ${(a-r)/1e3} s`)}i=yield e.plot.fromType(o.VIEWER.SCATTER_PLOT,{xColumnName:fe.X,yColumnName:fe.Y,lassoTool:!0})}return t.dockManager.dock(i,o.DOCK_TYPE.RIGHT,null,"Sequence Space",.35),i}))}(n,s,xe)}))),{description:"Reduce sequence space dimensionality to display on 2D representation.",delay:2e3}).step("Cluster sequences",(()=>Me(this,void 0,void 0,(function*(){const i=s.getCol(xe).toList(),o=ve.H.calc(i,((t,e)=>Mt.T(t,e)/((t.length+e.length)/2))),r=yield t.hierarchicalClusteringByDistance(o,"ward");e.injectTreeForGrid(n.grid,r,void 0,150,void 0)}))),{description:"Perform hierarchical clustering to reveal relationships between sequences.",delay:2e3}).step("Select a sequence",(()=>Me(this,void 0,void 0,(function*(){s.selection.init((t=>[15].includes(t)))}))),{description:"Handling selection of data frame row reflecting on linked viewers.",delay:2e3}).step("Select a bunch of sequences",(()=>Me(this,void 0,void 0,(function*(){const t=s.getCol("sequence_id");s.selection.init((e=>["c0_seq120","c0_seq105","c0_seq121","c0_seq93"].includes(t.get(e)))),s.currentRowIdx=27}))),{description:"Selecting a group of rows from a data frame to show their similarity and proximity to each other on a viewer..",delay:2e3}).start()}catch(t){pe(t)}}))}()}))}function Tn(){return Oe(this,void 0,void 0,(function*(){yield function(){return Ae(this,void 0,void 0,(function*(){let t,e,n,s,r;try{const a=new de("Activity Cliffs","Activity Cliffs analysis on Macromolecules data");yield a.step("Load DNA sequences",(()=>Ae(this,void 0,void 0,(function*(){i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,[n,t,e]=yield Promise.all([Fe.files.readCsv(Ie),we(),Se()]),s=i.shell.addTableView(n),s.grid.props.rowHeight=22,s.grid.columns.byName("cluster").visible=!1,s.grid.columns.byName("sequence").width=300,s.grid.columns.byName("is_cliff").visible=!1}))),{description:"Load dataset with macromolecules of 'fasta' notation, 'DNA' alphabet.",delay:2e3}).step("Find activity cliffs",(()=>Ae(this,void 0,void 0,(function*(){r=yield tn(n,n.getCol("Sequence"),n.getCol("Activity"),80,"UMAP"),s.dockManager.dock(r,o.DOCK_TYPE.RIGHT,null,"Activity Cliffs",.35),Ee()(r.root).find("button.scatter_plot_link,cliffs_grid").get()[0].click()}))),{description:"Reveal similar sequences with a cliff of activity.",delay:2e3}).step("Cluster sequences",(()=>Ae(this,void 0,void 0,(function*(){const i=n.getCol("sequence").toList(),o=ve.H.calc(i,((t,e)=>Mt.T(t,e)/((t.length+e.length)/2))),r=yield t.hierarchicalClusteringByDistance(o,"ward");e.injectTreeForGrid(s.grid,r,void 0,150,void 0),s.grid.columns.byName("Activity").scrollIntoView()}))),{description:"Perform hierarchical clustering to reveal relationships between sequences.",delay:2e3}).step("Browse the cliff",(()=>Ae(this,void 0,void 0,(function*(){const t=r.dataFrame.temp[".cliffsDfGrid"];t.dataFrame.rowCount>0&&(t.dataFrame.currentRowIdx=0)}))),{description:"Zoom in to explore selected activity cliff details.",delay:2e3}).start()}catch(t){pe(t)}}))}()}))}function xn(){return Oe(this,void 0,void 0,(function*(){yield function(){return Le(this,void 0,void 0,(function*(){const t="HELM";let e,n,r;try{yield new de("Atomic Level","Atomic level structure of Macromolecules").step("Loading Macromolecules notation 'Helm'",(()=>Le(this,void 0,void 0,(function*(){i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,e=yield Fe.files.readCsv("samples/sample_HELM.csv"),n=i.shell.addTableView(e);for(let e=0;e<n.grid.columns.length;e++){const i=n.grid.columns.byIndex(e);[t,"Activity"].includes(i.name)||(i.visible=!1)}}))),{description:"Load dataset with macromolecules of 'fasta' notation, 'PT' alphabet (protein, aminoacids).",delay:2e3}).step("To atomic level",(()=>Le(this,void 0,void 0,(function*(){const n=e.getCol(t);yield sn(e,n)}))),{description:"Get atomic level structures of Macromolecules.",delay:2e3}).step("Sketcher",(()=>Le(this,void 0,void 0,(function*(){const n=`molfile(${t})`;e.currentCell=e.cell(1,n);const i=e.currentCell.value,a=new o.chem.Sketcher(o.chem.SKETCHER_MODE.INPLACE);a.setMolFile(i),r=s.dialog().add(a).show(),yield(0,$t.gw)(3e3),r.close()}))),{description:"Display atomic level structure within a sketcher.",delay:2e3}).start()}catch(t){pe(t)}}))}()}))}function Nn(){return Oe(this,void 0,void 0,(function*(){yield function(){return Re(this,void 0,void 0,(function*(){let t,e,n,s,r,a;const l="msa(HELM)";try{const h=new de("Helm, MSA, Sequence Space","MSA and composition analysis on Helm data");yield h.step("Load peptides with non-natural aminoacids in 'HELM' notation",(()=>Re(this,void 0,void 0,(function*(){t=i.shell.addTableView(e=yield Fe.files.readCsv(ke)),i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1}))),{description:"Load dataset with macromolecules of 'Helm' notation.",delay:2e3}).step("Align peptides with non-natural aminoacids with PepSeA",(()=>Re(this,void 0,void 0,(function*(){n=e.getCol("HELM");const t=_e.J[0];s=yield(0,_e.f)(n,l,t,1.53,0,void 0),e.columns.add(s),yield i.data.detectSemanticTypes(e)}))),{description:"Multiple sequence alignment (MSA) performed with PepSeA tool operating on non-natural aminoacids as well.",delay:2e3}).step("Build sequence space",(()=>Re(this,void 0,void 0,(function*(){a=yield nn(e,s,"UMAP",bt.Levenshtein,!0),t.dockManager.dock(a,o.DOCK_TYPE.RIGHT,null,"Sequence Space",.35)}))),{description:"Reduce sequence space dimensionality to display on 2D representation.",delay:2e3}).step("Analyse sequence composition",(()=>Re(this,void 0,void 0,(function*(){r=yield e.plot.fromType("WebLogo",{sequenceColumnName:l,positionWidth:40,maxHeight:50}),t.dockManager.dock(r,o.DOCK_TYPE.DOWN,null,"Composition analysis",.2)}))),{description:"Composition analysis allows to reveal functional features of sequences like motifs, or variable loops.",delay:2e3}).start()}catch(t){pe(t)}}))}()}))}},9017:(t,e,n)=>{"use strict";n.d(e,{k:()=>o});class i{constructor(){this.value=0,this.parentI=0,this.parentJ=0}}class s{constructor(t,e,n){this.seq1=t,this.seq2=e,this.score=n}}class o{fillNeedleman(){for(let t=0;t<=this.len1;t++)this.dpGrid[t][0].value=-t*this.gap,this.dpGrid[t][0].parentI=t-1,this.dpGrid[t][0].parentJ=0;for(let t=1;t<=this.len2;t++)this.dpGrid[0][t].value=-t*this.gap,this.dpGrid[0][t].parentI=0,this.dpGrid[0][t].parentJ=t-1}fillOne(t,e){this.dpGrid[t][e].value=Math.max(this.dpGrid[t-1][e-1].value+this.scores[t-1][e-1],Math.max(this.dpGrid[t-1][e].value-this.gap,this.dpGrid[t][e-1].value-this.gap)),this.dpGrid[t][e].value==this.dpGrid[t-1][e-1].value+this.scores[t-1][e-1]?(this.dpGrid[t][e].parentI=t-1,this.dpGrid[t][e].parentJ=e-1):this.dpGrid[t][e].value==this.dpGrid[t-1][e].value-this.gap?(this.dpGrid[t][e].parentI=t-1,this.dpGrid[t][e].parentJ=e):(this.dpGrid[t][e].parentI=t,this.dpGrid[t][e].parentJ=e-1)}gridFromName(t){switch(t){case"BLOSUM45":this.alignGrid=this.BLOSUM45,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM50":this.alignGrid=this.BLOSUM50,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM62":this.alignGrid=this.BLOSUM62,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM80":this.alignGrid=this.BLOSUM80,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM90":this.alignGrid=this.BLOSUM90,this.connections=this.CONBLO,this.step=1;break;case"PAM30":this.alignGrid=this.PAM30,this.connections=this.CONBLO,this.step=1;break;case"PAM70":this.alignGrid=this.PAM70,this.connections=this.CONBLO,this.step=1;break;case"PAM250":this.alignGrid=this.PAM250,this.connections=this.CONBLO,this.step=1;break;case"NUCLEOTIDES":this.alignGrid=this.NUCLEOTIDES,this.connections=this.CONNUCL,this.step=1;break;case"TRANS":this.alignGrid=this.TRANS,this.connections=this.CONNUCL,this.step=1;break;case"SCHNEIDER":this.alignGrid=this.SCHNEIDER,this.connections=this.CONSCHN,this.step=3}this.fillScores()}constructResult(t,e){let n="",i="",o="",r=this.dpGrid[t][e].value;for(let t=0;t<this.step;t++)o+="|";for(;t>0||e>0;){this.dpGrid[t][e].parentI==t?(n=o+n,i=this.seq2.substr((e-1)*this.step,this.step)+i):this.dpGrid[t][e].parentJ==e?(i=o+i,n=this.seq1.substr((t-1)*this.step,this.step)+n):(n=t-1>=0?this.seq1.substr((t-1)*this.step,this.step)+n:o+n,i=e-1>=0?this.seq2.substr((e-1)*this.step,this.step)+i:o+i);let s=t;t=this.dpGrid[t][e].parentI,e=this.dpGrid[s][e].parentJ}return new s(n,i,r)}fillScores(){this.scores=[];for(let t=0;t<this.len1;t++){this.scores.push([]);for(let e=0;e<this.len2;e++)this.scores[t].push(this.alignGrid[this.connections[this.seq1.substr(t*this.step,this.step)]][this.connections[this.seq2.substr(e*this.step,this.step)]])}}typeRec(){if(/[ATGC]*/.test(this.seq1)&&/[ATGC]*/.test(this.seq2))return"NUCLEOTIDES";if(/[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq1)&&/[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq2))return"BLOSUM62";throw Error("Can't recognize sequence type")}needlemanWunch(){this.dpGrid=[];for(let t=0;t<this.len1+1;t++){let t=[];for(let e=0;e<this.len2+1;e++)t.push(new i);this.dpGrid.push(t)}this.fillNeedleman();for(let t=1;t<=this.len1;t++)for(let e=1;e<=this.len2;e++)this.fillOne(t,e);return this.constructResult(this.len1,this.len2)}smithWaterman(){this.dpGrid=[];for(let t=0;t<this.len1+1;t++){let t=[];for(let e=0;e<this.len2+1;e++)t.push(new i);this.dpGrid.push(t)}let t=0,e=0,n=0;for(let i=1;i<=this.len1;i++)for(let s=1;s<=this.len2;s++)this.fillOne(i,s),this.dpGrid[i][s].value<=0?(this.dpGrid[i][s].value=0,this.dpGrid[i][s].parentI=0,this.dpGrid[i][s].parentJ=0):0==this.dpGrid[this.dpGrid[i][s].parentI][this.dpGrid[i][s].parentJ].value&&(this.dpGrid[i][s].parentI=0,this.dpGrid[i][s].parentJ=0),this.dpGrid[i][s].value>t&&(t=this.dpGrid[i][s].value,e=i,n=s);return this.constructResult(e,n)}setSequences(t,e){this.seq1=t,this.seq2=e,this.len1=this.seq1.length/this.step,this.len2=this.seq2.length/this.step,this.fillScores()}setGap(t){this.gap=t}setMethod(t=""){"AUTO"==t&&(t=this.typeRec()),this.gridFromName(t)}constructor(t,e,n,i=""){this.seq1="",this.seq2="",this.gap=1,this.len1=0,this.len2=0,this.step=1,this.alignGrid=[],this.scores=[],this.dpGrid=[],this.connections={},this.BLOSUM45=[[5,-2,-1,-2,-1,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-2,-2,0,-1,-1,0,-5],[-2,7,0,-1,-3,1,0,-2,0,-3,-2,3,-1,-2,-2,-1,-1,-2,-1,-2,-1,0,-1,-5],[-1,0,6,2,-2,0,0,0,1,-2,-3,0,-2,-2,-2,1,0,-4,-2,-3,4,0,-1,-5],[-2,-1,2,7,-3,0,2,-1,0,-4,-3,0,-3,-4,-1,0,-1,-4,-2,-3,5,1,-1,-5],[-1,-3,-2,-3,12,-3,-3,-3,-3,-3,-2,-3,-2,-2,-4,-1,-1,-5,-3,-1,-2,-3,-2,-5],[-1,1,0,0,-3,6,2,-2,1,-2,-2,1,0,-4,-1,0,-1,-2,-1,-3,0,4,-1,-5],[-1,0,0,2,-3,2,6,-2,0,-3,-2,1,-2,-3,0,0,-1,-3,-2,-3,1,4,-1,-5],[0,-2,0,-1,-3,-2,-2,7,-2,-4,-3,-2,-2,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-5],[-2,0,1,0,-3,1,0,-2,10,-3,-2,-1,0,-2,-2,-1,-2,-3,2,-3,0,0,-1,-5],[-1,-3,-2,-4,-3,-2,-3,-4,-3,5,2,-3,2,0,-2,-2,-1,-2,0,3,-3,-3,-1,-5],[-1,-2,-3,-3,-2,-2,-2,-3,-2,2,5,-3,2,1,-3,-3,-1,-2,0,1,-3,-2,-1,-5],[-1,3,0,0,-3,1,1,-2,-1,-3,-3,5,-1,-3,-1,-1,-1,-2,-1,-2,0,1,-1,-5],[-1,-1,-2,-3,-2,0,-2,-2,0,2,2,-1,6,0,-2,-2,-1,-2,0,1,-2,-1,-1,-5],[-2,-2,-2,-4,-2,-4,-3,-3,-2,0,1,-3,0,8,-3,-2,-1,1,3,0,-3,-3,-1,-5],[-1,-2,-2,-1,-4,-1,0,-2,-2,-2,-3,-1,-2,-3,9,-1,-1,-3,-3,-3,-2,-1,-1,-5],[1,-1,1,0,-1,0,0,0,-1,-2,-3,-1,-2,-2,-1,4,2,-4,-2,-1,0,0,0,-5],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-1,-1,2,5,-3,-1,0,0,-1,0,-5],[-2,-2,-4,-4,-5,-2,-3,-2,-3,-2,-2,-2,-2,1,-3,-4,-3,15,3,-3,-4,-2,-2,-5],[-2,-1,-2,-2,-3,-1,-2,-3,2,0,0,-1,0,3,-3,-2,-1,3,8,-1,-2,-2,-1,-5],[0,-2,-3,-3,-1,-3,-3,-3,-3,3,1,-2,1,0,-3,-1,0,-3,-1,5,-3,-3,-1,-5],[-1,-1,4,5,-2,0,1,-1,0,-3,-3,0,-2,-3,-2,0,0,-4,-2,-3,4,2,-1,-5],[-1,0,0,1,-3,4,4,-2,0,-3,-2,1,-1,-3,-1,0,-1,-2,-2,-3,2,4,-1,-5],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-2,-1,-1,-1,-1,-1,-5],[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,1]],this.BLOSUM50=[[5,-2,-1,-2,-1,-1,-1,0,-2,-1,-2,-1,-1,-3,-1,1,0,-3,-2,0,-2,-1,-1,-5],[-2,7,-1,-2,-4,1,0,-3,0,-4,-3,3,-2,-3,-3,-1,-1,-3,-1,-3,-1,0,-1,-5],[-1,-1,7,2,-2,0,0,0,1,-3,-4,0,-2,-4,-2,1,0,-4,-2,-3,4,0,-1,-5],[-2,-2,2,8,-4,0,2,-1,-1,-4,-4,-1,-4,-5,-1,0,-1,-5,-3,-4,5,1,-1,-5],[-1,-4,-2,-4,13,-3,-3,-3,-3,-2,-2,-3,-2,-2,-4,-1,-1,-5,-3,-1,-3,-3,-2,-5],[-1,1,0,0,-3,7,2,-2,1,-3,-2,2,0,-4,-1,0,-1,-1,-1,-3,0,4,-1,-5],[-1,0,0,2,-3,2,6,-3,0,-4,-3,1,-2,-3,-1,-1,-1,-3,-2,-3,1,5,-1,-5],[0,-3,0,-1,-3,-2,-3,8,-2,-4,-4,-2,-3,-4,-2,0,-2,-3,-3,-4,-1,-2,-2,-5],[-2,0,1,-1,-3,1,0,-2,10,-4,-3,0,-1,-1,-2,-1,-2,-3,2,-4,0,0,-1,-5],[-1,-4,-3,-4,-2,-3,-4,-4,-4,5,2,-3,2,0,-3,-3,-1,-3,-1,4,-4,-3,-1,-5],[-2,-3,-4,-4,-2,-2,-3,-4,-3,2,5,-3,3,1,-4,-3,-1,-2,-1,1,-4,-3,-1,-5],[-1,3,0,-1,-3,2,1,-2,0,-3,-3,6,-2,-4,-1,0,-1,-3,-2,-3,0,1,-1,-5],[-1,-2,-2,-4,-2,0,-2,-3,-1,2,3,-2,7,0,-3,-2,-1,-1,0,1,-3,-1,-1,-5],[-3,-3,-4,-5,-2,-4,-3,-4,-1,0,1,-4,0,8,-4,-3,-2,1,4,-1,-4,-4,-2,-5],[-1,-3,-2,-1,-4,-1,-1,-2,-2,-3,-4,-1,-3,-4,10,-1,-1,-4,-3,-3,-2,-1,-2,-5],[1,-1,1,0,-1,0,-1,0,-1,-3,-3,0,-2,-3,-1,5,2,-4,-2,-2,0,0,-1,-5],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,2,5,-3,-2,0,0,-1,0,-5],[-3,-3,-4,-5,-5,-1,-3,-3,-3,-3,-2,-3,-1,1,-4,-4,-3,15,2,-3,-5,-2,-3,-5],[-2,-1,-2,-3,-3,-1,-2,-3,2,-1,-1,-2,0,4,-3,-2,-2,2,8,-1,-3,-2,-1,-5],[0,-3,-3,-4,-1,-3,-3,-4,-4,4,1,-3,1,-1,-3,-2,0,-3,-1,5,-4,-3,-1,-5],[-2,-1,4,5,-3,0,1,-1,0,-4,-4,0,-3,-4,-2,0,0,-5,-3,-4,5,2,-1,-5],[-1,0,0,1,-3,4,5,-2,0,-3,-3,1,-1,-4,-1,0,-1,-2,-2,-3,2,5,-1,-5],[-1,-1,-1,-1,-2,-1,-1,-2,-1,-1,-1,-1,-1,-2,-2,-1,0,-3,-1,-1,-1,-1,-1,-5],[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,1]],this.BLOSUM62=[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],this.BLOSUM80=[[7,-3,-3,-3,-1,-2,-2,0,-3,-3,-3,-1,-2,-4,-1,2,0,-5,-4,-1,-3,-2,-1,-8],[-3,9,-1,-3,-6,1,-1,-4,0,-5,-4,3,-3,-5,-3,-2,-2,-5,-4,-4,-2,0,-2,-8],[-3,-1,9,2,-5,0,-1,-1,1,-6,-6,0,-4,-6,-4,1,0,-7,-4,-5,5,-1,-2,-8],[-3,-3,2,10,-7,-1,2,-3,-2,-7,-7,-2,-6,-6,-3,-1,-2,-8,-6,-6,6,1,-3,-8],[-1,-6,-5,-7,13,-5,-7,-6,-7,-2,-3,-6,-3,-4,-6,-2,-2,-5,-5,-2,-6,-7,-4,-8],[-2,1,0,-1,-5,9,3,-4,1,-5,-4,2,-1,-5,-3,-1,-1,-4,-3,-4,-1,5,-2,-8],[-2,-1,-1,2,-7,3,8,-4,0,-6,-6,1,-4,-6,-2,-1,-2,-6,-5,-4,1,6,-2,-8],[0,-4,-1,-3,-6,-4,-4,9,-4,-7,-7,-3,-5,-6,-5,-1,-3,-6,-6,-6,-2,-4,-3,-8],[-3,0,1,-2,-7,1,0,-4,12,-6,-5,-1,-4,-2,-4,-2,-3,-4,3,-5,-1,0,-2,-8],[-3,-5,-6,-7,-2,-5,-6,-7,-6,7,2,-5,2,-1,-5,-4,-2,-5,-3,4,-6,-6,-2,-8],[-3,-4,-6,-7,-3,-4,-6,-7,-5,2,6,-4,3,0,-5,-4,-3,-4,-2,1,-7,-5,-2,-8],[-1,3,0,-2,-6,2,1,-3,-1,-5,-4,8,-3,-5,-2,-1,-1,-6,-4,-4,-1,1,-2,-8],[-2,-3,-4,-6,-3,-1,-4,-5,-4,2,3,-3,9,0,-4,-3,-1,-3,-3,1,-5,-3,-2,-8],[-4,-5,-6,-6,-4,-5,-6,-6,-2,-1,0,-5,0,10,-6,-4,-4,0,4,-2,-6,-6,-3,-8],[-1,-3,-4,-3,-6,-3,-2,-5,-4,-5,-5,-2,-4,-6,12,-2,-3,-7,-6,-4,-4,-2,-3,-8],[2,-2,1,-1,-2,-1,-1,-1,-2,-4,-4,-1,-3,-4,-2,7,2,-6,-3,-3,0,-1,-1,-8],[0,-2,0,-2,-2,-1,-2,-3,-3,-2,-3,-1,-1,-4,-3,2,8,-5,-3,0,-1,-2,-1,-8],[-5,-5,-7,-8,-5,-4,-6,-6,-4,-5,-4,-6,-3,0,-7,-6,-5,16,3,-5,-8,-5,-5,-8],[-4,-4,-4,-6,-5,-3,-5,-6,3,-3,-2,-4,-3,4,-6,-3,-3,3,11,-3,-5,-4,-3,-8],[-1,-4,-5,-6,-2,-4,-4,-6,-5,4,1,-4,1,-2,-4,-3,0,-5,-3,7,-6,-4,-2,-8],[-3,-2,5,6,-6,-1,1,-2,-1,-6,-7,-1,-5,-6,-4,0,-1,-8,-5,-6,6,0,-3,-8],[-2,0,-1,1,-7,5,6,-4,0,-6,-5,1,-3,-6,-2,-1,-2,-5,-4,-4,0,6,-1,-8],[-1,-2,-2,-3,-4,-2,-2,-3,-2,-2,-2,-2,-2,-3,-3,-1,-1,-5,-3,-2,-3,-1,-2,-8],[-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,1]],this.BLOSUM90=[[5,-2,-2,-3,-1,-1,-1,0,-2,-2,-2,-1,-2,-3,-1,1,0,-4,-3,-1,-2,-1,-1,-6],[-2,6,-1,-3,-5,1,-1,-3,0,-4,-3,2,-2,-4,-3,-1,-2,-4,-3,-3,-2,0,-2,-6],[-2,-1,7,1,-4,0,-1,-1,0,-4,-4,0,-3,-4,-3,0,0,-5,-3,-4,4,-1,-2,-6],[-3,-3,1,7,-5,-1,1,-2,-2,-5,-5,-1,-4,-5,-3,-1,-2,-6,-4,-5,4,0,-2,-6],[-1,-5,-4,-5,9,-4,-6,-4,-5,-2,-2,-4,-2,-3,-4,-2,-2,-4,-4,-2,-4,-5,-3,-6],[-1,1,0,-1,-4,7,2,-3,1,-4,-3,1,0,-4,-2,-1,-1,-3,-3,-3,-1,4,-1,-6],[-1,-1,-1,1,-6,2,6,-3,-1,-4,-4,0,-3,-5,-2,-1,-1,-5,-4,-3,0,4,-2,-6],[0,-3,-1,-2,-4,-3,-3,6,-3,-5,-5,-2,-4,-5,-3,-1,-3,-4,-5,-5,-2,-3,-2,-6],[-2,0,0,-2,-5,1,-1,-3,8,-4,-4,-1,-3,-2,-3,-2,-2,-3,1,-4,-1,0,-2,-6],[-2,-4,-4,-5,-2,-4,-4,-5,-4,5,1,-4,1,-1,-4,-3,-1,-4,-2,3,-5,-4,-2,-6],[-2,-3,-4,-5,-2,-3,-4,-5,-4,1,5,-3,2,0,-4,-3,-2,-3,-2,0,-5,-4,-2,-6],[-1,2,0,-1,-4,1,0,-2,-1,-4,-3,6,-2,-4,-2,-1,-1,-5,-3,-3,-1,1,-1,-6],[-2,-2,-3,-4,-2,0,-3,-4,-3,1,2,-2,7,-1,-3,-2,-1,-2,-2,0,-4,-2,-1,-6],[-3,-4,-4,-5,-3,-4,-5,-5,-2,-1,0,-4,-1,7,-4,-3,-3,0,3,-2,-4,-4,-2,-6],[-1,-3,-3,-3,-4,-2,-2,-3,-3,-4,-4,-2,-3,-4,8,-2,-2,-5,-4,-3,-3,-2,-2,-6],[1,-1,0,-1,-2,-1,-1,-1,-2,-3,-3,-1,-2,-3,-2,5,1,-4,-3,-2,0,-1,-1,-6],[0,-2,0,-2,-2,-1,-1,-3,-2,-1,-2,-1,-1,-3,-2,1,6,-4,-2,-1,-1,-1,-1,-6],[-4,-4,-5,-6,-4,-3,-5,-4,-3,-4,-3,-5,-2,0,-5,-4,-4,11,2,-3,-6,-4,-3,-6],[-3,-3,-3,-4,-4,-3,-4,-5,1,-2,-2,-3,-2,3,-4,-3,-2,2,8,-3,-4,-3,-2,-6],[-1,-3,-4,-5,-2,-3,-3,-5,-4,3,0,-3,0,-2,-3,-2,-1,-3,-3,5,-4,-3,-2,-6],[-2,-2,4,4,-4,-1,0,-2,-1,-5,-5,-1,-4,-4,-3,0,-1,-6,-4,-4,4,0,-2,-6],[-1,0,-1,0,-5,4,4,-3,0,-4,-4,1,-2,-4,-2,-1,-1,-4,-3,-3,0,4,-1,-6],[-1,-2,-2,-2,-3,-1,-2,-2,-2,-2,-2,-1,-1,-2,-2,-1,-1,-3,-2,-2,-2,-1,-2,-6],[-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,1]],this.NUCLEOTIDES=[[1,-1,-1,-1],[-1,1,-1,-1],[-1,-1,1,-1],[-1,-1,-1,1]],this.PAM30=[[6,-7,-4,-3,-6,-4,-2,-2,-7,-5,-6,-7,-5,-8,-2,0,-1,-13,-8,-2,-3,-3,-3,-17],[-7,8,-6,-10,-8,-2,-9,-9,-2,-5,-8,0,-4,-9,-4,-3,-6,-2,-10,-8,-7,-4,-6,-17],[-4,-6,8,2,-11,-3,-2,-3,0,-5,-7,-1,-9,-9,-6,0,-2,-8,-4,-8,6,-3,-3,-17],[-3,-10,2,8,-14,-2,2,-3,-4,-7,-12,-4,-11,-15,-8,-4,-5,-15,-11,-8,6,1,-5,-17],[-6,-8,-11,-14,10,-14,-14,-9,-7,-6,-15,-14,-13,-13,-8,-3,-8,-15,-4,-6,-12,-14,-9,-17],[-4,-2,-3,-2,-14,8,1,-7,1,-8,-5,-3,-4,-13,-3,-5,-5,-13,-12,-7,-3,6,-5,-17],[-2,-9,-2,2,-14,1,8,-4,-5,-5,-9,-4,-7,-14,-5,-4,-6,-17,-8,-6,1,6,-5,-17],[-2,-9,-3,-3,-9,-7,-4,6,-9,-11,-10,-7,-8,-9,-6,-2,-6,-15,-14,-5,-3,-5,-5,-17],[-7,-2,0,-4,-7,1,-5,-9,9,-9,-6,-6,-10,-6,-4,-6,-7,-7,-3,-6,-1,-1,-5,-17],[-5,-5,-5,-7,-6,-8,-5,-11,-9,8,-1,-6,-1,-2,-8,-7,-2,-14,-6,2,-6,-6,-5,-17],[-6,-8,-7,-12,-15,-5,-9,-10,-6,-1,7,-8,1,-3,-7,-8,-7,-6,-7,-2,-9,-7,-6,-17],[-7,0,-1,-4,-14,-3,-4,-7,-6,-6,-8,7,-2,-14,-6,-4,-3,-12,-9,-9,-2,-4,-5,-17],[-5,-4,-9,-11,-13,-4,-7,-8,-10,-1,1,-2,11,-4,-8,-5,-4,-13,-11,-1,-10,-5,-5,-17],[-8,-9,-9,-15,-13,-13,-14,-9,-6,-2,-3,-14,-4,9,-10,-6,-9,-4,2,-8,-10,-13,-8,-17],[-2,-4,-6,-8,-8,-3,-5,-6,-4,-8,-7,-6,-8,-10,8,-2,-4,-14,-13,-6,-7,-4,-5,-17],[0,-3,0,-4,-3,-5,-4,-2,-6,-7,-8,-4,-5,-6,-2,6,0,-5,-7,-6,-1,-5,-3,-17],[-1,-6,-2,-5,-8,-5,-6,-6,-7,-2,-7,-3,-4,-9,-4,0,7,-13,-6,-3,-3,-6,-4,-17],[-13,-2,-8,-15,-15,-13,-17,-15,-7,-14,-6,-12,-13,-4,-14,-5,-13,13,-5,-15,-10,-14,-11,-17],[-8,-10,-4,-11,-4,-12,-8,-14,-3,-6,-7,-9,-11,2,-13,-7,-6,-5,10,-7,-6,-9,-7,-17],[-2,-8,-8,-8,-6,-7,-6,-5,-6,2,-2,-9,-1,-8,-6,-6,-3,-15,-7,7,-8,-6,-5,-17],[-3,-7,6,6,-12,-3,1,-3,-1,-6,-9,-2,-10,-10,-7,-1,-3,-10,-6,-8,6,0,-5,-17],[-3,-4,-3,1,-14,6,6,-5,-1,-6,-7,-4,-5,-13,-4,-5,-6,-14,-9,-6,0,6,-5,-17],[-3,-6,-3,-5,-9,-5,-5,-5,-5,-5,-6,-5,-5,-8,-5,-3,-4,-11,-7,-5,-5,-5,-5,-17],[-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,1]],this.PAM70=[[5,-4,-2,-1,-4,-2,-1,0,-4,-2,-4,-4,-3,-6,0,1,1,-9,-5,-1,-1,-1,-2,-11],[-4,8,-3,-6,-5,0,-5,-6,0,-3,-6,2,-2,-7,-2,-1,-4,0,-7,-5,-4,-2,-3,-11],[-2,-3,6,3,-7,-1,0,-1,1,-3,-5,0,-5,-6,-3,1,0,-6,-3,-5,5,-1,-2,-11],[-1,-6,3,6,-9,0,3,-1,-1,-5,-8,-2,-7,-10,-4,-1,-2,-10,-7,-5,5,2,-3,-11],[-4,-5,-7,-9,9,-9,-9,-6,-5,-4,-10,-9,-9,-8,-5,-1,-5,-11,-2,-4,-8,-9,-6,-11],[-2,0,-1,0,-9,7,2,-4,2,-5,-3,-1,-2,-9,-1,-3,-3,-8,-8,-4,-1,5,-2,-11],[-1,-5,0,3,-9,2,6,-2,-2,-4,-6,-2,-4,-9,-3,-2,-3,-11,-6,-4,2,5,-3,-11],[0,-6,-1,-1,-6,-4,-2,6,-6,-6,-7,-5,-6,-7,-3,0,-3,-10,-9,-3,-1,-3,-3,-11],[-4,0,1,-1,-5,2,-2,-6,8,-6,-4,-3,-6,-4,-2,-3,-4,-5,-1,-4,0,1,-3,-11],[-2,-3,-3,-5,-4,-5,-4,-6,-6,7,1,-4,1,0,-5,-4,-1,-9,-4,3,-4,-4,-3,-11],[-4,-6,-5,-8,-10,-3,-6,-7,-4,1,6,-5,2,-1,-5,-6,-4,-4,-4,0,-6,-4,-4,-11],[-4,2,0,-2,-9,-1,-2,-5,-3,-4,-5,6,0,-9,-4,-2,-1,-7,-7,-6,-1,-2,-3,-11],[-3,-2,-5,-7,-9,-2,-4,-6,-6,1,2,0,10,-2,-5,-3,-2,-8,-7,0,-6,-3,-3,-11],[-6,-7,-6,-10,-8,-9,-9,-7,-4,0,-1,-9,-2,8,-7,-4,-6,-2,4,-5,-7,-9,-5,-11],[0,-2,-3,-4,-5,-1,-3,-3,-2,-5,-5,-4,-5,-7,7,0,-2,-9,-9,-3,-4,-2,-3,-11],[1,-1,1,-1,-1,-3,-2,0,-3,-4,-6,-2,-3,-4,0,5,2,-3,-5,-3,0,-2,-1,-11],[1,-4,0,-2,-5,-3,-3,-3,-4,-1,-4,-1,-2,-6,-2,2,6,-8,-4,-1,-1,-3,-2,-11],[-9,0,-6,-10,-11,-8,-11,-10,-5,-9,-4,-7,-8,-2,-9,-3,-8,13,-3,-10,-7,-10,-7,-11],[-5,-7,-3,-7,-2,-8,-6,-9,-1,-4,-4,-7,-7,4,-9,-5,-4,-3,9,-5,-4,-7,-5,-11],[-1,-5,-5,-5,-4,-4,-4,-3,-4,3,0,-6,0,-5,-3,-3,-1,-10,-5,6,-5,-4,-2,-11],[-1,-4,5,5,-8,-1,2,-1,0,-4,-6,-1,-6,-7,-4,0,-1,-7,-4,-5,5,1,-2,-11],[-1,-2,-1,2,-9,5,5,-3,1,-4,-4,-2,-3,-9,-2,-2,-3,-10,-7,-4,1,5,-3,-11],[-2,-3,-2,-3,-6,-2,-3,-3,-3,-3,-4,-3,-3,-5,-3,-1,-2,-7,-5,-2,-2,-3,-3,-11],[-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,1]],this.PAM250=[[2,-2,0,0,-2,0,0,1,-1,-1,-2,-1,-1,-3,1,1,1,-6,-3,0,0,0,0,-8],[-2,6,0,-1,-4,1,-1,-3,2,-2,-3,3,0,-4,0,0,-1,2,-4,-2,-1,0,-1,-8],[0,0,2,2,-4,1,1,0,2,-2,-3,1,-2,-3,0,1,0,-4,-2,-2,2,1,0,-8],[0,-1,2,4,-5,2,3,1,1,-2,-4,0,-3,-6,-1,0,0,-7,-4,-2,3,3,-1,-8],[-2,-4,-4,-5,12,-5,-5,-3,-3,-2,-6,-5,-5,-4,-3,0,-2,-8,0,-2,-4,-5,-3,-8],[0,1,1,2,-5,4,2,-1,3,-2,-2,1,-1,-5,0,-1,-1,-5,-4,-2,1,3,-1,-8],[0,-1,1,3,-5,2,4,0,1,-2,-3,0,-2,-5,-1,0,0,-7,-4,-2,3,3,-1,-8],[1,-3,0,1,-3,-1,0,5,-2,-3,-4,-2,-3,-5,0,1,0,-7,-5,-1,0,0,-1,-8],[-1,2,2,1,-3,3,1,-2,6,-2,-2,0,-2,-2,0,-1,-1,-3,0,-2,1,2,-1,-8],[-1,-2,-2,-2,-2,-2,-2,-3,-2,5,2,-2,2,1,-2,-1,0,-5,-1,4,-2,-2,-1,-8],[-2,-3,-3,-4,-6,-2,-3,-4,-2,2,6,-3,4,2,-3,-3,-2,-2,-1,2,-3,-3,-1,-8],[-1,3,1,0,-5,1,0,-2,0,-2,-3,5,0,-5,-1,0,0,-3,-4,-2,1,0,-1,-8],[-1,0,-2,-3,-5,-1,-2,-3,-2,2,4,0,6,0,-2,-2,-1,-4,-2,2,-2,-2,-1,-8],[-3,-4,-3,-6,-4,-5,-5,-5,-2,1,2,-5,0,9,-5,-3,-3,0,7,-1,-4,-5,-2,-8],[1,0,0,-1,-3,0,-1,0,0,-2,-3,-1,-2,-5,6,1,0,-6,-5,-1,-1,0,-1,-8],[1,0,1,0,0,-1,0,1,-1,-1,-3,0,-2,-3,1,2,1,-2,-3,-1,0,0,0,-8],[1,-1,0,0,-2,-1,0,0,-1,0,-2,0,-1,-3,0,1,3,-5,-3,0,0,-1,0,-8],[-6,2,-4,-7,-8,-5,-7,-7,-3,-5,-2,-3,-4,0,-6,-2,-5,17,0,-6,-5,-6,-4,-8],[-3,-4,-2,-4,0,-4,-4,-5,0,-1,-1,-4,-2,7,-5,-3,-3,0,10,-2,-3,-4,-2,-8],[0,-2,-2,-2,-2,-2,-2,-1,-2,4,2,-2,2,-1,-1,-1,0,-6,-2,4,-2,-2,-1,-8],[0,-1,2,3,-4,1,3,0,1,-2,-3,1,-2,-4,-1,0,0,-5,-3,-2,3,2,-1,-8],[0,0,1,3,-5,3,3,0,2,-2,-3,0,-2,-5,0,0,-1,-6,-4,-2,2,3,-1,-8],[0,-1,0,-1,-3,-1,-1,-1,-1,-1,-1,-1,-1,-2,-1,0,0,-4,-2,-1,-1,-1,-1,-8],[-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,1]],this.SCHNEIDER=[[11.6,-2.7,9.7,-1.7,-2.7,-6.4,-3.9,-5.6,5.1,-5,3.6,-4.2,-6.3,-13,-7.1,-11.5,.4,-6,-1.9,-5.3,-8.5,-11.2,-8.9,-10.8,2.1,0,1.4,.2,-10.2,-13.5,-13,-12.5,-2.6,-8.5,-5,-8.1,-6.3,-9.9,-7.5,-9,-7.1,-10.2,-8.2,-9.2,-8.2,-12.5,-11.1,-11.4,-50,-14.8,-50,-13.8,-7.3,-10.1,-8.4,-9.1,-50,-13,-13.5,-12.4,-10.7,-18.1,-11.8,-17.2],[-2.7,13,-3.3,10.9,-3.5,-.4,-3.3,-1.8,-5.4,4.6,-5.5,3,-10.2,-7.9,-9.9,-9.6,-5,.5,-5.5,-1,-10.3,-8.1,-9.4,-9.6,-8.1,-5,-7.3,-6.3,-13.4,-11.3,-14.4,-12.9,-6.3,.8,-6.4,-1.1,-7.4,-5,-6.2,-6.5,-5.6,-1.6,-4.7,-3,-10.8,-8.7,-11.9,-10,-50,-6.2,-50,-7.5,-6.3,-4.3,-6.2,-5.4,-50,-7,-16.3,-8.2,-13.2,-12.3,-13.1,-13.3],[9.7,-3.3,11.6,-2.8,-4.5,-6.7,-3.1,-6.9,3.3,-5.5,4.8,-5.1,-8.9,-13.2,-5.7,-12.6,-1.5,-6.1,-.6,-6.1,-10,-11.8,-8.6,-11.9,1.2,.5,2.2,.1,-11.8,-14,-11.9,-13.4,-4.9,-9.1,-3.4,-8.9,-8,-10,-7.2,-10,-9.1,-10.2,-7.1,-9.9,-10.1,-13,-10.6,-12.7,-50,-14.9,-50,-14.4,-8.9,-10.8,-8.9,-10.4,-50,-13.1,-11.8,-13,-12.4,-19.4,-11.5,-17.8],[-1.7,10.9,-2.8,12.9,-2.7,-2.2,-2.8,.2,-4.8,2.9,-5.2,5.2,-9.1,-9.5,-9,-7,-4,-1,-5,1,-9,-8.8,-8.9,-7.7,-7,-6.8,-7.1,-4.3,-12.4,-12.9,-13.9,-10,-4.9,-.7,-5.6,1.4,-6,-6.5,-6.2,-4.8,-5.1,-3.2,-5,-1.2,-9.8,-9.9,-11.3,-8.2,-50,-7.6,-50,-5.1,-5.5,-5.8,-5.9,-4.2,-50,-8.3,-15.5,-5.9,-11.6,-14.2,-12,-11.6],[-2.7,-3.5,-4.5,-2.7,11.7,9,10.6,9.6,-3.2,-.7,-5.1,-.4,.7,-4.6,-.4,-3.6,-4.8,-8.9,-6.5,-7.8,-1.4,-4.1,-2.9,-3.3,-8,-9.1,-8,-8.2,-6,-9.3,-7.7,-8.5,-6.4,-10.1,-7.5,-8.6,2.8,-.7,.9,.1,-5.9,-7.3,-6.5,-6.5,-.4,-3.9,-2.6,-3.1,-50,-14.6,-50,-12.6,2.9,.1,1.8,1,-50,-9.2,-13.6,-7.7,-4.8,-12.2,-6.2,-11],[-6.4,-.4,-6.7,-2.2,9,12.3,9.8,9.6,-7.1,2.4,-7.2,.3,-2.9,-1.2,-3,-3.3,-7.6,-6.7,-8.1,-7.9,-4.9,-1.9,-4.5,-3.8,-9.5,-7.8,-9.3,-8.9,-9.4,-7.1,-9,-9,-9.4,-7.5,-9.3,-9.2,-.7,2.6,.2,-.1,-8,-4.6,-7.7,-6.1,-3.6,-1,-4.1,-3.1,-50,-11.6,-50,-11.6,.2,2.3,.4,.5,-50,-6.5,-15.3,-7.8,-8.4,-9.5,-8.3,-11.1],[-3.9,-3.3,-3.1,-2.8,10.6,9.8,12.2,9.8,-4.9,.1,-3.6,-.2,-1.7,-4.1,.9,-3.5,-5.9,-8.9,-5.6,-8.5,-3.9,-3.9,-2.2,-4.5,-7.3,-7.5,-6.4,-8.5,-7.1,-8.2,-6.7,-7.8,-7.9,-9.1,-7.1,-9.4,.9,-.2,2.5,-.3,-6.9,-6.5,-5.5,-6.8,-1.7,-3.4,-1.7,-2.8,-50,-13,-50,-11.5,1.5,.7,2.7,.6,-50,-8.9,-12.1,-7.4,-6.1,-11.5,-5.4,-10.4],[-5.6,-1.8,-6.9,.2,9.6,9.6,9.8,11.6,-6.6,.9,-7.2,2.5,-2.3,-3.4,-2.3,-.6,-6.5,-8.2,-8,-6.3,-3.7,-3.5,-3.9,-1.6,-9.9,-8.9,-9.6,-7,-8.6,-8.9,-8.8,-6.8,-8.6,-8.2,-8.8,-6.8,.3,.1,.2,2.4,-7.4,-6.2,-6.9,-4.4,-2.9,-2.9,-3.5,-.9,-50,-12.2,-50,-10.1,1.2,.6,1.2,2.4,-50,-7.6,-16.1,-5.8,-7.2,-10.8,-7.4,-9],[5.1,-5.4,3.3,-4.8,-3.2,-7.1,-4.9,-6.6,13.3,-2.8,11.2,-1.9,-5.7,-12.5,-7.2,-11.6,-.7,-4.8,-3.1,-4.3,-10,-11.6,-8.8,-11.7,10.5,7.7,9.1,8.5,-9.8,-12.7,-11.7,-11.8,-6.3,-11.4,-8.8,-11,-7.5,-10.3,-8.3,-9.9,-1.9,-6.7,-4.1,-6.4,-7.9,-12.5,-11.4,-11.7,-50,-14,-50,-13.2,-8.5,-10.4,-9.1,-9.6,-50,-9.8,-7.7,-8.8,-10.3,-17.9,-11.8,-16],[-5,4.6,-5.5,2.9,-.7,2.4,.1,.9,-2.8,12.8,-2.6,11,-8.4,-6.3,-8.3,-7.7,-6.1,-2.9,-6.5,-4.2,-8.5,-5.9,-7.5,-7.7,-5.5,-2.4,-5.5,-4.1,-12.9,-10.3,-12.7,-11.3,-7.4,-3.1,-7.4,-4.9,-4.4,-1.8,-3.5,-3.5,-1.6,3,-.8,.9,-8.4,-6.3,-9.6,-7.3,-50,-9,-50,-9.7,-2.3,-.2,-1.2,-1.5,-50,-.7,-13.3,-2,-11.8,-11.9,-12.3,-12.7],[3.6,-5.5,4.8,-5.2,-5.1,-7.2,-3.6,-7.2,11.2,-2.6,13.4,-2.1,-7.7,-12.5,-5.3,-11.9,-2.2,-4.4,-1.9,-4.8,-10.2,-11.5,-8.1,-12,9.3,8.2,10,8,-10.8,-11.9,-10.7,-12.4,-8.2,-11.8,-6.9,-11.5,-8.4,-9.9,-7.1,-10.6,-4.7,-6.8,-1.2,-7,-9.8,-11.6,-9.6,-12.1,-50,-14.1,-50,-12.7,-10,-10.8,-8.8,-10.5,-50,-9.2,-4.2,-9.3,-11,-18.2,-11.1,-16.1],[-4.2,3,-5.1,5.2,-.4,.3,-.2,2.5,-1.9,11,-2.1,13.2,-7.6,-8.5,-8,-5.3,-5.6,-4.5,-6.8,-2.4,-7.8,-7.9,-7.9,-6.2,-5.7,-5.1,-5.4,-2.1,-12.4,-12.3,-13.1,-10.1,-6.6,-4.4,-6.9,-2.6,-3.6,-3.8,-3.7,-2,-1.4,.8,-.9,3,-8.2,-8.1,-9.2,-5.8,-50,-10.1,-50,-7.4,-1.7,-2,-1.5,-.5,-50,-2.1,-12.6,-.4,-11.6,-13.9,-11.4,-11.1],[-6.3,-10.2,-8.9,-9.1,.7,-2.9,-1.7,-2.3,-5.7,-8.4,-7.7,-7.6,13.2,9.6,3.5,9.7,-8.7,-12.4,-10.7,-10.7,-7.8,-10.2,-8.8,-9.6,-9.5,-11.9,-10.9,-10.5,2.3,-.4,-.2,-.3,-9.7,-15.5,-11.4,-13.7,-3,-6.4,-4.1,-5.4,-9.6,-11.9,-10.5,-11.8,6.2,3.3,3.7,3.6,-50,-13.6,-50,-11.9,-5.6,-8.8,-7.2,-8.9,-50,-12.4,-14.1,-11.6,2.8,-6.4,.5,-5.2],[-13,-7.9,-13.2,-9.5,-4.6,-1.2,-4.1,-3.4,-12.5,-6.3,-12.5,-8.5,9.6,12.7,.2,10.5,-12.4,-11.6,-13.2,-12,-12.4,-10.1,-11.6,-12,-15.1,-13.1,-14.3,-13.4,-1.4,1.4,-1.6,-.5,-14.9,-14.3,-15.2,-16.8,-7.7,-4.7,-6.3,-6.6,-14.6,-10.8,-12.8,-13,2.3,6,2.5,3.6,-50,-11.2,-50,-11.9,-10.5,-9.2,-10.5,-10.5,-50,-10.3,-16.2,-11.3,-1.7,-3.7,-2.5,-5.4],[-7.1,-9.9,-5.7,-9,-.4,-3,.9,-2.3,-7.2,-8.3,-5.3,-8,3.5,.2,14.3,1,-7.3,-11.2,-6.9,-9.7,-8.5,-10.2,-7.7,-9.8,-10,-10.4,-8.4,-10.2,1,-.6,1.7,-.5,-11.1,-14.8,-9.7,-14.5,-3.7,-5.8,-3.1,-5.6,-10.4,-11.5,-8.2,-11.1,.6,-1.6,1.6,-1.1,-50,-12.4,-50,-11.5,-5.5,-8,-4.9,-7.2,-50,-12.4,-10.3,-11.6,.7,-6.8,2.4,-6],[-11.5,-9.6,-12.6,-7,-3.6,-3.3,-3.5,-.6,-11.6,-7.7,-11.9,-5.3,9.7,10.5,1,12.6,-12,-12.2,-12.5,-9.7,-11.1,-11.2,-11.9,-9.4,-12.9,-14.3,-14,-11.9,-1,-.4,-1.6,1.2,-13.9,-15.4,-13.7,-12.6,-6.2,-6.7,-6.3,-4.4,-13,-12.2,-13,-10.4,2.9,3.8,2.5,5.8,-50,-12.5,-50,-10.2,-9.6,-9.7,-9.6,-8.3,-50,-11.6,-15.4,-9.4,-1.1,-5.4,-1.6,-3.3],[.4,-5,-1.5,-4,-4.8,-7.6,-5.9,-6.5,-.7,-6.1,-2.2,-5.6,-8.7,-12.4,-7.3,-12,12.8,2.3,10.2,3,0,-3.4,-.7,-3.2,2.5,-.8,.9,.2,-3,-7.2,-5.7,-6.1,-.2,-6.6,-1.8,-6,-5.3,-8.2,-5.7,-7.6,-6.7,-9.6,-7.5,-9.3,-7.1,-10.5,-9.6,-9.4,-50,-8.1,-50,-7.2,-4.3,-6.8,-5.7,-6.3,-50,-9.5,-9.6,-8.9,-6.2,-12.8,-6.8,-11.8],[-6,.5,-6.1,-1,-8.9,-6.7,-8.9,-8.2,-4.8,-2.9,-4.4,-4.5,-12.4,-11.6,-11.2,-12.2,2.3,14.6,1.9,12.9,-5.5,-2.6,-4.1,-4.7,-1.2,3,-1.1,1.6,-8,-4.7,-8.7,-6,-8.2,-4.7,-7.8,-6.7,-10,-8.3,-8.9,-9.9,-10.8,-7.1,-10,-9.2,-11.6,-10.1,-12.3,-11.9,-50,2.2,-50,.9,-7.9,-5.9,-7.4,-6.9,-50,-4.6,-11.6,-5.6,-9.7,-5.9,-9.9,-7.3],[-1.9,-5.5,-.6,-5,-6.5,-8.1,-5.6,-8,-3.1,-6.5,-1.9,-6.8,-10.7,-13.2,-6.9,-12.5,10.2,1.9,11.9,2.1,-2.3,-4.1,-.5,-4.6,-.1,-.9,2.4,-.8,-5.1,-6.9,-4.8,-6.7,-2.3,-7.1,-.8,-7.2,-7.2,-8,-5.6,-8.5,-9.4,-9.7,-7.2,-9.8,-9.2,-11.1,-9.5,-10.7,-50,-8.7,-50,-8.6,-6.1,-7.5,-5.5,-7.7,-50,-10.4,-7.7,-10,-7.3,-13.6,-6.4,-13.3],[-5.3,-1,-6.1,1,-7.8,-7.9,-8.5,-6.3,-4.3,-4.2,-4.8,-2.4,-10.7,-12,-9.7,-9.7,3,12.9,2.1,14.7,-4.9,-3.8,-4,-2.4,-1,.8,-1.3,3.4,-7.6,-5.7,-8.1,-3.5,-6.8,-5.8,-7.2,-4.2,-8.9,-10.2,-8.4,-8.2,-9.9,-8.4,-9.7,-6.4,-11.1,-11.1,-11.8,-10,-50,.4,-50,2.6,-7.2,-7,-7.4,-5.1,-50,-5.7,-9.8,-3.2,-8.4,-7.4,-8.9,-5.9],[-8.5,-10.3,-10,-9,-1.4,-4.9,-3.9,-3.7,-10,-8.5,-10.2,-7.8,-7.8,-12.4,-8.5,-11.1,0,-5.5,-2.3,-4.9,12.6,10,11.1,10.5,-6,-8.3,-6.9,-7.5,-2.2,-7.4,-5.3,-5.9,-8.9,-12.5,-9.4,-11.6,-.7,-3.9,-2.3,-3,-9.1,-9.8,-9.2,-9.5,-5.6,-9,-8,-8.5,-50,-15.3,-50,-14.1,2.3,-1.4,.3,-.5,-50,-13.6,-14.3,-11.5,-5.3,-13.7,-6.1,-12.7],[-11.2,-8.1,-11.8,-8.8,-4.1,-1.9,-3.9,-3.5,-11.6,-5.9,-11.5,-7.9,-10.2,-10.1,-10.2,-11.2,-3.4,-2.6,-4.1,-3.8,10,13.1,10.7,10.6,-8.1,-5.2,-8,-6.7,-6.1,-3.7,-7.5,-5.6,-11.1,-10.3,-10.6,-11.9,-3.2,-1,-2.2,-2.8,-10.5,-8.1,-9.4,-9.5,-8.3,-6.9,-9.4,-8.8,-50,-11.3,-50,-12.8,-.6,2.2,-.3,.1,-50,-10.1,-17.5,-11.1,-8.6,-9.9,-8.6,-11.9],[-8.9,-9.4,-8.6,-8.9,-2.9,-4.5,-2.2,-3.9,-8.8,-7.5,-8.1,-7.9,-8.8,-11.6,-7.7,-11.9,-.7,-4.1,-.5,-4,11.1,10.7,13.2,10.4,-5.7,-5.8,-3.5,-6.1,-3.6,-6.5,-3.3,-5.5,-9.4,-11,-8.7,-11.2,-1.8,-2.7,.7,-3,-9.1,-8.2,-7.3,-9.4,-7.2,-8.2,-7.2,-8.2,-50,-13.2,-50,-13.3,.5,-.9,1.8,-.6,-50,-11.4,-11.1,-10.5,-6.1,-12.9,-5,-11.9],[-10.8,-9.6,-11.9,-7.7,-3.3,-3.8,-4.5,-1.6,-11.7,-7.7,-12,-6.2,-9.6,-12,-9.8,-9.4,-3.2,-4.7,-4.6,-2.4,10.5,10.6,10.4,12.6,-8.2,-7.9,-9,-4.7,-6.1,-6,-7.5,-2.9,-10.9,-12.2,-11.2,-10.9,-2.4,-2.9,-2.7,-.9,-10.4,-9.7,-10.2,-8,-8.4,-9.1,-9.3,-6.5,-50,-13.3,-50,-11,-0,-.4,-.4,2.3,-50,-10.9,-17.2,-8.3,-8.3,-12.7,-7.8,-9.3],[2.1,-8.1,1.2,-7,-8,-9.5,-7.3,-9.9,10.5,-5.5,9.3,-5.7,-9.5,-15.1,-10,-12.9,2.5,-1.2,-.1,-1,-6,-8.1,-5.7,-8.2,13.8,11.3,11.8,12.1,-6,-9.1,-9,-9.5,-8.9,-13.4,-10,-13.1,-9.9,-11.7,-9.8,-12.8,-5.9,-9.4,-6.5,-8.1,-10.7,-14,-13.3,-13.9,-50,-11.9,-50,-9.7,-8.9,-10.8,-9,-11.1,-50,-6.5,-5.3,-6.3,-10.5,-16.2,-10.4,-15.2],[0,-5,.5,-6.8,-9.1,-7.8,-7.5,-8.9,7.7,-2.4,8.2,-5.1,-11.9,-13.1,-10.4,-14.3,-.8,3,-.9,.8,-8.3,-5.2,-5.8,-7.9,11.3,15,11.2,12.8,-9.7,-5.3,-9.2,-7.8,-11.7,-10.6,-10.1,-12.2,-11.7,-8.8,-8.9,-11.8,-9.3,-5,-8,-8.2,-13.6,-11.4,-12.8,-13,-50,-7.2,-50,-8.4,-11,-7.7,-8.7,-10.2,-50,-1.5,-7.1,-4.9,-11.2,-11.6,-11.6,-15],[1.4,-7.3,2.2,-7.1,-8,-9.3,-6.4,-9.6,9.1,-5.5,10,-5.4,-10.9,-14.3,-8.4,-14,.9,-1.1,2.4,-1.3,-6.9,-8,-3.5,-9,11.8,11.2,13.4,11.4,-7.3,-8.8,-6.5,-8.5,-10,-12.5,-7.8,-12.5,-9.6,-11,-7.1,-10.7,-7.9,-8,-4.3,-9.4,-11.4,-12.3,-10.9,-12.9,-50,-11.8,-50,-11.2,-9.4,-9.8,-7.3,-10.5,-50,-6.2,-2.2,-6.7,-9.8,-15.2,-8.5,-14.9],[.2,-6.3,.1,-4.3,-8.2,-8.9,-8.5,-7,8.5,-4.1,8,-2.1,-10.5,-13.4,-10.2,-11.9,.2,1.6,-.8,3.4,-7.5,-6.7,-6.1,-4.7,12.1,12.8,11.4,14.7,-8.7,-7.4,-9.4,-5.3,-9.9,-11.8,-10.5,-10.3,-9.9,-10.1,-9.3,-9.3,-8.1,-7.2,-8,-5.2,-12,-12.1,-12.6,-10.9,-50,-7.9,-50,-5.3,-9.3,-8.8,-8.9,-7,-50,-3.6,-7.1,-1.2,-10.2,-12.7,-9.9,-11],[-10.2,-13.4,-11.8,-12.4,-6,-9.4,-7.1,-8.6,-9.8,-12.9,-10.8,-12.4,2.3,-1.4,1,-1,-3,-8,-5.1,-7.6,-2.2,-6.1,-3.6,-6.1,-6,-9.7,-7.3,-8.7,11.2,7.9,8.9,8.1,-12.1,-17.4,-13.2,-16.8,-6.3,-9.5,-7.5,-8.8,-12.7,-15.2,-13.1,-14.2,0,-3.1,-1.8,-3.1,-50,-10.7,-50,-9.3,-4.6,-8.9,-5.9,-8.3,-50,-12.8,-9.6,-10.6,9.5,-3.2,8.2,-2.8],[-13.5,-11.3,-14,-12.9,-9.3,-7.1,-8.2,-8.9,-12.7,-10.3,-11.9,-12.3,-.4,1.4,-.6,-.4,-7.2,-4.7,-6.9,-5.7,-7.4,-3.7,-6.5,-6,-9.1,-5.3,-8.8,-7.4,7.9,11.9,7.8,9.3,-15.2,-15.1,-14.6,-17.2,-9.7,-7.3,-8.2,-9.2,-15,-12.8,-14.1,-14.9,-2.8,.2,-2.9,-2.3,-50,-7.4,-50,-8.7,-9.4,-7.3,-9.4,-9.4,-50,-8,-11.9,-9.7,6.5,.5,6.4,-1.8],[-13,-14.4,-11.9,-13.9,-7.7,-9,-6.7,-8.8,-11.7,-12.7,-10.7,-13.1,-.2,-1.6,1.7,-1.6,-5.7,-8.7,-4.8,-8.1,-5.3,-7.5,-3.3,-7.5,-9,-9.2,-6.5,-9.4,8.9,7.8,10.1,7.8,-14.3,-17.7,-13,-17.8,-8,-9.4,-6.2,-9.2,-15.1,-14.9,-12.2,-14.9,-1.8,-3.2,-.8,-3.2,-50,-10.8,-50,-9.9,-7.3,-9.6,-6.4,-9.4,-50,-12.3,-8.7,-11.3,7.6,-3.3,8.7,-2.9],[-12.5,-12.9,-13.4,-10,-8.5,-9,-7.8,-6.8,-11.8,-11.3,-12.4,-10.1,-.3,-.5,-.5,1.2,-6.1,-6,-6.7,-3.5,-5.9,-5.6,-5.5,-2.9,-9.5,-7.8,-8.5,-5.3,8.1,9.3,7.8,11.8,-14.4,-15.7,-14.5,-14.6,-8.4,-8.7,-7.9,-7.1,-14.3,-13.8,-13.8,-12.3,-2.4,-2.2,-2.9,-.2,-50,-8.9,-50,-7.1,-8.1,-9.1,-8.7,-6.6,-50,-9.7,-11.4,-8,6.8,-1.8,6.9,.4],[-2.6,-6.3,-4.9,-4.9,-6.4,-9.4,-7.9,-8.6,-6.3,-7.4,-8.2,-6.6,-9.7,-14.9,-11.1,-13.9,-.2,-8.2,-2.3,-6.8,-8.9,-11.1,-9.4,-10.9,-8.9,-11.7,-10,-9.9,-12.1,-15.2,-14.3,-14.4,11.1,2.9,9.2,3.5,-3,-7,-4.3,-6.2,-2.2,-6.6,-3.7,-5.7,-6,-10.4,-8.6,-9.5,-50,-15.5,-50,-13.9,-7.8,-10.5,-8.7,-9.6,-50,-16.5,-17.1,-14.8,-12.1,-18.9,-12.4,-17.4],[-8.5,.8,-9.1,-.7,-10.1,-7.5,-9.1,-8.2,-11.4,-3.1,-11.8,-4.4,-15.5,-14.3,-14.8,-15.4,-6.6,-4.7,-7.1,-5.8,-12.5,-10.3,-11,-12.2,-13.4,-10.6,-12.5,-11.8,-17.4,-15.1,-17.7,-15.7,2.9,12.5,3.1,10.3,-7.7,-5.2,-6.2,-7.3,-5.4,-1.7,-5.4,-3.7,-11.6,-9.1,-13,-10.8,-50,-10.3,-50,-11.2,-9.8,-8.3,-9.1,-9.7,-50,-12.7,-20.6,-13.1,-16,-16.6,-17,-18.4],[-5,-6.4,-3.4,-5.6,-7.5,-9.3,-7.1,-8.8,-8.8,-7.4,-6.9,-6.9,-11.4,-15.2,-9.7,-13.7,-1.8,-7.8,-.8,-7.2,-9.4,-10.6,-8.7,-11.2,-10,-10.1,-7.8,-10.5,-13.2,-14.6,-13,-14.5,9.2,3.1,10.8,3,-4.5,-6.7,-2.7,-6.7,-5,-6.8,-2.5,-6.7,-7.5,-10.4,-7.4,-10.2,-50,-15.5,-50,-14.2,-8.9,-10.2,-8.5,-10,-50,-15.6,-15.3,-15.5,-13,-18.8,-12.6,-18.3],[-8.1,-1.1,-8.9,1.4,-8.6,-9.2,-9.4,-6.8,-11,-4.9,-11.5,-2.6,-13.7,-16.8,-14.5,-12.6,-6,-6.7,-7.2,-4.2,-11.6,-11.9,-11.2,-10.9,-13.1,-12.2,-12.5,-10.3,-16.8,-17.2,-17.8,-14.6,3.5,10.3,3,12.4,-6.9,-7.5,-6.8,-4.9,-5.4,-4.2,-5.4,-1.3,-10.8,-11.5,-12.4,-8.2,-50,-12.5,-50,-8.9,-9.2,-10,-9.4,-7.9,-50,-14.3,-19.9,-11.4,-16.2,-19.2,-15.8,-15.9],[-6.3,-7.4,-8,-6,2.8,-.7,.9,.3,-7.5,-4.4,-8.4,-3.6,-3,-7.7,-3.7,-6.2,-5.3,-10,-7.2,-8.9,-.7,-3.2,-1.8,-2.4,-9.9,-11.7,-9.6,-9.9,-6.3,-9.7,-8,-8.4,-3,-7.7,-4.5,-6.9,11.3,8.2,9.4,9.1,-1,-3.3,-1.8,-2.4,1.5,-2.1,-.4,-1.1,-50,-14.5,-50,-12.9,2.8,-0,1.4,.7,-50,-8.7,-14.1,-7.5,-5.2,-12.5,-6.5,-10.7],[-9.9,-5,-10,-6.5,-.7,2.6,-.2,.1,-10.3,-1.8,-9.9,-3.8,-6.4,-4.7,-5.8,-6.7,-8.2,-8.3,-8,-10.2,-3.9,-1,-2.7,-2.9,-11.7,-8.8,-11,-10.1,-9.5,-7.3,-9.4,-8.7,-7,-5.2,-6.7,-7.5,8.2,11.6,8.8,9.1,-3.7,-.9,-3.1,-3,-2,1.2,-2.3,-1.3,-50,-12.1,-50,-12.6,.1,2.5,.7,.6,-50,-6,-14.8,-7.5,-8.6,-9.4,-8.5,-11.2],[-7.5,-6.2,-7.2,-6.2,.9,.2,2.5,.2,-8.3,-3.5,-7.1,-3.7,-4.1,-6.3,-3.1,-6.3,-5.7,-8.9,-5.6,-8.4,-2.3,-2.2,.7,-2.7,-9.8,-8.9,-7.1,-9.3,-7.5,-8.2,-6.2,-7.9,-4.3,-6.2,-2.7,-6.8,9.4,8.8,12.1,8.8,-2.1,-2,.1,-2.4,0,-1.1,1.3,-.8,-50,-11.9,-50,-12.6,1.2,.7,3.5,.8,-50,-7.1,-12.4,-7.1,-7.1,-10.6,-5,-10.6],[-9,-6.5,-10,-4.8,.1,-.1,-.3,2.4,-9.9,-3.5,-10.6,-2,-5.4,-6.6,-5.6,-4.4,-7.6,-9.9,-8.5,-8.2,-3,-2.8,-3,-.9,-12.8,-11.8,-10.7,-9.3,-8.8,-9.2,-9.2,-7.1,-6.2,-7.3,-6.7,-4.9,9.1,9.1,8.8,11.2,-3.1,-3,-3.3,-1,-1.1,-1.4,-2,1.2,-50,-12.8,-50,-10.9,.8,.5,.7,2.3,-50,-7.5,-16.5,-5.9,-7.8,-11.1,-7.8,-9],[-7.1,-5.6,-9.1,-5.1,-5.9,-8,-6.9,-7.4,-1.9,-1.6,-4.7,-1.4,-9.6,-14.6,-10.4,-13,-6.7,-10.8,-9.4,-9.9,-9.1,-10.5,-9.1,-10.4,-5.9,-9.3,-7.9,-8.1,-12.7,-15,-15.1,-14.3,-2.2,-5.4,-5,-5.4,-1,-3.7,-2.1,-3.1,12.8,9.6,11.1,10.1,-4.8,-9.4,-8.1,-8.6,-50,-18.3,-50,-15.4,-5.9,-7.5,-6.6,-7.1,-50,-9.5,-11.7,-8.4,-12.5,-17.3,-13.2,-15.4],[-10.2,-1.6,-10.2,-3.2,-7.3,-4.6,-6.5,-6.2,-6.7,3,-6.8,.8,-11.9,-10.8,-11.5,-12.2,-9.6,-7.1,-9.7,-8.4,-9.8,-8.1,-8.2,-9.7,-9.4,-5,-8,-7.2,-15.2,-12.8,-14.9,-13.8,-6.6,-1.7,-6.8,-4.2,-3.3,-.9,-2,-3,9.6,12.8,9.7,10.5,-8.5,-5.6,-9.3,-7.8,-50,-12.7,-50,-13.8,-6.8,-5.1,-5.3,-6.5,-50,-4.1,-12.8,-5.8,-14.4,-14.1,-13.6,-14.8],[-8.2,-4.7,-7.1,-5,-6.5,-7.7,-5.5,-6.9,-4.1,-.8,-1.2,-.9,-10.5,-12.8,-8.2,-13,-7.5,-10,-7.2,-9.7,-9.2,-9.4,-7.3,-10.2,-6.5,-8,-4.3,-8,-13.1,-14.1,-12.2,-13.8,-3.7,-5.4,-2.5,-5.4,-1.8,-3.1,.1,-3.3,11.1,9.7,12.9,9.8,-5.5,-8.1,-5.4,-7.8,-50,-16.4,-50,-14.8,-5.9,-7.1,-4.7,-7.2,-50,-8.4,-6.4,-8.1,-12.1,-16.2,-10.3,-15.8],[-9.2,-3,-9.9,-1.2,-6.5,-6.1,-6.8,-4.4,-6.4,.9,-7,3,-11.8,-13,-11.1,-10.4,-9.3,-9.2,-9.8,-6.4,-9.5,-9.5,-9.4,-8,-8.1,-8.2,-9.4,-5.2,-14.2,-14.9,-14.9,-12.3,-5.7,-3.7,-6.7,-1.3,-2.4,-3,-2.4,-1,10.1,10.5,9.8,13.1,-7.2,-8,-8.4,-5,-50,-14.7,-50,-11.4,-6.3,-6.7,-5.8,-5,-50,-6.1,-13.4,-3.6,-13,-16,-13.7,-13.3],[-8.2,-10.8,-10.1,-9.8,-.4,-3.6,-1.7,-2.9,-7.9,-8.4,-9.8,-8.2,6.2,2.3,.6,2.9,-7.1,-11.6,-9.2,-11.1,-5.6,-8.3,-7.2,-8.4,-10.7,-13.6,-11.4,-12,0,-2.8,-1.8,-2.4,-6,-11.6,-7.5,-10.8,1.5,-2,0,-1.1,-4.8,-8.5,-5.5,-7.2,11.9,8.6,10,9,-50,-14.2,-50,-12.8,-4.1,-7.4,-5.7,-6.5,-50,-11,-14.3,-9.9,1.4,-7.9,-.7,-6.8],[-12.5,-8.7,-13,-9.9,-3.9,-1,-3.4,-2.9,-12.5,-6.3,-11.6,-8.1,3.3,6,-1.6,3.8,-10.5,-10.1,-11.1,-11.1,-9,-6.9,-8.2,-9.1,-14,-11.4,-12.3,-12.1,-3.1,.2,-3.2,-2.2,-10.4,-9.1,-10.4,-11.5,-2.1,1.2,-1.1,-1.4,-9.4,-5.6,-8.1,-8,8.6,12.4,8.6,9.5,-50,-10.4,-50,-11.6,-7.2,-5.7,-7.5,-7.4,-50,-8.6,-15.7,-9.7,-3,-3.7,-3.2,-5.9],[-11.1,-11.9,-10.6,-11.3,-2.6,-4.1,-1.7,-3.5,-11.4,-9.6,-9.6,-9.2,3.7,2.5,1.6,2.5,-9.6,-12.3,-9.5,-11.8,-8,-9.4,-7.2,-9.3,-13.3,-12.8,-10.9,-12.6,-1.8,-2.9,-.8,-2.9,-8.6,-13,-7.4,-12.4,-.4,-2.3,1.3,-2,-8.1,-9.3,-5.4,-8.4,10,8.6,11.4,8.9,-50,-13.7,-50,-13.2,-6.1,-8.1,-5.5,-7.5,-50,-11.3,-12.7,-10.1,-1.6,-7.8,-.3,-7.2],[-11.4,-10,-12.7,-8.2,-3.1,-3.1,-2.8,-.9,-11.7,-7.3,-12.1,-5.8,3.6,3.6,-1.1,5.8,-9.4,-11.9,-10.7,-10,-8.5,-8.8,-8.2,-6.5,-13.9,-13,-12.9,-10.9,-3.1,-2.3,-3.2,-.2,-9.5,-10.8,-10.2,-8.2,-1.1,-1.3,-.8,1.2,-8.6,-7.8,-7.8,-5,9,9.5,8.9,12,-50,-13,-50,-10.3,-6.2,-7,-7.1,-5.4,-50,-9.3,-14,-8.2,-2.4,-6.3,-2.4,-3.9],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,33.3,-50,30.6,-50,-50,-50,-50,-50,29.2,-50,-50,-50,-50,-50,-50,-50],[-14.8,-6.2,-14.9,-7.6,-14.6,-11.6,-13,-12.2,-14,-9,-14.1,-10.1,-13.6,-11.2,-12.4,-12.5,-8.1,2.2,-8.7,.4,-15.3,-11.3,-13.2,-13.3,-11.9,-7.2,-11.8,-7.9,-10.7,-7.4,-10.8,-8.9,-15.5,-10.3,-15.5,-12.5,-14.5,-12.1,-11.9,-12.8,-18.3,-12.7,-16.4,-14.7,-14.2,-10.4,-13.7,-13,-50,15.1,-50,13.3,-9.9,-5.8,-8.9,-7.6,-50,-1.5,-7.8,-3,-8.1,3.6,-9.4,2],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,30.6,-50,35.2,-50,-50,-50,-50,-50,28.5,-50,-50,-50,-50,-50,-50,-50],[-13.8,-7.5,-14.4,-5.1,-12.6,-11.6,-11.5,-10.1,-13.2,-9.7,-12.7,-7.4,-11.9,-11.9,-11.5,-10.2,-7.2,.9,-8.6,2.6,-14.1,-12.8,-13.3,-11,-9.7,-8.4,-11.2,-5.3,-9.3,-8.7,-9.9,-7.1,-13.9,-11.2,-14.2,-8.9,-12.9,-12.6,-12.6,-10.9,-15.4,-13.8,-14.8,-11.4,-12.8,-11.6,-13.2,-10.3,-50,13.3,-50,15.2,-8.6,-7,-8.4,-4.8,-50,-3,-7.1,-.1,-7.3,2.3,-8.7,3.9],[-7.3,-6.3,-8.9,-5.5,2.9,.2,1.5,1.2,-8.5,-2.3,-10,-1.7,-5.6,-10.5,-5.5,-9.6,-4.3,-7.9,-6.1,-7.2,2.3,-.6,.5,-0,-8.9,-11,-9.4,-9.3,-4.6,-9.4,-7.3,-8.1,-7.8,-9.8,-8.9,-9.2,2.8,.1,1.2,.8,-5.9,-6.8,-5.9,-6.3,-4.1,-7.2,-6.1,-6.2,-50,-9.9,-50,-8.6,12.5,9.4,11,9.8,-50,-4.8,-8.7,-3.5,-0,-8.6,-2.1,-7],[-10.1,-4.3,-10.8,-5.8,.1,2.3,.7,.6,-10.4,-.2,-10.8,-2,-8.8,-9.2,-8,-9.7,-6.8,-5.9,-7.5,-7,-1.4,2.2,-.9,-.4,-10.8,-7.7,-9.8,-8.8,-8.9,-7.3,-9.6,-9.1,-10.5,-8.3,-10.2,-10,-0,2.5,.7,.5,-7.5,-5.1,-7.1,-6.7,-7.4,-5.7,-8.1,-7,-50,-5.8,-50,-7,9.4,12.7,10.1,10,-50,-1.5,-11.3,-3.3,-5.4,-4.2,-5.6,-6.8],[-8.4,-6.2,-8.9,-5.9,1.8,.4,2.7,1.2,-9.1,-1.2,-8.8,-1.5,-7.2,-10.5,-4.9,-9.6,-5.7,-7.4,-5.5,-7.4,.3,-.3,1.8,-.4,-9,-8.7,-7.3,-8.9,-5.9,-9.4,-6.4,-8.7,-8.7,-9.1,-8.5,-9.4,1.4,.7,3.5,.7,-6.6,-5.3,-4.7,-5.8,-5.7,-7.5,-5.5,-7.1,-50,-8.9,-50,-8.4,11,10.1,13.2,10.2,-50,-4.2,-6.1,-3.6,-3.5,-8.4,-1.2,-6.8],[-9.1,-5.4,-10.4,-4.2,1,.5,.6,2.4,-9.6,-1.5,-10.5,-.5,-8.9,-10.5,-7.2,-8.3,-6.3,-6.9,-7.7,-5.1,-.5,.1,-.6,2.3,-11.1,-10.2,-10.5,-7,-8.3,-9.4,-9.4,-6.6,-9.6,-9.7,-10,-7.9,.7,.6,.8,2.3,-7.1,-6.5,-7.2,-5,-6.5,-7.4,-7.5,-5.4,-50,-7.6,-50,-4.8,9.8,10,10.2,12.1,-50,-3.1,-11.4,-.7,-4.6,-6.6,-4.9,-3.9],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,29.2,-50,28.5,-50,-50,-50,-50,-50,33.3,-50,-50,-50,-50,-50,-50,-50],[-13,-7,-13.1,-8.3,-9.2,-6.5,-8.9,-7.6,-9.8,-.7,-9.2,-2.1,-12.4,-10.3,-12.4,-11.6,-9.5,-4.6,-10.4,-5.7,-13.6,-10.1,-11.4,-10.9,-6.5,-1.5,-6.2,-3.6,-12.8,-8,-12.3,-9.7,-16.5,-12.7,-15.6,-14.3,-8.7,-6,-7.1,-7.5,-9.5,-4.1,-8.4,-6.1,-11,-8.6,-11.3,-9.3,-50,-1.5,-50,-3,-4.8,-1.5,-4.2,-3.1,-50,16.4,-5.1,14.2,-10.1,-4.3,-10,-5.4],[-13.5,-16.3,-11.8,-15.5,-13.6,-15.3,-12.1,-16.1,-7.7,-13.3,-4.2,-12.6,-14.1,-16.2,-10.3,-15.4,-9.6,-11.6,-7.7,-9.8,-14.3,-17.5,-11.1,-17.2,-5.3,-7.1,-2.2,-7.1,-9.6,-11.9,-8.7,-11.4,-17.1,-20.6,-15.3,-19.9,-14.1,-14.8,-12.4,-16.5,-11.7,-12.8,-6.4,-13.4,-14.3,-15.7,-12.7,-14,-50,-7.8,-50,-7.1,-8.7,-11.3,-6.1,-11.4,-50,-5.1,18.6,-4.8,-8.6,-8.1,-4.5,-7.3],[-12.4,-8.2,-13,-5.9,-7.7,-7.8,-7.4,-5.8,-8.8,-2,-9.3,-.4,-11.6,-11.3,-11.6,-9.4,-8.9,-5.6,-10,-3.2,-11.5,-11.1,-10.5,-8.3,-6.3,-4.9,-6.7,-1.2,-10.6,-9.7,-11.3,-8,-14.8,-13.1,-15.5,-11.4,-7.5,-7.5,-7.1,-5.9,-8.4,-5.8,-8.1,-3.6,-9.9,-9.7,-10.1,-8.2,-50,-3,-50,-.1,-3.5,-3.3,-3.6,-.7,-50,14.2,-4.8,16.4,-8.9,-5.8,-8.9,-3.4],[-10.7,-13.2,-12.4,-11.6,-4.8,-8.4,-6.1,-7.2,-10.3,-11.8,-11,-11.6,2.8,-1.7,.7,-1.1,-6.2,-9.7,-7.3,-8.4,-5.3,-8.6,-6.1,-8.3,-10.5,-11.2,-9.8,-10.2,9.5,6.5,7.6,6.8,-12.1,-16,-13,-16.2,-5.2,-8.6,-7.1,-7.8,-12.5,-14.4,-12.1,-13,1.4,-3,-1.6,-2.4,-50,-8.1,-50,-7.3,-0,-5.4,-3.5,-4.6,-50,-10.1,-8.6,-8.9,13.2,-.9,9.7,-.3],[-18.1,-12.3,-19.4,-14.2,-12.2,-9.5,-11.5,-10.8,-17.9,-11.9,-18.2,-13.9,-6.4,-3.7,-6.8,-5.4,-12.8,-5.9,-13.6,-7.4,-13.7,-9.9,-12.9,-12.7,-16.2,-11.6,-15.2,-12.7,-3.2,.5,-3.3,-1.8,-18.9,-16.6,-18.8,-19.2,-12.5,-9.4,-10.6,-11.1,-17.3,-14.1,-16.2,-16,-7.9,-3.7,-7.8,-6.3,-50,3.6,-50,2.3,-8.6,-4.2,-8.4,-6.6,-50,-4.3,-8.1,-5.8,-.9,14.2,-1.8,11.6],[-11.8,-13.1,-11.5,-12,-6.2,-8.3,-5.4,-7.4,-11.8,-12.3,-11.1,-11.4,.5,-2.5,2.4,-1.6,-6.8,-9.9,-6.4,-8.9,-6.1,-8.6,-5,-7.8,-10.4,-11.6,-8.5,-9.9,8.2,6.4,8.7,6.9,-12.4,-17,-12.6,-15.8,-6.5,-8.5,-5,-7.8,-13.2,-13.6,-10.3,-13.7,-.7,-3.2,-.3,-2.4,-50,-9.4,-50,-8.7,-2.1,-5.6,-1.2,-4.9,-50,-10,-4.5,-8.9,9.7,-1.8,11.3,-.9],[-17.2,-13.3,-17.8,-11.6,-11,-11.1,-10.4,-9,-16,-12.7,-16.1,-11.1,-5.2,-5.4,-6,-3.3,-11.8,-7.3,-13.3,-5.9,-12.7,-11.9,-11.9,-9.3,-15.2,-15,-14.9,-11,-2.8,-1.8,-2.9,.4,-17.4,-18.4,-18.3,-15.9,-10.7,-11.2,-10.6,-9,-15.4,-14.8,-15.8,-13.3,-6.8,-5.9,-7.2,-3.9,-50,2,-50,3.9,-7,-6.8,-6.8,-3.9,-50,-5.4,-7.3,-3.4,-.3,11.6,-.9,14.1]],this.TRANS=[[5,0,0,4],[0,5,4,0],[0,4,5,0],[4,0,0,5]],this.CONBLO={A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23},this.CONNUCL={A:0,T:1,C:2,G:3},this.CONSCHN={AAA:0,AAC:1,AAG:2,AAT:3,ACA:4,ACC:5,ACG:6,ACT:7,AGA:8,AGC:9,AGG:10,AGT:11,ATA:12,ATC:13,ATG:14,ATT:15,CAA:16,CAC:17,CAG:18,CAT:19,CCA:20,CCC:21,CCG:22,CCT:23,CGA:24,CGC:25,CGG:26,CGT:27,CTA:28,CTC:29,CTG:30,CTT:31,GAA:32,GAC:33,GAG:34,GAT:35,GCA:36,GCC:37,GCG:38,GCT:39,GGA:40,GGC:41,GGG:42,GGT:43,GTA:44,GTC:45,GTG:46,GTT:47,TAA:48,TAC:49,TAG:50,TAT:51,TCA:52,TCC:53,TCG:54,TCT:55,TGA:56,TGC:57,TGG:58,TGT:59,TTA:60,TTC:61,TTG:62,TTT:63},this.setMethod(i),this.setSequences(t,e),this.setGap(n)}}},7983:(t,e,n)=>{"use strict";n.d(e,{HV:()=>m,QF:()=>f,gQ:()=>u,pf:()=>d});var i=n(4469),s=n(3870),o=n(976),r=n(7241),a=n(4293),l=n(1061),h=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const c="substr_helm";function u(t){const e=t.getTag(o.TAGS.UNITS),n=t.getTag("separator"),r=s.textInput("Substructure",""),l=s.link("Edit helm",(()=>h(this,void 0,void 0,(function*(){(0,a.Y)(g,m.root),yield s.tools.waitForElementInDom(m.root),setTimeout((()=>{m.cell(c,0).element.children[0].dispatchEvent(new KeyboardEvent("keydown",{key:"Enter"}))}),100)})))),u=o.DataFrame.create(1);u.columns.addNewString(c).init((t=>"")),u.col(c).semType=t.semType,u.col(c).setTag(o.TAGS.UNITS,"helm");const m=u.plot.grid(),p=s.textInput("Separator",n),g=s.div(),y="helm"===e?s.divV([l]):"separator"===e?s.inputs([r,p]):s.inputs([r]);(0,a.Y)(g,y),s.dialog("Substructure Search").add(s.divV([s.divText(`Notation: ${e}`),g])).onOK((()=>h(this,void 0,void 0,(function*(){let s="helm"===e?u.get(c,0):r.value;"separator"===e&&p.value!==n&&""!==p.value&&(s=s.replaceAll(p.value,n));const a=`Matches: ${s}`;if(t.dataFrame.columns.names().filter((t=>t.toLocaleLowerCase()===a.toLocaleLowerCase())).length>0)i.shell.warning(`Search ${s} is already performed`);else{let n;n="helm"===e?yield f(s,t):d(s,t),t.dataFrame.columns.add(o.Column.fromBitSet(a,n))}})))).show()}function d(t,e,n){const i=n?function(t,e){const n=`${e}`.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),i=t.charAt(0)===e,s=t.charAt(t.length-1)===e,o=t.replace(new RegExp(`^${n}|${n}$`,"g"),"");return i?s?`${n}${o}${n}`:`${n}${o}${n}|${n}${o}$`:s?`^${o}${n}|${n}${o}${n}`:`^${o}${n}|${n}${o}${n}|${n}${o}$`}(t,n):t,s=o.BitSet.create(e.length);for(let n=0;n<e.length;n++){const o=e.get(n);(o.match(i)||o===t)&&s.set(n,!0,!1)}return s}function f(t,e){return h(this,void 0,void 0,(function*(){e.version!==e.temp["last-invalidated-version"]&&(yield m(e,!0));const n=o.Column.string("helm",1).init((e=>t));n.setTag(o.TAGS.UNITS,"helm");const s=yield(0,r.D)(n,!0,e.temp["monomers-dict"]);return(yield i.functions.call("Chem:searchSubstructure",{molStringsColumn:e.temp["monomeric-mols"],molString:s.get(0),molBlockFailover:""})).get(0)}))}function m(t,e){return h(this,void 0,void 0,(function*(){const n=o.TaskBarProgressIndicator.create(`Invalidating molfiles for ${t.name}`);yield(0,l.gw)(10);const i=new Map,s=yield(0,r.D)(t,e,i);t.temp["monomeric-mols"]=s,t.temp["monomers-dict"]=i,t.temp["last-invalidated-version"]=t.version,n.close()}))}},2568:(t,e,n)=>{"use strict";n.d(e,{n:()=>r});var i=n(4469),s=n(976),o=n(499);function r(t,e,n=[],r=[],a=!0){const[l,h]=function(t,e,n=[],r=[]){let a=!0,l="";const h=new o.C(t);if(t.semType!==s.SEMTYPE.MACROMOLECULE)i.shell.warning(e+" analysis is allowed for Macromolecules semantic type"),a=!1;else{const t=h.notation;if(n.length>0&&!n.some((e=>t.toUpperCase()==e.toUpperCase())))l=`${e} + ' analysis is allowed for Macromolecules with notation ${0==n.length?"any notation":`notation${n.length>1?"s":""} ${n.map((t=>`"${t}"`)).join(", ")} `}.`,a=!1;else if(!h.isHelm()){const t=h.alphabet;r.length>0&&!r.some((e=>t.toUpperCase()==e.toUpperCase()))&&(l=`${e} + ' analysis is allowed for Macromolecules with alphabet ${0==r.length?"any alphabet":`alphabet${r.length>1?"s":""} ${r.map((t=>`"${t}"`)).join(", ")}.`}.`,a=!1)}}return[a,l]}(t,e,n,r);return a&&!l&&i.shell.warning(h),l}},3553:(t,e,n)=>{"use strict";var i,s,o,r,a;n.d(e,{Of:()=>o,rs:()=>a}),function(t){t.SPLIT_COL="~split",t.ACTIVITY="~activity",t.ACTIVITY_SCALED="activity_scaled",t.ALIGNED_SEQUENCE="~aligned_sequence",t.AMINO_ACID_RESIDUE="AAR",t.POSITION="Pos",t.P_VALUE="pValue",t.MEAN_DIFFERENCE="Mean difference"}(i||(i={})),function(t){t.AAR="AAR",t.POSITION="Pos",t.SELECTION="selection"}(s||(s={})),function(t){t.MONOMER="Monomer",t.MACROMOLECULE_DIFFERENCE="MacromoleculeDifference",t.ACTIVITY="activity",t.ACTIVITY_SCALED="activityScaled"}(o||(o={})),function(t){t.CELL_CHANGING="isCellChanging"}(r||(r={})),function(t){t.SEPARATOR="."}(a||(a={}))},4004:(t,e,n)=>{"use strict";n.d(e,{O:()=>u});var i=n(3870),s=n(4469),o=n(3336),r=n.n(o),a=n(7767),l=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};let h=null,c=[];function u(t){const e=new a.L(t).notation,n=["-",".","/"],o=["fasta","separator","helm"].filter((t=>t!==e)),u=i.choiceInput("Convert to",o[0],o),d=i.choiceInput("Separator",n[0],n),f=()=>{"separator"!==u.value?r()(d.root).hide():r()(d.root).show()};f(),u.onChanged((()=>{f()})),null==h&&(h=i.dialog("Convert Sequence Notation").add(i.div([i.divText("Current notation: "+e,{style:{"text-align":"center","font-weight":"bold","font-size":"14px",padding:"5px"}}),u.root,d.root])).onOK((()=>l(this,void 0,void 0,(function*(){const e=u.value,n=d.value;yield function(t,e,n){return l(this,void 0,void 0,(function*(){const i=new a.L(t).convert(e,n);t.dataFrame.columns.add(i);const o=yield s.functions.call("Bio:detectMacromolecule",{col:i});return o&&(i.semType=o),yield s.data.detectSemanticTypes(t.dataFrame),i}))}(t,e,n)})))).show({x:350,y:100}),c.push(h.onClose.subscribe((t=>{c.forEach((t=>{t.unsubscribe()})),c=[],h=null}))))}},1345:(t,e,n)=>{"use strict";n.d(e,{NT:()=>m,P4:()=>c,QD:()=>d,RV:()=>l,nW:()=>u});var i=n(976),s=n(4469),o=n(701),r=n(7228),a=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const l="Libraries",h="System:AppData/Bio/libraries/";function c(){return a(this,void 0,void 0,(function*(){return(yield s.dapi.files.list(`${h}`,!1,"")).map((t=>t.fileName))}))}function u(){return a(this,void 0,void 0,(function*(){const t=yield s.dapi.userDataStorage.getValue(l,"Settings",!0),e=t?JSON.parse(t):{exclude:[]};return e.exclude=e.exclude instanceof Array?e.exclude:[],e}))}function d(t){return a(this,void 0,void 0,(function*(){yield s.dapi.userDataStorage.postValue(l,"Settings",JSON.stringify(t),!0)}))}class f{constructor(t){this._monomers={},this._onChanged=new o.Subject,this._monomers=t}getMonomer(t,e){return t in this._monomers&&e in this._monomers[t]?this._monomers[t][e]:null}getTypes(){return Object.keys(this._monomers)}getMonomerMolsByType(t){const e={};return Object.keys(this._monomers[t]).forEach((n=>{e[n]=this._monomers[t][n].molfile})),e}getMonomerNamesByType(t){return Object.keys(this._monomers[t])}get onChanged(){return this._onChanged}_updateInt(t){const e=t.getTypes(),n=this.getTypes();e.forEach((e=>{n.includes(e)||(this._monomers[e]={}),t.getMonomerNamesByType(e).forEach((n=>{this._monomers[e][n]=t.getMonomer(e,n)}))}))}update(t){this._updateInt(t),this._onChanged.next()}updateLibs(t,e=!1){e&&(this._monomers={});for(const e of t)this._updateInt(e);this._onChanged.next()}clear(){this._monomers={},this._onChanged.next()}}class m{constructor(){this._monomerLib=new f({}),this.loadLibrariesPromise=Promise.resolve()}getBioLib(){return this._monomerLib}loadLibraries(t=!1){return a(this,void 0,void 0,(function*(){return this.loadLibrariesPromise=this.loadLibrariesPromise.then((()=>a(this,void 0,void 0,(function*(){const[e,n]=yield Promise.all([c(),u()]),i=yield Promise.all(e.filter((t=>!n.exclude.includes(t))).map((t=>this.readLibrary(h,t))));this._monomerLib.updateLibs(i,t)}))))}))}readLibrary(t,e){return a(this,void 0,void 0,(function*(){let n,o,a=[];const l=new i.FileSource(t);if(e.endsWith(".sdf"))1===i.Func.find({package:"Chem",name:"importSdf"}).length?(n=yield l.readAsBytes(e),o=yield s.functions.call("Chem:importSdf",{bytes:n}),a=(0,r.Xk)(o[0])):s.shell.warning("Chem package is not installed");else{const t=yield l.readAsText(e);a=JSON.parse(t)}const h={},c=[];return a.forEach((t=>{const e={symbol:t.symbol,name:t.name,naturalAnalog:t.naturalAnalog,molfile:t.molfile,rgroups:t.rgroups,polymerType:t.polymerType,monomerType:t.monomerType,data:{}};Object.keys(t).forEach((n=>{r.DC.includes(n)||(e.data[n]=t[n])})),c.includes(t.polymerType)||(h[t.polymerType]={},c.push(t.polymerType)),h[t.polymerType][t.symbol]=e})),new f(h)}))}static get instance(){return m._instance||(m._instance=new m),m._instance}}m._instance=null},600:(t,e,n)=>{"use strict";n.d(e,{K:()=>f});var i=n(4469),s=n(976),o=n(3870),r=n(6098),a=n(8341),l=n(2568),h=n(7767),c=n(473),u=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};class d extends Error{constructor(t,e){super(t,e)}}function f(t={}){return u(this,void 0,void 0,(function*(){return new Promise(((e,n)=>u(this,void 0,void 0,(function*(){var r,l,h,c,f,g,y,v,b,w,C;null!==(r=t.clustersCol)&&void 0!==r||(t.clustersCol=null),null!==(l=t.pepsea)&&void 0!==l||(t.pepsea={}),null!==(h=(b=t.pepsea).method)&&void 0!==h||(b.method=a.J[0]),null!==(c=(w=t.pepsea).gapOpen)&&void 0!==c||(w.gapOpen=1.53),null!==(f=(C=t.pepsea).gapExtend)&&void 0!==f||(C.gapExtend=0);const S=null!==(y=null===(g=t.col)||void 0===g?void 0:g.dataFrame)&&void 0!==y?y:i.shell.t,M=null!==(v=t.col)&&void 0!==v?v:S.columns.bySemType(s.SEMTYPE.MACROMOLECULE);if(null==M){const t="MSAError: dataset doesn't conain any Macromolecule column";i.shell.warning(t),n(new d(t))}const T=o.choiceInput("Method",t.pepsea.method,a.J);T.setTooltip("Alignment method");const x=o.floatInput("Gap open",t.pepsea.gapOpen);x.setTooltip("Gap opening penalty at group-to-group alignment");const N=o.floatInput("Gap extend",t.pepsea.gapExtend);N.setTooltip("Gap extension penalty to skip the alignment");const E=[T.root.style,x.root.style,N.root.style];let A;const I=o.columnInput("Sequence",S,M,(()=>u(this,void 0,void 0,(function*(){A=yield p(I.value,S,E,T,L,x,N)}))));I.setTooltip("Sequences column to use for alignment");const L=o.columnInput("Clusters",S,t.clustersCol);if(L.nullable=!0,I.fireChanged(),t.col)return A=yield p(t.col,S,E,T,L,x,N),void(yield m(I,S,A,e,n));o.dialog("MSA").add(I).add(L).add(T).add(x).add(N).onOK((()=>u(this,void 0,void 0,(function*(){yield m(I,S,A,e,n)})))).show()}))))}))}function m(t,e,n,o,r){return u(this,void 0,void 0,(function*(){let a=null;const l=s.TaskBarProgressIndicator.create("Analyze for MSA ...");try{if(t.fireChanged(),t.value.semType!==s.SEMTYPE.MACROMOLECULE)throw new Error("Chosen column has to be of Macromolecule semantic type");if(void 0===n)throw new Error("Invalid column format");if(a=yield n(),null==a)return i.shell.warning("Wrong column format");e.columns.add(a),yield i.data.detectSemanticTypes(e),o(a)}catch(t){const e=t instanceof Error?t.message:t.toString();i.shell.error(e),r(t)}finally{l.close()}}))}function p(t,e,n,o,d,f,m){return u(this,void 0,void 0,(function*(){try{if(t.semType!==s.SEMTYPE.MACROMOLECULE)return;const i=e.columns.getUnusedName(`msa(${t.name})`);if((0,l.n)(t,t.name,["fasta","separator"],["DNA","RNA","PT"],!1)){for(const t of n)t.display="none";const e=new h.L(t),s=e.isFasta()?t:e.convert("fasta");return()=>u(this,void 0,void 0,(function*(){return yield(0,r.U)(s,!1,i,d.value)}))}if((0,l.n)(t,t.name,["helm"],[],!1)){for(const t of n)t.removeProperty("display");return()=>u(this,void 0,void 0,(function*(){return yield(0,a.f)(t,i,o.value,f.value,m.value,d.value)}))}if((0,l.n)(t,t.name,["separator"],["UN"],!1)){const e=new h.L(t);if(!(yield e.checkHelmCompatibility()))return;const s=e.convert("helm");for(const t of n)t.removeProperty("display");return console.log(s.toList()),()=>u(this,void 0,void 0,(function*(){return yield(0,a.f)(s,i,o.value,f.value,m.value,d.value)}))}for(const t of n)t.display="none";return}catch(t){const e=t instanceof Error?t.message:t.toString();i.shell.error(e),c._package.logger.error(e)}}))}},6098:(t,e,n)=>{"use strict";n.d(e,{U:()=>G});var i=n(976),s=n(5226);const o=Symbol("Comlink.proxy"),r=Symbol("Comlink.endpoint"),a=Symbol("Comlink.releaseProxy"),l=Symbol("Comlink.thrown"),h=t=>"object"==typeof t&&null!==t||"function"==typeof t,c=new Map([["proxy",{canHandle:t=>h(t)&&t[o],serialize(t){const{port1:e,port2:n}=new MessageChannel;return u(t,e),[n,[n]]},deserialize:t=>(t.start(),f(t))}],["throw",{canHandle:t=>h(t)&&l in t,serialize({value:t}){let e;return e=t instanceof Error?{isError:!0,value:{message:t.message,name:t.name,stack:t.stack}}:{isError:!1,value:t},[e,[]]},deserialize(t){throw t.isError?Object.assign(new Error(t.value.message),t.value):t.value}}]]);function u(t,e=self){e.addEventListener("message",(function n(i){if(!i||!i.data)return;const{id:s,type:r,path:a}=Object.assign({path:[]},i.data),h=(i.data.argumentList||[]).map(w);let c;try{const e=a.slice(0,-1).reduce(((t,e)=>t[e]),t),n=a.reduce(((t,e)=>t[e]),t);switch(r){case"GET":c=n;break;case"SET":e[a.slice(-1)[0]]=w(i.data.value),c=!0;break;case"APPLY":c=n.apply(e,h);break;case"CONSTRUCT":c=function(t){return Object.assign(t,{[o]:!0})}(new n(...h));break;case"ENDPOINT":{const{port1:e,port2:n}=new MessageChannel;u(t,n),c=function(t,e){return v.set(t,e),t}(e,[e])}break;case"RELEASE":c=void 0;break;default:return}}catch(t){c={value:t,[l]:0}}Promise.resolve(c).catch((t=>({value:t,[l]:0}))).then((t=>{const[i,o]=b(t);e.postMessage(Object.assign(Object.assign({},i),{id:s}),o),"RELEASE"===r&&(e.removeEventListener("message",n),d(e))}))})),e.start&&e.start()}function d(t){(function(t){return"MessagePort"===t.constructor.name})(t)&&t.close()}function f(t,e){return p(t,[],e)}function m(t){if(t)throw new Error("Proxy has been released and is not useable")}function p(t,e=[],n=function(){}){let i=!1;const s=new Proxy(n,{get(n,o){if(m(i),o===a)return()=>C(t,{type:"RELEASE",path:e.map((t=>t.toString()))}).then((()=>{d(t),i=!0}));if("then"===o){if(0===e.length)return{then:()=>s};const n=C(t,{type:"GET",path:e.map((t=>t.toString()))}).then(w);return n.then.bind(n)}return p(t,[...e,o])},set(n,s,o){m(i);const[r,a]=b(o);return C(t,{type:"SET",path:[...e,s].map((t=>t.toString())),value:r},a).then(w)},apply(n,s,o){m(i);const a=e[e.length-1];if(a===r)return C(t,{type:"ENDPOINT"}).then(w);if("bind"===a)return p(t,e.slice(0,-1));const[l,h]=y(o);return C(t,{type:"APPLY",path:e.map((t=>t.toString())),argumentList:l},h).then(w)},construct(n,s){m(i);const[o,r]=y(s);return C(t,{type:"CONSTRUCT",path:e.map((t=>t.toString())),argumentList:o},r).then(w)}});return s}function g(t){return Array.prototype.concat.apply([],t)}function y(t){const e=t.map(b);return[e.map((t=>t[0])),g(e.map((t=>t[1])))]}const v=new WeakMap;function b(t){for(const[e,n]of c)if(n.canHandle(t)){const[i,s]=n.serialize(t);return[{type:"HANDLER",name:e,value:i},s]}return[{type:"RAW",value:t},v.get(t)||[]]}function w(t){switch(t.type){case"HANDLER":return c.get(t.name).deserialize(t.value);case"RAW":return t.value}}function C(t,e,n){return new Promise((i=>{const s=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");t.addEventListener("message",(function e(n){!n.data||!n.data.id||n.data.id!==s||(t.removeEventListener("message",e),i(n.data))})),t.start&&t.start(),t.postMessage(Object.assign({id:s},e),n)}))}const S="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0ICQ9U3ltYm9sKCJDb21saW5rLnByb3h5IiksQT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxSPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx5PVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxfPWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLEw9e2NhbkhhbmRsZTplPT5fKGUpJiZlWyRdLHNlcmlhbGl6ZShlKXtjb25zdHtwb3J0MTpyLHBvcnQyOml9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gdyhlLHIpLFtpLFtpXV19LGRlc2VyaWFsaXplKGUpe3JldHVybiBlLnN0YXJ0KCksQyhlKX19LE89e2NhbkhhbmRsZTplPT5fKGUpJiZ5IGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9yPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06cj17aXNFcnJvcjohMSx2YWx1ZTplfSxbcixbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSxFPW5ldyBNYXAoW1sicHJveHkiLExdLFsidGhyb3ciLE9dXSk7ZnVuY3Rpb24gdyhlLHI9c2VsZil7ci5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKHMpe2lmKCFzfHwhcy5kYXRhKXJldHVybjtjb25zdHtpZDpvLHR5cGU6YSxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LHMuZGF0YSksdT0ocy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChtKTtsZXQgbDt0cnl7Y29uc3QgYz1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZCxoKT0+ZFtoXSxlKSxmPW4ucmVkdWNlKChkLGgpPT5kW2hdLGUpO3N3aXRjaChhKXtjYXNlIkdFVCI6bD1mO2JyZWFrO2Nhc2UiU0VUIjpjW24uc2xpY2UoLTEpWzBdXT1tKHMuZGF0YS52YWx1ZSksbD0hMDticmVhaztjYXNlIkFQUExZIjpsPWYuYXBwbHkoYyx1KTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2NvbnN0IGQ9bmV3IGYoLi4udSk7bD16KGQpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntjb25zdHtwb3J0MTpkLHBvcnQyOmh9PW5ldyBNZXNzYWdlQ2hhbm5lbDt3KGUsaCksbD1OKGQsW2RdKX1icmVhaztjYXNlIlJFTEVBU0UiOmw9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChjKXtsPXt2YWx1ZTpjLFt5XTowfX1Qcm9taXNlLnJlc29sdmUobCkuY2F0Y2goYz0+KHt2YWx1ZTpjLFt5XTowfSkpLnRoZW4oYz0+e2NvbnN0W2YsZF09UyhjKTtyLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxmKSx7aWQ6b30pLGQpLGE9PT0iUkVMRUFTRSImJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLEYocikpfSl9KSxyLnN0YXJ0JiZyLnN0YXJ0KCl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBGKGUpe1QoZSkmJmUuY2xvc2UoKX1mdW5jdGlvbiBDKGUscil7cmV0dXJuIGIoZSxbXSxyKX1mdW5jdGlvbiBwKGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBiKGUscj1bXSxpPWZ1bmN0aW9uKCl7fSl7bGV0IHM9ITE7Y29uc3Qgbz1uZXcgUHJveHkoaSx7Z2V0KGEsbil7aWYocChzKSxuPT09UilyZXR1cm4oKT0+ZyhlLHt0eXBlOiJSRUxFQVNFIixwYXRoOnIubWFwKHU9PnUudG9TdHJpbmcoKSl9KS50aGVuKCgpPT57RihlKSxzPSEwfSk7aWYobj09PSJ0aGVuIil7aWYoci5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtjb25zdCB1PWcoZSx7dHlwZToiR0VUIixwYXRoOnIubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKG0pO3JldHVybiB1LnRoZW4uYmluZCh1KX1yZXR1cm4gYihlLFsuLi5yLG5dKX0sc2V0KGEsbix1KXtwKHMpO2NvbnN0W2wsY109Uyh1KTtyZXR1cm4gZyhlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnIsbl0ubWFwKGY9PmYudG9TdHJpbmcoKSksdmFsdWU6bH0sYykudGhlbihtKX0sYXBwbHkoYSxuLHUpe3Aocyk7Y29uc3QgbD1yW3IubGVuZ3RoLTFdO2lmKGw9PT1BKXJldHVybiBnKGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4obSk7aWYobD09PSJiaW5kIilyZXR1cm4gYihlLHIuc2xpY2UoMCwtMSkpO2NvbnN0W2MsZl09TSh1KTtyZXR1cm4gZyhlLHt0eXBlOiJBUFBMWSIscGF0aDpyLm1hcChkPT5kLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpjfSxmKS50aGVuKG0pfSxjb25zdHJ1Y3QoYSxuKXtwKHMpO2NvbnN0W3UsbF09TShuKTtyZXR1cm4gZyhlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ci5tYXAoYz0+Yy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6dX0sbCkudGhlbihtKX19KTtyZXR1cm4gb31mdW5jdGlvbiBEKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIE0oZSl7Y29uc3Qgcj1lLm1hcChTKTtyZXR1cm5bci5tYXAoaT0+aVswXSksRChyLm1hcChpPT5pWzFdKSldfWNvbnN0IFA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTihlLHIpe3JldHVybiBQLnNldChlLHIpLGV9ZnVuY3Rpb24geihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbJF06ITB9KX1mdW5jdGlvbiBTKGUpe2Zvcihjb25zdFtyLGldb2YgRSlpZihpLmNhbkhhbmRsZShlKSl7Y29uc3RbcyxvXT1pLnNlcmlhbGl6ZShlKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6cix2YWx1ZTpzfSxvXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6ZX0sUC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBtKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEUuZ2V0KGUubmFtZSkuZGVzZXJpYWxpemUoZS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBlLnZhbHVlfX1mdW5jdGlvbiBnKGUscixpKXtyZXR1cm4gbmV3IFByb21pc2Uocz0+e2NvbnN0IG89VSgpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gYShuKXshbi5kYXRhfHwhbi5kYXRhLmlkfHxuLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhKSxzKG4uZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sciksaSl9KX1mdW5jdGlvbiBVKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1jb25zdCBXPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpLHg9ImVhZ2VyIixrPSJsYXp5IixqPXtzc3c6WyJzaW1kIl0sbWluaW1hcDI6WyJzaW1kIl19LHQ9e3Rvb2xzOltdLGNvbmZpZzp7fSxmaWxlczpbXSxiYXNlOnt9LGZzOnt9LGFzeW5jIGluaXQoKXtpZih0LnRvb2xzLmxlbmd0aD09PTApdGhyb3ciRXhwZWN0aW5nIGF0IGxlYXN0IDEgdG9vbC4iO2lmKG5ldyBTZXQodC50b29scy5tYXAocj0+YCR7ci50b29sfS8ke3IucHJvZ3JhbXx8ci50b29sfWApKS5zaXplIT09dC50b29scy5sZW5ndGgpdGhyb3ciRm91bmQgZHVwbGljYXRlIHRvb2xzOyBjYW4gb25seSBoYXZlIGVhY2ggdG9vbC9wcm9ncmFtIGNvbWJpbmF0aW9uIGF0IG1vc3Qgb25jZS4iO2lmKHQuYmFzZT10LnRvb2xzLmZpbmQocj0+ci5yZWluaXQhPT0hMCksIXQuYmFzZSl0aHJvdyJDb3VsZCBub3QgZmluZCBhIHRvb2wgd2l0aCBgcmVpbml0OiBmYWxzZWAgdG8gdXNlIGFzIHRoZSBiYXNlIG1vZHVsZS4gVG8gZml4IHRoaXMgaXNzdWUsIGluY2x1ZGUgdGhlIHRvb2wgYGJhc2UvMS4wLjBgIHdoZW4gaW5pdGlhbGl6aW5nIEFpb2xpLiI7cmV0dXJuIHQuYmFzZS5pc0Jhc2VNb2R1bGU9ITAsYXdhaXQgdGhpcy5fc2V0dXAodC5iYXNlKSxhd2FpdCB0aGlzLl9pbml0TW9kdWxlcygpLHQuX2xvZygiUmVhZHkiKSwhMH0sYXN5bmMgX2luaXRNb2R1bGVzKCl7YXdhaXQgUHJvbWlzZS5hbGwodC50b29scy5tYXAodGhpcy5fc2V0dXApKSxhd2FpdCB0aGlzLl9zZXR1cEZTKCl9LG1vdW50KGU9W10pe2NvbnN0IHI9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyRGF0YX1gLGk9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyTW91bnRlZH1gO2xldCBzPVtdLG89W10sYT1bXTshQXJyYXkuaXNBcnJheShlKSYmIShlIGluc3RhbmNlb2YgRmlsZUxpc3QpJiYoZT1bZV0pLHQuX2xvZyhgTW91bnRpbmcgJHtlLmxlbmd0aH0gZmlsZXNgKTtmb3IobGV0IG4gb2YgZSl7aWYobiBpbnN0YW5jZW9mIEZpbGV8fChuPT1udWxsP3ZvaWQgMDpuLmRhdGEpaW5zdGFuY2VvZiBCbG9iJiZuLm5hbWV8fHR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmbi5uYW1lKXR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmKG4uZGF0YT1uZXcgQmxvYihbbi5kYXRhXSx7dHlwZToidGV4dC9wbGFpbiJ9KSkscy5wdXNoKG4pO2Vsc2UgaWYobi5uYW1lJiZuLnVybClvLnB1c2gobik7ZWxzZSBpZih0eXBlb2Ygbj09InN0cmluZyImJm4uc3RhcnRzV2l0aCgiaHR0cCIpKW49e3VybDpuLG5hbWU6bi5zcGxpdCgiLy8iKS5wb3AoKS5yZXBsYWNlKC9cLy9nLCItIil9LG8ucHVzaChuKTtlbHNlIHRocm93J0Nhbm5vdCBtb3VudCBmaWxlKHMpIHNwZWNpZmllZC4gTXVzdCBiZSBhIEZpbGUsIEJsb2IsIGEgVVJMIHN0cmluZywgb3IgeyBuYW1lOiAiZmlsZS50eHQiLCBkYXRhOiAic3RyaW5nIiB9Lic7YS5wdXNoKG4ubmFtZSl9dHJ5e3QuZnMudW5tb3VudChpKX1jYXRjaHt9Zm9yKGxldCBuIG9mIG8pdC5mcy5jcmVhdGVMYXp5RmlsZShyLG4ubmFtZSxuLnVybCwhMCwhMCk7cmV0dXJuIHQuZmlsZXM9dC5maWxlcy5jb25jYXQocyksdC5iYXNlLm1vZHVsZS5GUy5tb3VudCh0LmJhc2UubW9kdWxlLldPUktFUkZTLHtmaWxlczp0LmZpbGVzLmZpbHRlcihuPT5uIGluc3RhbmNlb2YgRmlsZSksYmxvYnM6dC5maWxlcy5maWx0ZXIobj0+KG49PW51bGw/dm9pZCAwOm4uZGF0YSlpbnN0YW5jZW9mIEJsb2IpfSxpKSxzLm1hcChuPT57Y29uc3QgdT1gJHtpfS8ke24ubmFtZX1gLGw9YCR7cn0vJHtuLm5hbWV9YDt0cnl7dC5mcy51bmxpbmsobCl9Y2F0Y2h7fXQuX2xvZyhgQ3JlYXRpbmcgc3ltbGluazogJHtsfSAtLT4gJHt1fWApLHQuZnMuc3ltbGluayh1LGwpfSksYS5tYXAobj0+YCR7cn0vJHtufWApfSxhc3luYyBleGVjKGUscj1udWxsKXtpZih0Ll9sb2coYEV4ZWN1dGluZyAlYyR7ZX0lYyBhcmdzPSR7cn1gLCJjb2xvcjpkYXJrYmx1ZTsgZm9udC13ZWlnaHQ6Ym9sZCIsIiIpLCFlKXRocm93IkV4cGVjdGluZyBhIGNvbW1hbmQiO2xldCBpPWU7cj09bnVsbCYmKHI9ZS5zcGxpdCgiICIpLGk9ci5zaGlmdCgpKTtjb25zdCBzPXQudG9vbHMuZmluZChhPT57dmFyIHU7bGV0IG49aTtyZXR1cm4oKHU9YT09bnVsbD92b2lkIDA6YS5mZWF0dXJlcyk9PW51bGw/dm9pZCAwOnUuc2ltZCk9PT0hMCYmKG49YCR7bn0tc2ltZGApLGEucHJvZ3JhbT09bn0pO2lmKHM9PW51bGwpdGhyb3dgUHJvZ3JhbSAke2l9IG5vdCBmb3VuZC5gO3Muc3Rkb3V0PSIiLHMuc3RkZXJyPSIiLHMubG9hZGluZz09ayYmKHMubG9hZGluZz14LGF3YWl0IHRoaXMuX2luaXRNb2R1bGVzKCkpO3RyeXtzLm1vZHVsZS5jYWxsTWFpbihyKX1jYXRjaChhKXtjb25zb2xlLmVycm9yKGEpfXRyeXtzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzFdKSxzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzJdKX1jYXRjaHt9cy5tb2R1bGUuRlMuc3RyZWFtc1sxXT1zLm1vZHVsZS5GUy5vcGVuKCIvZGV2L3N0ZG91dCIsInciKSxzLm1vZHVsZS5GUy5zdHJlYW1zWzJdPXMubW9kdWxlLkZTLm9wZW4oIi9kZXYvc3RkZXJyIiwidyIpO2xldCBvPXtzdGRvdXQ6cy5zdGRvdXQsc3RkZXJyOnMuc3RkZXJyfTtpZih0LmNvbmZpZy5wcmludEludGVybGVhdmVkJiYobz1zLnN0ZG91dCkscy5yZWluaXQ9PT0hMCl7Y29uc3QgYT10LmJhc2UubW9kdWxlLkZTLmN3ZCgpO09iamVjdC5hc3NpZ24ocyxzLmNvbmZpZykscy5yZWFkeT0hMSxhd2FpdCB0aGlzLmluaXQoKSxzLmlzQmFzZU1vZHVsZSYmdGhpcy5tb3VudCgpLHRoaXMuY2QoYSl9cmV0dXJuIG99LGNhdChlKXtyZXR1cm4gdC5fZmlsZW9wKCJjYXQiLGUpfSxscyhlKXtyZXR1cm4gdC5fZmlsZW9wKCJscyIsZSl9LGRvd25sb2FkKGUpe3JldHVybiB0Ll9maWxlb3AoImRvd25sb2FkIixlKX0scHdkKCl7cmV0dXJuIHQuZnMuY3dkKCl9LGNkKGUpe2ZvcihsZXQgciBvZiB0LnRvb2xzKSFyLm1vZHVsZXx8ci5tb2R1bGUuRlMuY2hkaXIoZSl9LG1rZGlyKGUpe3JldHVybiB0LmZzLm1rZGlyKGUpLCEwfSxyZWFkKHtwYXRoOmUsbGVuZ3RoOnIsZmxhZzppPSJyIixvZmZzZXQ6cz0wLHBvc2l0aW9uOm89MH0pe2NvbnN0IGE9dC5mcy5vcGVuKGUsaSksbj1uZXcgVWludDhBcnJheShyKTtyZXR1cm4gdC5mcy5yZWFkKGEsbixzLHIsbyksdC5mcy5jbG9zZShhKSxufSx3cml0ZSh7cGF0aDplLGJ1ZmZlcjpyLGZsYWc6aT0idysiLG9mZnNldDpzPTAscG9zaXRpb246bz0wfSl7Y29uc3QgYT10LmZzLm9wZW4oZSxpKTt0LmZzLndyaXRlKGEscixzLHIubGVuZ3RoLG8pLHQuZnMuY2xvc2UoYSl9LF9zdGRpblR4dDoiIixfc3RkaW5QdHI6MCxnZXQgc3RkaW4oKXtyZXR1cm4gdC5fc3RkaW5UeHR9LHNldCBzdGRpbihlPSIiKXt0Ll9sb2coYFNldHRpbmcgc3RkaW4gdG8gJWMke2V9JWNgLCJjb2xvcjpkYXJrYmx1ZSIsIiIpLHQuX3N0ZGluVHh0PWUsdC5fc3RkaW5QdHI9MH0sYXN5bmMgX3NldHVwKGUpe2lmKGUucmVhZHkpcmV0dXJuO2lmKHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gKGJhc2UgPSAke2UuaXNCYXNlTW9kdWxlPT09ITB9KS4uLmApLGUuY29uZmlnPU9iamVjdC5hc3NpZ24oe30sZSksZS51cmxQcmVmaXh8fChlLnVybFByZWZpeD1gJHt0LmNvbmZpZy51cmxDRE59LyR7ZS50b29sfS8ke2UudmVyc2lvbn1gKSxlLnByb2dyYW18fChlLnByb2dyYW09ZS50b29sKSxlLmZlYXR1cmVzfHwoZS5mZWF0dXJlcz17fSwoaltlLnByb2dyYW1dfHxbXSkuaW5jbHVkZXMoInNpbWQiKSYmKGF3YWl0IFcoKT8oZS5wcm9ncmFtKz0iLXNpbWQiLGUuZmVhdHVyZXMuc2ltZD0hMCk6dC5fbG9nKGBXZWJBc3NlbWJseSBTSU1EIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyOyB3aWxsIGxvYWQgbm9uLVNJTUQgdmVyc2lvbiBvZiAke2UucHJvZ3JhbX0uYCkpKSxlLmlzQmFzZU1vZHVsZSYmKGUubG9hZGluZz14KSxlLmxvYWRpbmc9PT1rKXt0Ll9sb2coYFdpbGwgbGF6eS1sb2FkICR7ZS50b29sfTsgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24uYCk7cmV0dXJufXNlbGYuaW1wb3J0U2NyaXB0cyhgJHtlLnVybFByZWZpeH0vJHtlLnByb2dyYW19LmpzYCksZS5tb2R1bGU9YXdhaXQgTW9kdWxlKHt0aGlzUHJvZ3JhbTplLnByb2dyYW0sbG9jYXRlRmlsZTooaSxzKT0+YCR7ZS51cmxQcmVmaXh9LyR7aX1gLHN0ZGluOigpPT50Ll9zdGRpblB0cjx0LnN0ZGluLmxlbmd0aD90LnN0ZGluLmNoYXJDb2RlQXQodC5fc3RkaW5QdHIrKyk6KHQuc3RkaW49IiIsbnVsbCkscHJpbnQ6aT0+ZS5zdGRvdXQrPWAke2l9CmAscHJpbnRFcnI6dC5jb25maWcucHJpbnRJbnRlcmxlYXZlZD9pPT5lLnN0ZG91dCs9YCR7aX0KYDppPT5lLnN0ZGVycis9YCR7aX0KYH0pO2NvbnN0IHI9ZS5tb2R1bGUuRlM7ZS5pc0Jhc2VNb2R1bGU/KHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gd2l0aCBiYXNlIG1vZHVsZSBmaWxlc3lzdGVtLi4uYCksci5ta2Rpcih0LmNvbmZpZy5kaXJTaGFyZWQsNTExKSxyLm1rZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJEYXRhfWAsNTExKSxyLm1rZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJNb3VudGVkfWAsNTExKSxyLmNoZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJEYXRhfWApLHQuZnM9cik6KHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gd2l0aCBmaWxlc3lzdGVtLi4uYCksci5ta2Rpcih0LmNvbmZpZy5kaXJTaGFyZWQpLHIubW91bnQoZS5tb2R1bGUuUFJPWFlGUyx7cm9vdDp0LmNvbmZpZy5kaXJTaGFyZWQsZnM6dC5mc30sdC5jb25maWcuZGlyU2hhcmVkKSxyLmNoZGlyKHQuZnMuY3dkKCkpKSxlLnN0ZG91dD0iIixlLnN0ZGVycj0iIixlLnJlYWR5PSEwfSxhc3luYyBfc2V0dXBGUygpe2NvbnN0IGU9dC5mcztmb3IobGV0IHIgb2YgdC50b29scyl7aWYoIXIucmVhZHkpY29udGludWU7Y29uc3QgaT1yLm1vZHVsZS5GUyxzPWAvJHtyLnRvb2x9YCxvPWAke3QuY29uZmlnLmRpclNoYXJlZH0ke3N9YDshaS5hbmFseXplUGF0aChzKS5leGlzdHN8fGUuYW5hbHl6ZVBhdGgobykuZXhpc3RzfHwodC5fbG9nKGBNb3VudGluZyAke3N9IG9udG8gJHt0LmJhc2UudG9vbH0gZmlsZXN5c3RlbSBhdCAke299YCksZS5ta2RpcihvKSxlLm1vdW50KHQuYmFzZS5tb2R1bGUuUFJPWFlGUyx7cm9vdDpzLGZzOml9LG8pKX19LF9maWxlb3AoZSxyKXt0Ll9sb2coYFJ1bm5pbmcgJHtlfSAke3J9YCk7Y29uc3QgaT10LmZzLmFuYWx5emVQYXRoKHIpO2lmKCFpLmV4aXN0cylyZXR1cm4gdC5fbG9nKGBGaWxlICR7cn0gbm90IGZvdW5kLmApLCExO3N3aXRjaChlKXtjYXNlImNhdCI6cmV0dXJuIHQuZnMucmVhZEZpbGUocix7ZW5jb2Rpbmc6InV0ZjgifSk7Y2FzZSJscyI6cmV0dXJuIHQuZnMuaXNGaWxlKGkub2JqZWN0Lm1vZGUpP3QuZnMuc3RhdChyKTp0LmZzLnJlYWRkaXIocik7Y2FzZSJkb3dubG9hZCI6Y29uc3Qgcz1uZXcgQmxvYihbdGhpcy5jYXQocildKTtyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChzKX1yZXR1cm4hMX0sX2xvZyhlKXtpZighdC5jb25maWcuZGVidWcpcmV0dXJuO2xldCByPVsuLi5hcmd1bWVudHNdO3Iuc2hpZnQoKSxjb25zb2xlLmxvZyhgJWNbV2ViV29ya2VyXSVjICR7ZX1gLCJmb250LXdlaWdodDpib2xkIiwiIiwuLi5yKX19O3codCl9KSgpOwo=",M=typeof window<"u"&&window.Blob&&new Blob([atob(S)],{type:"text/javascript;charset=utf-8"});function T(){const t=M&&(window.URL||window.webkitURL).createObjectURL(M);try{return t?new Worker(t):new Worker("data:application/javascript;base64,"+S)}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}const x={urlCDN:"https://biowasm.com/cdn/v3",urlCDNStg:"https://stg.biowasm.com/cdn/v3",dirShared:"/shared",dirMounted:"/mnt",dirData:"/data",printInterleaved:!0,callback:null,debug:!1,env:"prd"};class N{constructor(t,e={}){if(null==t)throw"Expecting array of tools as input to Aioli constructor.";return Array.isArray(t)||(t=[t]),e=Object.assign({},x,e),t=t.map(this._parseTool),"stg"===e.env&&(e.urlCDN=e.urlCDNStg),this.tools=t,this.config=e,null!=this.config.callback&&(this.callback=this.config.callback),delete this.config.callback,this.init()}async init(){const t=new T;this.callback&&(t.onmessage=t=>{"biowasm"===t.data.type&&this.callback(t.data.value)});const e=f(t);return e.tools=this.tools,e.config=this.config,await e.init(),e}_parseTool(t){if("string"!=typeof t)return t;const e=t.split("/");if(2!=e.length&&3!=e.length)throw"Expecting '<tool>/<version>' or '<tool>/<program>/<version>'";return{tool:e[0],program:3==e.length?e[1]:e[0],version:e[e.length-1]}}}var E=n(850);class A{static getAvailableScales(){return Object.entries(this.scales).map((([t,e])=>t))}static getScale(t){return(0,E.hu)(!(void 0===this.scales[t]),`Scale '${t}' was not found.`),this.scales[t]}}A.scales={WimleyWhite:{"-":0,A:.17,C:-.24,D:-.07,E:-.01,F:-1.13,G:.01,H:.17,I:-.31,K:.99,L:-.56,M:-.23,N:.42,P:.45,Q:.58,R:.81,S:.13,T:.14,V:.07,W:-1.85,Y:-.94},categorial:{"-":0,A:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,K:9,L:10,M:11,N:12,P:13,Q:14,R:15,S:16,T:17,V:18,W:19,Y:20}};class I{constructor(t="categorial"){this.aa2num=A.getScale(t),this.num2aa={},Object.entries(this.aa2num).forEach((([t,e])=>this.num2aa[e]=t))}static _truncateSequence(t){let e=0,n=t.length;const i=["NH2","COOH"];if(t.startsWith(i[0])){const n=i[0].length;(0,E.hu)("-"==t[n],`Wrong sequence format: ${i[0]} without following '-' in '${t}'.`),e=n}if(t.endsWith(i[1])){const e=i[1].length+1;(0,E.hu)("-"==t[n-e],`Wrong sequence format: ${i[1]} without '-' precending in '${t}'.`),n-=e}return t.substring(e,n)}static _dropDefises(t){return t.replace(/(-)([^-]+)/g,"$2")}static clean(t){return I._dropDefises(I._truncateSequence(t))}encode(t){const e=t.length,n=new Array(e).fill(0);for(let i=0;i<e;++i){const e=t[i];(0,E.hu)(e in this.aa2num,`Unknown char '${e}' found in sequence '${t}'`),n[i]=this.encodeLettter(e)}return n}encodeLettter(t){return this.aa2num[t]}decode(t){let e="";for(let n=0;n<t.length;++n){const i=t[n];(0,E.hu)(i in this.num2aa,`Unknown code '${i}' found in vector '${t}'`),e+=this.num2aa[i]}return e}}var L=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const _="input.fa",R="result.fasta";function k(t){return t.reduce(((t,e,n)=>t+`>sample${n+1}\n${e}\n`),"")}function G(t,e=!1,n="",o=null){var r,a;return L(this,void 0,void 0,(function*(){let l=t.toList();e&&(l=l.map((t=>I.clean(t).replace(/\-/g,""))));const h=t.length;null!=o||(o=i.Column.string("Clusters",h).init("0")),o.type!=i.COLUMN_TYPE.STRING&&(o=o.convertTo(i.TYPE.STRING)),o.compact();const c=o.categories,u=o.getRawData(),d=new Array(c.length),f=new Array(c.length);for(let t=0;t<h;++t){const e=u[t];(null!==(r=d[e])&&void 0!==r?r:d[e]=[]).push(l[t]),(null!==(a=f[e])&&void 0!==a?a:f[e]=[]).push(t)}const m=yield new N(["base/1.0.0",{tool:"kalign",version:"3.3.1",reinit:!0}]),p=i.Column.string(n,h);for(let t=0;t<c.length;++t){const e=k(d[t]);yield m.fs.writeFile(_,e);const n=yield m.exec(`kalign ${_} -f fasta -o ${R}`);console.warn(n);const i=yield m.cat(R);if(!i)throw new Error("kalign output no result");const o=new s.i(i).sequencesArray,r=f[t];for(let t=0;t<o.length;++t)p.set(r[t],o[t])}const g=t.getTag(i.TAGS.UNITS),y=t.getTag("alphabet");return p.setTag(i.TAGS.UNITS,g),p.setTag("aligned","SEQ.MSA"),p.setTag("alphabet",y),p.semType=i.SEMTYPE.MACROMOLECULE,p}))}},8341:(t,e,n)=>{"use strict";n.d(e,{J:()=>a,f:()=>h});var i=n(4469),s=n(976),o=n(3553),r=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const a=["mafft --auto","mafft","linsi","ginsi","einsi","fftns","fftnsi","nwns","nwnsi"],l=["AlignedSeq","AlignedSubpeptide","HELM","ID","PolymerID"];function h(t,e,n="ginsi",a=1.53,h=0,u=null){var d;return r(this,void 0,void 0,(function*(){const r=t.length;null!=u||(u=s.Column.int("Clusters",r).init(0)),u.type!=s.COLUMN_TYPE.STRING&&(u=u.convertTo(s.TYPE.STRING));const f=u.categories,m=new Array(f.length);for(let e=0;e<r;++e){const n=u.get(e);if(""===n)continue;const i=f.indexOf(n),s=t.get(e);s&&(null!==(d=m[i])&&void 0!==d?d:m[i]=[]).push({ID:e.toString(),HELM:s})}const p=yield(void 0!==i.dapi.docker?i.dapi.docker.dockerContainers:i.dapi.dockerfiles).filter("bio").first(),g=new Array(r);for(const t of m){const e=(yield c(p.id,t,n,a,h)).Alignment;for(const t of e)g[parseInt(t.ID)]=Object.entries(t).filter((t=>!l.includes(t[0]))).map((t=>"-"!==t[1]?t[1]:"")).join(o.rs.SEPARATOR)}const y=s.Column.fromStrings(e,g);return y.setTag(s.TAGS.UNITS,"separator"),y.setTag("separator",o.rs.SEPARATOR),y.setTag("aligned","SEQ.MSA"),y.setTag("alphabet","UN"),y.setTag(".alphabetIsMultichar","true"),y.semType=s.SEMTYPE.MACROMOLECULE,y}))}function c(t,e,n,s,o){return r(this,void 0,void 0,(function*(){const r={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(e)},a=`/align?method=${n}&gap_open=${s}&gap_extend=${o}`,l=yield(void 0!==i.dapi.docker?i.dapi.docker.dockerContainers:i.dapi.dockerfiles).request(t,a,r);return JSON.parse(null!=l?l:"{}")}))}},9943:(t,e,n)=>{"use strict";n.d(e,{C2:()=>u});var i=n(976),s=n(3870),o=n(4469),r=n(6414),a=n.n(r),l=n(8447),h=n(499);const c=60;function u(){const t=o.shell.tv.grid,e=a().count(0).take(t.columns.length).map((e=>t.columns.byIndex(e))).filter((t=>!!t.column&&t.column.semType!==i.SEMTYPE.MACROMOLECULE)).toArray(),n=e.find((t=>-1!==t.name.toLowerCase().indexOf("id"))),r=n?[n.name]:[],u=s.multiChoiceInput("Seq id columns",r,e.map((t=>t.name))),f=a().count(0).take(t.columns.length).map((e=>t.columns.byIndex(e))).filter((t=>{const e=t.column;return!(!e||e.semType!==i.SEMTYPE.MACROMOLECULE)&&new h.C(e).isFasta()})).toArray(),m=f.length>0?f[0].name:[],p=s.choiceInput("Seq column",m,f.map((t=>t.name))),g=s.intInput("FASTA line width",c);s.dialog({title:"Save as FASTA"}).add(s.inputs([u,p,g])).onOK((()=>{var e;const n=u.value?u.value.map((e=>t.columns.byName(e).column)):[],i=p.value?t.columns.byName(p.value).column:null,s=null!==(e=g.value)&&void 0!==e?e:c;i||o.shell.warning("Seq column is mandatory to save as FASTA.");const r=function(t,e,n=c,i="\n"){const s=l.kB,o=[];for(let r=0;r<e.length;r++){const a=t.map((t=>t.get(r).toString())).join("|"),l=d(e.get(r),s,n);o.push(`>${a}${i}`);for(const t of l)o.push(`${t}${i}`)}return"".concat(...o)}(n,i,s),a=document.createElement("a");a.setAttribute("href",`data:text/plain;charset=utf-8,${encodeURIComponent(r)}`),a.setAttribute("download",`${t.dataFrame.name}.fasta`),a.click()})).show()}function d(t,e,n=c){const i=e(t);let s=0;const o=i.length,r=[];for(;s<o;){const t=i.slice(s,s+n),e=t.map((t=>t.length>1?`[${t}]`:t)).join("");r.push(e),s+=t.length}return r}},4293:(t,e,n)=>{"use strict";n.d(e,{Y:()=>r,m:()=>o});var i=n(4469),s=n(976);function o(){const t=i.shell.t.columns.bySemType(s.SEMTYPE.MACROMOLECULE);if(null!==t)return t;i.shell.error("Current table does not contain macromolecules")}function r(t,e){t.innerHTML="",t.append(e)}},2433:(t,e,n)=>{"use strict";n.d(e,{OZ:()=>v,bo:()=>s});var i,s,o=n(4469),r=n(3870),a=n(976),l=n(6414),h=n.n(l),c=n(701),u=n(499),d=n(8447),f=n(9298),m=n(7604);HTMLCanvasElement.prototype.getCursorPosition=function(t,e){const n=this.getBoundingClientRect();return new a.Point((t.clientX-n.left)*e,(t.clientY-n.top)*e)},a.Rect.prototype.contains=function(t,e){return this.left<=t&&t<=this.right&&this.top<=e&&e<=this.bottom};class p{constructor(t=0,e=new a.Rect(0,0,0,0)){this.count=t,this.bounds=e}}class g{constructor(t,e,n={},i=0,s=0){this.pos=t,this.name=e,this.freq=n,this.rowCount=i,this.sumForHeightCalc=s}}!function(t){t.STYLE="Style",t.BEHAVIOR="Behavior",t.LAYOUT="Layout",t.DATA="Data"}(i||(i={})),function(t){t.sequenceColumnName="sequenceColumnName",t.startPositionName="startPositionName",t.endPositionName="endPositionName",t.skipEmptySequences="skipEmptySequences",t.skipEmptyPositions="skipEmptyPositions",t.shrinkEmptyTail="shrinkEmptyTail",t.backgroundColor="backgroundColor",t.positionHeight="positionHeight",t.positionWidth="positionWidth",t.verticalAlignment="verticalAlignment",t.horizontalAlignment="horizontalAlignment",t.fixWidth="fixWidth",t.fitArea="fitArea",t.minHeight="minHeight",t.maxHeight="maxHeight",t.positionMarginState="positionMarginState",t.positionMargin="positionMargin",t.filterSource="filterSource"}(s||(s={}));const y=f.vS;class v extends a.JsViewer{get filter(){let t;switch(this.filterSource){case f.Ct.Filtered:t=this.dataFrame.filter;break;case f.Ct.Selected:t=this.dataFrame.selection}return t}get Length(){return this.skipEmptyPositions?this.positions.length:this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0}get positionWidthWithMargin(){return this._positionWidth+this.positionMarginValue}get positionMarginValue(){var t;return"auto"===this.positionMarginState&&!0===(null===(t=this.unitsHandler)||void 0===t?void 0:t.getAlphabetIsMultichar())||"enable"===this.positionMarginState?this.positionMargin:0}get countOfRenderPositions(){if(null==this.host)return 0;const t=window.devicePixelRatio;return t>1?this.canvasWidthWithRatio/this.positionWidthWithMargin:this.canvas.width/(this.positionWidthWithMargin*t)}get canvasWidthWithRatio(){return this.canvas.width*window.devicePixelRatio}get firstVisibleIndex(){return this.visibleSlider?Math.floor(this.slider.min):0}constructor(){super(),this.viewerId=-1,this.initialized=!1,this.cp=null,this.axisHeight=12,this.seqCol=null,this.splitter=null,this.positions=[],this.rowsMasked=0,this.rowsNull=0,this.visibleSlider=!1,this.allowResize=!0,this.turnOfResizeForOneSetValue=!1,this.backgroundColor=4294967295,this.positionMargin=0,this.positionNames=[],this.startPosition=-1,this.endPosition=-1,this.viewSubs=[],this.viewerId=v.viewerCount,v.viewerCount+=1,this.textBaseline="top",this.unitsHandler=null,this.sequenceColumnName=this.string(s.sequenceColumnName,y.sequenceColumnName,{category:i.DATA}),this.startPositionName=this.string(s.startPositionName,y.startPositionName,{category:i.DATA}),this.endPositionName=this.string(s.endPositionName,y.endPositionName,{category:i.DATA}),this.skipEmptySequences=this.bool(s.skipEmptySequences,y.skipEmptySequences,{category:i.DATA}),this.skipEmptyPositions=this.bool(s.skipEmptyPositions,y.skipEmptyPositions,{category:i.DATA}),this.shrinkEmptyTail=this.bool(s.shrinkEmptyTail,y.shrinkEmptyTail,{category:i.DATA}),this.backgroundColor=this.int(s.backgroundColor,y.backgroundColor,{category:i.STYLE}),this.positionHeight=this.string(s.positionHeight,y.positionHeight,{category:i.STYLE,choices:Object.values(f.ES)}),this._positionWidth=this.positionWidth=this.float(s.positionWidth,y.positionWidth,{category:i.STYLE}),this.verticalAlignment=this.string(s.verticalAlignment,y.verticalAlignment,{category:i.LAYOUT,choices:Object.values(f.vw)}),this.horizontalAlignment=this.string(s.horizontalAlignment,y.horizontalAlignment,{category:i.LAYOUT,choices:Object.values(f.iD)}),this.fixWidth=this.bool(s.fixWidth,y.fixWidth,{category:i.LAYOUT}),this.fitArea=this.bool(s.fitArea,y.fitArea,{category:i.LAYOUT}),this.minHeight=this.float(s.minHeight,y.minHeight,{category:i.LAYOUT}),this.maxHeight=this.float(s.maxHeight,y.maxHeight,{category:i.LAYOUT}),this.positionMarginState=this.string(s.positionMarginState,y.positionMarginState,{category:i.LAYOUT,choices:Object.values(f.dE)});let t=0;"auto"===this.positionMarginState&&(t=4),this.positionMargin=this.int(s.positionMargin,t,{category:i.LAYOUT,min:0,max:16}),this.filterSource=this.string(s.filterSource,y.filterSource,{category:i.BEHAVIOR,choices:Object.values(f.Ct)}),this.slider=r.rangeSlider(0,100,0,20,!1,{style:"barbell"}),this.canvas=r.canvas(),this.canvas.style.width="100%"}init(){this.initialized?console.error("Bio: WebLogoViewer.init() second initialization!"):(this.initialized=!0,this.helpUrl="/help/visualize/viewers/web-logo.md",this.msgHost=r.div("No message"),this.msgHost.style.display="none",this.canvas=r.canvas(),this.canvas.style.width="100%",this.slider.root.style.position="absolute",this.slider.root.style.zIndex="999",this.slider.root.style.display="none",this.slider.root.style.height="0.7em",this.visibleSlider=!1,this.subs.push(this.slider.onValuesChanged.subscribe(this.sliderOnValuesChanged.bind(this))),this.host=r.div([this.msgHost,this.canvas]),this.host.style.justifyContent="center",this.host.style.alignItems="center",this.host.style.position="relative",this.host.style.setProperty("overflow","hidden","important"),this.subs.push(c.fromEvent(this.canvas,"mousemove").subscribe(this.canvasOnMouseMove.bind(this))),this.subs.push(c.fromEvent(this.canvas,"mousedown").subscribe(this.canvasOnMouseDown.bind(this))),this.subs.push(c.fromEvent(this.canvas,"wheel").subscribe(this.canvasOnWheel.bind(this))),this.subs.push(r.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),this.root.append(this.host),this.root.append(this.slider.root),this._calculate(window.devicePixelRatio),this.updateSlider(),this.render(!0))}rootOnSizeChanged(){this._calculate(window.devicePixelRatio),this.updateSlider(),this.render(!0)}updateSeqCol(){if(this.dataFrame)if(this.seqCol=this.sequenceColumnName?this.dataFrame.col(this.sequenceColumnName):null,null==this.seqCol&&(this.seqCol=(0,d.up)(this.dataFrame),this.sequenceColumnName=this.seqCol?this.seqCol.name:null),this.seqCol){const t=this.seqCol.getTag(a.TAGS.UNITS),e=this.seqCol.getTag("separator");this.splitter=(0,d.vU)(t,e),this.unitsHandler=new u.C(this.seqCol),this.updatePositions(),this.cp=(0,d.dQ)(this.seqCol)}else this.splitter=null,this.positionNames=[],this.startPosition=-1,this.endPosition=-1,this.cp=null;this.render()}updatePositions(){if(!this.seqCol)return;let t;if(this.shrinkEmptyTail){const e=this.dataFrame.filter.getSelectedIndexes();t=Array.from(new Set(Array.from(Array(e.length).keys()).map((t=>this.seqCol.get(e[t])))))}else t=this.seqCol.categories;const e=t.length>0?Math.max(...t.map((t=>null!==t?this.splitter(t).length:0))):0,n=this.seqCol.getTag(f.DX.positionNames);this.positionNames=n?n.split(f.CI).map((t=>t.trim())):[...Array(e).keys()].map((t=>`${t+1}`)),this.startPosition=this.startPositionName&&this.positionNames&&this.positionNames.includes(this.startPositionName)?this.positionNames.indexOf(this.startPositionName):0,this.endPosition=this.endPositionName&&this.positionNames&&this.positionNames.includes(this.endPositionName)?this.positionNames.indexOf(this.endPositionName):e-1}get widthArea(){return this.Length*this.positionWidth/window.devicePixelRatio}get heightArea(){return Math.min(this.maxHeight,Math.max(this.minHeight,this.root.clientHeight))}get xScale(){return this.widthArea>0?(this.root.clientWidth-this.Length*this.positionMarginValue)/this.widthArea:0}get yScale(){return this.root.clientHeight/this.heightArea}checkIsHideSlider(){let t=!0;const e=Math.min(this.xScale,this.yScale);return(e==this.xScale||e<=1)&&this.fitArea&&(t=!1),this.fixWidth||Math.ceil(this.canvas.width/this.positionWidthWithMargin)>=this.Length||t}setSliderVisibility(t){t?(this.slider.root.style.display="inherit",this.visibleSlider=!0):(this.slider.root.style.display="none",this.visibleSlider=!1)}updateSlider(){if(this.checkIsHideSlider()?this.setSliderVisibility(!1):this.setSliderVisibility(!0),null!=this.slider&&null!=this.canvas){const t=Math.max(0,Math.floor(this.slider.min+this.canvas.width/this.positionWidthWithMargin)-this.Length);let e=Math.floor(this.slider.min-t),n=Math.floor(this.slider.min-t)+Math.floor(this.canvas.width/this.positionWidthWithMargin);this.checkIsHideSlider()&&(e=0,n=Math.max(e,this.Length-1)),this.turnOfResizeForOneSetValue=!0,this.slider.setValues(0,this.Length,e,n)}}onPropertyChanged(t){switch(super.onPropertyChanged(t),t.name){case s.sequenceColumnName:case s.startPositionName:case s.endPositionName:case s.filterSource:this.updateSeqCol();break;case s.positionWidth:this._positionWidth=this.positionWidth,this.updateSlider();break;case s.fixWidth:case s.fitArea:case s.positionMargin:this.updateSlider();break;case s.shrinkEmptyTail:case s.skipEmptyPositions:this.updatePositions()}this.render(!0)}onTableAttached(){super.onTableAttached();const t=this.dataFrame?"data":"null";console.debug(`Bio: WebLogoViewer<${this.viewerId}>.onTableAttached( dataFrame = ${t} ) start`),this.updateSeqCol(),void 0!==this.dataFrame&&(this.viewSubs.push(this.dataFrame.filter.onChanged.subscribe(this.dataFrameFilterOnChanged.bind(this))),this.viewSubs.push(this.dataFrame.selection.onChanged.subscribe(this.dataFrameSelectionOnChanged.bind(this)))),this.init(),console.debug(`Bio: WebLogoViewer<${this.viewerId}>.onTableAttached() end`)}detach(){const t=Object.create(null,{detach:{get:()=>super.detach}});return e=this,n=void 0,s=function*(){const e=this.dataFrame?"data":"null";console.debug(`Bio: WebLogoViewer<${this.viewerId}>.onTableAttached( dataFrame = ${e} ) start`),t.detach.call(this),this.viewSubs.forEach((t=>t.unsubscribe())),this.host.remove(),this.msgHost=void 0,this.host=void 0,this.initialized=!1,console.debug(`Bio: WebLogoViewer<${this.viewerId}>.onTableAttached() end`)},new((i=void 0)||(i=Promise))((function(t,o){function r(t){try{l(s.next(t))}catch(t){o(t)}}function a(t){try{l(s.throw(t))}catch(t){o(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i((function(t){t(n)}))).then(r,a)}l((s=s.apply(e,n||[])).next())}));var e,n,i,s}getMonomer(t){const e=t.x+this.firstVisibleIndex*this.positionWidthWithMargin,n=Math.floor(t.x/this.positionWidthWithMargin+this.firstVisibleIndex),i=this.positions[n];if(null==i)return[n,null,null];const s=Object.keys(i.freq).find((n=>i.freq[n].bounds.contains(e,t.y)));return void 0===s?[n,null,null]:[n,s,i.freq[s]]}_nullSequence(t="X"){return this.skipEmptySequences?"":new Array(this.Length).fill(t).join("")}removeWhere(t,e){const n=t.length;let i=0;for(let s=0;s<n;s++)e(t[s])||(t[i]=t[s],i++);return t.length=i,t}_removeEmptyPositions(){this.skipEmptyPositions&&this.removeWhere(this.positions,(t=>{var e;return(null===(e=null==t?void 0:t.freq["-"])||void 0===e?void 0:e.count)===t.rowCount}))}_calculate(t){if(!this.host||!this.seqCol||!this.dataFrame)return;this.unitsHandler=new u.C(this.seqCol),this.calcSize();const e=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.positions=new Array(e);for(let t=0;t<this.Length;t++){const e=this.positionNames[this.startPosition+t];this.positions[t]=new g(this.startPosition+t,e)}const n=this.filter.getSelectedIndexes();this.rowsMasked=n.length,this.rowsNull=0;for(const t of n){let e=this.seqCol.get(t);e||(e=this._nullSequence(),++this.rowsNull);const n=this.splitter(e);for(let t=0;t<this.Length;t++){const e=this.positions[t].freq,i=n[this.startPosition+t]||"-";i in e||(e[i]=new p),e[i].count++}}for(let t=0;t<this.Length;t++){this.positions[t].rowCount=0;for(const e in this.positions[t].freq)this.positions[t].rowCount+=this.positions[t].freq[e].count;if(this.positionHeight==f.ES.Entropy){this.positions[t].sumForHeightCalc=0;for(const e in this.positions[t].freq){const n=this.positions[t].freq[e].count/this.positions[t].rowCount;this.positions[t].sumForHeightCalc+=-n*Math.log2(n)}}}this._removeEmptyPositions();const i=this.canvas.height-this.axisHeight*t;for(let e=0;e<this.Length;e++){const n=this.positions[e].freq,s=this.positions[e].rowCount,r=this.getAlphabetSize();this.positionHeight==f.ES.Entropy&&null==r&&o.shell.error("WebLogo: alphabet is undefined.");const l=Math.log2(r),h=this.positionHeight==f.ES.Entropy?i*(l-this.positions[e].sumForHeightCalc)/l:i;let c=this.axisHeight*t+(i-h-1);const u=Object.entries(n).sort(((t,e)=>"-"!==t[0]&&"-"!==e[0]?e[1].count-t[1].count:"-"===t[0]&&"-"===e[0]?0:"-"===t[0]?-1:1));for(const t of u){const n=t[1],i=h*n.count/s;n.bounds=new a.Rect(e*this.positionWidthWithMargin,c,this._positionWidth,i),c+=i}}}render(t=!0){var e;if(this.msgHost&&(this.seqCol&&!this.cp?(this.msgHost.innerText=`Unknown palette (column semType: '${this.seqCol.semType}').`,this.msgHost.style.display=""):this.msgHost.style.display="none"),!this.seqCol||!this.dataFrame||!this.cp||-1===this.startPosition||-1===this.endPosition||null==this.host||null==this.slider)return;const n=this.canvas.getContext("2d");if(!n)return;this.slider.root.style.width=`${this.host.clientWidth}px`;const i=window.devicePixelRatio;t&&this._calculate(i),n.resetTransform(),n.fillStyle=a.Color.toHtml(this.backgroundColor),n.fillRect(0,0,this.canvas.width,this.canvas.height),n.textBaseline=this.textBaseline;const s=this.countOfRenderPositions+1,o=this.visibleSlider?Math.floor(this.slider.min):0,r=Math.min(this.Length,o+s),l=10*i;n.resetTransform(),n.fillStyle="black",n.textAlign="center",n.font=`${l.toFixed(1)}px Roboto, Roboto Local, sans-serif`;const h=Math.max(...this.positions.map((t=>n.measureText(t.name).width))),c=h<this._positionWidth-2?1:(this._positionWidth-2)/h;for(let t=this.firstVisibleIndex;t<r;t++){const e=this.positions[t];n.resetTransform(),n.setTransform(c,0,0,1,t*this.positionWidthWithMargin+this._positionWidth/2-this.positionWidthWithMargin*o,0),n.fillText(e.name,0,0)}for(let t=this.firstVisibleIndex;t<r;t++)for(const[i,s]of Object.entries(this.positions[t].freq))if("-"!==i){const t=(0,d.GU)(i,5),o=s.bounds,r=o.left-this.positionWidthWithMargin*this.firstVisibleIndex;n.resetTransform(),n.strokeStyle="lightgray",n.lineWidth=1,n.rect(r,o.top,o.width,o.height),n.fillStyle=null!==(e=this.cp.get(i))&&void 0!==e?e:this.cp.get("other"),n.textAlign="left",n.font="16px Roboto, Roboto Local, sans-serif";const a=n.measureText(t);n.setTransform(o.width/a.width,0,0,o.height/12.2,r,o.top),n.fillText(t,0,-.25)}}calcSize(){if(!this.host)return;const t=window.devicePixelRatio;let e=this.widthArea,n=this.heightArea;if(this.fitArea&&!this.visibleSlider){const t=Math.max(1,Math.min(this.xScale,this.yScale));e*=t,n*=t,this._positionWidth=this.positionWidth*t}e=this.Length*this.positionWidthWithMargin/t,this.canvas.width=this.root.clientWidth*t,this.canvas.style.width=`${this.root.clientWidth}px`,this.host.style.setProperty("height",`${n}px`);const i=this.host.clientHeight;if(this.canvas.height=i*t,this.fixWidth)this.root.style.width=this.host.style.width=`${e}px`,this.root.style.height=`${n}px`,this.root.style.overflow="hidden",this.host.style.setProperty("overflow-y","hidden","important");else{this.root.style.width=this.host.style.width="100%",this.host.style.overflowX="auto!important",this.host.style.setProperty("text-align",this.horizontalAlignment);const t=this.visibleSlider?10:0;let s=0;switch(this.verticalAlignment){case"top":s=0;break;case"middle":s=Math.max(0,(this.root.clientHeight-n)/2);break;case"bottom":s=Math.max(0,this.root.clientHeight-n-t)}let o=0;switch(this.horizontalAlignment){case"left":o=0;break;case"center":o=Math.max(0,(this.root.clientWidth-e)/2);break;case"right":o=Math.max(0,this.root.clientWidth-e)}this.host.style.setProperty("margin-top",`${s}px`,"important"),this.host.style.setProperty("margin-left",`${o}px`,"important"),null!=this.slider&&this.slider.root.style.setProperty("margin-top",`${s+i}px`,"important"),this.root.clientHeight<=n?(this.host.style.setProperty("height",`${this.root.clientHeight}px`),this.host.style.setProperty("overflow-y",null)):this.host.style.setProperty("overflow-y","hidden","important")}}getAlphabetSize(){var t,e;return null!==(e=null===(t=this.unitsHandler)||void 0===t?void 0:t.getAlphabetSize())&&void 0!==e?e:0}sliderOnValuesChanged(t){if(null!=this.host)try{if(this.allowResize&&!this.turnOfResizeForOneSetValue&&this.visibleSlider){const t=Math.ceil(this.slider.max-this.slider.min),e=this.canvas.width/t-this.positionMarginValue;this.positionWidth=e,this._positionWidth=e}this.turnOfResizeForOneSetValue=!1,this.render(!0)}catch(t){const e=(0,m.O)(t);console.error("Bio: WebLogoViewer.sliderOnValuesChanged() error:\n"+e)}}dataFrameFilterOnChanged(t){console.debug("Bio: WebLogoViewer.dataFrameFilterChanged()");try{this.updatePositions(),this.render()}catch(t){const e=(0,m.O)(t);console.error("Bio: WebLogoViewer.dataFrameFilterOnChanged() error:\n"+e)}}dataFrameSelectionOnChanged(t){console.debug("Bio: WebLogoViewer.dataFrameSelectionOnChanged()");try{this.render()}catch(t){const e=(0,m.O)(t);console.error("Bio: WebLogoViewer.dataFrameSelectionOnChanged() error:\n"+e)}}canvasOnMouseMove(t){try{const e=t,n=window.devicePixelRatio,i=this.canvas.getCursorPosition(e,n),[s,o]=this.getMonomer(i);if(this.dataFrame&&this.seqCol&&this.splitter&&o){const t=this.positions[s],n=function(t,e,n,i,s,o){return h().count(0).take(t.rowCount).filter((t=>n.get(t))).map((t=>{const n=e.get(t),s=n?i(n):[],r=o.pos;return r<s.length?s[r]:null})).toArray().filter((t=>t==s)).reduce(((t,e)=>t+1),0)}(this.dataFrame,this.seqCol,this.filter,this.splitter,o,t),i=r.div([r.div(`${o}`),r.div(`${n} rows`)]);r.tooltip.show(i,e.x+16,e.y+16)}else r.tooltip.hide()}catch(t){const e=(0,m.O)(t);console.error("Bio: WebLogoViewer.canvasOnMouseMove() error:\n"+e)}}canvasOnMouseDown(t){try{const e=t,n=window.devicePixelRatio,[i,s]=this.getMonomer(this.canvas.getCursorPosition(e,n));if(this.dataFrame&&this.seqCol&&this.splitter&&s){const t=this.positions[i],e=a.BitSet.create(this.dataFrame.selection.length,(e=>function(t,e,n,i,s,o,r){if(!n.getSelectedIndexes().includes(i))return!1;const a=e.get(i),l=a?s(a)[r.pos]:null;return l===o||""===l&&"-"===o}(this.dataFrame,this.seqCol,this.filter,e,this.splitter,s,t)));this.dataFrame.selection.init((t=>e.get(t)))}}catch(t){const e=(0,m.O)(t);console.error("Bio: WebLogoViewer.canvasOnMouseDown() error:\n"+e)}}canvasOnWheel(t){try{if(!this.visibleSlider)return;const e=t.deltaY/100*Math.max(Math.floor(this.countOfRenderPositions/2),1);this.slider.scrollBy(this.slider.min+e)}catch(t){const e=(0,m.O)(t);console.error("Bio: WebLogoViewer.canvasOnWheel() error:\n"+e)}}}v.residuesSet="nucleotides",v.viewerCount=-1},4413:(t,e,n)=>{"use strict";n.d(e,{ST:()=>m});var i=n(3870),s=n(976),o=n(4469),r=n(6414),a=n.n(r),l=n(7983),h=n(701),c=n(4293),u=n(1061);const d=rxjs.operators;var f=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};class m extends s.Filter{get calculating(){return"initial"==this.loader.style.display}set calculating(t){this.loader.style.display=t?"initial":"none"}get filterSummary(){return this.bioFilter.substructure}get isFiltering(){return super.isFiltering&&""!==this.bioFilter.substructure}get isReadyToApplyFilter(){return!this.calculating&&null!=this.bitset}get _debounceTime(){if(null==this.column)return 1e3;const t=this.column.length;return t<500?0:t>1e4?1e3:Math.floor((t-500)/9500*1e3)}constructor(){super(),this.bioFilter=null,this.bitset=null,this.loader=i.loader(),this.notation=void 0,this.root=i.divV([]),this.calculating=!1}attach(t){var e,n,i,o,r;super.attach(t),this.column=t.columns.bySemType(s.SEMTYPE.MACROMOLECULE),null!==(e=this.columnName)&&void 0!==e||(this.columnName=null===(n=this.column)||void 0===n?void 0:n.name),null!==(i=this.notation)&&void 0!==i||(this.notation=null===(o=this.column)||void 0===o?void 0:o.getTag(s.TAGS.UNITS)),this.bioFilter="fasta"===this.notation?new g:"separator"===this.notation?new y(this.column.getTag("separator")):new v,this.root.appendChild(this.bioFilter.filterPanel),this.root.appendChild(this.loader),null===(r=this.onBioFilterChangedSubs)||void 0===r||r.unsubscribe();let a=this.bioFilter.onChanged;a=a.pipe((0,d.debounceTime)(this._debounceTime)),this.onBioFilterChangedSubs=a.subscribe((t=>f(this,void 0,void 0,(function*(){return yield this._onInputChanged()}))))}detach(){super.detach()}applyFilter(){var t;this.bitset&&!this.isDetached&&(null===(t=this.dataFrame)||void 0===t||t.filter.and(this.bitset))}saveState(){var t;const e=super.saveState();return e.bioSubstructure=null===(t=this.bioFilter)||void 0===t?void 0:t.substructure,e}applyState(t){super.applyState(t),t.bioSubstructure&&(this.bioFilter.substructure=t.bioSubstructure);const e=this;t.bioSubstructure&&setTimeout((function(){e._onInputChanged()}),1e3)}_onInputChanged(){var t,e,n;return f(this,void 0,void 0,(function*(){if(this.isFiltering){if(a()(this.dataFrame.rows.filters).has(`${this.columnName}: ${this.filterSummary}`))return;this.calculating=!0;try{this.bitset=yield null===(e=this.bioFilter)||void 0===e?void 0:e.substrucrureSearch(this.column),this.calculating=!1,null===(n=this.dataFrame)||void 0===n||n.rows.requestFilter()}finally{this.calculating=!1}}else this.bitset=null,null===(t=this.dataFrame)||void 0===t||t.rows.requestFilter()}))}}class p{constructor(){this.onChanged=new h.Subject}get filterPanel(){return new HTMLElement}get substructure(){return""}set substructure(t){}substrucrureSearch(t){return f(this,void 0,void 0,(function*(){return null}))}}class g extends p{constructor(){super(),this.substructureInput=i.stringInput("","",(()=>{this.onChanged.next()}),{placeholder:"Substructure"})}get filterPanel(){return this.substructureInput.root}get substructure(){return this.substructureInput.value}set substructure(t){this.substructureInput.value=t}substrucrureSearch(t){return f(this,void 0,void 0,(function*(){return yield(0,l.pf)(this.substructure,t)}))}}class y extends g{constructor(t){super(),this.colSeparator="",this.separatorInput=i.stringInput("","",(()=>{this.onChanged.next()}),{placeholder:"Separator"}),this.colSeparator=t,this.separatorInput.value=t}get filterPanel(){return i.divV([this.substructureInput.root,this.separatorInput.root])}get substructure(){return this.separatorInput.value&&this.separatorInput.value!==this.colSeparator?this.substructureInput.value.replaceAll(this.separatorInput.value,this.colSeparator):this.substructureInput.value}set substructure(t){this.substructureInput.value=t}substrucrureSearch(t){return f(this,void 0,void 0,(function*(){return yield(0,l.pf)(this.substructure,t,this.colSeparator)}))}}class v extends p{constructor(){super(),this._filterPanel=i.div("",{style:{cursor:"pointer"}}),this.helmSubstructure="",this.init()}init(){return f(this,void 0,void 0,(function*(){this.helmEditor=yield o.functions.call("HELM:helmWebEditor"),yield i.tools.waitForElementInDom(this._filterPanel),this.updateFilterPanel(),this._filterPanel.addEventListener("click",(t=>{const{editorDiv:e,webEditor:n}=this.helmEditor.createWebEditor(this.helmSubstructure);i.dialog({showHeader:!1,showFooter:!0}).add(e).onOK((()=>{const t=n.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.helmSubstructure=t,this.updateFilterPanel(this.substructure),setTimeout((()=>{this.onChanged.next()}),10)})).show({modal:!0,fullScreen:!0})})),i.onSizeChanged(this._filterPanel).subscribe((t=>{const e=this.helmEditor.webEditor.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.updateFilterPanel(e)}))}))}get filterPanel(){return this._filterPanel}get substructure(){return this.helmSubstructure}set substructure(t){this.helmEditor.editor.setHelm(t)}updateFilterPanel(t){const e=this._filterPanel.parentElement.clientWidth<100?100:this._filterPanel.parentElement.clientWidth,n=e/2;if(t)(0,c.Y)(this._filterPanel,this.helmEditor.host),this.helmEditor.editor.setHelm(t),this.helmEditor.resizeEditor(e,n);else{const t=i.divText("Click to edit","helm-substructure-filter");(0,c.Y)(this._filterPanel,t)}}substrucrureSearch(t){return f(this,void 0,void 0,(function*(){i.setUpdateIndicator(this._filterPanel,!0),yield(0,u.gw)(10);const e=yield(0,l.QF)(this.substructure,t);return i.setUpdateIndicator(this._filterPanel,!1),e}))}}},9378:function(t,e,n){"use strict";var i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var s=i(n(4517));function o(t,e){var n=function(n){return s.empty(t).map((function(){return s.filled(e,n)}))},i=[];return i.push(n(-1)),i.push(n(1/0)),i.push(n(0)),i}function r(t,e,n,i,s){e=Math.floor(e);var o=t[0][e],r=t[1][e];if(t[2][e],n>=r[0])return 0;for(var l=0;l<o.length;l++)if(i===o[l])return 0;return a(t,e,n,i,s)}function a(t,e,n,i,s){var o=t[0][e],r=t[1][e],a=t[2][e];if(n>=r[0])return 0;r[0]=n,o[0]=i,a[0]=s;for(var l=0,h=0;;){var c=2*l+1,u=c+1,d=t[0][0].length;if(c>=d)break;if(u>=d){if(!(r[c]>n))break;h=c}else if(r[c]>=r[u]){if(!(n<r[c]))break;h=c}else{if(!(n<r[u]))break;h=u}r[l]=r[h],o[l]=o[h],a[l]=a[h],l=h}return r[l]=n,o[l]=i,a[l]=s,1}function l(t,e,n,i){for(;2*i+1<n;){var s=2*i+1,o=s+1,r=i;if(t[r]<t[s]&&(r=s),o<n&&t[r]<t[o]&&(r=o),r===i)break;var a=t[i];t[i]=t[r],t[r]=a;var l=e[i];e[i]=e[r],e[r]=l,i=r}}e.makeHeap=o,e.rejectionSample=function(t,e,n){for(var i=s.zeros(t),o=0;o<t;o++){for(var r=!0,a=0;r;){a=s.tauRandInt(e,n);for(var l=!1,h=0;h<o;h++)if(a===i[h]){l=!0;break}l||(r=!1)}i[o]=a}return i},e.heapPush=r,e.uncheckedHeapPush=a,e.buildCandidates=function(t,e,n,i,a){for(var l=o(e,i),h=0;h<e;h++)for(var c=0;c<n;c++)if(!(t[0][h][c]<0)){var u=t[0][h][c],d=t[2][h][c],f=s.tauRand(a);r(l,h,f,u,d),r(l,u,f,h,d),t[2][h][c]=0}return l},e.deheapSort=function(t){for(var e=t[0],n=t[1],i=0;i<e.length;i++)for(var s=e[i],o=n[i],r=0;r<s.length-1;r++){var a=s.length-r-1,h=o.length-r-1,c=s[0];s[0]=s[a],s[a]=c;var u=o[0];o[0]=o[h],o[h]=u,l(o,s,h,0)}return{indices:e,weights:n}},e.smallestFlagged=function(t,e){for(var n=t[0][e],i=t[1][e],s=t[2][e],o=1/0,r=-1,a=0;a>n.length;a++)1===s[a]&&i[a]<o&&(o=i[a],r=a);return r>=0?(s[r]=0,Math.floor(n[r])):-1}},4221:(t,e,n)=>{"use strict";var i=n(4364);e.u=i.UMAP},5686:function(t,e,n){"use strict";var i,s=this&&this.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var i,s,o=n.call(t),r=[];try{for(;(void 0===e||e-- >0)&&!(i=o.next()).done;)r.push(i.value)}catch(t){s={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(s)throw s.error}}return r},o=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}},r=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var a=r(n(4517)),l=function(){function t(t,e,n,i){if(this.entries=new Map,this.nRows=0,this.nCols=0,t.length!==e.length||t.length!==n.length)throw new Error("rows, cols and values arrays must all have the same length");this.nRows=i[0],this.nCols=i[1];for(var s=0;s<n.length;s++){var o=t[s],r=e[s];this.checkDims(o,r);var a=this.makeKey(o,r);this.entries.set(a,{value:n[s],row:o,col:r})}}return t.prototype.makeKey=function(t,e){return t+":"+e},t.prototype.checkDims=function(t,e){if(!(t<this.nRows&&e<this.nCols))throw new Error("row and/or col specified outside of matrix dimensions")},t.prototype.set=function(t,e,n){this.checkDims(t,e);var i=this.makeKey(t,e);this.entries.has(i)?this.entries.get(i).value=n:this.entries.set(i,{value:n,row:t,col:e})},t.prototype.get=function(t,e,n){void 0===n&&(n=0),this.checkDims(t,e);var i=this.makeKey(t,e);return this.entries.has(i)?this.entries.get(i).value:n},t.prototype.getAll=function(t){void 0===t&&(t=!0);var e=[];return this.entries.forEach((function(t){e.push(t)})),t&&e.sort((function(t,e){return t.row===e.row?t.col-e.col:t.row-e.row})),e},t.prototype.getDims=function(){return[this.nRows,this.nCols]},t.prototype.getRows=function(){return Array.from(this.entries,(function(t){var e=s(t,2);return e[0],e[1].row}))},t.prototype.getCols=function(){return Array.from(this.entries,(function(t){var e=s(t,2);return e[0],e[1].col}))},t.prototype.getValues=function(){return Array.from(this.entries,(function(t){var e=s(t,2);return e[0],e[1].value}))},t.prototype.forEach=function(t){this.entries.forEach((function(e){return t(e.value,e.row,e.col)}))},t.prototype.map=function(e){var n=[];this.entries.forEach((function(t){n.push(e(t.value,t.row,t.col))}));var i=[this.nRows,this.nCols];return new t(this.getRows(),this.getCols(),n,i)},t.prototype.toArray=function(){var t=this,e=a.empty(this.nRows).map((function(){return a.zeros(t.nCols)}));return this.entries.forEach((function(t){e[t.row][t.col]=t.value})),e},t}();e.SparseMatrix=l,e.transpose=function(t){var e=[],n=[],i=[];t.forEach((function(t,s,o){e.push(s),n.push(o),i.push(t)}));var s=[t.nCols,t.nRows];return new l(n,e,i,s)},e.identity=function(t){for(var e=s(t,1)[0],n=new l([],[],[],t),i=0;i<e;i++)n.set(i,i,1);return n},e.pairwiseMultiply=function(t,e){return c(t,e,(function(t,e){return t*e}))},e.add=function(t,e){return c(t,e,(function(t,e){return t+e}))},e.subtract=function(t,e){return c(t,e,(function(t,e){return t-e}))},e.maximum=function(t,e){return c(t,e,(function(t,e){return t>e?t:e}))},e.multiplyScalar=function(t,e){return t.map((function(t){return t*e}))},e.eliminateZeros=function(t){for(var e=new Set,n=t.getValues(),i=t.getRows(),s=t.getCols(),o=0;o<n.length;o++)0===n[o]&&e.add(o);var r=function(t,n){return!e.has(n)},a=n.filter(r),h=i.filter(r),c=s.filter(r);return new l(h,c,a,t.getDims())},e.normalize=function(t,e){var n,i;void 0===e&&(e="l2");var s=h[e],r=new Map;t.forEach((function(t,e,n){var i=r.get(e)||[];i.push(n),r.set(e,i)}));var a=new l([],[],[],t.getDims()),c=function(e){for(var n=r.get(e).sort(),i=n.map((function(n){return t.get(e,n)})),o=s(i),l=0;l<o.length;l++)a.set(e,n[l],o[l])};try{for(var u=o(r.keys()),d=u.next();!d.done;d=u.next())c(d.value)}catch(t){n={error:t}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(n)throw n.error}}return a};var h=((i={}).max=function(t){for(var e=-1/0,n=0;n<t.length;n++)e=t[n]>e?t[n]:e;return t.map((function(t){return t/e}))},i.l1=function(t){for(var e=0,n=0;n<t.length;n++)e+=t[n];return t.map((function(t){return t/e}))},i.l2=function(t){for(var e=0,n=0;n<t.length;n++)e+=Math.pow(t[n],2);return t.map((function(t){return Math.sqrt(Math.pow(t,2)/e)}))},i);function c(t,e,n){for(var i=new Set,s=[],o=[],r=[],a=function(i,a){s.push(i),o.push(a);var l=n(t.get(i,a),e.get(i,a));r.push(l)},h=t.getValues(),c=t.getRows(),u=t.getCols(),d=0;d<h.length;d++){var f=(y=c[d])+":"+(v=u[d]);i.add(f),a(y,v)}var m=e.getValues(),p=e.getRows(),g=e.getCols();for(d=0;d<m.length;d++){var y,v;f=(y=p[d])+":"+(v=g[d]),i.has(f)||a(y,v)}var b=[t.nRows,t.nCols];return new l(s,o,r,b)}e.getCSR=function(t){var e=[];t.forEach((function(t,n,i){e.push({value:t,row:n,col:i})})),e.sort((function(t,e){return t.row===e.row?t.col-e.col:t.row-e.row}));for(var n=[],i=[],s=[],o=-1,r=0;r<e.length;r++){var a=e[r],l=a.row,h=a.col,c=a.value;l!==o&&(o=l,s.push(r)),n.push(h),i.push(c)}return{indices:n,values:i,indptr:s}}},760:function(t,e,n){"use strict";var i=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}},s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var o=s(n(9378)),r=s(n(5686)),a=s(n(2320)),l=s(n(4517));e.makeNNDescent=function(t,e){return function(n,i,s,r,a,h,c,u){void 0===r&&(r=10),void 0===a&&(a=50),void 0===h&&(h=.001),void 0===c&&(c=.5),void 0===u&&(u=!0);for(var d=n.length,f=o.makeHeap(n.length,s),m=0;m<n.length;m++)for(var p=o.rejectionSample(s,n.length,e),g=0;g<p.length;g++){var y=t(n[m],n[p[g]]);o.heapPush(f,m,y,p[g],1),o.heapPush(f,p[g],y,m,1)}if(u)for(var v=0;v<i.length;v++)for(m=0;m<i[v].length&&!(i[v][m]<0);m++)for(g=m+1;g<i[v].length&&!(i[v][g]<0);g++)y=t(n[i[v][m]],n[i[v][g]]),o.heapPush(f,i[v][m],y,i[v][g],1),o.heapPush(f,i[v][g],y,i[v][m],1);for(v=0;v<r;v++){var b=o.buildCandidates(f,d,s,a,e),w=0;for(m=0;m<d;m++)for(g=0;g<a;g++){var C=Math.floor(b[0][m][g]);if(!(C<0||l.tauRand(e)<c))for(var S=0;S<a;S++){var M=Math.floor(b[0][m][S]),T=b[2][m][g],x=b[2][m][S];M<0||!T&&!x||(y=t(n[C],n[M]),w+=o.heapPush(f,C,y,M,1),w+=o.heapPush(f,M,y,C,1))}}if(w<=h*s*n.length)break}return o.deheapSort(f)}},e.makeInitializations=function(t){return{initFromRandom:function(e,n,i,s,r){for(var a=0;a<i.length;a++)for(var h=l.rejectionSample(e,n.length,r),c=0;c<h.length;c++)if(!(h[c]<0)){var u=t(n[h[c]],i[a]);o.heapPush(s,a,u,h[c],1)}},initFromTree:function(e,n,i,s,r){for(var l=0;l<i.length;l++)for(var h=a.searchFlatTree(i[l],e,r),c=0;c<h.length;c++){if(h[c]<0)return;var u=t(n[h[c]],i[l]);o.heapPush(s,l,u,h[c],1)}}}},e.makeInitializedNNSearch=function(t){return function(e,n,s,a){for(var l,h,c=r.getCSR(n),u=c.indices,d=c.indptr,f=0;f<a.length;f++)for(var m=new Set(s[0][f]);;){var p=o.smallestFlagged(s,f);if(-1===p)break;var g=u.slice(d[p],d[p+1]);try{for(var y=i(g),v=y.next();!v.done;v=y.next()){var b=v.value;if(b!==p&&-1!==b&&!m.has(b)){var w=t(e[b],a[f]);o.uncheckedHeapPush(s,f,w,b,1),m.add(b)}}}catch(t){l={error:t}}finally{try{v&&!v.done&&(h=y.return)&&h.call(y)}finally{if(l)throw l.error}}}return s}},e.initializeSearch=function(t,e,n,s,r,a,l){var h,c,u=o.makeHeap(n.length,s);if(r(s,e,n,u,l),t)try{for(var d=i(t),f=d.next();!f.done;f=d.next())a(f.value,e,n,u,l)}catch(t){h={error:t}}finally{try{f&&!f.done&&(c=d.return)&&c.call(d)}finally{if(h)throw h.error}}return u}},2320:function(t,e,n){"use strict";var i=this&&this.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var i,s,o=n.call(t),r=[];try{for(;(void 0===e||e-- >0)&&!(i=o.next()).done;)r.push(i.value)}catch(t){s={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(s)throw s.error}}return r},s=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(i(arguments[e]));return t},o=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}},r=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var a=r(n(4517)),l=function(t,e,n,i){this.hyperplanes=t,this.offsets=e,this.children=n,this.indices=i};function h(t,e,n,i,s){if(void 0===n&&(n=30),e.length>n){var o=function(t,e,n){var i=t[0].length,s=a.tauRandInt(e.length,n),o=a.tauRandInt(e.length,n);o=(o+=s===o?1:0)%e.length;for(var r=e[s],l=e[o],h=0,c=a.zeros(i),u=0;u<c.length;u++)c[u]=t[r][u]-t[l][u],h-=c[u]*(t[r][u]+t[l][u])/2;var d=0,f=0,m=a.zeros(e.length);for(u=0;u<e.length;u++){for(var p=h,g=0;g<i;g++)p+=c[g]*t[e[u]][g];0===p?(m[u]=a.tauRandInt(2,n),0===m[u]?d+=1:f+=1):p>0?(m[u]=0,d+=1):(m[u]=1,f+=1)}var y=a.zeros(d),v=a.zeros(f);for(d=0,f=0,u=0;u<m.length;u++)0===m[u]?(y[d]=e[u],d+=1):(v[f]=e[u],f+=1);return{indicesLeft:y,indicesRight:v,hyperplane:c,offset:h}}(t,e,s),r=o.indicesLeft,l=o.indicesRight,c=o.hyperplane,u=o.offset;return{leftChild:h(t,r,n,i+1,s),rightChild:h(t,l,n,i+1,s),isLeaf:!1,hyperplane:c,offset:u}}return{indices:e,isLeaf:!0}}function c(t,e,n,i,o,r,a){var l;if(t.isLeaf)return i[r][0]=-a,(l=o[a]).splice.apply(l,s([0,t.indices.length],t.indices)),{nodeNum:r,leafNum:a+=1};e[r]=t.hyperplane,n[r]=t.offset,i[r][0]=r+1;var h=r,u=c(t.leftChild,e,n,i,o,r+1,a);return r=u.nodeNum,a=u.leafNum,i[h][1]=r+1,{nodeNum:(u=c(t.rightChild,e,n,i,o,r+1,a)).nodeNum,leafNum:u.leafNum}}function u(t){return t.isLeaf?1:1+u(t.leftChild)+u(t.rightChild)}function d(t){return t.isLeaf?1:d(t.leftChild)+d(t.rightChild)}function f(t,e,n,i){for(var s=e,o=0;o<n.length;o++)s+=t[o]*n[o];return 0===s?a.tauRandInt(2,i):s>0?0:1}e.FlatTree=l,e.makeForest=function(t,e,n,i){var s=Math.max(10,e);return a.range(n).map((function(e,n){return function(t,e,n,i){return void 0===e&&(e=30),h(t,a.range(t.length),e,n,i)}(t,s,n,i)})).map((function(t){return function(t,e){var n=u(t),i=d(t),s=a.range(n).map((function(){return a.zeros(t.hyperplane?t.hyperplane.length:0)})),o=a.zeros(n),r=a.range(n).map((function(){return[-1,-1]})),h=a.range(i).map((function(){return a.range(e).map((function(){return-1}))}));return c(t,s,o,r,h,0,0),new l(s,o,r,h)}(t,s)}))},e.makeLeafArray=function(t){var e,n;if(t.length>0){var i=[];try{for(var r=o(t),a=r.next();!a.done;a=r.next()){var l=a.value;i.push.apply(i,s(l.indices))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=r.return)&&n.call(r)}finally{if(e)throw e.error}}return i}return[[-1]]},e.searchFlatTree=function(t,e,n){for(var i=0;e.children[i][0]>0;)i=0===f(e.hyperplanes[i],e.offsets[i],t,n)?e.children[i][0]:e.children[i][1];var s=-1*e.children[i][0];return e.indices[s]}},4364:function(t,e,n){"use strict";var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){t.done?s(t.value):new n((function(e){e(t.value)})).then(r,a)}l((i=i.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var n,i,s,o,r={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;r;)try{if(n=1,i&&(s=2&o[0]?i.return:o[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,o[1])).done)return s;switch(i=0,s&&(o=[2&o[0],s.value]),o[0]){case 0:case 1:s=o;break;case 4:return r.label++,{value:o[1],done:!1};case 5:r.label++,i=o[1],o=[0];continue;case 7:o=r.ops.pop(),r.trys.pop();continue;default:if(!((s=(s=r.trys).length>0&&s[s.length-1])||6!==o[0]&&2!==o[0])){r=0;continue}if(3===o[0]&&(!s||o[1]>s[0]&&o[1]<s[3])){r.label=o[1];break}if(6===o[0]&&r.label<s[1]){r.label=s[1],s=o;break}if(s&&r.label<s[2]){r.label=s[2],r.ops.push(o);break}s[2]&&r.ops.pop(),r.trys.pop();continue}o=e.call(t,r)}catch(t){o=[6,t],i=0}finally{n=s=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,a])}}},o=this&&this.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var i,s,o=n.call(t),r=[];try{for(;(void 0===e||e-- >0)&&!(i=o.next()).done;)r.push(i.value)}catch(t){s={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(s)throw s.error}}return r},r=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t},a=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var h=a(n(9378)),c=a(n(5686)),u=a(n(760)),d=a(n(2320)),f=a(n(4517)),m=l(n(9251)),p=1e-5,g=.001,y=function(){function t(t){void 0===t&&(t={});var e=this;this.learningRate=1,this.localConnectivity=1,this.minDist=.1,this.nComponents=2,this.nEpochs=0,this.nNeighbors=15,this.negativeSampleRate=5,this.random=Math.random,this.repulsionStrength=1,this.setOpMixRatio=1,this.spread=1,this.transformQueueSize=4,this.targetMetric="categorical",this.targetWeight=.5,this.targetNNeighbors=this.nNeighbors,this.distanceFn=v,this.isInitialized=!1,this.rpForest=[],this.embedding=[],this.optimizationState=new b;var n=function(n){void 0!==t[n]&&(e[n]=t[n])};n("distanceFn"),n("learningRate"),n("localConnectivity"),n("minDist"),n("nComponents"),n("nEpochs"),n("nNeighbors"),n("negativeSampleRate"),n("random"),n("repulsionStrength"),n("setOpMixRatio"),n("spread"),n("transformQueueSize")}return t.prototype.fit=function(t){return this.initializeFit(t),this.optimizeLayout(),this.embedding},t.prototype.fitAsync=function(t,e){return void 0===e&&(e=function(){return!0}),i(this,void 0,void 0,(function(){return s(this,(function(n){switch(n.label){case 0:return this.initializeFit(t),[4,this.optimizeLayoutAsync(e)];case 1:return n.sent(),[2,this.embedding]}}))}))},t.prototype.setSupervisedProjection=function(t,e){void 0===e&&(e={}),this.Y=t,this.targetMetric=e.targetMetric||this.targetMetric,this.targetWeight=e.targetWeight||this.targetWeight,this.targetNNeighbors=e.targetNNeighbors||this.targetNNeighbors},t.prototype.setPrecomputedKNN=function(t,e){this.knnIndices=t,this.knnDistances=e},t.prototype.initializeFit=function(t){if(t.length<=this.nNeighbors)throw new Error("Not enough data points ("+t.length+") to create nNeighbors: "+this.nNeighbors+". Add more data points or adjust the configuration.");if(this.X===t&&this.isInitialized)return this.getNEpochs();if(this.X=t,!this.knnIndices&&!this.knnDistances){var e=this.nearestNeighbors(t);this.knnIndices=e.knnIndices,this.knnDistances=e.knnDistances}this.graph=this.fuzzySimplicialSet(t,this.nNeighbors,this.setOpMixRatio),this.makeSearchFns(),this.searchGraph=this.makeSearchGraph(t),this.processGraphForSupervisedProjection();var n=this.initializeSimplicialSetEmbedding(),i=n.head,s=n.tail,o=n.epochsPerSample;return this.optimizationState.head=i,this.optimizationState.tail=s,this.optimizationState.epochsPerSample=o,this.initializeOptimization(),this.prepareForOptimizationLoop(),this.isInitialized=!0,this.getNEpochs()},t.prototype.makeSearchFns=function(){var t=u.makeInitializations(this.distanceFn),e=t.initFromTree,n=t.initFromRandom;this.initFromTree=e,this.initFromRandom=n,this.search=u.makeInitializedNNSearch(this.distanceFn)},t.prototype.makeSearchGraph=function(t){for(var e=this.knnIndices,n=this.knnDistances,i=[t.length,t.length],s=new c.SparseMatrix([],[],[],i),o=0;o<e.length;o++)for(var r=e[o],a=n[o],l=0;l<r.length;l++){var h=r[l],u=a[l];u>0&&s.set(o,h,u)}var d=c.transpose(s);return c.maximum(s,d)},t.prototype.transform=function(t){var e=this,n=this.X;if(void 0===n||0===n.length)throw new Error("No data has been fit.");var i=Math.floor(this.nNeighbors*this.transformQueueSize);i=Math.min(n.length,i);var s=u.initializeSearch(this.rpForest,n,t,i,this.initFromRandom,this.initFromTree,this.random),o=this.search(n,this.searchGraph,s,t),r=h.deheapSort(o),a=r.indices,l=r.weights;a=a.map((function(t){return t.slice(0,e.nNeighbors)})),l=l.map((function(t){return t.slice(0,e.nNeighbors)}));var d=Math.max(0,this.localConnectivity-1),m=this.smoothKNNDistance(l,this.nNeighbors,d),p=m.sigmas,g=m.rhos,y=this.computeMembershipStrengths(a,l,p,g),v=y.rows,b=y.cols,w=y.vals,C=[t.length,n.length],S=new c.SparseMatrix(v,b,w,C),M=c.normalize(S,"l1"),T=c.getCSR(M),N=t.length,E=x(f.reshape2d(T.indices,N,this.nNeighbors),f.reshape2d(T.values,N,this.nNeighbors),this.embedding),A=this.nEpochs?this.nEpochs/3:S.nRows<=1e4?100:30,I=S.getValues().reduce((function(t,e){return e>t?e:t}),0);S=S.map((function(t){return t<I/A?0:t})),S=c.eliminateZeros(S);var L=this.makeEpochsPerSample(S.getValues(),A),_=S.getRows(),R=S.getCols();return this.assignOptimizationStateParameters({headEmbedding:E,tailEmbedding:this.embedding,head:_,tail:R,currentEpoch:0,nEpochs:A,nVertices:S.getDims()[1],epochsPerSample:L}),this.prepareForOptimizationLoop(),this.optimizeLayout()},t.prototype.processGraphForSupervisedProjection=function(){var t=this.Y,e=this.X;if(t){if(t.length!==e.length)throw new Error("Length of X and y must be equal");if("categorical"===this.targetMetric){var n=this.targetWeight<1?1/(1-this.targetWeight)*2.5:1e12;this.graph=this.categoricalSimplicialSetIntersection(this.graph,t,n)}}},t.prototype.step=function(){var t=this.optimizationState.currentEpoch;return t<this.getNEpochs()&&this.optimizeLayoutStep(t),this.optimizationState.currentEpoch},t.prototype.getEmbedding=function(){return this.embedding},t.prototype.nearestNeighbors=function(t){var e,n=this.distanceFn,i=this.nNeighbors,s=u.makeNNDescent(n,this.random),o=5+Math.floor(.5==(e=Math.pow(t.length,.5)/20)?0:Math.round(e)),r=Math.max(5,Math.floor(Math.round(function(t){return Math.log(t)/Math.log(2)}(t.length))));this.rpForest=d.makeForest(t,i,o,this.random);var a=s(t,d.makeLeafArray(this.rpForest),i,r);return{knnIndices:a.indices,knnDistances:a.weights}},t.prototype.fuzzySimplicialSet=function(t,e,n){void 0===n&&(n=1);var i=this,s=i.knnIndices,o=void 0===s?[]:s,r=i.knnDistances,a=void 0===r?[]:r,l=i.localConnectivity,h=this.smoothKNNDistance(a,e,l),u=h.sigmas,d=h.rhos,f=this.computeMembershipStrengths(o,a,u,d),m=f.rows,p=f.cols,g=f.vals,y=[t.length,t.length],v=new c.SparseMatrix(m,p,g,y),b=c.transpose(v),w=c.pairwiseMultiply(v,b),C=c.subtract(c.add(v,b),w),S=c.multiplyScalar(C,n),M=c.multiplyScalar(w,1-n);return c.add(S,M)},t.prototype.categoricalSimplicialSetIntersection=function(t,e,n,i){void 0===i&&(i=1);var s=M(t,e,i,n);return T(s=c.eliminateZeros(s))},t.prototype.smoothKNNDistance=function(t,e,n,i,s){void 0===n&&(n=1),void 0===i&&(i=64),void 0===s&&(s=1);for(var o=Math.log(e)/Math.log(2)*s,r=f.zeros(t.length),a=f.zeros(t.length),l=0;l<t.length;l++){var h=0,c=1/0,u=1,d=t[l],m=d.filter((function(t){return t>0}));if(m.length>=n){var y=Math.floor(n),v=n-y;y>0?(r[l]=m[y-1],v>p&&(r[l]+=v*(m[y]-m[y-1]))):r[l]=v*m[0]}else m.length>0&&(r[l]=f.max(m));for(var b=0;b<i;b++){for(var w=0,C=1;C<t[l].length;C++){var S=t[l][C]-r[l];w+=S>0?Math.exp(-S/u):1}if(Math.abs(w-o)<p)break;w>o?u=(h+(c=u))/2:(h=u,c===1/0?u*=2:u=(h+c)/2)}if(a[l]=u,r[l]>0){var M=f.mean(d);a[l]<g*M&&(a[l]=g*M)}else{var T=f.mean(t.map(f.mean));a[l]<g*T&&(a[l]=g*T)}}return{sigmas:a,rhos:r}},t.prototype.computeMembershipStrengths=function(t,e,n,i){for(var s=t.length,o=t[0].length,r=f.zeros(s*o),a=f.zeros(s*o),l=f.zeros(s*o),h=0;h<s;h++)for(var c=0;c<o;c++){var u=0;-1!==t[h][c]&&(u=t[h][c]===h?0:e[h][c]-i[h]<=0?1:Math.exp(-(e[h][c]-i[h])/n[h]),r[h*o+c]=h,a[h*o+c]=t[h][c],l[h*o+c]=u)}return{rows:r,cols:a,vals:l}},t.prototype.initializeSimplicialSetEmbedding=function(){for(var t=this,e=this.getNEpochs(),n=this.nComponents,i=this.graph.getValues(),s=0,o=0;o<i.length;o++){var r=i[o];s<i[o]&&(s=r)}var a=this.graph.map((function(t){return t<s/e?0:t}));this.embedding=f.zeros(a.nRows).map((function(){return f.zeros(n).map((function(){return 20*f.tauRand(t.random)-10}))}));var l=[],h=[],c=[],u=a.getAll();for(o=0;o<u.length;o++){var d=u[o];d.value&&(l.push(d.value),c.push(d.row),h.push(d.col))}return{head:h,tail:c,epochsPerSample:this.makeEpochsPerSample(l,e)}},t.prototype.makeEpochsPerSample=function(t,e){var n=f.filled(t.length,-1),i=f.max(t),s=t.map((function(t){return t/i*e}));return s.forEach((function(t,i){t>0&&(n[i]=e/s[i])})),n},t.prototype.assignOptimizationStateParameters=function(t){Object.assign(this.optimizationState,t)},t.prototype.prepareForOptimizationLoop=function(){var t=this,e=t.repulsionStrength,n=t.learningRate,i=t.negativeSampleRate,s=this.optimizationState,o=s.epochsPerSample,a=s.headEmbedding,l=s.tailEmbedding,h=a[0].length,c=a.length===l.length,u=o.map((function(t){return t/i})),d=r(u),f=r(o);this.assignOptimizationStateParameters({epochOfNextSample:f,epochOfNextNegativeSample:d,epochsPerNegativeSample:u,moveOther:c,initialAlpha:n,alpha:n,gamma:e,dim:h})},t.prototype.initializeOptimization=function(){var t=this.embedding,e=this.embedding,n=this.optimizationState,i=n.head,s=n.tail,o=n.epochsPerSample,r=this.getNEpochs(),a=this.graph.nCols,l=S(this.spread,this.minDist),h=l.a,c=l.b;this.assignOptimizationStateParameters({headEmbedding:t,tailEmbedding:e,head:i,tail:s,epochsPerSample:o,a:h,b:c,nEpochs:r,nVertices:a})},t.prototype.optimizeLayoutStep=function(t){for(var e=this.optimizationState,n=e.head,i=e.tail,s=e.headEmbedding,o=e.tailEmbedding,r=e.epochsPerSample,a=e.epochOfNextSample,l=e.epochOfNextNegativeSample,h=e.epochsPerNegativeSample,c=e.moveOther,u=e.initialAlpha,d=e.alpha,m=e.gamma,p=e.a,g=e.b,y=e.dim,v=e.nEpochs,b=e.nVertices,S=0;S<r.length;S++)if(!(a[S]>t)){var M=n[S],T=i[S],x=s[M],N=o[T],E=C(x,N),A=0;E>0&&(A=-2*p*g*Math.pow(E,g-1),A/=p*Math.pow(E,g)+1);for(var I=0;I<y;I++){var L=w(A*(x[I]-N[I]),4);x[I]+=L*d,c&&(N[I]+=-L*d)}a[S]+=r[S];for(var _=Math.floor((t-l[S])/h[S]),R=0;R<_;R++){var k=f.tauRandInt(b,this.random),G=o[k],P=C(x,G),O=0;if(P>0)O=2*m*g,O/=(.001+P)*(p*Math.pow(P,g)+1);else if(M===k)continue;for(I=0;I<y;I++)L=4,O>0&&(L=w(O*(x[I]-G[I]),4)),x[I]+=L*d}l[S]+=_*h[S]}return e.alpha=u*(1-t/v),e.currentEpoch+=1,s},t.prototype.optimizeLayoutAsync=function(t){var e=this;return void 0===t&&(t=function(){return!0}),new Promise((function(n,o){var r=function(){return i(e,void 0,void 0,(function(){var e,i,a,l,h,c;return s(this,(function(s){try{if(e=this.optimizationState,i=e.nEpochs,a=e.currentEpoch,this.embedding=this.optimizeLayoutStep(a),l=this.optimizationState.currentEpoch,h=!1===t(l),c=l===i,h||c)return[2,n(c)];setTimeout((function(){return r()}),0)}catch(t){o(t)}return[2]}))}))};setTimeout((function(){return r()}),0)}))},t.prototype.optimizeLayout=function(t){void 0===t&&(t=function(){return!0});for(var e=!1,n=[];!e;){var i=this.optimizationState,s=i.nEpochs,o=i.currentEpoch;n=this.optimizeLayoutStep(o);var r=this.optimizationState.currentEpoch,a=!1===t(r);e=r===s||a}return n},t.prototype.getNEpochs=function(){var t=this.graph;if(this.nEpochs>0)return this.nEpochs;var e=t.nRows;return e<=2500?500:e<=5e3?400:e<=7500?300:200},t}();function v(t,e){for(var n=0,i=0;i<t.length;i++)n+=Math.pow(t[i]-e[i],2);return Math.sqrt(n)}e.UMAP=y,e.euclidean=v,e.cosine=function(t,e){for(var n=0,i=0,s=0,o=0;o<t.length;o++)n+=t[o]*e[o],i+=Math.pow(t[o],2),s+=Math.pow(e[o],2);return 0===i&&0===s?0:0===i||0===s?1:1-n/Math.sqrt(i*s)};var b=function(){this.currentEpoch=0,this.headEmbedding=[],this.tailEmbedding=[],this.head=[],this.tail=[],this.epochsPerSample=[],this.epochOfNextSample=[],this.epochOfNextNegativeSample=[],this.epochsPerNegativeSample=[],this.moveOther=!0,this.initialAlpha=1,this.alpha=1,this.gamma=1,this.a=1.5769434603113077,this.b=.8950608779109733,this.dim=2,this.nEpochs=500,this.nVertices=0};function w(t,e){return t>e?e:t<-e?-e:t}function C(t,e){for(var n=0,i=0;i<t.length;i++)n+=Math.pow(t[i]-e[i],2);return n}function S(t,e){var n=f.linear(0,3*t,300).map((function(t){return t<e?1:t})),i=f.zeros(n.length).map((function(i,s){return n[s]>=e?Math.exp(-(n[s]-e)/t):i})),s={x:n,y:i},r=m.default(s,(function(t){var e=o(t,2),n=e[0],i=e[1];return function(t){return 1/(1+n*Math.pow(t,2*i))}}),{damping:1.5,initialValues:[.5,.5],gradientDifference:.1,maxIterations:100,errorTolerance:.01}).parameterValues,a=o(r,2);return{a:a[0],b:a[1]}}function M(t,e,n,i){return void 0===n&&(n=1),void 0===i&&(i=5),t.map((function(t,s,o){return-1===e[s]||-1===e[o]?t*Math.exp(-n):e[s]!==e[o]?t*Math.exp(-i):t}))}function T(t){t=c.normalize(t,"max");var e=c.transpose(t),n=c.pairwiseMultiply(e,t);return t=c.add(t,c.subtract(e,n)),c.eliminateZeros(t)}function x(t,e,n){for(var i=f.zeros(t.length).map((function(t){return f.zeros(n[0].length)})),s=0;s<t.length;s++)for(var o=0;o<t[0].length;o++)for(var r=0;r<n[0].length;r++){var a=t[s][o];i[s][r]+=e[s][o]*n[a][r]}return i}e.findABParams=S,e.fastIntersection=M,e.resetLocalConnectivity=T,e.initTransform=x},4517:function(t,e){"use strict";var n=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}};function i(t,e){return Math.floor(e()*t)}function s(t){for(var e=[],n=0;n<t;n++)e.push(void 0);return e}function o(t,e){return s(t).map((function(){return e}))}function r(t){return o(t,0)}function a(t){return t.reduce((function(t,e){return t+e}))}Object.defineProperty(e,"__esModule",{value:!0}),e.tauRandInt=i,e.tauRand=function(t){return t()},e.norm=function(t){var e,i,s=0;try{for(var o=n(t),r=o.next();!r.done;r=o.next()){var a=r.value;s+=Math.pow(a,2)}}catch(t){e={error:t}}finally{try{r&&!r.done&&(i=o.return)&&i.call(o)}finally{if(e)throw e.error}}return Math.sqrt(s)},e.empty=s,e.range=function(t){return s(t).map((function(t,e){return e}))},e.filled=o,e.zeros=r,e.ones=function(t){return o(t,1)},e.linear=function(t,e,n){return s(n).map((function(i,s){return t+s*((e-t)/(n-1))}))},e.sum=a,e.mean=function(t){return a(t)/t.length},e.max=function(t){for(var e=0,n=0;n<t.length;n++)e=t[n]>e?t[n]:e;return e},e.max2d=function(t){for(var e=0,n=0;n<t.length;n++)for(var i=0;i<t[n].length;i++)e=t[n][i]>e?t[n][i]:e;return e},e.rejectionSample=function(t,e,n){for(var s=r(t),o=0;o<t;o++)for(var a=!0;a;){for(var l=i(e,n),h=!1,c=0;c<o;c++)if(l===s[c]){h=!0;break}h||(a=!1),s[o]=l}return s},e.reshape2d=function(t,e,n){var i=[],s=0;if(t.length!==e*n)throw new Error("Array dimensions must match input length.");for(var o=0;o<e;o++){for(var r=[],a=0;a<n;a++)r.push(t[s]),s+=1;i.push(r)}return i}},3336:t=>{"use strict";t.exports=$},976:t=>{"use strict";t.exports=DG},4469:t=>{"use strict";t.exports=grok},701:t=>{"use strict";t.exports=rxjs},3870:t=>{"use strict";t.exports=ui},6414:t=>{"use strict";t.exports=wu}},e={};function n(i){var s=e[i];if(void 0!==s)return s.exports;var o=e[i]={id:i,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.exports}n.m=t,n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},n.u=t=>t+".js",n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;n.g.importScripts&&(t=n.g.location+"");var e=n.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var i=e.getElementsByTagName("script");i.length&&(t=i[i.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=t})(),n.b=document.baseURI||self.location.href,n.nc=void 0;var i=n(473);bio=i})();
|
|
1
|
+
var bio;(()=>{var t={2012:(t,e,n)=>{"use strict";n.d(e,{f:()=>s});var i=n(9976);class s extends i.B{static get Lesk(){return void 0===this.lesk&&(this.lesk=this.makePalette([[["G","A","S","T"],"orange"],[["C","V","I","L","P","F","Y","M","W"],"all_green"],[["N","Q","H"],"magenta"],[["D","E"],"red"],[["K","R"],"all_blue"]],!1,s)),this.lesk}static get GrokGroups(){return void 0===this.grokGroups&&(this.grokGroups=this.makePalette([[["C","U"],"yellow"],[["G","P"],"red"],[["A","V","I","L","M","F","Y","W"],"all_green"],[["R","H","K"],"light_blue"],[["D","E"],"dark_blue"],[["S","T","N","Q"],"orange"]],!1,s)),this.grokGroups}static get RasMol(){return void 0===this.rasMol&&(this.rasMol=new s({D:"#E60A0A",E:"#E60A0A",C:"#E6E600",M:"#E6E600",K:"#145AFF",R:"#145AFF",S:"#FA9600",T:"#FA9600",F:"#3232AA",Y:"#3232AA",N:"#00DCDC",Q:"#00DCDC",G:"#EBEBEB",L:"#0F820F",V:"#0F820F",I:"#0F820F",A:"#C8C8C8",W:"#B45AB4",H:"#8282D2",P:"#DC9682",others:"#BEA06E"})),this.rasMol}get(t){const e=t in s.aaSynonyms?s.aaSynonyms[t]:t;return super.get(e)}}s.aaSynonyms={MeNle:"L",MeA:"A",MeG:"G",MeF:"F"};class o{static getPalette(t="grok"){switch(t){case"grok":return s.GrokGroups;case"lesk":return s.Lesk;default:throw new Error(`ChemPalette: scheme \`${t}\` does not exist`)}}static getInnerOuter(t){let e=0,n="",i="";for(const s of t)"("==s?e++:")"==s?e--:e?n+=s:i+=s;return isNaN(parseInt(n))?[i,n]:[i,""]}static getColorAAPivot(t="",e="grok"){var n,i,s;const o=this.getPalette(e);let[r,a]=this.getInnerOuter(t);if(r=r.length>6?`${r.slice(0,3)}...`:r,a=a.length>6?`${a.slice(0,3)}...`:a,1==t.length||"("==t[1]){const e=null===(n=t[0])||void 0===n?void 0:n.toUpperCase();return e in o?[o.get(e),e,a,1]:[this.undefinedColor,r,a,1]}if("d"==t[0]&&t[1]in o&&(2==t.length||"("==t[2])){const e=null===(i=t[1])||void 0===i?void 0:i.toUpperCase();return e in o?[o.get(e),e,a,2]:[this.undefinedColor,r,a,2]}if(t.substring(0,3)in this.AAFullNames&&(3==t.length||"("==t[3])){const e=this.AAFullNames[t.substring(0,3)];return e in o?[o.get(e),e,a,3]:[this.undefinedColor,r,a,3]}if((null===(s=t[0])||void 0===s?void 0:s.toLowerCase())==t[0]&&t.substring(1,3)in this.AAFullNames&&(4==t.length||"("==t[4])){const e=this.AAFullNames[t.substring(1,3)];return e in o?[o.get(e),e,a,4]:[this.undefinedColor,r,a,4]}return[this.undefinedColor,r,a,0]}}o.SemType="Aminoacids",o.SemTypeMultipleAlignment="AminoacidsMultipleAlignment",o.undefinedColor="rgb(100,100,100)",o.Names={G:"Glycine",L:"Leucine",Y:"Tyrosine",S:"Serine",E:"Glutamic acid",Q:"Glutamine",D:"Aspartic acid",N:"Asparagine",F:"Phenylalanine",A:"Alanine",K:"Lysine",R:"Arginine",H:"Histidine",C:"Cysteine",V:"Valine",P:"Proline",W:"Tryptophan",I:"Isoleucine",M:"Methionine",T:"Threonine"},o.AASmiles={G:"NCC(=O)O",L:"N[C@H](CC(C)C)C(=O)O",Y:"NC(CC1=CC=C(O)C=C1)C(=O)O",S:"NC(CO)C(=O)O",E:"N[C@@H](CCC(O)=O)C(=O)O",Q:"N[C@@H](CCC(N)=O)C(=O)O",D:"N[C@@H](CC(O)=O)C(=O)O",N:"N[C@@H](CC(N)=O)C(=O)O",F:"NC(CC1=CC=CC=C1)C(=O)O",A:"N[C@H](C)C(=O)O",K:"NC(CCCCN)C(=O)O",R:"N[C@H](CCCNC(=N)C)C(=O)O",H:"NC(CC1=CN=C[N]1)C(=O)O",C:"N[C@@H](CS)C(=O)O",V:"NC(C(C)C)C(=O)O",P:"N(CCC1)C1C(=O)O",W:"N[C@@H](Cc1c2ccccc2n([H])c1)C(=O)O",I:"N[C@H]([C@H](C)CC)C(=O)O",M:"NC(CCSC)C(=O)O",T:"NC(C(O)C)C(=O)O"},o.AASmilesTruncated={G:"*C*",L:"CC(C)C[C@H](*)*",Y:"C1=CC(=CC=C1CC(*)*)O",S:"OCC(*)C*",E:"*[C@@H](CCC(O)=O)*",Q:"*N[C@@H](CCC(N)=O)*",D:"*[C@@H](CC(O)=O)*",N:"*[C@@H](CC(N)=O)*",F:"C1=CC=C(C=C1)CC(*)*",A:"C[C@H](*)*",K:"C(CCN)CC(*)*",R:"*[C@H](CCCNC(=N)C)*",H:"C1=C(NC=N1)CC(*)*",C:"C([C@@H](*)*)S",V:"CC(C)C(*)*",P:"C1CCN(*)C1*",W:"*[C@@H](Cc1c2ccccc2n([H])c1)*",I:"CC[C@H](C)[C@H](*)*",M:"CSCCC(*)*",T:"CC(O)C(*)*"},o.AAFullNames={Ala:"A",Arg:"R",Asn:"N",Asp:"D",Cys:"C",Gln:"Q",Glu:"E",Gly:"G",His:"H",Ile:"I",Leu:"L",Lys:"K",Met:"M",Phe:"F",Pro:"P",Ser:"S",Thr:"T",Trp:"W",Tyr:"Y",Val:"V"}},7228:(t,e,n)=>{"use strict";n.d(e,{DC:()=>r,JN:()=>l,Xk:()=>a});var i=n(976),s=(n(4469),n(1047)),o=(n(585),function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))});const r=["symbol","name","molfile","rgroups","polymerType","monomerType"];function a(t){const e=[];for(let n=0;n<t.rowCount;n++){const i={};Object.keys(s.K4).forEach((e=>{if("symbol"===e){const o=t.get(s.K4[e],n);i[e]="."===o?t.get(s.At,n):o}else if("rgroups"===e){const o=t.get(s.K4[e],n).split("\n"),r=[];o.forEach((t=>{const e={},n=t.substring(t.lastIndexOf("]")+1),i=t.match(/\[R(\d+)\]/)[1];e.capGroupSmiles="H"===n?`[*:${i}][H]`:`O[*:${i}]`,e.alternateId="H"===n?`R${i}-H`:`R${i}-OH`,e.capGroupName="H"===n?"H":"OH",e.label=`R${i}`,r.push(e)})),i[e]=r}else s.K4[e]&&(i[e]=t.get(s.K4[e],n))})),e.push(i)}return e}function l(){return o(this,void 0,void 0,(function*(){const t=i.Func.find({package:"Bio",name:"getMonomerLibHelper"});if(0===t.length)throw new Error('Package "Bio" must be installer for MonomerLibraryHelper.');return(yield t[0].prepare().call()).getOutputParamValue()}))}},6103:(t,e,n)=>{"use strict";n.d(e,{i0:()=>P});var i=n(4469),s=n(976),o=n(1047),r=n(585),a=n(7767),l=n(7604),h=n(499),c=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const u=8,d="M RGP",f="A ",m=14,p=7,g="\nDatagrok macromolecule handler\n\n",y=" 0 0 0 0 0 0 999 V3000\n",v="M V30 BEGIN CTAB\n",b="M V30 END CTAB\n",w="M V30 COUNTS ",C=" 0 0 0\n",S="M V30 BEGIN ATOM\n",M="M V30 END ATOM\n",x="M V30 BEGIN BOND\n",T="M V30 END BOND\n",N=" CFG=",E="M V30 ",A="M END",I=1e4,L="d",_="r",R="p",k="O",G="H";function P(t,e,n){return c(this,void 0,void 0,(function*(){if(0===s.Func.find({package:"Chem",name:"getRdKitModule"}).length)return{col:null,warnings:['Transformation to atomic level requires the package "Chem" installed.']};if(e.semType!==s.SEMTYPE.MACROMOLECULE)return{col:null,warnings:[`Only the ${s.SEMTYPE.MACROMOLECULE} columns can be converted to atomic level, the chosen column has semType '${e.semType}'`]};let u=e;new h.C(e).isHelm()&&(u=new a.L(e).convert("separator","."),u.name=e.name);const d=new h.C(u).alphabet;let f;if("PT"===d||"UN"===d)f="PEPTIDE";else{if("RNA"!==d&&"DNA"!==d)return{col:null,warnings:[`Unexpected column's '${u.name}' alphabet '${d}'.`]};f="RNA"}const m=function(t){const e=t.length,n=new Array(e),i=t.getTag(s.TAGS.UNITS),o=t.getTag("separator"),a=(0,r.vU)(i,o);for(let i=0;i<e;++i){const e=t.get(i);n[i]=e?a(e).filter((t=>""!==t)):[]}return n}(u),p=yield function(t,e,n,s){return c(this,void 0,void 0,(function*(){const r=function(t,e,n){const i=new Map;for(const s of t.getTypes())for(const r of t.getMonomerNamesByType(s)){const a=t.getMonomer(s,r);if(a.polymerType===e&&("RNA"===e&&("Branch"===a.monomerType||"DNA"===n&&a.symbol===L||"RNA"===n&&a.symbol===_||a.symbol===R)||"PEPTIDE"===e&&"Branch"!==a.monomerType)){const t={};o.rx.forEach((e=>{t[e]=a[e]})),i.set(a.symbol,t)}}return i}(e,n,s),a=new Map,h=yield i.functions.call("Chem:getRdKitModule"),c={value:null};if("RNA"===n){const t="RNA"===s?[_,R]:[L,R];for(const e of t)O(a,e,r,h,n,c)}for(let e=0;e<t.length;++e){const i=t[e];for(const t of i)if(""!==t)try{O(a,t,r,h,n,c)}catch(e){const n=(0,l.O)(e);throw console.error(`bio lib: getMonomersDictFromLib() sym='${t}', error:\n`+n),new Error(`Сan't get monomer '${t}' from library: ${n}`)}}return a}))}(m,n,f,d),g=u.length,y=new Array(g),v=new Array(0);for(let t=0;t<g;++t)try{const e=m[t];y[t]=X(e,p,d,f,0)}catch(e){const n=`Cannot get molfile of row #${t}: ${e instanceof Error?e.message:e.toString()}.`;v.push(n)}if(v.length>.05*g)throw new Error("Too many errors getting molfiles.");const b=`molfile(${u.name})`,w=t.columns.getUnusedName(b),C=s.Column.fromStrings(w,y);return C.semType=s.SEMTYPE.MOLECULE,C.setTag(s.TAGS.UNITS,s.UNITS.Molecule.MOLBLOCK),{col:C,warnings:v}}))}function O(t,e,n,i,s,o){if(!t.has(e)){const r=function(t,e,n,i,s){if(e.has(t)){const o=e.get(t),r=function(t){const e=[];for(const n of t){let t=n.capGroupSmiles;t||(t=n.capGroupSMILES),t=t.replace(/(\[|\]|\*|:|\d)/g,""),e.push(t)}return e}(o.rgroups),a=function(t){const e=new Map;let n=t.indexOf(f,0),i=n;for(;-1!==n;){i=t.indexOf("\n",n);const s=parseInt(t.substring(n,i).replace(/^A\s+/,""));n=t.indexOf("R",i),i=t.indexOf("\n",n);const o=parseInt(t.substring(n,i).replace(/^R/,""));e.set(s,o),n=t.indexOf(f,i)}for(n=t.indexOf(d,0),i=t.indexOf("\n",n);-1!==n;){n+=u,i=t.indexOf("\n",n);const s=t.substring(n,i).replaceAll(/\s+/g," ").split(" ").map((t=>parseInt(t))).slice(1);for(let t=0;t<s.length;t+=2){if(e.has(s[t])&&e.get(s[t])!==s[t+1])throw new Error(`r-group index ${s[t]} has already been added with a different value`);e.set(s[t],s[t+1])}n=t.indexOf(d,i)}return e}(o.molfile),l=function(t,e){const n=e.get_mol(t),i=n.get_v3Kmolblock();return n.delete(),i}(function(t){let e=t.indexOf(f,0);-1===e&&(e=t.indexOf(d));const n=t.indexOf(A,e);return t.substring(0,e)+t.substring(n)}(o.molfile),n),h=function(t){let e=(t=t.replaceAll("\r","")).indexOf(w)+m,n=t.indexOf(" ",e+1);const i=parseInt(t.substring(e,n));return e=n+1,n=t.indexOf(" ",e+1),{atomCount:i,bondCount:parseInt(t.substring(e,n))}}(l),c=function(t,e){const n=new Array(e),i=new Float32Array(e),s=new Float32Array(e),o=new Array(e);let r=t.indexOf(S);r=t.indexOf("\n",r);let a=r;for(let l=0;l<e;l++){r=t.indexOf(E,r)+p,a=t.indexOf(" ",r),r=a+1,a=t.indexOf(" ",r),n[l]=t.substring(r,a);const e=new Array(2);for(let n=0;n<2;++n)r=a+1,a=t.indexOf(" ",r),e[n]=parseFloat(t.substring(r,a));i[l]=e[0],s[l]=e[1],r=a,a=t.indexOf("\n",r)+1,o[l]=t.slice(r,a),r=a}return{atomTypes:n,x:i,y:s,kwargs:o}}(l,h.atomCount),g=function(t,e){const n=new Uint32Array(e),i=new Array(e),s=new Map,o=new Map;let r=t.indexOf(x);r=t.indexOf("\n",r);let a=r;for(let l=0;l<e;++l){const e=new Array(3);r=t.indexOf(E,a)+p,a=t.indexOf(" ",r);for(let n=0;n<3;++n)r=a+1,a=Math.min(t.indexOf("\n",r),t.indexOf(" ",r)),e[n]=parseInt(t.slice(r,a));n[l]=e[0],i[l]=e.slice(1);const h=t.indexOf("\n",r);let c=t.slice(a,h),u=c.indexOf(N);if(-1!==u){u=c.indexOf("=",u)+1;let t=c.indexOf(" ",u);-1===t&&(t=c.length);const e=parseInt(c.slice(u,t));s.set(l,e);const n=N+e.toString();c=c.replace(n,"")}c||o.set(l,c)}return{bondTypes:n,atomPairs:i,bondConfiguration:s,kwargs:o}}(l,h.bondCount),y={atoms:c,bonds:g,meta:F(c,g,r,a)};return"PEPTIDE"===i?function(t){const e=t.meta.terminalNodes[0]-1,n=t.meta.rNodes[0]-1,i=t.atoms.x,s=t.atoms.y;z(t,-i[e],-s[e]);const o=D(i[n],s[n]);B(t.atoms,-o),i[t.meta.rNodes[1]-1]<0&&function(t){Y(t,!1)}(t);const r=function(t){const e=function(t){var e;const n=new Map;for(const i of t.bonds.atomPairs)for(let t=0;t<2;t++){const s=i[t],o=i[(t+1)%2];n.has(s)?null===(e=n.get(s))||void 0===e||e.push(o):n.set(s,new Array(1).fill(o))}return n}(t);let n=0,i=0;for(;0===n;){const s=e.get(t.meta.terminalNodes[1])[i];t.atoms.atomTypes[s-1]===k&&s!==t.meta.rNodes[1]&&(n=s),i++}return n}(t);!function(t,e){t.atoms.y[t.meta.rNodes[1]-1]<0&&t.atoms.y[e-1]<0&&(function(t){Y(t,!0)}(t),B(t.atoms,-function(t,e){return D(t,e)+Math.PI/2}(t.atoms.x[t.meta.terminalNodes[1]-1],t.atoms.y[t.meta.terminalNodes[1]-1])))}(t,r),function(t,e){const n=t.atoms.x;n[t.meta.rNodes[1]-1]>n[e-1]&&function(t,e,n){const i=e-1,s=n-1,o=t.atoms.x,r=t.atoms.y,a=o[i],l=r[i];o[i]=o[s],r[i]=r[s],o[s]=a,r[s]=l}(t,e,t.meta.rNodes[1])}(t,r)}(y):t===_||t===L?function(t,e){const n=t.atoms.x,i=t.atoms.y;let s=t.meta.terminalNodes[0]-1;const o=t.meta.rNodes[1]-1;z(t,-n[s],-i[s]);const r=D(n[o],i[o]);B(t.atoms,3*Math.PI/2-r),e.value=function(t){const e=t.atoms.x,n=t.atoms.y,i=t.meta.rNodes[2]-1,s=t.meta.terminalNodes[2]-1,o=e[i]-e[s],r=n[i]-n[s];return Math.atan(r/o)+Math.PI/2}(t),s=t.meta.terminalNodes[0]-1,z(t,-n[s],-i[s])}(y,s):t===R?function(t){const e=t.meta.terminalNodes[0]-1,n=t.meta.rNodes[0]-1,i=t.atoms.x,s=t.atoms.y;z(t,-i[e],-s[e]);const o=D(i[n],s[n]);B(t.atoms,Math.PI/2-o)}(y):function(t,e){const n=t.atoms.x,i=t.atoms.y,s=t.meta.terminalNodes[0]-1,o=t.meta.rNodes[0]-1;z(t,-n[s],-i[s]);const r=D(n[o],i[o]),a=e.value;if(!a)throw new Error("The value of sugarBranchToOYAngle is null");B(t.atoms,Math.PI-r+a);const l=function(t,e){return et(Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)))}({x:n[t.meta.rNodes[0]-1],y:i[t.meta.rNodes[0]-1]},{x:n[t.meta.terminalNodes[0]-1],y:i[t.meta.terminalNodes[0]-1]});if(1!=l)for(let t=0;t<n.length;++t)n[t]=et(n[t]/l),i[t]=et(i[t]/l)}(y,s),function(t,e,n){"PEPTIDE"===t?(V(e,t),Z(e,e.meta.rNodes[1])):n===_||n===L?(Z(e,e.meta.rNodes[1]),e.meta.rNodes[1]=e.meta.terminalNodes[1],W(e.bonds,e.meta),V(e,t),Z(e,e.meta.rNodes[1]),Z(e,e.meta.rNodes[0]),Z(e,e.meta.rNodes[2])):n===R&&(e.meta.terminalNodes[0]=e.meta.rNodes[0],z(e,-e.atoms.x[e.meta.terminalNodes[0]-1],-e.atoms.y[e.meta.terminalNodes[0]-1]),V(e,t),Z(e,e.meta.rNodes[1]))}(i,y,t),function(t){let e=0;for(;e<t.atoms.atomTypes.length;)t.atoms.atomTypes[e]===G&&(Z(t,e+1),--e),++e}(y),y}return null}(e,n,i,s,o);if(!r)throw new Error(`Monomer with symbol '${e}' is absent the monomer library`);t.set(e,r)}}function F(t,e,n,i){const s={backboneShift:null,branchShift:null,terminalNodes:[],rNodes:[]};return void 0!==n&&void 0!==i?(function(t,e,n){for(const[i,s]of n)t.atomTypes[i-1]=e[s-1]}(t,n,i),function(t,e){e.rNodes=Array.from(t.keys());for(let n=0;n<e.rNodes.length;n++)for(const i of[1,2])if(t.get(e.rNodes[n])===i){const t=e.rNodes[i-1];e.rNodes[i-1]=e.rNodes[n],e.rNodes[n]=t}}(i,s)):s.rNodes=[0,t.x.length],W(e,s),s}function W(t,e){const n=e.rNodes;e.terminalNodes=new Array(n.length).fill(0);const i=e.terminalNodes,s=t.atomPairs;let o=0,r=0;for(;o<s.length&&r<i.length;){for(let t=0;t<i.length;++t)for(let e=0;e<2;++e)s[o][e]===n[t]&&(i[t]=s[o][(e+1)%2],n.length,++r);++o}}function V(t,e){t.meta.rNodes.length>1&&(t.meta.backboneShift=H(t,t.meta.rNodes[1]-1,t.meta.terminalNodes[0]-1)),"RNA"===e&&t.meta.rNodes.length>2&&(t.meta.branchShift=H(t,t.meta.rNodes[2]-1,t.meta.terminalNodes[0]-1))}function H(t,e,n){return[et(t.atoms.x[e]-t.atoms.x[n]),et(t.atoms.y[e]-t.atoms.y[n])]}function Z(t,e){if(void 0!==e){const n=e-1,i=t.atoms,s=t.bonds,o=t.meta;i.atomTypes.splice(n,1),i.x=U(Float32Array,i.x,n,1),i.y=U(Float32Array,i.y,n,1),i.kwargs.splice(n,1);for(let t=0;t<o.terminalNodes.length;++t)o.terminalNodes[t]>e?--o.terminalNodes[t]:o.terminalNodes[t]===e&&(o.terminalNodes[t]=-1);for(let t=0;t<o.rNodes.length;++t)o.rNodes[t]>e?--o.rNodes[t]:o.rNodes[t]===e&&(o.rNodes[t]=-1);let r=0;for(;r<s.atomPairs.length;){const t=s.atomPairs[r][0],n=s.atomPairs[r][1];t===e||n===e?(s.atomPairs.splice(r,1),s.bondTypes=U(Uint32Array,s.bondTypes,r,1),s.bondConfiguration.has(r)&&s.bondConfiguration.delete(r),s.kwargs.has(r)&&s.kwargs.delete(r),--r):(s.atomPairs[r][0]=t>e?t-1:t,s.atomPairs[r][1]=n>e?n-1:n),++r}let a=Array.from(s.bondConfiguration.keys());a.forEach((t=>{if(s.bondConfiguration.has(t)&&t>n){const e=s.bondConfiguration.get(t);s.bondConfiguration.delete(t),s.bondConfiguration.set(t-1,e)}})),a=Array.from(s.kwargs.keys()),a.forEach((t=>{if(s.kwargs.has(t)&&t>n){const e=s.kwargs.get(t);s.kwargs.delete(t),s.kwargs.set(t-1,e)}}))}}function U(t,e,n,i){const s=new t(e.length-i);let o=0,r=0;for(;o<e.length;)o===n&&(o+=i),s[r]=e[o],++r,++o;return s}function D(t,e){let n;if(0===t)n=e>0?0:Math.PI;else if(0===e)n=t>0?-Math.PI/2:Math.PI/2;else{const i=e/t,s=Math.atan(i);n=t<0?Math.PI/2+s:-Math.PI/2+s}return n}function B(t,e){if(0!==e){const n=t.x,i=t.y,s=Math.cos(e),o=Math.sin(e);for(let t=0;t<n.length;++t){const e=n[t];n[t]=et(e*s-i[t]*o),i[t]=et(e*o+i[t]*s)}}}function Y(t,e){if(e){const e=t.atoms.y;for(let t=0;t<e.length;t++)e[t]=-e[t]}else{const e=t.atoms.x;for(let t=0;t<e.length;t++)e[t]=-e[t]}const n=t.bonds.bondConfiguration;for(const[t,e]of n){const i=1===e?3:1;n.set(t,i)}}function z(t,e,n){const i=t.atoms.x,s=t.atoms.y;for(let t=0;t<i.length;++t)i[t]=et(i[t]+e),void 0!==n&&(s[t]=et(s[t]+n))}function X(t,e,n,i,s){if(0===t.length)return"";const o=0===s?tt:nt,{atomCount:r,bondCount:a}=o(t,e,n,i,s),l=new Array(r),h=new Array(a);let c,u=null,d=null;0===s?"PEPTIDE"===i?c=q:(c=$,u="DNA"===n?e.get(L):e.get(_),d=e.get(R)):c=K;const f={i:0,nodeShift:0,bondShift:0,backbonePositionShift:new Array(2).fill(0),branchPositionShift:new Array(2).fill(0),backboneAttachNode:0,branchAttachNode:0,flipFactor:1},m={sugar:u,phosphate:d,seqLength:t.length,atomCount:r,bondCount:a};for(f.i=0;f.i<m.seqLength;++f.i)c(e.get(t[f.i]),l,h,f,m);!function(t,e,n,i,s){if(0===s){const s=n.nodeShift+1;t[i.atomCount]=E+s+" "+k+" "+et(n.backbonePositionShift[0])+" "+n.flipFactor*et(n.backbonePositionShift[1])+" 0.000000 0\n";const o=n.backboneAttachNode,r=s;e[i.bondCount]=E+n.bondShift+" 1 "+o+" "+r+"\n"}}(l,h,f,m,s);let p="";return p+=g,p+=y,p+=v,p+=w+r+" "+a+C,p+=S,p+=l.join(""),p+=M,p+=x,p+=h.join(""),p+=T,p+=b,p+=A,p}function q(t,e,n,i){i.flipFactor=Math.pow(-1,i.i%2),j(t,e,n,i)}function K(t,e,n,i){J(t,e,n,i)}function j(t,e,n,i){!function(t,e,n){for(let i=0;i<t.atoms.atomTypes.length;++i){const s=n.nodeShift+i+1;e[n.nodeShift+i]=E+s+" "+t.atoms.atomTypes[i]+" "+et(n.backbonePositionShift[0]+t.atoms.x[i])+" "+et(n.backbonePositionShift[1]+n.flipFactor*t.atoms.y[i])+" "+t.atoms.kwargs[i]}}(t,e,i),Q(t,n,i),function(t,e,n){if(0!==n.backboneAttachNode){const i=n.bondShift,s=n.backboneAttachNode,o=t.meta.terminalNodes[0]+n.nodeShift;e[n.bondShift-1]=E+i+" 1 "+s+" "+o+"\n"}}(t,n,i),null!==t.meta.branchShift&&t.meta.terminalNodes.length>2&&function(t,e){e.branchAttachNode=e.nodeShift+t.meta.terminalNodes[2];for(let n=0;n<2;++n)e.branchPositionShift[n]=e.backbonePositionShift[n]+t.meta.branchShift[n]}(t,i),function(t,e){e.backboneAttachNode=e.nodeShift+t.meta.terminalNodes[1],e.bondShift+=t.bonds.atomPairs.length+1,e.nodeShift+=t.atoms.atomTypes.length,e.backbonePositionShift[0]+=t.meta.backboneShift[0],e.backbonePositionShift[1]+=e.flipFactor*t.meta.backboneShift[1]}(t,i)}function $(t,e,n,i,s){if(0===i.i)j(s.sugar,e,n,i);else for(const t of[s.phosphate,s.sugar])j(t,e,n,i);J(t,e,n,i)}function J(t,e,n,i){!function(t,e,n){for(let i=0;i<t.atoms.atomTypes.length;++i){const s=n.nodeShift+i+1;e[n.nodeShift+i]=E+s+" "+t.atoms.atomTypes[i]+" "+et(n.branchPositionShift[0]+t.atoms.x[i])+" "+et(n.branchPositionShift[1]+n.flipFactor*t.atoms.y[i])+" "+t.atoms.kwargs[i]}}(t,e,i),Q(t,n,i),function(t,e,n){const i=n.bondShift,s=n.branchAttachNode,o=t.meta.terminalNodes[0]+n.nodeShift;e[i-1]=E+i+" 1 "+s+" "+o+"\n"}(t,n,i);const s=i.bondShift,o=i.branchAttachNode,r=t.meta.terminalNodes[0]+i.nodeShift;n[s-1]=E+s+" 1 "+o+" "+r+"\n",i.bondShift+=t.bonds.atomPairs.length+1,i.nodeShift+=t.atoms.atomTypes.length}function Q(t,e,n){for(let i=0;i<t.bonds.atomPairs.length;++i){const s=n.bondShift+i+1,o=t.bonds.atomPairs[i][0]+n.nodeShift,r=t.bonds.atomPairs[i][1]+n.nodeShift;let a="";if(t.bonds.bondConfiguration.has(i)){let e=t.bonds.bondConfiguration.get(i);n.flipFactor<0&&(e=1===e?3:1),a=" CFG="+e}const l=t.bonds.kwargs.has(i)?" "+t.bonds.kwargs.get(i):"";e[n.bondShift+i]=E+s+" "+t.bonds.bondTypes[i]+" "+o+" "+r+a+l+"\n"}}function tt(t,e,n,i,s){let o=0,r=0;for(const n of t){if(""===n)continue;const t=e.get(n);o+=t.atoms.x.length,r+=t.bonds.bondTypes.length}if(0===s)if("PEPTIDE"===i)o+=1,r+=t.length;else{const i="DNA"===n?e.get(L):e.get(_),s=e.get(R);o+=(t.length-1)*s.atoms.x.length,o+=t.length*i.atoms.x.length,o+=1,r+=(t.length-1)*s.bonds.bondTypes.length,r+=t.length*i.bonds.bondTypes.length,r-=1,r+=3*t.length}return{atomCount:o,bondCount:r}}function et(t){return Math.round(I*t)/I}function nt(t,e,n,i){let s=0,o=0;for(const n of t){const t=e.get(n);s+=t.atoms.x.length,o+=t.bonds.bondTypes.length}if("PEPTIDE"===i)s+=1,o+=t.length;else{const i="DNA"===n?e.get(L):e.get(_),r=e.get(R);s+=t.length*(r.atoms.x.length+i.atoms.x.length),s+=1,o+=t.length*(r.bonds.bondTypes.length+i.bonds.bondTypes.length),o+=3*t.length}return{atomCount:s,bondCount:o}}},6137:(t,e,n)=>{"use strict";n.d(e,{J:()=>s});var i=n(9976);class s extends i.B{static get Chromatogram(){return void 0===this.chromatogram&&(this.chromatogram=new s({A:"green",C:"blue",G:"black",T:"red",U:"red",others:"gray"})),this.chromatogram}}class o{}o.SemType="Nucleotides",o.SemTypeMultipleAlignment="NucleotidesMultipleAlignment",o.Names={A:"Adenine",C:"Cytosine",G:"Guanine",T:"Thymine",U:"Uracil"}},9976:(t,e,n)=>{"use strict";n.d(e,{B:()=>i});class i{static makePalette(t,e=!1,n=i){const s={};return t.forEach((t=>{const n=t[0],i=t[1];n.forEach(((t,n)=>{s[t]=this.colourPalette[i][e?0:n]}))})),new n(s)}constructor(t){this._palette=t}get(t){return this._palette[t]}}i.undefinedColor="rgb(100,100,100)",i.colourPalette={orange:["rgb(255,187,120)","rgb(245,167,100)","rgb(235,137,70)","rgb(205, 111, 71)"],all_green:["rgb(44,160,44)","rgb(74,160,74)","rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)","rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],all_blue:["rgb(31,119,180)","rgb(23,190,207)","rgb(122, 102, 189)","rgb(158,218,229)","rgb(141, 124, 217)","rgb(31, 120, 150)"],magenta:["rgb(162,106,192)","rgb(197,165,224)","rgb(208,113,218)"],red:["rgb(214,39,40)","rgb(255,152,150)"],st_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(31,119,180)"],dark_blue:["rgb(31,119,180)","rgb(31, 120, 150)"],light_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(108, 218, 229)","rgb(23,190,227)"],lilac_blue:["rgb(124,102,211)","rgb(149,134,217)","rgb(97, 81, 150)"],dark_green:["rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)"],green:["rgb(44,160,44)","rgb(74,160,74)"],light_green:["rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],st_green:["rgb(44,160,44)","rgb(152,223,138)","rgb(39, 174, 96)","rgb(74,160,74)"],pink:["rgb(247,182,210)"],brown:["rgb(140,86,75)","rgb(102, 62, 54)"],gray:["rgb(127,127,127)","rgb(199,199,199)","rgb(196,156,148)","rgb(222, 222, 180)"],yellow:["rgb(188,189,34)"],white:["rgb(230,230,230)"]}},6535:(t,e,n)=>{"use strict";n.d(e,{H:()=>i});class i{get data(){return this._data}get size(){return this._size}constructor(t,e){if(null==e){if(null==t)throw new Error("Arguments error: data or size is required.");if(this._data=t,this._size=(1+Math.sqrt(1+8*this._data.length))/2,this._size!=Math.floor(this._size))throw new Error(`Invalid data length ${this._data.length} leads to non integer size ${this._size}`)}else{this._size=e;const n=e*(e-1)/2;if(t){if(t.length!=n)throw new Error(`Invalid data length. Observations size ${e} requires data length ${n}.`);this._data=t}else this._data=new Float32Array(n)}}_linearizeIJ(t,e){if(!(t<e))throw new Error("i must be less than j");return this._size*t+e-Math.floor((t+2)*(t+1)/2)}get(t,e){return t==e?0:t<e?this._data[this._linearizeIJ(t,e)]:this._data[this._linearizeIJ(e,t)]}set(t,e,n){this._data[this._linearizeIJ(t,e)]=n}static calc(t,e){const n=t.length,s=new i(void 0,n);for(let i=0;i<n;i++)for(let o=i+1;o<n;o++)s.set(i,o,e(t[i],t[o]));return s}square(){for(let t=0;t<this._data.length;t++)this._data[t]=Math.pow(this._data[t],2)}add(t){if(this._size!==t._size)throw new Error(`Matrices must have the same size. This size: ${this._size}, other size: ${t._size}`);for(let e=0;e<this._data.length;e++)this._data[e]+=t._data[e]}sqrt(){for(let t=0;t<this._data.length;t++)this._data[t]=Math.sqrt(this._data[t])}normalize(){let t=this._data[0],e=this._data[0];for(let n=0;n<this._data.length;n++)this._data[n]<t&&(t=this._data[n]),this._data[n]>e&&(e=this._data[n]);const n=e-t;for(let i=0;i<this._data.length;i++)this._data[i]=0===n?this._data[i]-t:(this._data[i]-t)/(e-t)}}},7331:(t,e,n)=>{"use strict";n.d(e,{UE:()=>h});var i=n(976),s=n(9976);class o{static hashCode(t){let e=0;if(0===t.length)return e;for(let n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n),e|=0;return e}}class r{}class a extends r{get(t){return"#666666"}}class l extends r{static buildPalette(){return[].concat(...Object.values(s.B.colourPalette))}get(t){const e=o.hashCode(t)%l.palette.length;return function(t){if(null==t)return"rgb(100,100,100)";const e=i.Color.fromHtml(t),n=i.Color.g(e),s=i.Color.r(e),o=i.Color.b(e),r=Math.sqrt(Math.pow(0-s,2)+Math.pow(0-n,2)+Math.pow(0-o,2));return r>210?`rgb(${s/r*210},${n/r*210},${o/r*210})`:i.Color.toRgb(e)}(l.palette[e])}}l.palette=l.buildPalette();class h extends s.B{static get Gray(){return void 0===this.gray&&(this.gray=new a),this.gray}static get Color(){return void 0===this.color&&(this.color=new l),this.color}}},1047:(t,e,n)=>{"use strict";n.d(e,{At:()=>s,K4:()=>o,rx:()=>i});const i=["symbol","molfile","rgroups","name"],s="MonomerName",o={monomerType:null,smiles:null,name:"MonomerName",author:null,molfile:"molecule",naturalAnalog:"MonomerNaturalAnalogCode",rgroups:"MonomerCaps",createDate:null,id:null,polymerType:"MonomerType",symbol:"MonomerCode"}},5226:(t,e,n)=>{"use strict";n.d(e,{i:()=>o});var i=n(976),s=n(499);class o{get descriptionsArray(){return this._descriptionsArray}get sequencesArray(){return this._sequencesArray}parseMacromolecule(t,e){return this._fileContent.slice(t,e).split(/\s/).join("")}parseColumns(){const t=/^>(.*)$/gm;let e,n=0;for(;e=t.exec(this._fileContent);){const i=this._fileContent.substring(e.index+1,t.lastIndex);this._descriptionsArray.push(i),0!==n&&this._sequencesArray.push(this.parseMacromolecule(n,e.index)),n=t.lastIndex+1}this._sequencesArray.push(this.parseMacromolecule(n,-1))}importFasta(){const t=i.Column.fromStrings("description",this.descriptionsArray),e=i.Column.fromStrings("sequence",this.sequencesArray);return e.semType=i.SEMTYPE.MACROMOLECULE,e.setTag(i.TAGS.UNITS,"fasta"),s.C.setUnitsToFastaColumn(e),[i.DataFrame.fromColumns([t,e])]}constructor(t){this._descriptionsArray=[],this._sequencesArray=[],this._fileContent=t,this.parseColumns()}}},1821:(t,e,n)=>{"use strict";n.d(e,{BM:()=>s,XS:()=>r});var i=n(6286);const s=/\[(\w+)\]|(\w)|(-)/g,o=new class{constructor(){this.fasta={peptide:new Set(["G","L","Y","S","E","Q","D","N","F","A","K","R","H","C","V","P","W","I","M","T"]),dna:new Set(["A","C","G","T"]),rna:new Set(["A","C","G","U"])}}},r=[new i.L("PT",o.fasta.peptide,.5),new i.L("DNA",o.fasta.dna,.55),new i.L("RNA",o.fasta.rna,.55)]},8447:(t,e,n)=>{"use strict";n.d(e,{GU:()=>i.GU,dQ:()=>i.dQ,fy:()=>i.fy,gP:()=>i.gP,kB:()=>i.kB,py:()=>i.py,up:()=>i.up,vU:()=>i.vU});var i=n(585)},6286:(t,e,n)=>{"use strict";n.d(e,{L:()=>i,d:()=>s});class i{constructor(t,e,n){this.name=t,this.alphabet=e,this.cutoff=n}}class s extends i{constructor(t,e,n){super(t.name,t.alphabet,t.cutoff),this.freq=e,this.similarity=n}}},585:(t,e,n)=>{"use strict";n.d(e,{Ar:()=>g,GU:()=>M,Mj:()=>C,dQ:()=>T,fy:()=>m,gP:()=>b,kB:()=>p,py:()=>N,up:()=>E,vU:()=>w,w4:()=>x});var i=n(976),s=n(6414),o=n.n(s),r=n(6286),a=n(1821),l=n(499),h=n(3659),c=n(850),u=n(2012),d=n(6137),f=n(7331);function m(t,e,n){const i={};let s=!0,o=null;for(const r of t.categories){const t=n(r);if(null==o?o=t.length:t.length!==o&&(s=!1),t.length>=e)for(const e of t)e in i||(i[e]=0),i[e]+=1}return{freq:i,sameLength:s}}function p(t){return o()(t.toString().matchAll(a.BM)).map((t=>{const e=t[0];return e.length>1?t[1]:e})).toArray()}function g(t,e=undefined){return n=>n.split(t,e)}const y=/(PEPTIDE1|DNA1|RNA1)\{([^}]+)}/g,v=/\[([^\[\]]+)]/g;function b(t){y.lastIndex=0;const e=y.exec(t.toString()),n=e?e[2]:null;return(n?n.split("."):[]).map((t=>{v.lastIndex=0;const e=v.exec(t);return e&&e.length>=2?e[1]:t}))}function w(t,e,n=undefined){if(t.toLowerCase().startsWith("fasta"))return p;if(t.toLowerCase().startsWith("separator"))return g(e,n);if(t.toLowerCase().startsWith("helm"))return b;throw new Error(`Unexpected units ${t} .`)}function C(t){if(t.semType!==i.SEMTYPE.MACROMOLECULE)throw new Error(`Get splitter for semType "${i.SEMTYPE.MACROMOLECULE}" only.`);return w(t.getTag(i.TAGS.UNITS),t.getTag("separator"))}const S=/(\w+)/g;function M(t,e){var n,i;const s=t.match(S),o=t.length>e||(null!==(n=null==s?void 0:s.length)&&void 0!==n?n:0)>1,r=null!==(i=null==s?void 0:s[0])&&void 0!==i?i:" ";return o?r.substring(0,e)+"…":r}function x(t,e,n="-"){const i=e.map((e=>{const i=function(t,e,n="-"){const i=new Set([...new Set(Object.keys(t)),...e]);i.delete(n);const s=[],o=[];for(const n of i)s.push(n in t?t[n]:0),o.push(e.has(n)?1:0);const r=new h.OW(s),a=new h.OW(o);return(0,c.MA)(r,a)/((0,c.$G)(r)*(0,c.$G)(a))}(t,e.alphabet,n);return new r.d(e,t,i)}));let s;const o=Math.max(...i.map((t=>t.similarity>t.cutoff?t.similarity:-1)));return s=o>0?i.find((t=>t.similarity===o)).name:"UN",s}function T(t,e=5){let n;return n=t.semType==i.SEMTYPE.MACROMOLECULE?new l.C(t).alphabet:x(m(t,e,p).freq,a.XS),N(n)}function N(t){switch(t){case"PT":return u.f.GrokGroups;case"DNA":case"RNA":return d.J.Chromatogram;default:return f.UE.Color}}function E(t){var e;const n=t.columns.bySemTypeAll(i.SEMTYPE.MACROMOLECULE);let s=null!==(e=n.find((t=>{const e=t.getTag(i.TAGS.UNITS);return!!e&&-1!==e.indexOf("MSA")})))&&void 0!==e?e:null;return!s&&n.length>0&&(s=n[0]),s}},7767:(t,e,n)=>{"use strict";n.d(e,{L:()=>r});var i=n(976),s=n(499),o=n(585);class r extends s.C{get splitter(){return null===this._splitter&&(this._splitter=(0,o.Mj)(this.column)),this._splitter}toFasta(t){return"fasta"===t}toSeparator(t){return"separator"===t}toHelm(t){return"helm"===t}convertFastaToSeparator(t,e=null){null===e&&(e=this.defaultGapSymbol);const n=this.getNewColumn("separator",t);return n.init((n=>{const i=this.column.get(n),o=this.splitter(i);for(let t=0;t<o.length;t++)o[t]===e&&(o[t]=s.C._defaultGapSymbolsDict.SEPARATOR);return o.join(t)})),n.setTag(i.TAGS.UNITS,"separator"),n}getHelmWrappers(){const t=this.isDna()?"DNA1{":this.isRna()||this.isHelmCompatible()?"RNA1{":this.isPeptide()?"PEPTIDE1{":"Unknown";if("Unknown"===t)throw new Error("Neither peptide, nor nucleotide");return[t,this.isDna()?"D(":this.isRna()?"R(":"",this.isDna()||this.isRna()?")P":"","}$$$$"]}convertToHelmHelper(t,e,n,i,o,r){return`${n}${this.splitter(t).map((t=>t===e?s.C._defaultGapSymbolsDict.HELM:`${i}${t}${o}`)).join(".")}${r}`}convertStringToHelm(t,e=null){null===e&&(e=this.defaultGapSymbol);const[n,i,s,o]=this.getHelmWrappers();return this.convertToHelmHelper(t,e,n,i,s,o)}convertToHelm(t=null){null===t&&(t=this.defaultGapSymbol);const[e,n,s,o]=this.getHelmWrappers(),r=this.getNewColumn("helm");return r.init((i=>{const r=this.column.get(i);return this.convertToHelmHelper(r,t,e,n,s,o)})),r.setTag(i.TAGS.UNITS,"helm"),r}convertSeparatorToFasta(t=null){null===t&&(t=s.C._defaultGapSymbolsDict.FASTA);const e=this.getNewColumn("fasta");return e.init((e=>{const n=this.column.get(e),i=this.splitter(n),s=[];for(let e=0;e<i.length;e++){const n=i[e];if(0===n.length)s.push(t);else if(n.length>1){const t="["+n+"]";s.push(t)}else s.push(n)}return s.join("")})),e.setTag(i.TAGS.UNITS,"fasta"),e}convertHelmToFastaSeparator(t,e,n,i){i||(i=this.toFasta(e)?s.C._defaultGapSymbolsDict.FASTA:s.C._defaultGapSymbolsDict.SEPARATOR),n||(n=this.toFasta(e)?"":this.separator);const o=/(R\(|D\(|\)|P)/g,r=t.startsWith("DNA")||t.startsWith("RNA"),a=this.splitter(t),l=[];for(let t=0;t<a.length;t++){let n=a[t];if(r&&(n=n.replace(o,"")),n===s.C._defaultGapSymbolsDict.HELM)l.push(i);else if(this.toFasta(e)&&n.length>1){const t="["+n+"]";l.push(t)}else l.push(n)}return l.join(n)}convertHelm(t,e,n){const i=this.getNewColumn(t,e);i.init((i=>{const s=this.column.get(i);return this.convertHelmToFastaSeparator(s,t,e,n)}));const s=(0,o.Mj)(i),r=(0,o.fy)(i,5,s).sameLength?"SEQ.MSA":"SEQ";return i.setTag("aligned",r),i}convertHelmToSeparator(){return this.getNewColumn("separator")}convert(t,e=null){if(this.notation===t)throw new Error("tgt notation is invalid");if(this.toSeparator(t)&&null===e)throw new Error("tgt separator is not specified");if(this.isFasta()&&this.toSeparator(t)&&null!==e)return this.convertFastaToSeparator(e);if((this.isFasta()||this.isSeparator())&&this.toHelm(t))return this.convertToHelm();if(this.isSeparator()&&this.toFasta(t))return this.convertSeparatorToFasta();if(this.isHelm()&&this.toFasta(t))return this.convertHelm(t);if(this.isHelm()&&this.toSeparator(t))return this.convertHelm(t,e);throw new Error(`Not supported conversion from source notation '${this.notation}' to target notation '${t}'.`)}constructor(t){super(t),this._splitter=null}}},499:(t,e,n)=>{"use strict";n.d(e,{C:()=>l});var i=n(976),s=n(1821),o=n(585),r=n(489),a=n(7228);class l{static setUnitsToFastaColumn(t){if(t.semType!==i.SEMTYPE.MACROMOLECULE||"fasta"!==t.getTag(i.TAGS.UNITS))throw new Error(`The column of notation 'fasta' must be '${i.SEMTYPE.MACROMOLECULE}'.`);t.setTag(i.TAGS.UNITS,"fasta"),l.setTags(t,o.kB)}static setUnitsToSeparatorColumn(t,e){if(t.semType!==i.SEMTYPE.MACROMOLECULE||"separator"!==t.getTag(i.TAGS.UNITS))throw new Error(`The column of notation 'separator' must be '${i.SEMTYPE.MACROMOLECULE}'.`);if(!e)throw new Error("The column of notation 'separator' must have the separator tag.");t.setTag(i.TAGS.UNITS,"separator"),t.setTag("separator",e),l.setTags(t,(0,o.Ar)(e))}static setUnitsToHelmColumn(t){if(t.semType!==i.SEMTYPE.MACROMOLECULE)throw new Error(`The column of notation 'helm' must be '${i.SEMTYPE.MACROMOLECULE}'`);t.setTag(i.TAGS.UNITS,"helm"),l.setTags(t,o.gP)}static setTags(t,e){const n=t.getTag(i.TAGS.UNITS),r=(0,o.fy)(t,5,e);if(Object.keys(r.freq).some((t=>t.length>1)),["fasta","separator"].includes(n)){if(0===Object.keys(r.freq).length)throw new Error("Alphabet is empty");const e=r.sameLength?"SEQ.MSA":"SEQ";t.setTag("aligned",e);const n=(0,o.w4)(r.freq,s.XS);if(t.setTag("alphabet",n),"UN"===n){const e=Object.keys(r.freq).length,n=Object.keys(r.freq).some((t=>t.length>1));t.setTag(".alphabetSize",e.toString()),t.setTag(".alphabetIsMultichar",n?"true":"false")}}}get units(){return this._units}get column(){return this._column}get notation(){return this._notation}get defaultGapSymbol(){return this._defaultGapSymbol}get separator(){var t;const e=null!==(t=this.column.getTag("separator"))&&void 0!==t?t:void 0;if("separator"===this.notation&&void 0===e)throw new Error(`Separator is mandatory for column '${this.column.name}' of notation '${this.notation}'.`);return e}get aligned(){const t=this.column.getTag("aligned");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag aligned not set");return t}get alphabet(){const t=this.column.getTag("alphabet");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag alphabet not set");return t}get helmCompatible(){return this.column.getTag(".isHelmCompatible")}getAlphabetSize(){if("helm"==this.notation||"UN"==this.alphabet){const t=this.column.getTag(".alphabetSize");let e;if(t)e=parseInt(t);else{const t=(0,o.Mj)(this.column),n=(0,o.fy)(this.column,1,t);e=Object.keys(n.freq).length}return e}switch(this.alphabet){case"PT":return 20;case"DNA":case"RNA":return 4;case"NT":return console.warn("Unexpected alphabet 'NT'."),4;default:throw new Error(`Unexpected alphabet '${this.alphabet}'.`)}}getAlphabetIsMultichar(){return"helm"===this.notation||"UN"===this.alphabet&&"true"===this.column.getTag(".alphabetIsMultichar")}isFasta(){return"fasta"===this.notation}isSeparator(){return"separator"===this.notation}isHelm(){return"helm"===this.notation}isRna(){return"RNA"===this.alphabet}isDna(){return"DNA"===this.alphabet}isPeptide(){return"PT"===this.alphabet}isMsa(){return!!this.aligned&&this.aligned.toUpperCase().includes("MSA")}isHelmCompatible(){return"true"===this.helmCompatible}getNotation(){if(this.units.toLowerCase().startsWith("fasta"))return"fasta";if(this.units.toLowerCase().startsWith("separator"))return"separator";if(this.units.toLowerCase().startsWith("helm"))return"helm";throw new Error(`Column '${this.column.name}' has unexpected notation '${this.units}'.`)}getNewColumn(t,e){const n=this.column,s=n.length,o=t.toLowerCase()+"("+n.name+")",r=n.dataFrame.columns.getUnusedName(o),a=i.Column.fromList("string",r,new Array(s).fill(""));if(a.semType=i.SEMTYPE.MACROMOLECULE,a.setTag(i.TAGS.UNITS,t),"separator"===t){if(!e)throw new Error("Notation 'separator' requires separator value.");a.setTag("separator",e)}a.setTag(i.TAGS.CELL_RENDERER,"Macromolecule");const l=n.getTag("aligned");l&&a.setTag("aligned",l);const h=n.getTag("alphabet");h&&a.setTag("alphabet",h);let c=n.getTag(".alphabetSize");c&&a.setTag(".alphabetSize",c);const u=n.getTag(".alphabetIsMultichar");return void 0!==u&&a.setTag(".alphabetIsMultichar",u),"helm"==t&&(c=this.getAlphabetSize().toString(),a.setTag(".alphabetSize",c)),a}static getNewColumn(t){const e=new l(t),n=e.notation;return e.getNewColumn(n)}static unitsStringIsValid(t){return t=t.toLowerCase(),["fasta","separator","helm"].some((e=>t.startsWith(e.toLowerCase())))}static getNewColumnFromParams(t,e,n){if(!l.unitsStringIsValid(n))throw new Error("Invalid format of 'units' parameter");const s=i.Column.fromList("string",e,new Array(t).fill(""));return s.semType=i.SEMTYPE.MACROMOLECULE,s.setTag(i.TAGS.UNITS,n),s}getDistanceFunctionName(){if(!this.isFasta())throw new Error("Only FASTA notation is supported");if(this.isMsa())return r.U.HAMMING;switch(this.alphabet){case"DNA":case"RNA":default:return r.U.LEVENSHTEIN;case"PT":return r.U.NEEDLEMANN_WUNSCH}}getDistanceFunction(){return r.o[this.getDistanceFunctionName()]()}checkHelmCompatibility(){return t=this,e=void 0,i=function*(){if(this.column.tags.has(".isHelmCompatible"))return"true"===this.column.getTag(".isHelmCompatible");const t=(yield(0,a.JN)()).getBioLib().getMonomerNamesByType("PEPTIDE".toString()),e=new Set(t),n=(0,o.Ar)(this.separator);for(const t of this.column.categories){const i=n(t);for(const t of i)if(!e.has(t))return this.column.setTag(".isHelmCompatible","false"),!1}return this.column.setTag(".isHelmCompatible","true"),!0},new((n=void 0)||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}));var t,e,n,i}constructor(t){this._column=t;const e=this._column.getTag(i.TAGS.UNITS);if(null==e)throw new Error("Units are not specified in column");if(this._units=e,this._notation=this.getNotation(),this._defaultGapSymbol=this.isFasta()?l._defaultGapSymbolsDict.FASTA:this.isHelm()?l._defaultGapSymbolsDict.HELM:l._defaultGapSymbolsDict.SEPARATOR,!this.column.tags.has("aligned")||!this.column.tags.has("alphabet")||!this.column.tags.has(".alphabetIsMultichar")&&!this.isHelm()&&"UN"===this.alphabet)if(this.isFasta())l.setUnitsToFastaColumn(this.column);else if(this.isSeparator()){const e=t.getTag("separator");l.setUnitsToSeparatorColumn(this.column,e)}else{if(!this.isHelm())throw new Error(`Unexpected units '${this.column.getTag(i.TAGS.UNITS)}'.`);l.setUnitsToHelmColumn(this.column)}if(!this.column.tags.has(".alphabetIsMultichar"))if(this.isHelm())this.column.setTag(".alphabetIsMultichar","true");else if(["UN"].includes(this.alphabet))throw new Error(`For column '${this.column.name}' of alphabet '${this.alphabet}' tag '.alphabetIsMultichar' is mandatory.`)}}l._defaultGapSymbolsDict={HELM:"*",SEPARATOR:"",FASTA:"-"}},9298:(t,e,n)=>{"use strict";var i,s,o,r,a;n.d(e,{CI:()=>h,Ct:()=>a,DX:()=>c,ES:()=>i,dE:()=>r,iD:()=>o,vS:()=>l,vw:()=>s}),function(t){t.Entropy="Entropy",t.full="100%"}(i||(i={})),function(t){t.TOP="top",t.MIDDLE="middle",t.BOTTOM="bottom"}(s||(s={})),function(t){t.LEFT="left",t.CENTER="center",t.RIGHT="right"}(o||(o={})),function(t){t.AUTO="auto",t.ON="on",t.OFF="off"}(r||(r={})),function(t){t.Filtered="Filtered",t.Selected="Selected"}(a||(a={}));const l=new class{constructor(){this.sequenceColumnName=null,this.startPositionName=null,this.endPositionName=null,this.skipEmptySequences=!0,this.skipEmptyPositions=!1,this.shrinkEmptyTail=!0,this.backgroundColor=4294967295,this.positionHeight=i.full,this.positionWidth=16,this.verticalAlignment=s.MIDDLE,this.horizontalAlignment=o.CENTER,this.fixWidth=!1,this.fitArea=!0,this.minHeight=50,this.maxHeight=100,this.positionMarginState=r.AUTO,this.positionMargin=0,this.filterSource=a.Filtered}},h=", ";var c;!function(t){t.positionNames=".positionNames"}(c||(c={}))},779:(t,e,n)=>{"use strict";function i(){return(t,e)=>{let n=0;t.length!==e.length&&(n=Math.abs(t.length-e.length));let i=0;for(let n=0;n<Math.min(t.length,e.length);n++)t[n]!==e[n]&&i++;return i+n}}n.d(e,{j:()=>i})},489:(t,e,n)=>{"use strict";n.d(e,{U:()=>i.U,o:()=>i.o});var i=n(5540)},458:(t,e,n)=>{"use strict";n.d(e,{r:()=>s});var i=n(1811);function s(){return(t,e)=>(0,i.T)(t,e)}},5540:(t,e,n)=>{"use strict";n.d(e,{U:()=>i,o:()=>a});var i,s=n(779),o=n(458),r=n(6683);!function(t){t.HAMMING="Hamming",t.LEVENSHTEIN="Levenshtein",t.NEEDLEMANN_WUNSCH="Needlemann-Wunsch"}(i||(i={}));const a={[i.HAMMING]:s.j,[i.LEVENSHTEIN]:o.r,[i.NEEDLEMANN_WUNSCH]:r.n}},6683:(t,e,n)=>{"use strict";n.d(e,{n:()=>s});const i={gapOpen:8,gapExtend:2,scoringMatrix:[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],alphabetIndexes:{A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23}};function s(t){return(e,n)=>{const{gapOpen:s,gapExtend:o,scoringMatrix:r,alphabetIndexes:a}=Object.assign(Object.assign({},i),t),l=[new Array(e.length+1).fill(0),new Array(e.length+1).fill(0)],h=new Array(e.length+1).fill(!1),c=new Array(e.length+1).fill(!1);let u=0,d=1;for(let t=1;t<e.length+1;t++)l[0][t]=-s-(t-1)*o;for(let t=1;t<n.length+1;t++){l[d][0]=-s-(t-1)*o;for(let i=1;i<e.length+1;i++){const f=l[u][i-1]+r[a[e[i-1]]][a[n[t-1]]],m=l[u][i]-(h[i]?o:s),p=l[d][i-1]-(c[i-1]?o:s);l[d][i]=Math.max(f,p,m),l[d][i]===f?(h[i]=!1,c[i]=!1):l[d][i]===p?(h[i]=!1,c[i]=!0):(h[i]=!0,c[i]=!1)}u=d,d=(d+1)%2}return-l[u][e.length]}}},1061:(t,e,n)=>{"use strict";n.d(e,{gw:()=>o}),n(4469),n(976);var i,s=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function o(t){return s(this,void 0,void 0,(function*(){yield new Promise((e=>setTimeout(e,t)))}))}!function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(i||(i={}))},7604:(t,e,n)=>{"use strict";function i(t){var e;return"string"==typeof t||t instanceof String?t:("object"==typeof t||t instanceof Object)&&"$thrownJsError"in t?i(t.$thrownJsError):t instanceof Error?null!==(e=t.stack)&&void 0!==e?e:t.message:t.toString()}n.d(e,{O:()=>i})},3659:(t,e,n)=>{"use strict";n.d(e,{OW:()=>i});class i extends Float32Array{}},850:(t,e,n)=>{"use strict";function i(t=!1,e="Assertion error."){if(!t)throw new Error(e)}function s(t){let e=0;for(let n=0;n<t.length;n++)e+=t[n]*t[n];return Math.sqrt(e)}function o(t,e){if(t.length!=e.length)throw new Error("The dimensionality of the vectors must match");let n=0;for(let i=0;i<t.length;i++)n+=t[i]*e[i];return n}n.d(e,{$G:()=>s,MA:()=>o,hu:()=>i}),n(3659)},7659:(t,e,n)=>{"use strict";e.Z=void 0;var i=n(6215);Object.defineProperty(e,"Z",{enumerable:!0,get:function(){return i.TSNE}})},6215:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TSNE=void 0,e.TSNE=class{constructor(t){this.returnV=!1,this.vValue=0,this.iter=0,t=t||{},this.perplexity=this.getopt(t,"perplexity",30),this.dim=this.getopt(t,"dim",2),this.epsilon=this.getopt(t,"epsilon",10)}assert(t,e){if(!t)throw e||"Assertion failed"}getopt(t,e,n){return t.hasOwnProperty(e)?t[e]:n}gaussRandom(){if(this.returnV)return this.returnV=!1,this.vValue;const t=2*Math.random()-1,e=2*Math.random()-1,n=t*t+e*e;if(0===n||n>1)return this.gaussRandom();const i=Math.sqrt(-2*Math.log(n)/n);return this.vValue=e*i,this.returnV=!0,t*i}randn(t,e){return t+this.gaussRandom()*e}zeros(t){if(void 0===t||isNaN(t))return[];if("undefined"==typeof ArrayBuffer){const e=new Array(t);for(let n=0;n<t;n++)e[n]=0;return e}return new Float64Array(t)}randn2d(t,e,n){const i=void 0!==n,s=[];for(let o=0;o<t;o++){const t=[];for(let s=0;s<e;s++)i?t.push(n):t.push(this.randn(0,1e-4));s.push(t)}return s}L2(t,e){const n=t.length;let i=0;for(let s=0;s<n;s++){const n=t[s],o=e[s];i+=(n-o)*(n-o)}return i}xtod(t){const e=t.length,n=this.zeros(e*e);for(let i=0;i<e;i++)for(let s=i+1;s<e;s++){const o=this.L2(t[i],t[s]);n[i*e+s]=o,n[s*e+i]=o}return n}d2p(t,e,n){const i=Math.sqrt(t.length),s=Math.floor(i);this.assert(s===i,"D should have square number of elements.");const o=Math.log(e),r=this.zeros(s*s),a=this.zeros(s);for(let e=0;e<s;e++){let i=-1/0,l=1/0,h=1,c=!1;const u=50;let d=0;for(;!c;){let r=0;for(let n=0;n<s;n++){let i=Math.exp(-t[e*s+n]*h);e===n&&(i=0),a[n]=i,r+=i}let f=0;for(let t=0;t<s;t++){let e;e=0===r?0:a[t]/r,a[t]=e,e>1e-7&&(f-=e*Math.log(e))}f>o?(i=h,l===1/0?h*=2:h=(h+l)/2):(l=h,i===-1/0?h/=2:h=(h+i)/2),d++,Math.abs(f-o)<n&&(c=!0),d>=u&&(c=!0)}for(let t=0;t<s;t++)r[e*s+t]=a[t]}const l=this.zeros(s*s),h=2*s;for(let t=0;t<s;t++)for(let e=0;e<s;e++)l[t*s+e]=Math.max((r[t*s+e]+r[e*s+t])/h,1e-100);return l}sign(t){return t>0?1:t<0?-1:0}initDataRaw(t){const e=t.length,n=t[0].length;this.assert(e>0," X is empty? You must have some data!"),this.assert(n>0," X[0] is empty? Where is the data?");const i=this.xtod(t);this.P=this.d2p(i,this.perplexity,1e-4),this.N=e,this.initSolution()}initDataDist(t){const e=t.length;this.assert(e>0," X is empty? You must have some data!");const n=this.zeros(e*e);for(let i=0;i<e;i++)for(let s=i+1;s<e;s++){const o=t[i][s];n[i*e+s]=o,n[s*e+i]=o}this.P=this.d2p(n,this.perplexity,1e-4),this.N=e,this.initSolution()}initSolution(){this.Y=this.randn2d(this.N,this.dim),this.gains=this.randn2d(this.N,this.dim,1),this.ystep=this.randn2d(this.N,this.dim,0),this.iter=0}getSolution(){return this.Y}step(){this.iter+=1;const t=this.N,e=this.costGrad(this.Y),n=e.cost,i=e.grad,s=this.zeros(this.dim);for(let e=0;e<t;e++)for(let t=0;t<this.dim;t++){const n=i[e][t],o=this.ystep[e][t],r=this.gains[e][t];let a=this.sign(n)===this.sign(o)?.8*r:r+.2;a<.01&&(a=.01),this.gains[e][t]=a;const l=(this.iter<250?.5:.8)*o-this.epsilon*a*i[e][t];this.ystep[e][t]=l,this.Y[e][t]+=l,s[t]+=this.Y[e][t]}for(let e=0;e<t;e++)for(let n=0;n<this.dim;n++)this.Y[e][n]-=s[n]/t;return n}debugGrad(){const t=this.N,e=this.costGrad(this.Y),n=(e.cost,e.grad),i=1e-5;for(let e=0;e<t;e++)for(let t=0;t<this.dim;t++){const s=this.Y[e][t];this.Y[e][t]=s+i;const o=this.costGrad(this.Y);this.Y[e][t]=s-i;const r=this.costGrad(this.Y),a=n[e][t],l=(o.cost-r.cost)/(2*i);console.log(e+","+t+": gradcheck analytic: "+a+" vs. numerical: "+l),this.Y[e][t]=s}}costGrad(t){const e=this.N,n=this.dim,i=this.P,s=this.iter<100?4:1,o=this.zeros(e*e);let r=0;for(let i=0;i<e;i++)for(let s=i+1;s<e;s++){let a=0;for(let e=0;e<n;e++){const n=t[i][e]-t[s][e];a+=n*n}const l=1/(1+a);o[i*e+s]=l,o[s*e+i]=l,r+=2*l}const a=e*e,l=this.zeros(a);for(let t=0;t<a;t++)l[t]=Math.max(o[t]/r,1e-100);let h=0;const c=[];for(let r=0;r<e;r++){const a=new Array(n);for(let t=0;t<n;t++)a[t]=0;for(let c=0;c<e;c++){h+=-i[r*e+c]*Math.log(l[r*e+c]);const u=4*(s*i[r*e+c]-l[r*e+c])*o[r*e+c];for(let e=0;e<n;e++)a[e]+=u*(t[r][e]-t[c][e])}c.push(a)}return{cost:h,grad:c}}}},9564:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(7537),s=n.n(i),o=n(3645),r=n.n(o)()(s());r.push([t.id,".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}","",{version:3,sources:["webpack://./css/msa.css"],names:[],mappings:"AAAA;IACI,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,YAAY;AAChB",sourcesContent:[".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}"],sourceRoot:""}]);const a=r},9414:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var i=n(7537),s=n.n(i),o=n(3645),r=n.n(o)()(s());r.push([t.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;AAChB",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n"],sourceRoot:""}]);const a=r},3645:t=>{"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var n="",i=void 0!==e[5];return e[4]&&(n+="@supports (".concat(e[4],") {")),e[2]&&(n+="@media ".concat(e[2]," {")),i&&(n+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),n+=t(e),i&&(n+="}"),e[2]&&(n+="}"),e[4]&&(n+="}"),n})).join("")},e.i=function(t,n,i,s,o){"string"==typeof t&&(t=[[null,t,void 0]]);var r={};if(i)for(var a=0;a<this.length;a++){var l=this[a][0];null!=l&&(r[l]=!0)}for(var h=0;h<t.length;h++){var c=[].concat(t[h]);i&&r[c[0]]||(void 0!==o&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=o),n&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=n):c[2]=n),s&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=s):c[4]="".concat(s)),e.push(c))}},e}},7537:t=>{"use strict";t.exports=function(t){var e=t[1],n=t[3];if(!n)return e;if("function"==typeof btoa){var i=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(i),o="/*# ".concat(s," */");return[e].concat([o]).join("\n")}return[e].join("\n")}},9133:function(t,e,n){var i;!function(e,s){var o={};!function(t){"use strict";t.__esModule=!0,t.digestLength=32,t.blockSize=64;var e=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function n(t,n,i,s,o){for(var r,a,l,h,c,u,d,f,m,p,g,y,v;o>=64;){for(r=n[0],a=n[1],l=n[2],h=n[3],c=n[4],u=n[5],d=n[6],f=n[7],p=0;p<16;p++)g=s+4*p,t[p]=(255&i[g])<<24|(255&i[g+1])<<16|(255&i[g+2])<<8|255&i[g+3];for(p=16;p<64;p++)y=((m=t[p-2])>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,v=((m=t[p-15])>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,t[p]=(y+t[p-7]|0)+(v+t[p-16]|0);for(p=0;p<64;p++)y=(((c>>>6|c<<26)^(c>>>11|c<<21)^(c>>>25|c<<7))+(c&u^~c&d)|0)+(f+(e[p]+t[p]|0)|0)|0,v=((r>>>2|r<<30)^(r>>>13|r<<19)^(r>>>22|r<<10))+(r&a^r&l^a&l)|0,f=d,d=u,u=c,c=h+y|0,h=l,l=a,a=r,r=y+v|0;n[0]+=r,n[1]+=a,n[2]+=l,n[3]+=h,n[4]+=c,n[5]+=u,n[6]+=d,n[7]+=f,s+=64,o-=64}return s}var i=function(){function e(){this.digestLength=t.digestLength,this.blockSize=t.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return e.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},e.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},e.prototype.update=function(t,e){if(void 0===e&&(e=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var i=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[i++],e--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(i=n(this.temp,this.state,t,i,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[i++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,i=this.bufferLength,s=e/536870912|0,o=e<<3,r=e%64<56?64:128;this.buffer[i]=128;for(var a=i+1;a<r-8;a++)this.buffer[a]=0;this.buffer[r-8]=s>>>24&255,this.buffer[r-7]=s>>>16&255,this.buffer[r-6]=s>>>8&255,this.buffer[r-5]=s>>>0&255,this.buffer[r-4]=o>>>24&255,this.buffer[r-3]=o>>>16&255,this.buffer[r-2]=o>>>8&255,this.buffer[r-1]=o>>>0&255,n(this.temp,this.state,this.buffer,0,r),this.finished=!0}for(a=0;a<8;a++)t[4*a+0]=this.state[a]>>>24&255,t[4*a+1]=this.state[a]>>>16&255,t[4*a+2]=this.state[a]>>>8&255,t[4*a+3]=this.state[a]>>>0&255;return this},e.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},e.prototype._saveState=function(t){for(var e=0;e<this.state.length;e++)t[e]=this.state[e]},e.prototype._restoreState=function(t,e){for(var n=0;n<this.state.length;n++)this.state[n]=t[n];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=i;var s=function(){function t(t){this.inner=new i,this.outer=new i,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new i).update(t).finish(e).clean();else for(var n=0;n<t.length;n++)e[n]=t[n];for(n=0;n<e.length;n++)e[n]^=54;for(this.inner.update(e),n=0;n<e.length;n++)e[n]^=106;for(this.outer.update(e),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),n=0;n<e.length;n++)e[n]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function o(t){var e=(new i).update(t),n=e.digest();return e.clean(),n}function r(t,e){var n=new s(t).update(e),i=n.digest();return n.clean(),i}function a(t,e,n,i){var s=i[0];if(0===s)throw new Error("hkdf: cannot expand more");e.reset(),s>1&&e.update(t),n&&e.update(n),e.update(i),e.finish(t),i[0]++}t.HMAC=s,t.hash=o,t.default=o,t.hmac=r;var l=new Uint8Array(t.digestLength);t.hkdf=function(t,e,n,i){void 0===e&&(e=l),void 0===i&&(i=32);for(var o=new Uint8Array([1]),h=r(e,t),c=new s(h),u=new Uint8Array(c.digestLength),d=u.length,f=new Uint8Array(i),m=0;m<i;m++)d===u.length&&(a(u,c,n,o),d=0),f[m]=u[d++];return c.clean(),u.fill(0),o.fill(0),f},t.pbkdf2=function(t,e,n,i){for(var o=new s(t),r=o.digestLength,a=new Uint8Array(4),l=new Uint8Array(r),h=new Uint8Array(r),c=new Uint8Array(i),u=0;u*r<i;u++){var d=u+1;a[0]=d>>>24&255,a[1]=d>>>16&255,a[2]=d>>>8&255,a[3]=d>>>0&255,o.reset(),o.update(e),o.update(a),o.finish(h);for(var f=0;f<r;f++)l[f]=h[f];for(f=2;f<=n;f++){o.reset(),o.update(h).finish(h);for(var m=0;m<r;m++)l[m]^=h[m]}for(f=0;f<r&&u*r+f<i;f++)c[u*r+f]=l[f]}for(u=0;u<r;u++)l[u]=h[u]=0;for(u=0;u<4;u++)a[u]=0;return o.clean(),c}}(o);var r=o.default;for(var a in o)r[a]=o[a];"object"==typeof t.exports?t.exports=r:void 0===(i=function(){return r}.call(o,n,o,t))||(t.exports=i)}()},1811:(t,e,n)=>{"use strict";n.d(e,{T:()=>s});const i=new Uint32Array(65536),s=(t,e)=>{if(t.length<e.length){const n=e;e=t,t=n}return 0===e.length?t.length:t.length<=32?((t,e)=>{const n=t.length,s=e.length,o=1<<n-1;let r=-1,a=0,l=n,h=n;for(;h--;)i[t.charCodeAt(h)]|=1<<h;for(h=0;h<s;h++){let t=i[e.charCodeAt(h)];const n=t|a;t|=(t&r)+r^r,a|=~(t|r),r&=t,a&o&&l++,r&o&&l--,a=a<<1|1,r=r<<1|~(n|a),a&=n}for(h=n;h--;)i[t.charCodeAt(h)]=0;return l})(t,e):((t,e)=>{const n=e.length,s=t.length,o=[],r=[],a=Math.ceil(n/32),l=Math.ceil(s/32);for(let t=0;t<a;t++)r[t]=-1,o[t]=0;let h=0;for(;h<l-1;h++){let a=0,l=-1;const c=32*h,u=Math.min(32,s)+c;for(let e=c;e<u;e++)i[t.charCodeAt(e)]|=1<<e;for(let t=0;t<n;t++){const n=i[e.charCodeAt(t)],s=r[t/32|0]>>>t&1,h=o[t/32|0]>>>t&1,c=n|a,u=((n|h)&l)+l^l|n|h;let d=a|~(u|l),f=l&u;d>>>31^s&&(r[t/32|0]^=1<<t),f>>>31^h&&(o[t/32|0]^=1<<t),d=d<<1|s,f=f<<1|h,l=f|~(c|d),a=d&c}for(let e=c;e<u;e++)i[t.charCodeAt(e)]=0}let c=0,u=-1;const d=32*h,f=Math.min(32,s-d)+d;for(let e=d;e<f;e++)i[t.charCodeAt(e)]|=1<<e;let m=s;for(let t=0;t<n;t++){const n=i[e.charCodeAt(t)],a=r[t/32|0]>>>t&1,l=o[t/32|0]>>>t&1,h=n|c,d=((n|l)&u)+u^u|n|l;let f=c|~(d|u),p=u&d;m+=f>>>s-1&1,m-=p>>>s-1&1,f>>>31^a&&(r[t/32|0]^=1<<t),p>>>31^l&&(o[t/32|0]^=1<<t),f=f<<1|a,p=p<<1|l,u=p|~(h|f),c=f&h}for(let e=d;e<f;e++)i[t.charCodeAt(e)]=0;return m})(t,e)}},3979:(t,e)=>{"use strict";e.H$=void 0,e.H$=function(t,e,n){var i=function(t,e,n){if(0===t.length||0===e.length)return 0;if(n&&!n.caseSensitive&&(t=t.toUpperCase(),e=e.toUpperCase()),t===e)return 1;for(var i=0,s=t.length,o=e.length,r=Math.floor(Math.max(s,o)/2)-1,a=new Array(s),l=new Array(o),h=0;h<s;h++)for(var c=Math.max(0,h-r);c<=Math.min(o,h+r+1);c++)if(!a[h]&&!l[c]&&t[h]===e[c]){++i,a[h]=l[c]=!0;break}if(0===i)return 0;var u=0,d=0;for(h=0;h<s;h++)if(a[h]){for(;!l[d];)d++;t.charAt(h)!==e.charAt(d++)&&u++}return(i/s+i/o+(i-(u/=2))/i)/3}(t,e,n),s=0;if(i>.7){for(var o=Math.min(t.length,e.length),r=0;t[r]===e[r]&&r<4&&r<o;)++s,r++;i+=.1*s*(1-i)}return i}},9251:(t,e,n)=>{"use strict";n.r(e),n.d(e,{default:()=>P});const i=Object.prototype.toString;function s(t){return i.call(t).endsWith("Array]")}function o(t,e,n){let i=0;const s=n(e);for(let e=0;e<t.x.length;e++)i+=Math.abs(t.y[e]-s(t.x[e]));return i}const r=Object.prototype.toString;function a(t){return r.call(t).endsWith("Array]")}const l=Object.prototype.toString;function h(t){return l.call(t).endsWith("Array]")}const c=Object.prototype.toString;const u=Object.prototype.toString;function d(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!h(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");if(void 0!==n.output){if(!h(n.output))throw new TypeError("output option must be an array if specified");e=n.output}else e=new Array(t.length);var i=function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e=t,!u.call(e).endsWith("Array]"))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var i=n.fromIndex,s=void 0===i?0:i,o=n.toIndex,r=void 0===o?t.length:o;if(s<0||s>=t.length||!Number.isInteger(s))throw new Error("fromIndex must be a positive integer smaller than length");if(r<=s||r>t.length||!Number.isInteger(r))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var a=t[s],l=s+1;l<r;l++)t[l]<a&&(a=t[l]);return a}(t),s=function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e=t,!c.call(e).endsWith("Array]"))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var i=n.fromIndex,s=void 0===i?0:i,o=n.toIndex,r=void 0===o?t.length:o;if(s<0||s>=t.length||!Number.isInteger(s))throw new Error("fromIndex must be a positive integer smaller than length");if(r<=s||r>t.length||!Number.isInteger(r))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var a=t[s],l=s+1;l<r;l++)t[l]>a&&(a=t[l]);return a}(t);if(i===s)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var o=n.min,r=void 0===o?n.autoMinMax?i:0:o,a=n.max,l=void 0===a?n.autoMinMax?s:1:a;if(r>=l)throw new RangeError("min option must be smaller than max option");for(var d=(l-r)/(s-i),f=0;f<t.length;f++)e[f]=(t[f]-i)*d+r;return e}const f=" ".repeat(2),m=" ".repeat(4);function p(t,e={}){const{maxRows:n=15,maxColumns:i=10,maxNumSize:s=8,padMinus:o="auto"}=e;return`${t.constructor.name} {\n${f}[\n${m}${function(t,e,n,i,s){const{rows:o,columns:r}=t,a=Math.min(o,e),l=Math.min(r,n),h=[];if("auto"===s){s=!1;t:for(let e=0;e<a;e++)for(let n=0;n<l;n++)if(t.get(e,n)<0){s=!0;break t}}for(let e=0;e<a;e++){let n=[];for(let o=0;o<l;o++)n.push(g(t.get(e,o),i,s));h.push(`${n.join(" ")}`)}return l!==r&&(h[h.length-1]+=` ... ${r-n} more columns`),a!==o&&h.push(`... ${o-e} more rows`),h.join(`\n${m}`)}(t,n,i,s,o)}\n${f}]\n${f}rows: ${t.rows}\n${f}columns: ${t.columns}\n}`}function g(t,e,n){return(t>=0&&n?` ${y(t,e-1)}`:y(t,e)).padEnd(e)}function y(t,e){let n=t.toString();if(n.length<=e)return n;let i=t.toFixed(e);if(i.length>e&&(i=t.toFixed(Math.max(0,e-(i.length-e)))),i.length<=e&&!i.startsWith("0.000")&&!i.startsWith("-0.000"))return i;let s=t.toExponential(e);return s.length>e&&(s=t.toExponential(Math.max(0,e-(s.length-e)))),s.slice(0)}function v(t,e,n){let i=n?t.rows:t.rows-1;if(e<0||e>i)throw new RangeError("Row index out of range")}function b(t,e,n){let i=n?t.columns:t.columns-1;if(e<0||e>i)throw new RangeError("Column index out of range")}function w(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.columns)throw new RangeError("vector size must be the same as the number of columns");return e}function C(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.rows)throw new RangeError("vector size must be the same as the number of rows");return e}function S(t,e,n,i,s){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(x("startRow",e),x("endRow",n),x("startColumn",i),x("endColumn",s),e>n||i>s||e<0||e>=t.rows||n<0||n>=t.rows||i<0||i>=t.columns||s<0||s>=t.columns)throw new RangeError("Submatrix indices are out of range")}function M(t,e=0){let n=[];for(let i=0;i<t;i++)n.push(e);return n}function x(t,e){if("number"!=typeof e)throw new TypeError(`${t} must be a number`)}function T(t){if(t.isEmpty())throw new Error("Empty matrix has no elements to index")}class N{static from1DArray(t,e,n){if(t*e!==n.length)throw new RangeError("data length does not match given dimensions");let i=new A(t,e);for(let s=0;s<t;s++)for(let t=0;t<e;t++)i.set(s,t,n[s*e+t]);return i}static rowVector(t){let e=new A(1,t.length);for(let n=0;n<t.length;n++)e.set(0,n,t[n]);return e}static columnVector(t){let e=new A(t.length,1);for(let n=0;n<t.length;n++)e.set(n,0,t[n]);return e}static zeros(t,e){return new A(t,e)}static ones(t,e){return new A(t,e).fill(1)}static rand(t,e,n={}){if("object"!=typeof n)throw new TypeError("options must be an object");const{random:i=Math.random}=n;let s=new A(t,e);for(let n=0;n<t;n++)for(let t=0;t<e;t++)s.set(n,t,i());return s}static randInt(t,e,n={}){if("object"!=typeof n)throw new TypeError("options must be an object");const{min:i=0,max:s=1e3,random:o=Math.random}=n;if(!Number.isInteger(i))throw new TypeError("min must be an integer");if(!Number.isInteger(s))throw new TypeError("max must be an integer");if(i>=s)throw new RangeError("min must be smaller than max");let r=s-i,a=new A(t,e);for(let n=0;n<t;n++)for(let t=0;t<e;t++){let e=i+Math.round(o()*r);a.set(n,t,e)}return a}static eye(t,e,n){void 0===e&&(e=t),void 0===n&&(n=1);let i=Math.min(t,e),s=this.zeros(t,e);for(let t=0;t<i;t++)s.set(t,t,n);return s}static diag(t,e,n){let i=t.length;void 0===e&&(e=i),void 0===n&&(n=e);let s=Math.min(i,e,n),o=this.zeros(e,n);for(let e=0;e<s;e++)o.set(e,e,t[e]);return o}static min(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let n=t.rows,i=t.columns,s=new A(n,i);for(let o=0;o<n;o++)for(let n=0;n<i;n++)s.set(o,n,Math.min(t.get(o,n),e.get(o,n)));return s}static max(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let n=t.rows,i=t.columns,s=new this(n,i);for(let o=0;o<n;o++)for(let n=0;n<i;n++)s.set(o,n,Math.max(t.get(o,n),e.get(o,n)));return s}static checkMatrix(t){return N.isMatrix(t)?t:new A(t)}static isMatrix(t){return null!=t&&"Matrix"===t.klass}get size(){return this.rows*this.columns}apply(t){if("function"!=typeof t)throw new TypeError("callback must be a function");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.call(this,e,n);return this}to1DArray(){let t=[];for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.push(this.get(e,n));return t}to2DArray(){let t=[];for(let e=0;e<this.rows;e++){t.push([]);for(let n=0;n<this.columns;n++)t[e].push(this.get(e,n))}return t}toJSON(){return this.to2DArray()}isRowVector(){return 1===this.rows}isColumnVector(){return 1===this.columns}isVector(){return 1===this.rows||1===this.columns}isSquare(){return this.rows===this.columns}isEmpty(){return 0===this.rows||0===this.columns}isSymmetric(){if(this.isSquare()){for(let t=0;t<this.rows;t++)for(let e=0;e<=t;e++)if(this.get(t,e)!==this.get(e,t))return!1;return!0}return!1}isEchelonForm(){let t=0,e=0,n=-1,i=!0,s=!1;for(;t<this.rows&&i;){for(e=0,s=!1;e<this.columns&&!1===s;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>n?(s=!0,n=e):(i=!1,s=!0);t++}return i}isReducedEchelonForm(){let t=0,e=0,n=-1,i=!0,s=!1;for(;t<this.rows&&i;){for(e=0,s=!1;e<this.columns&&!1===s;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>n?(s=!0,n=e):(i=!1,s=!0);for(let n=e+1;n<this.rows;n++)0!==this.get(t,n)&&(i=!1);t++}return i}echelonForm(){let t=this.clone(),e=0,n=0;for(;e<t.rows&&n<t.columns;){let i=e;for(let s=e;s<t.rows;s++)t.get(s,n)>t.get(i,n)&&(i=s);if(0===t.get(i,n))n++;else{t.swapRows(e,i);let s=t.get(e,n);for(let i=n;i<t.columns;i++)t.set(e,i,t.get(e,i)/s);for(let i=e+1;i<t.rows;i++){let s=t.get(i,n)/t.get(e,n);t.set(i,n,0);for(let o=n+1;o<t.columns;o++)t.set(i,o,t.get(i,o)-t.get(e,o)*s)}e++,n++}}return t}reducedEchelonForm(){let t=this.echelonForm(),e=t.columns,n=t.rows,i=n-1;for(;i>=0;)if(0===t.maxRow(i))i--;else{let s=0,o=!1;for(;s<n&&!1===o;)1===t.get(i,s)?o=!0:s++;for(let n=0;n<i;n++){let o=t.get(n,s);for(let r=s;r<e;r++){let e=t.get(n,r)-o*t.get(i,r);t.set(n,r,e)}}i--}return t}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{rows:e=1,columns:n=1}=t;if(!Number.isInteger(e)||e<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(n)||n<=0)throw new TypeError("columns must be a positive integer");let i=new A(this.rows*e,this.columns*n);for(let t=0;t<e;t++)for(let e=0;e<n;e++)i.setSubMatrix(this,this.rows*t,this.columns*e);return i}fill(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,t);return this}neg(){return this.mulS(-1)}getRow(t){v(this,t);let e=[];for(let n=0;n<this.columns;n++)e.push(this.get(t,n));return e}getRowVector(t){return A.rowVector(this.getRow(t))}setRow(t,e){v(this,t),e=w(this,e);for(let n=0;n<this.columns;n++)this.set(t,n,e[n]);return this}swapRows(t,e){v(this,t),v(this,e);for(let n=0;n<this.columns;n++){let i=this.get(t,n);this.set(t,n,this.get(e,n)),this.set(e,n,i)}return this}getColumn(t){b(this,t);let e=[];for(let n=0;n<this.rows;n++)e.push(this.get(n,t));return e}getColumnVector(t){return A.columnVector(this.getColumn(t))}setColumn(t,e){b(this,t),e=C(this,e);for(let n=0;n<this.rows;n++)this.set(n,t,e[n]);return this}swapColumns(t,e){b(this,t),b(this,e);for(let n=0;n<this.rows;n++){let i=this.get(n,t);this.set(n,t,this.get(n,e)),this.set(n,e,i)}return this}addRowVector(t){t=w(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t[n]);return this}subRowVector(t){t=w(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t[n]);return this}mulRowVector(t){t=w(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t[n]);return this}divRowVector(t){t=w(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t[n]);return this}addColumnVector(t){t=C(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t[e]);return this}subColumnVector(t){t=C(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t[e]);return this}mulColumnVector(t){t=C(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t[e]);return this}divColumnVector(t){t=C(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t[e]);return this}mulRow(t,e){v(this,t);for(let n=0;n<this.columns;n++)this.set(t,n,this.get(t,n)*e);return this}mulColumn(t,e){b(this,t);for(let n=0;n<this.rows;n++)this.set(n,t,this.get(n,t)*e);return this}max(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)>t[e]&&(t[e]=this.get(e,n));return t}case"column":{const t=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)>t[n]&&(t[n]=this.get(e,n));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)>t&&(t=this.get(e,n));return t}default:throw new Error(`invalid option: ${t}`)}}maxIndex(){T(this);let t=this.get(0,0),e=[0,0];for(let n=0;n<this.rows;n++)for(let i=0;i<this.columns;i++)this.get(n,i)>t&&(t=this.get(n,i),e[0]=n,e[1]=i);return e}min(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)<t[e]&&(t[e]=this.get(e,n));return t}case"column":{const t=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)<t[n]&&(t[n]=this.get(e,n));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)<t&&(t=this.get(e,n));return t}default:throw new Error(`invalid option: ${t}`)}}minIndex(){T(this);let t=this.get(0,0),e=[0,0];for(let n=0;n<this.rows;n++)for(let i=0;i<this.columns;i++)this.get(n,i)<t&&(t=this.get(n,i),e[0]=n,e[1]=i);return e}maxRow(t){if(v(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let n=1;n<this.columns;n++)this.get(t,n)>e&&(e=this.get(t,n));return e}maxRowIndex(t){v(this,t),T(this);let e=this.get(t,0),n=[t,0];for(let i=1;i<this.columns;i++)this.get(t,i)>e&&(e=this.get(t,i),n[1]=i);return n}minRow(t){if(v(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let n=1;n<this.columns;n++)this.get(t,n)<e&&(e=this.get(t,n));return e}minRowIndex(t){v(this,t),T(this);let e=this.get(t,0),n=[t,0];for(let i=1;i<this.columns;i++)this.get(t,i)<e&&(e=this.get(t,i),n[1]=i);return n}maxColumn(t){if(b(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let n=1;n<this.rows;n++)this.get(n,t)>e&&(e=this.get(n,t));return e}maxColumnIndex(t){b(this,t),T(this);let e=this.get(0,t),n=[0,t];for(let i=1;i<this.rows;i++)this.get(i,t)>e&&(e=this.get(i,t),n[0]=i);return n}minColumn(t){if(b(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let n=1;n<this.rows;n++)this.get(n,t)<e&&(e=this.get(n,t));return e}minColumnIndex(t){b(this,t),T(this);let e=this.get(0,t),n=[0,t];for(let i=1;i<this.rows;i++)this.get(i,t)<e&&(e=this.get(i,t),n[0]=i);return n}diag(){let t=Math.min(this.rows,this.columns),e=[];for(let n=0;n<t;n++)e.push(this.get(n,n));return e}norm(t="frobenius"){let e=0;if("max"===t)return this.max();if("frobenius"===t){for(let t=0;t<this.rows;t++)for(let n=0;n<this.columns;n++)e+=this.get(t,n)*this.get(t,n);return Math.sqrt(e)}throw new RangeError(`unknown norm type: ${t}`)}cumulativeSum(){let t=0;for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t+=this.get(e,n),this.set(e,n,t);return this}dot(t){N.isMatrix(t)&&(t=t.to1DArray());let e=this.to1DArray();if(e.length!==t.length)throw new RangeError("vectors do not have the same size");let n=0;for(let i=0;i<e.length;i++)n+=e[i]*t[i];return n}mmul(t){t=A.checkMatrix(t);let e=this.rows,n=this.columns,i=t.columns,s=new A(e,i),o=new Float64Array(n);for(let r=0;r<i;r++){for(let e=0;e<n;e++)o[e]=t.get(e,r);for(let t=0;t<e;t++){let e=0;for(let i=0;i<n;i++)e+=this.get(t,i)*o[i];s.set(t,r,e)}}return s}strassen2x2(t){t=A.checkMatrix(t);let e=new A(2,2);const n=this.get(0,0),i=t.get(0,0),s=this.get(0,1),o=t.get(0,1),r=this.get(1,0),a=t.get(1,0),l=this.get(1,1),h=t.get(1,1),c=(n+l)*(i+h),u=(r+l)*i,d=n*(o-h),f=l*(a-i),m=(n+s)*h,p=c+f-m+(s-l)*(a+h),g=d+m,y=u+f,v=c-u+d+(r-n)*(i+o);return e.set(0,0,p),e.set(0,1,g),e.set(1,0,y),e.set(1,1,v),e}strassen3x3(t){t=A.checkMatrix(t);let e=new A(3,3);const n=this.get(0,0),i=this.get(0,1),s=this.get(0,2),o=this.get(1,0),r=this.get(1,1),a=this.get(1,2),l=this.get(2,0),h=this.get(2,1),c=this.get(2,2),u=t.get(0,0),d=t.get(0,1),f=t.get(0,2),m=t.get(1,0),p=t.get(1,1),g=t.get(1,2),y=t.get(2,0),v=t.get(2,1),b=t.get(2,2),w=(n-o)*(-d+p),C=(-n+o+r)*(u-d+p),S=(o+r)*(-u+d),M=n*u,x=(-n+l+h)*(u-f+g),T=(-n+l)*(f-g),N=(l+h)*(-u+f),E=(-s+h+c)*(p+y-v),I=(s-c)*(p-v),L=s*y,_=(h+c)*(-y+v),R=(-s+r+a)*(g+y-b),k=(s-a)*(g-b),G=(r+a)*(-y+b),P=M+L+i*m,O=(n+i+s-o-r-h-c)*p+C+S+M+E+L+_,F=M+x+N+(n+i+s-r-a-l-h)*g+L+R+G,W=w+r*(-u+d+m-p-g-y+b)+C+M+L+R+k,V=w+C+S+M+a*v,H=L+R+k+G+o*f,Z=M+x+T+h*(-u+f+m-p-g-y+v)+E+I+L,U=E+I+L+_+l*d,D=M+x+T+N+c*b;return e.set(0,0,P),e.set(0,1,O),e.set(0,2,F),e.set(1,0,W),e.set(1,1,V),e.set(1,2,H),e.set(2,0,Z),e.set(2,1,U),e.set(2,2,D),e}mmulStrassen(t){t=A.checkMatrix(t);let e=this.clone(),n=e.rows,i=e.columns,s=t.rows,o=t.columns;function r(t,e,n){let i=t.rows,s=t.columns;if(i===e&&s===n)return t;{let i=N.zeros(e,n);return i=i.setSubMatrix(t,0,0),i}}i!==s&&console.warn(`Multiplying ${n} x ${i} and ${s} x ${o} matrix: dimensions do not match.`);let a=Math.max(n,s),l=Math.max(i,o);return e=r(e,a,l),function t(e,n,i,s){if(i<=512||s<=512)return e.mmul(n);i%2==1&&s%2==1?(e=r(e,i+1,s+1),n=r(n,i+1,s+1)):i%2==1?(e=r(e,i+1,s),n=r(n,i+1,s)):s%2==1&&(e=r(e,i,s+1),n=r(n,i,s+1));let o=parseInt(e.rows/2,10),a=parseInt(e.columns/2,10),l=e.subMatrix(0,o-1,0,a-1),h=n.subMatrix(0,o-1,0,a-1),c=e.subMatrix(0,o-1,a,e.columns-1),u=n.subMatrix(0,o-1,a,n.columns-1),d=e.subMatrix(o,e.rows-1,0,a-1),f=n.subMatrix(o,n.rows-1,0,a-1),m=e.subMatrix(o,e.rows-1,a,e.columns-1),p=n.subMatrix(o,n.rows-1,a,n.columns-1),g=t(N.add(l,m),N.add(h,p),o,a),y=t(N.add(d,m),h,o,a),v=t(l,N.sub(u,p),o,a),b=t(m,N.sub(f,h),o,a),w=t(N.add(l,c),p,o,a),C=t(N.sub(d,l),N.add(h,u),o,a),S=t(N.sub(c,m),N.add(f,p),o,a),M=N.add(g,b);M.sub(w),M.add(S);let x=N.add(v,w),T=N.add(y,b),E=N.sub(g,y);E.add(v),E.add(C);let A=N.zeros(2*M.rows,2*M.columns);return A=A.setSubMatrix(M,0,0),A=A.setSubMatrix(x,M.rows,0),A=A.setSubMatrix(T,0,M.columns),A=A.setSubMatrix(E,M.rows,M.columns),A.subMatrix(0,i-1,0,s-1)}(e,t=r(t,a,l),a,l)}scaleRows(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:n=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(n))throw new TypeError("max must be a number");if(e>=n)throw new RangeError("min must be smaller than max");let i=new A(this.rows,this.columns);for(let t=0;t<this.rows;t++){const s=this.getRow(t);s.length>0&&d(s,{min:e,max:n,output:s}),i.setRow(t,s)}return i}scaleColumns(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:n=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(n))throw new TypeError("max must be a number");if(e>=n)throw new RangeError("min must be smaller than max");let i=new A(this.rows,this.columns);for(let t=0;t<this.columns;t++){const s=this.getColumn(t);s.length&&d(s,{min:e,max:n,output:s}),i.setColumn(t,s)}return i}flipRows(){const t=Math.ceil(this.columns/2);for(let e=0;e<this.rows;e++)for(let n=0;n<t;n++){let t=this.get(e,n),i=this.get(e,this.columns-1-n);this.set(e,n,i),this.set(e,this.columns-1-n,t)}return this}flipColumns(){const t=Math.ceil(this.rows/2);for(let e=0;e<this.columns;e++)for(let n=0;n<t;n++){let t=this.get(n,e),i=this.get(this.rows-1-n,e);this.set(n,e,i),this.set(this.rows-1-n,e,t)}return this}kroneckerProduct(t){t=A.checkMatrix(t);let e=this.rows,n=this.columns,i=t.rows,s=t.columns,o=new A(e*i,n*s);for(let r=0;r<e;r++)for(let e=0;e<n;e++)for(let n=0;n<i;n++)for(let a=0;a<s;a++)o.set(i*r+n,s*e+a,this.get(r,e)*t.get(n,a));return o}kroneckerSum(t){if(t=A.checkMatrix(t),!this.isSquare()||!t.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let e=this.rows,n=t.rows,i=this.kroneckerProduct(A.eye(n,n)),s=A.eye(e,e).kroneckerProduct(t);return i.add(s)}transpose(){let t=new A(this.columns,this.rows);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.set(n,e,this.get(e,n));return t}sortRows(t=E){for(let e=0;e<this.rows;e++)this.setRow(e,this.getRow(e).sort(t));return this}sortColumns(t=E){for(let e=0;e<this.columns;e++)this.setColumn(e,this.getColumn(e).sort(t));return this}subMatrix(t,e,n,i){S(this,t,e,n,i);let s=new A(e-t+1,i-n+1);for(let o=t;o<=e;o++)for(let e=n;e<=i;e++)s.set(o-t,e-n,this.get(o,e));return s}subMatrixRow(t,e,n){if(void 0===e&&(e=0),void 0===n&&(n=this.columns-1),e>n||e<0||e>=this.columns||n<0||n>=this.columns)throw new RangeError("Argument out of range");let i=new A(t.length,n-e+1);for(let s=0;s<t.length;s++)for(let o=e;o<=n;o++){if(t[s]<0||t[s]>=this.rows)throw new RangeError(`Row index out of range: ${t[s]}`);i.set(s,o-e,this.get(t[s],o))}return i}subMatrixColumn(t,e,n){if(void 0===e&&(e=0),void 0===n&&(n=this.rows-1),e>n||e<0||e>=this.rows||n<0||n>=this.rows)throw new RangeError("Argument out of range");let i=new A(n-e+1,t.length);for(let s=0;s<t.length;s++)for(let o=e;o<=n;o++){if(t[s]<0||t[s]>=this.columns)throw new RangeError(`Column index out of range: ${t[s]}`);i.set(o-e,s,this.get(o,t[s]))}return i}setSubMatrix(t,e,n){if((t=A.checkMatrix(t)).isEmpty())return this;S(this,e,e+t.rows-1,n,n+t.columns-1);for(let i=0;i<t.rows;i++)for(let s=0;s<t.columns;s++)this.set(e+i,n+s,t.get(i,s));return this}selection(t,e){!function(t,e){if(!a(e))throw new TypeError("row indices must be an array");for(let n=0;n<e.length;n++)if(e[n]<0||e[n]>=t.rows)throw new RangeError("row indices are out of range")}(this,t),function(t,e){if(!a(e))throw new TypeError("column indices must be an array");for(let n=0;n<e.length;n++)if(e[n]<0||e[n]>=t.columns)throw new RangeError("column indices are out of range")}(this,e);let n=new A(t.length,e.length);for(let i=0;i<t.length;i++){let s=t[i];for(let t=0;t<e.length;t++){let o=e[t];n.set(i,t,this.get(s,o))}}return n}trace(){let t=Math.min(this.rows,this.columns),e=0;for(let n=0;n<t;n++)e+=this.get(n,n);return e}clone(){let t=new A(this.rows,this.columns);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.set(e,n,this.get(e,n));return t}sum(t){switch(t){case"row":return function(t){let e=M(t.rows);for(let n=0;n<t.rows;++n)for(let i=0;i<t.columns;++i)e[n]+=t.get(n,i);return e}(this);case"column":return function(t){let e=M(t.columns);for(let n=0;n<t.rows;++n)for(let i=0;i<t.columns;++i)e[i]+=t.get(n,i);return e}(this);case void 0:return function(t){let e=0;for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)e+=t.get(n,i);return e}(this);default:throw new Error(`invalid option: ${t}`)}}product(t){switch(t){case"row":return function(t){let e=M(t.rows,1);for(let n=0;n<t.rows;++n)for(let i=0;i<t.columns;++i)e[n]*=t.get(n,i);return e}(this);case"column":return function(t){let e=M(t.columns,1);for(let n=0;n<t.rows;++n)for(let i=0;i<t.columns;++i)e[i]*=t.get(n,i);return e}(this);case void 0:return function(t){let e=1;for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)e*=t.get(n,i);return e}(this);default:throw new Error(`invalid option: ${t}`)}}mean(t){const e=this.sum(t);switch(t){case"row":for(let t=0;t<this.rows;t++)e[t]/=this.columns;return e;case"column":for(let t=0;t<this.columns;t++)e[t]/=this.rows;return e;case void 0:return e/this.size;default:throw new Error(`invalid option: ${t}`)}}variance(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{unbiased:n=!0,mean:i=this.mean(t)}=e;if("boolean"!=typeof n)throw new TypeError("unbiased must be a boolean");switch(t){case"row":if(!a(i))throw new TypeError("mean must be an array");return function(t,e,n){const i=t.rows,s=t.columns,o=[];for(let r=0;r<i;r++){let i=0,a=0,l=0;for(let e=0;e<s;e++)l=t.get(r,e)-n[r],i+=l,a+=l*l;e?o.push((a-i*i/s)/(s-1)):o.push((a-i*i/s)/s)}return o}(this,n,i);case"column":if(!a(i))throw new TypeError("mean must be an array");return function(t,e,n){const i=t.rows,s=t.columns,o=[];for(let r=0;r<s;r++){let s=0,a=0,l=0;for(let e=0;e<i;e++)l=t.get(e,r)-n[r],s+=l,a+=l*l;e?o.push((a-s*s/i)/(i-1)):o.push((a-s*s/i)/i)}return o}(this,n,i);case void 0:if("number"!=typeof i)throw new TypeError("mean must be a number");return function(t,e,n){const i=t.rows,s=t.columns,o=i*s;let r=0,a=0,l=0;for(let e=0;e<i;e++)for(let i=0;i<s;i++)l=t.get(e,i)-n,r+=l,a+=l*l;return e?(a-r*r/o)/(o-1):(a-r*r/o)/o}(this,n,i);default:throw new Error(`invalid option: ${t}`)}}standardDeviation(t,e){"object"==typeof t&&(e=t,t=void 0);const n=this.variance(t,e);if(void 0===t)return Math.sqrt(n);for(let t=0;t<n.length;t++)n[t]=Math.sqrt(n[t]);return n}center(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{center:n=this.mean(t)}=e;switch(t){case"row":if(!a(n))throw new TypeError("center must be an array");return function(t,e){for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)t.set(n,i,t.get(n,i)-e[n])}(this,n),this;case"column":if(!a(n))throw new TypeError("center must be an array");return function(t,e){for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)t.set(n,i,t.get(n,i)-e[i])}(this,n),this;case void 0:if("number"!=typeof n)throw new TypeError("center must be a number");return function(t,e){for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)t.set(n,i,t.get(n,i)-e)}(this,n),this;default:throw new Error(`invalid option: ${t}`)}}scale(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");let n=e.scale;switch(t){case"row":if(void 0===n)n=function(t){const e=[];for(let n=0;n<t.rows;n++){let i=0;for(let e=0;e<t.columns;e++)i+=Math.pow(t.get(n,e),2)/(t.columns-1);e.push(Math.sqrt(i))}return e}(this);else if(!a(n))throw new TypeError("scale must be an array");return function(t,e){for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)t.set(n,i,t.get(n,i)/e[n])}(this,n),this;case"column":if(void 0===n)n=function(t){const e=[];for(let n=0;n<t.columns;n++){let i=0;for(let e=0;e<t.rows;e++)i+=Math.pow(t.get(e,n),2)/(t.rows-1);e.push(Math.sqrt(i))}return e}(this);else if(!a(n))throw new TypeError("scale must be an array");return function(t,e){for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)t.set(n,i,t.get(n,i)/e[i])}(this,n),this;case void 0:if(void 0===n)n=function(t){const e=t.size-1;let n=0;for(let i=0;i<t.columns;i++)for(let s=0;s<t.rows;s++)n+=Math.pow(t.get(s,i),2)/e;return Math.sqrt(n)}(this);else if("number"!=typeof n)throw new TypeError("scale must be a number");return function(t,e){for(let n=0;n<t.rows;n++)for(let i=0;i<t.columns;i++)t.set(n,i,t.get(n,i)/e)}(this,n),this;default:throw new Error(`invalid option: ${t}`)}}toString(t){return p(this,t)}}function E(t,e){return t-e}N.prototype.klass="Matrix","undefined"!=typeof Symbol&&(N.prototype[Symbol.for("nodejs.util.inspect.custom")]=function(){return p(this)}),N.random=N.rand,N.randomInt=N.randInt,N.diagonal=N.diag,N.prototype.diagonal=N.prototype.diag,N.identity=N.eye,N.prototype.negate=N.prototype.neg,N.prototype.tensorProduct=N.prototype.kroneckerProduct;class A extends N{constructor(t,e){if(super(),A.isMatrix(t))return t.clone();if(Number.isInteger(t)&&t>=0){if(this.data=[],!(Number.isInteger(e)&&e>=0))throw new TypeError("nColumns must be a positive integer");for(let n=0;n<t;n++)this.data.push(new Float64Array(e))}else{if(!a(t))throw new TypeError("First argument must be a positive number or an array");{const n=t;if("number"!=typeof(e=(t=n.length)?n[0].length:0))throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let i=0;i<t;i++){if(n[i].length!==e)throw new RangeError("Inconsistent array dimensions");if(!n[i].every((t=>"number"==typeof t)))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(n[i]))}}}this.rows=t,this.columns=e}set(t,e,n){return this.data[t][e]=n,this}get(t,e){return this.data[t][e]}removeRow(t){return v(this,t),this.data.splice(t,1),this.rows-=1,this}addRow(t,e){return void 0===e&&(e=t,t=this.rows),v(this,t,!0),e=Float64Array.from(w(this,e)),this.data.splice(t,0,e),this.rows+=1,this}removeColumn(t){b(this,t);for(let e=0;e<this.rows;e++){const n=new Float64Array(this.columns-1);for(let i=0;i<t;i++)n[i]=this.data[e][i];for(let i=t+1;i<this.columns;i++)n[i-1]=this.data[e][i];this.data[e]=n}return this.columns-=1,this}addColumn(t,e){void 0===e&&(e=t,t=this.columns),b(this,t,!0),e=C(this,e);for(let n=0;n<this.rows;n++){const i=new Float64Array(this.columns+1);let s=0;for(;s<t;s++)i[s]=this.data[n][s];for(i[s++]=e[n];s<this.columns+1;s++)i[s]=this.data[n][s-1];this.data[n]=i}return this.columns+=1,this}}!function(t,e){t.prototype.add=function(t){return"number"==typeof t?this.addS(t):this.addM(t)},t.prototype.addS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t);return this},t.prototype.addM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t.get(e,n));return this},t.add=function(t,n){return new e(t).add(n)},t.prototype.sub=function(t){return"number"==typeof t?this.subS(t):this.subM(t)},t.prototype.subS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t);return this},t.prototype.subM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t.get(e,n));return this},t.sub=function(t,n){return new e(t).sub(n)},t.prototype.subtract=t.prototype.sub,t.prototype.subtractS=t.prototype.subS,t.prototype.subtractM=t.prototype.subM,t.subtract=t.sub,t.prototype.mul=function(t){return"number"==typeof t?this.mulS(t):this.mulM(t)},t.prototype.mulS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t);return this},t.prototype.mulM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t.get(e,n));return this},t.mul=function(t,n){return new e(t).mul(n)},t.prototype.multiply=t.prototype.mul,t.prototype.multiplyS=t.prototype.mulS,t.prototype.multiplyM=t.prototype.mulM,t.multiply=t.mul,t.prototype.div=function(t){return"number"==typeof t?this.divS(t):this.divM(t)},t.prototype.divS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t);return this},t.prototype.divM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t.get(e,n));return this},t.div=function(t,n){return new e(t).div(n)},t.prototype.divide=t.prototype.div,t.prototype.divideS=t.prototype.divS,t.prototype.divideM=t.prototype.divM,t.divide=t.div,t.prototype.mod=function(t){return"number"==typeof t?this.modS(t):this.modM(t)},t.prototype.modS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)%t);return this},t.prototype.modM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)%t.get(e,n));return this},t.mod=function(t,n){return new e(t).mod(n)},t.prototype.modulus=t.prototype.mod,t.prototype.modulusS=t.prototype.modS,t.prototype.modulusM=t.prototype.modM,t.modulus=t.mod,t.prototype.and=function(t){return"number"==typeof t?this.andS(t):this.andM(t)},t.prototype.andS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)&t);return this},t.prototype.andM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)&t.get(e,n));return this},t.and=function(t,n){return new e(t).and(n)},t.prototype.or=function(t){return"number"==typeof t?this.orS(t):this.orM(t)},t.prototype.orS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)|t);return this},t.prototype.orM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)|t.get(e,n));return this},t.or=function(t,n){return new e(t).or(n)},t.prototype.xor=function(t){return"number"==typeof t?this.xorS(t):this.xorM(t)},t.prototype.xorS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)^t);return this},t.prototype.xorM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)^t.get(e,n));return this},t.xor=function(t,n){return new e(t).xor(n)},t.prototype.leftShift=function(t){return"number"==typeof t?this.leftShiftS(t):this.leftShiftM(t)},t.prototype.leftShiftS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)<<t);return this},t.prototype.leftShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)<<t.get(e,n));return this},t.leftShift=function(t,n){return new e(t).leftShift(n)},t.prototype.signPropagatingRightShift=function(t){return"number"==typeof t?this.signPropagatingRightShiftS(t):this.signPropagatingRightShiftM(t)},t.prototype.signPropagatingRightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)>>t);return this},t.prototype.signPropagatingRightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)>>t.get(e,n));return this},t.signPropagatingRightShift=function(t,n){return new e(t).signPropagatingRightShift(n)},t.prototype.rightShift=function(t){return"number"==typeof t?this.rightShiftS(t):this.rightShiftM(t)},t.prototype.rightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)>>>t);return this},t.prototype.rightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)>>>t.get(e,n));return this},t.rightShift=function(t,n){return new e(t).rightShift(n)},t.prototype.zeroFillRightShift=t.prototype.rightShift,t.prototype.zeroFillRightShiftS=t.prototype.rightShiftS,t.prototype.zeroFillRightShiftM=t.prototype.rightShiftM,t.zeroFillRightShift=t.rightShift,t.prototype.not=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,~this.get(t,e));return this},t.not=function(t){return new e(t).not()},t.prototype.abs=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.abs(this.get(t,e)));return this},t.abs=function(t){return new e(t).abs()},t.prototype.acos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acos(this.get(t,e)));return this},t.acos=function(t){return new e(t).acos()},t.prototype.acosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acosh(this.get(t,e)));return this},t.acosh=function(t){return new e(t).acosh()},t.prototype.asin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asin(this.get(t,e)));return this},t.asin=function(t){return new e(t).asin()},t.prototype.asinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asinh(this.get(t,e)));return this},t.asinh=function(t){return new e(t).asinh()},t.prototype.atan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atan(this.get(t,e)));return this},t.atan=function(t){return new e(t).atan()},t.prototype.atanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atanh(this.get(t,e)));return this},t.atanh=function(t){return new e(t).atanh()},t.prototype.cbrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cbrt(this.get(t,e)));return this},t.cbrt=function(t){return new e(t).cbrt()},t.prototype.ceil=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.ceil(this.get(t,e)));return this},t.ceil=function(t){return new e(t).ceil()},t.prototype.clz32=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.clz32(this.get(t,e)));return this},t.clz32=function(t){return new e(t).clz32()},t.prototype.cos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cos(this.get(t,e)));return this},t.cos=function(t){return new e(t).cos()},t.prototype.cosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cosh(this.get(t,e)));return this},t.cosh=function(t){return new e(t).cosh()},t.prototype.exp=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.exp(this.get(t,e)));return this},t.exp=function(t){return new e(t).exp()},t.prototype.expm1=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.expm1(this.get(t,e)));return this},t.expm1=function(t){return new e(t).expm1()},t.prototype.floor=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.floor(this.get(t,e)));return this},t.floor=function(t){return new e(t).floor()},t.prototype.fround=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.fround(this.get(t,e)));return this},t.fround=function(t){return new e(t).fround()},t.prototype.log=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log(this.get(t,e)));return this},t.log=function(t){return new e(t).log()},t.prototype.log1p=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log1p(this.get(t,e)));return this},t.log1p=function(t){return new e(t).log1p()},t.prototype.log10=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log10(this.get(t,e)));return this},t.log10=function(t){return new e(t).log10()},t.prototype.log2=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log2(this.get(t,e)));return this},t.log2=function(t){return new e(t).log2()},t.prototype.round=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.round(this.get(t,e)));return this},t.round=function(t){return new e(t).round()},t.prototype.sign=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sign(this.get(t,e)));return this},t.sign=function(t){return new e(t).sign()},t.prototype.sin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sin(this.get(t,e)));return this},t.sin=function(t){return new e(t).sin()},t.prototype.sinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sinh(this.get(t,e)));return this},t.sinh=function(t){return new e(t).sinh()},t.prototype.sqrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sqrt(this.get(t,e)));return this},t.sqrt=function(t){return new e(t).sqrt()},t.prototype.tan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tan(this.get(t,e)));return this},t.tan=function(t){return new e(t).tan()},t.prototype.tanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tanh(this.get(t,e)));return this},t.tanh=function(t){return new e(t).tanh()},t.prototype.trunc=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.trunc(this.get(t,e)));return this},t.trunc=function(t){return new e(t).trunc()},t.pow=function(t,n){return new e(t).pow(n)},t.prototype.pow=function(t){return"number"==typeof t?this.powS(t):this.powM(t)},t.prototype.powS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.pow(this.get(e,n),t));return this},t.prototype.powM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.pow(this.get(e,n),t.get(e,n)));return this}}(N,A);class I extends N{constructor(t){super(),this.data=t,this.rows=t.length,this.columns=t[0].length}set(t,e,n){return this.data[t][e]=n,this}get(t,e){return this.data[t][e]}}class L{constructor(t){let e,n,i,s,o,r,a,l,h,c=(t=I.checkMatrix(t)).clone(),u=c.rows,d=c.columns,f=new Float64Array(u),m=1;for(e=0;e<u;e++)f[e]=e;for(l=new Float64Array(u),n=0;n<d;n++){for(e=0;e<u;e++)l[e]=c.get(e,n);for(e=0;e<u;e++){for(h=Math.min(e,n),o=0,i=0;i<h;i++)o+=c.get(e,i)*l[i];l[e]-=o,c.set(e,n,l[e])}for(s=n,e=n+1;e<u;e++)Math.abs(l[e])>Math.abs(l[s])&&(s=e);if(s!==n){for(i=0;i<d;i++)r=c.get(s,i),c.set(s,i,c.get(n,i)),c.set(n,i,r);a=f[s],f[s]=f[n],f[n]=a,m=-m}if(n<u&&0!==c.get(n,n))for(e=n+1;e<u;e++)c.set(e,n,c.get(e,n)/c.get(n,n))}this.LU=c,this.pivotVector=f,this.pivotSign=m}isSingular(){let t=this.LU,e=t.columns;for(let n=0;n<e;n++)if(0===t.get(n,n))return!0;return!1}solve(t){t=A.checkMatrix(t);let e=this.LU;if(e.rows!==t.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");let n,i,s,o=t.columns,r=t.subMatrixRow(this.pivotVector,0,o-1),a=e.columns;for(s=0;s<a;s++)for(n=s+1;n<a;n++)for(i=0;i<o;i++)r.set(n,i,r.get(n,i)-r.get(s,i)*e.get(n,s));for(s=a-1;s>=0;s--){for(i=0;i<o;i++)r.set(s,i,r.get(s,i)/e.get(s,s));for(n=0;n<s;n++)for(i=0;i<o;i++)r.set(n,i,r.get(n,i)-r.get(s,i)*e.get(n,s))}return r}get determinant(){let t=this.LU;if(!t.isSquare())throw new Error("Matrix must be square");let e=this.pivotSign,n=t.columns;for(let i=0;i<n;i++)e*=t.get(i,i);return e}get lowerTriangularMatrix(){let t=this.LU,e=t.rows,n=t.columns,i=new A(e,n);for(let s=0;s<e;s++)for(let e=0;e<n;e++)s>e?i.set(s,e,t.get(s,e)):s===e?i.set(s,e,1):i.set(s,e,0);return i}get upperTriangularMatrix(){let t=this.LU,e=t.rows,n=t.columns,i=new A(e,n);for(let s=0;s<e;s++)for(let e=0;e<n;e++)s<=e?i.set(s,e,t.get(s,e)):i.set(s,e,0);return i}get pivotPermutationVector(){return Array.from(this.pivotVector)}}function _(t,e){let n=0;return Math.abs(t)>Math.abs(e)?(n=e/t,Math.abs(t)*Math.sqrt(1+n*n)):0!==e?(n=t/e,Math.abs(e)*Math.sqrt(1+n*n)):0}class R{constructor(t){let e,n,i,s,o=(t=I.checkMatrix(t)).clone(),r=t.rows,a=t.columns,l=new Float64Array(a);for(i=0;i<a;i++){let t=0;for(e=i;e<r;e++)t=_(t,o.get(e,i));if(0!==t){for(o.get(i,i)<0&&(t=-t),e=i;e<r;e++)o.set(e,i,o.get(e,i)/t);for(o.set(i,i,o.get(i,i)+1),n=i+1;n<a;n++){for(s=0,e=i;e<r;e++)s+=o.get(e,i)*o.get(e,n);for(s=-s/o.get(i,i),e=i;e<r;e++)o.set(e,n,o.get(e,n)+s*o.get(e,i))}}l[i]=-t}this.QR=o,this.Rdiag=l}solve(t){t=A.checkMatrix(t);let e=this.QR,n=e.rows;if(t.rows!==n)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");let i,s,o,r,a=t.columns,l=t.clone(),h=e.columns;for(o=0;o<h;o++)for(s=0;s<a;s++){for(r=0,i=o;i<n;i++)r+=e.get(i,o)*l.get(i,s);for(r=-r/e.get(o,o),i=o;i<n;i++)l.set(i,s,l.get(i,s)+r*e.get(i,o))}for(o=h-1;o>=0;o--){for(s=0;s<a;s++)l.set(o,s,l.get(o,s)/this.Rdiag[o]);for(i=0;i<o;i++)for(s=0;s<a;s++)l.set(i,s,l.get(i,s)-l.get(o,s)*e.get(i,o))}return l.subMatrix(0,h-1,0,a-1)}isFullRank(){let t=this.QR.columns;for(let e=0;e<t;e++)if(0===this.Rdiag[e])return!1;return!0}get upperTriangularMatrix(){let t,e,n=this.QR,i=n.columns,s=new A(i,i);for(t=0;t<i;t++)for(e=0;e<i;e++)t<e?s.set(t,e,n.get(t,e)):t===e?s.set(t,e,this.Rdiag[t]):s.set(t,e,0);return s}get orthogonalMatrix(){let t,e,n,i,s=this.QR,o=s.rows,r=s.columns,a=new A(o,r);for(n=r-1;n>=0;n--){for(t=0;t<o;t++)a.set(t,n,0);for(a.set(n,n,1),e=n;e<r;e++)if(0!==s.get(n,n)){for(i=0,t=n;t<o;t++)i+=s.get(t,n)*a.get(t,e);for(i=-i/s.get(n,n),t=n;t<o;t++)a.set(t,e,a.get(t,e)+i*s.get(t,n))}}return a}}class k{constructor(t,e={}){if((t=I.checkMatrix(t)).isEmpty())throw new Error("Matrix must be non-empty");let n=t.rows,i=t.columns;const{computeLeftSingularVectors:s=!0,computeRightSingularVectors:o=!0,autoTranspose:r=!1}=e;let a,l=Boolean(s),h=Boolean(o),c=!1;if(n<i)if(r){a=t.transpose(),n=a.rows,i=a.columns,c=!0;let e=l;l=h,h=e}else a=t.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else a=t.clone();let u=Math.min(n,i),d=Math.min(n+1,i),f=new Float64Array(d),m=new A(n,u),p=new A(i,i),g=new Float64Array(i),y=new Float64Array(n),v=new Float64Array(d);for(let t=0;t<d;t++)v[t]=t;let b=Math.min(n-1,i),w=Math.max(0,Math.min(i-2,n)),C=Math.max(b,w);for(let t=0;t<C;t++){if(t<b){f[t]=0;for(let e=t;e<n;e++)f[t]=_(f[t],a.get(e,t));if(0!==f[t]){a.get(t,t)<0&&(f[t]=-f[t]);for(let e=t;e<n;e++)a.set(e,t,a.get(e,t)/f[t]);a.set(t,t,a.get(t,t)+1)}f[t]=-f[t]}for(let e=t+1;e<i;e++){if(t<b&&0!==f[t]){let i=0;for(let s=t;s<n;s++)i+=a.get(s,t)*a.get(s,e);i=-i/a.get(t,t);for(let s=t;s<n;s++)a.set(s,e,a.get(s,e)+i*a.get(s,t))}g[e]=a.get(t,e)}if(l&&t<b)for(let e=t;e<n;e++)m.set(e,t,a.get(e,t));if(t<w){g[t]=0;for(let e=t+1;e<i;e++)g[t]=_(g[t],g[e]);if(0!==g[t]){g[t+1]<0&&(g[t]=0-g[t]);for(let e=t+1;e<i;e++)g[e]/=g[t];g[t+1]+=1}if(g[t]=-g[t],t+1<n&&0!==g[t]){for(let e=t+1;e<n;e++)y[e]=0;for(let e=t+1;e<n;e++)for(let n=t+1;n<i;n++)y[e]+=g[n]*a.get(e,n);for(let e=t+1;e<i;e++){let i=-g[e]/g[t+1];for(let s=t+1;s<n;s++)a.set(s,e,a.get(s,e)+i*y[s])}}if(h)for(let e=t+1;e<i;e++)p.set(e,t,g[e])}}let S=Math.min(i,n+1);if(b<i&&(f[b]=a.get(b,b)),n<S&&(f[S-1]=0),w+1<S&&(g[w]=a.get(w,S-1)),g[S-1]=0,l){for(let t=b;t<u;t++){for(let e=0;e<n;e++)m.set(e,t,0);m.set(t,t,1)}for(let t=b-1;t>=0;t--)if(0!==f[t]){for(let e=t+1;e<u;e++){let i=0;for(let s=t;s<n;s++)i+=m.get(s,t)*m.get(s,e);i=-i/m.get(t,t);for(let s=t;s<n;s++)m.set(s,e,m.get(s,e)+i*m.get(s,t))}for(let e=t;e<n;e++)m.set(e,t,-m.get(e,t));m.set(t,t,1+m.get(t,t));for(let e=0;e<t-1;e++)m.set(e,t,0)}else{for(let e=0;e<n;e++)m.set(e,t,0);m.set(t,t,1)}}if(h)for(let t=i-1;t>=0;t--){if(t<w&&0!==g[t])for(let e=t+1;e<i;e++){let n=0;for(let s=t+1;s<i;s++)n+=p.get(s,t)*p.get(s,e);n=-n/p.get(t+1,t);for(let s=t+1;s<i;s++)p.set(s,e,p.get(s,e)+n*p.get(s,t))}for(let e=0;e<i;e++)p.set(e,t,0);p.set(t,t,1)}let M=S-1,x=0,T=Number.EPSILON;for(;S>0;){let t,e;for(t=S-2;t>=-1&&-1!==t;t--){const e=Number.MIN_VALUE+T*Math.abs(f[t]+Math.abs(f[t+1]));if(Math.abs(g[t])<=e||Number.isNaN(g[t])){g[t]=0;break}}if(t===S-2)e=4;else{let n;for(n=S-1;n>=t&&n!==t;n--){let e=(n!==S?Math.abs(g[n]):0)+(n!==t+1?Math.abs(g[n-1]):0);if(Math.abs(f[n])<=T*e){f[n]=0;break}}n===t?e=3:n===S-1?e=1:(e=2,t=n)}switch(t++,e){case 1:{let e=g[S-2];g[S-2]=0;for(let n=S-2;n>=t;n--){let s=_(f[n],e),o=f[n]/s,r=e/s;if(f[n]=s,n!==t&&(e=-r*g[n-1],g[n-1]=o*g[n-1]),h)for(let t=0;t<i;t++)s=o*p.get(t,n)+r*p.get(t,S-1),p.set(t,S-1,-r*p.get(t,n)+o*p.get(t,S-1)),p.set(t,n,s)}break}case 2:{let e=g[t-1];g[t-1]=0;for(let i=t;i<S;i++){let s=_(f[i],e),o=f[i]/s,r=e/s;if(f[i]=s,e=-r*g[i],g[i]=o*g[i],l)for(let e=0;e<n;e++)s=o*m.get(e,i)+r*m.get(e,t-1),m.set(e,t-1,-r*m.get(e,i)+o*m.get(e,t-1)),m.set(e,i,s)}break}case 3:{const e=Math.max(Math.abs(f[S-1]),Math.abs(f[S-2]),Math.abs(g[S-2]),Math.abs(f[t]),Math.abs(g[t])),s=f[S-1]/e,o=f[S-2]/e,r=g[S-2]/e,a=f[t]/e,c=g[t]/e,u=((o+s)*(o-s)+r*r)/2,d=s*r*(s*r);let y=0;0===u&&0===d||(y=u<0?0-Math.sqrt(u*u+d):Math.sqrt(u*u+d),y=d/(u+y));let v=(a+s)*(a-s)+y,b=a*c;for(let e=t;e<S-1;e++){let s=_(v,b);0===s&&(s=Number.MIN_VALUE);let o=v/s,r=b/s;if(e!==t&&(g[e-1]=s),v=o*f[e]+r*g[e],g[e]=o*g[e]-r*f[e],b=r*f[e+1],f[e+1]=o*f[e+1],h)for(let t=0;t<i;t++)s=o*p.get(t,e)+r*p.get(t,e+1),p.set(t,e+1,-r*p.get(t,e)+o*p.get(t,e+1)),p.set(t,e,s);if(s=_(v,b),0===s&&(s=Number.MIN_VALUE),o=v/s,r=b/s,f[e]=s,v=o*g[e]+r*f[e+1],f[e+1]=-r*g[e]+o*f[e+1],b=r*g[e+1],g[e+1]=o*g[e+1],l&&e<n-1)for(let t=0;t<n;t++)s=o*m.get(t,e)+r*m.get(t,e+1),m.set(t,e+1,-r*m.get(t,e)+o*m.get(t,e+1)),m.set(t,e,s)}g[S-2]=v,x+=1;break}case 4:if(f[t]<=0&&(f[t]=f[t]<0?-f[t]:0,h))for(let e=0;e<=M;e++)p.set(e,t,-p.get(e,t));for(;t<M&&!(f[t]>=f[t+1]);){let e=f[t];if(f[t]=f[t+1],f[t+1]=e,h&&t<i-1)for(let n=0;n<i;n++)e=p.get(n,t+1),p.set(n,t+1,p.get(n,t)),p.set(n,t,e);if(l&&t<n-1)for(let i=0;i<n;i++)e=m.get(i,t+1),m.set(i,t+1,m.get(i,t)),m.set(i,t,e);t++}x=0,S--}}if(c){let t=p;p=m,m=t}this.m=n,this.n=i,this.s=f,this.U=m,this.V=p}solve(t){let e=t,n=this.threshold,i=this.s.length,s=A.zeros(i,i);for(let t=0;t<i;t++)Math.abs(this.s[t])<=n?s.set(t,t,0):s.set(t,t,1/this.s[t]);let o=this.U,r=this.rightSingularVectors,a=r.mmul(s),l=r.rows,h=o.rows,c=A.zeros(l,h);for(let t=0;t<l;t++)for(let e=0;e<h;e++){let n=0;for(let s=0;s<i;s++)n+=a.get(t,s)*o.get(e,s);c.set(t,e,n)}return c.mmul(e)}solveForDiagonal(t){return this.solve(A.diag(t))}inverse(){let t=this.V,e=this.threshold,n=t.rows,i=t.columns,s=new A(n,this.s.length);for(let o=0;o<n;o++)for(let n=0;n<i;n++)Math.abs(this.s[n])>e&&s.set(o,n,t.get(o,n)/this.s[n]);let o=this.U,r=o.rows,a=o.columns,l=new A(n,r);for(let t=0;t<n;t++)for(let e=0;e<r;e++){let n=0;for(let i=0;i<a;i++)n+=s.get(t,i)*o.get(e,i);l.set(t,e,n)}return l}get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]}get norm2(){return this.s[0]}get rank(){let t=Math.max(this.m,this.n)*this.s[0]*Number.EPSILON,e=0,n=this.s;for(let i=0,s=n.length;i<s;i++)n[i]>t&&e++;return e}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return A.diag(this.s)}}function G(t,e,n,i,s){let o=n*i*i,r=A.eye(e.length,e.length,o);const a=s(e);let l=new Float64Array(t.x.length);for(let e=0;e<t.x.length;e++)l[e]=a(t.x[e]);let h=function(t,e,n,i,s){const o=n.length,r=t.x.length;let a=new Array(o);for(let l=0;l<o;l++){a[l]=new Array(r);let o=n.slice();o[l]+=i;let h=s(o);for(let n=0;n<r;n++)a[l][n]=e[n]-h(t.x[n])}return new A(a)}(t,l,e,i,s),c=function(t,e){const n=t.x.length;let i=new Array(n);for(let s=0;s<n;s++)i[s]=[t.y[s]-e[s]];return new A(i)}(t,l),u=function(t,e=!1){return t=I.checkMatrix(t),e?new k(t).inverse():function(t,e,n=!1){return t=I.checkMatrix(t),e=I.checkMatrix(e),n?new k(t).solve(e):t.isSquare()?new L(t).solve(e):new R(t).solve(e)}(t,A.eye(t.rows))}(r.add(h.mmul(h.transpose())));return(e=(e=new A([e])).sub(u.mmul(h).mmul(c).mul(i).transpose())).to1DArray()}function P(t,e,n={}){let{maxIterations:i=100,gradientDifference:r=.1,damping:a=0,errorTolerance:l=.01,minValues:h,maxValues:c,initialValues:u}=n;if(a<=0)throw new Error("The damping option must be a positive number");if(!t.x||!t.y)throw new Error("The data parameter must have x and y elements");if(!s(t.x)||t.x.length<2||!s(t.y)||t.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(t.x.length!==t.y.length)throw new Error("The data parameter elements must have the same size");let d=u||new Array(e.length).fill(1),f=d.length;if(c=c||new Array(f).fill(Number.MAX_SAFE_INTEGER),h=h||new Array(f).fill(Number.MIN_SAFE_INTEGER),c.length!==h.length)throw new Error("minValues and maxValues must be the same size");if(!s(d))throw new Error("initialValues must be an array");let m,p=o(t,d,e),g=p<=l;for(m=0;m<i&&!g;m++){d=G(t,d,a,r,e);for(let t=0;t<f;t++)d[t]=Math.min(Math.max(h[t],d[t]),c[t]);if(p=o(t,d,e),isNaN(p))break;g=p<=l}return{parameterValues:d,parameterError:p,iterations:m}}},3379:t=>{"use strict";var e=[];function n(t){for(var n=-1,i=0;i<e.length;i++)if(e[i].identifier===t){n=i;break}return n}function i(t,i){for(var o={},r=[],a=0;a<t.length;a++){var l=t[a],h=i.base?l[0]+i.base:l[0],c=o[h]||0,u="".concat(h," ").concat(c);o[h]=c+1;var d=n(u),f={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==d)e[d].references++,e[d].updater(f);else{var m=s(f,i);i.byIndex=a,e.splice(a,0,{identifier:u,updater:m,references:1})}r.push(u)}return r}function s(t,e){var n=e.domAPI(e);return n.update(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap&&e.supports===t.supports&&e.layer===t.layer)return;n.update(t=e)}else n.remove()}}t.exports=function(t,s){var o=i(t=t||[],s=s||{});return function(t){t=t||[];for(var r=0;r<o.length;r++){var a=n(o[r]);e[a].references--}for(var l=i(t,s),h=0;h<o.length;h++){var c=n(o[h]);0===e[c].references&&(e[c].updater(),e.splice(c,1))}o=l}}},569:t=>{"use strict";var e={};t.exports=function(t,n){var i=function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(t){n=null}e[t]=n}return e[t]}(t);if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(n)}},9216:t=>{"use strict";t.exports=function(t){var e=document.createElement("style");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},3565:(t,e,n)=>{"use strict";t.exports=function(t){var e=n.nc;e&&t.setAttribute("nonce",e)}},7795:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(n){!function(t,e,n){var i="";n.supports&&(i+="@supports (".concat(n.supports,") {")),n.media&&(i+="@media ".concat(n.media," {"));var s=void 0!==n.layer;s&&(i+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),i+=n.css,s&&(i+="}"),n.media&&(i+="}"),n.supports&&(i+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleTagTransform(i,t,e.options)}(e,t,n)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},4589:t=>{"use strict";t.exports=function(t,e){if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}},7241:(t,e,n)=>{"use strict";n.d(e,{D:()=>h});var i=n(4469),s=n(976),o=n(473),r=n(8447),a=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const l=31;function h(t,e=!1,n){return a(this,void 0,void 0,(function*(){const a=t.tags.separator,h=t.tags[s.TAGS.UNITS],u=(0,r.vU)(h,a);let d;null!=n||(n=new Map);const f="helm"===h?(0,o.getHelmMonomers)(t):Object.keys((0,r.fy)(t,0,u).freq).filter((t=>""!==t));for(let t=0;t<f.length;t++)n.has(f[t])||n.set(f[t],`${n.size+1}`);if("helm"===h)d=yield i.functions.call("HELM:getMolFiles",{col:t}),d=function(t,e,n=!1){const i=new Array(t.length);for(let s=0;s<t.length;s++){let o=0,r=0,a="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";const h=t.get(s);o=h.indexOf("\n",o)+1,o=h.indexOf("\n",o)+1,o=h.indexOf("\n",o)+1;const c=parseInt(h.substring(o,o+3)),u=parseInt(h.substring(o+3,o+6));a+=`M V30 COUNTS ${c} ${u} 0 0 0\n`,a+="M V30 BEGIN ATOM\n";for(let t=0;t<c;t++){o=h.indexOf("\n",o)+1+l,r=h.indexOf(" ",o);const i=h.substring(o,r);a+=n?`M V30 ${t+1} R${e.get(i)} 0.000 0.000 0 0\n`:`M V30 ${t+1} At 0.000 0.000 0 0 MASS=${e.get(i)}\n`}a+="M V30 END ATOM\n",a+="M V30 BEGIN BOND\n";for(let t=0;t<u;t++){o=h.indexOf("\n",o)+1;const e=parseInt(h.substring(o,o+3).trim()),n=parseInt(h.substring(o+3,o+6).trim());a+=`M V30 ${t+1} ${parseInt(h.substring(o+6,o+9).trim())} ${e} ${n}\n`}a+="M V30 END BOND\n",a+="M V30 END CTAB\n",a+="M END",i[s]=a}return i}(d,n,e);else{d=new Array(t.length);for(let i=0;i<t.length;i++){const s=c(u(t.get(i)).filter((t=>""!==t)),n,e);d[i]=s}}return s.Column.fromStrings("monomericMols",d)}))}function c(t,e,n=!1){let i="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";i+=`M V30 COUNTS ${t.length} ${t.length?t.length-1:0} 0 0 0\n`,i+="M V30 BEGIN ATOM\n";for(let s=0;s<t.length;s++)i+=n?`M V30 ${s+1} R${e.get(t[s])} 0.000 0.000 0 0\n`:`M V30 ${s+1} At 0.000 0.000 0 0 MASS=${e.get(t[s])}\n`;i+="M V30 END ATOM\n",i+="M V30 BEGIN BOND\n";for(let e=0;e<t.length-1;e++)i+=`M V30 ${e+1} 1 ${e+1} ${e+2}\n`;return i+="M V30 END BOND\n",i+="M V30 END CTAB\n",i+="M END",i}},473:(t,e,n)=>{"use strict";n.r(e),n.d(e,{SeqActivityCliffsEditor:()=>tn,SeqPaletteCustom:()=>Ze,SequenceSpaceEditor:()=>nn,_package:()=>We,activityCliffs:()=>en,alignSequences:()=>an,bioSubstructureFilter:()=>Sn,bioSubstructureSearch:()=>wn,compositionAnalysis:()=>ln,convertDialog:()=>un,demoBioActivityCliffs:()=>Tn,demoBioAtomicLevel:()=>Nn,demoBioHelmMsaSequenceSpace:()=>En,demoBioSequenceSpace:()=>xn,demoBioSimilarityDiversity:()=>Mn,diversitySearchTopMenu:()=>bn,diversitySearchViewer:()=>vn,fastaSequenceCellRenderer:()=>Xe,getBioLib:()=>Be,getHelmMonomers:()=>pn,getMonomerLibHelper:()=>Ve,hydrophobPalette:()=>He,importFasta:()=>cn,initBio:()=>Ue,libraryPanel:()=>ze,macroMolColumnPropertyPanel:()=>qe,macromoleculeDifferenceCellRenderer:()=>je,manageFiles:()=>Ye,monomerCellRenderer:()=>dn,multipleSequenceAlignmentDialog:()=>rn,saveAsFasta:()=>Cn,sdfToJsonLib:()=>hn,separatorSequenceCellRenderer:()=>Ke,sequenceAlignment:()=>$e,sequenceSpaceTopMenu:()=>sn,sequenceTooltip:()=>De,similaritySearchTopMenu:()=>yn,similaritySearchViewer:()=>gn,splitToMonomers:()=>mn,testDetectMacromolecule:()=>fn,toAtomicLevel:()=>on,vdRegionViewer:()=>Qe,webLogoViewer:()=>Je});var i=n(4469),s=n(3870),o=n(976),r=n(585);const a=r.GU;var l;!function(t){t.MSA="MSA",t.classic="classic"}(l||(l={}));const h=(t,e,n,i,s,o,r="rgb(100,100,100)",h=0,c=!1,u=1,d="",f=!1,m=l.classic,p={},g=0,y=null,v=[],b=null)=>{var w,C,S;s.textAlign="start";let M=o.substring(0),x=f?"":d;m===l.MSA&&(x="");let T=!0,N=!0,E="difference";null!=y&&null!=y.cell.column&&(T=null===(w=y.cell.column.temp["color-code"])||void 0===w||w,N=null===(C=y.cell.column.temp["compare-with-current"])||void 0===C||C,E=null!==(S=y.cell.column.temp["highlight-difference"])&&void 0!==S?S:"difference");const A=v[g];N&&v.length>0&&"difference"===E&&(u=M==A?.3:u),N&&v.length>0&&"equal"===E&&(u=M!=A?.3:u),null!=b&&(M=a(M,b));let I=s.measureText(M+x),L=s.measureText(M).width,_=s.measureText(M).width;const R=i/2-(I.fontBoundingBoxAscent+I.fontBoundingBoxDescent)/2+1;function k(n,i){const o=T?r:"rgb(0,0,0)";s.fillStyle=o,s.globalAlpha=u,m===l.classic&&(s.fillText(M,t+n,e+R),s.fillStyle="#808080",s.fillText(x,t+i,e+R)),m===l.MSA&&(s.fillStyle=o,s.fillText(M,t+n+(p[g]-_)/2,e+R))}if(I=I.width,m===l.MSA&&(L=p[g],I=p[g]),c||I>n)return k(5,5+L),t+L+s.measureText(x).width;{const e=(n-I)/2;return k(e,e+L),t+e+L}};var c=n(3553),u=n(8447),d=n(7331);const f="rgb(100,100,100)",m=u.GU;function p(t,e,n,i){return t?Math.min(t.canvas.width-n,i):e.canvas.width-n}function g(t){const e=!t.some(((e,n)=>e.length>1&&0!=n&&n!=t.length-1)),n=[],i=e?"":" ";return t.forEach(((e,s)=>{s<t.length&&(e+=`${e?"":"-"}${i}`),n.push(e)})),[n,e]}class y extends o.GridCellRenderer{get name(){return"sequence"}get cellType(){return"sequence"}get defaultHeight(){return 30}get defaultWidth(){return 230}onClick(t,e){t.cell.column.temp["current-word"]=t.cell.value,t.grid.invalidate()}onMouseMove(t,e){var n,i,o;if("SEQ.MSA"!==t.cell.column.getTag("aligned"))return;const r=t.cell.column.temp,a=r["bio-sum-maxLengthWords"],l=r["bio-maxIndex"],h=e.offsetX-t.gridColumn.left+(t.gridColumn.left-t.bounds.x);let c=0,d=l,f=!1;a[l+1]=h+1;let m=0;if(h>a[0])for(;!f;)m=Math.floor((d+c)/2),h>=a[m]&&h<=a[m+1]?(c=m,f=!0):h<a[m]?d=m-1:h>a[m+1]&&(c=m+1),c==d&&(f=!0);c=h>=a[c]?c+1:c;const p=null!==(n=t.cell.column.getTag("separator"))&&void 0!==n?n:"",g=(0,u.vU)("separator",p)(t.cell.value);(null!==(o=null===(i=g[c])||void 0===i?void 0:i.length)&&void 0!==o?o:0)>0?s.tooltip.show(s.div(g[c]),e.x+16,e.y+16):s.tooltip.hide()}render(t,e,n,i,s,r,a){var c;const d=-1!==r.gridRow?r.grid:null,g=r.cell,y=r.cell.column.getTag("alphabet");i=p(d,t,e,i),t.save(),t.beginPath(),t.rect(e,n,i,s),t.clip(),t.font="12px monospace",t.textBaseline="top";const v=r.cell.column.getTag(o.TAGS.UNITS),b=r.cell.column.getTag("aligned"),w=(0,u.py)(y),C=null!==(c=r.cell.column.getTag("separator"))&&void 0!==c?c:"",S=i/5,M=(0,u.vU)(v,C,S),x=r.cell.column.temp,T=x["reference-sequence"],N=x["current-word"],E=x["monomer-width"],A=M(null!=T&&""!=T?T:null!=N?N:"");let I=5,L=0,_=8;"short"===(null!=E?E:"short")&&(I=12,_=1);let R={};if(r.cell.column.getTag(".calculatedCellRender")!==S.toString()){let t=0;for(;t<Math.min(r.cell.column.length,100);)M(r.cell.column.get(t)).forEach(((t,e)=>{var n;const i=7*m(t,_).length+I;i>(null!==(n=R[e])&&void 0!==n?n:0)&&(R[e]=i),e>L&&(L=e)})),t+=1;const e=21;for(let t=0;t<=L;t++){R[t]<e&&(R[t]=e);const n={};n[0]=R[0];for(let t=1;t<=L;t++)n[t]=n[t-1]+R[t];x["bio-sum-maxLengthWords"]=n,x["bio-maxIndex"]=L,x["bio-maxLengthWords"]=R,r.cell.column.setTag(".calculatedCellRender",S.toString())}}else R=x["bio-maxLengthWords"];const k=M(g.value);let G=e,P=f,O=l.classic;b&&b.includes("MSA")&&"separator"==v&&(O=l.MSA),k.every(((e,o)=>{P=w.get(e),t.fillStyle=f;const a=o===k.length-1;return G=h(G,n,i,s,t,e,P,0,!0,1,C,a,O,R,o,r,A,_),50<=i})),t.restore()}}class v extends o.GridCellRenderer{get name(){return c.Of.MONOMER}get cellType(){return c.Of.MONOMER}get defaultHeight(){return 15}get defaultWidth(){return 30}render(t,e,n,i,s,o,r){t.font="12px monospace",t.textBaseline="middle",t.textAlign="center";const a=(0,u.py)(o.cell.column.getTag("alphabet")),l=o.cell.value;if(!l)return;const h=a.get(l);t.fillStyle=h,t.fillText((0,u.GU)(l,3),e+i/2,n+s/2,i)}}class b extends o.GridCellRenderer{get name(){return"MacromoleculeDifferenceCR"}get cellType(){return c.Of.MACROMOLECULE_DIFFERENCE}get defaultHeight(){return 30}get defaultWidth(){return 230}render(t,e,n,i,s,r,a){var l;const h=r.grid,c=null!==(l=r.cell.value)&&void 0!==l?l:"",d=r.tableColumn.tags.separator,f=r.tableColumn.tags[o.TAGS.UNITS];i=p(h,t,e,i);const[m,g]=c.split("#"),y=(0,u.vU)(f,d);w(t,e,n,i,s,y(m),y(g),f)}}function w(t,e,n,i,s,o,r,a,l,c){if(o.length!==r.length){const t=function(t,e){let n=0,i=0;const s=t.length>e.length?t:e;let o=t.length>e.length?e:t;for(let t=0;t<o.length;t++)s[t]===o[t]&&n++;const r=s.length-o.length;for(let t=s.length-1;t>r;t--)s[t]===o[t-r]&&i++;const a=new Array(Math.abs(t.length-e.length)).fill("");function l(t){return n>i?t.concat(a):a.concat(t)}return t.length>e.length?e=l(e):t=l(t),{subParts1:t,subParts2:e}}(o,r);o=t.subParts1,r=t.subParts2}const f=t.measureText(g(o).join("")),m=t.measureText(g(r).join("")),p=Math.max(f.width,m.width);l&&(i=p+4*o.length,t.canvas.width=p+4*o.length);let y=Math.max(e,e+(i-(p+4*o.length))/2);const v=Math.max(n,n+(s-28)/2);t.save(),t.beginPath(),t.rect(e,n,l?p+4*o.length:i,s),t.clip(),t.font="12px monospace",t.textBaseline="top";let b=d.UE.Color;"HELM"!=a&&(b=(0,u.py)(a.substring(a.length-2)));for(let e=0;e<o.length;e++){const n=o[e],a=r[e],l=b.get(n);if(n!=a){const o=b.get(a),r=h(y,v-7,i,s,t,n,l,0,!0),u=h(y,v+7,i,s,t,a,o,0,!0);y=Math.max(u,r),c&&(c[e]=C(n,a,l,o,v,7,s))}else y=h(y,v,i,s,t,n,l,0,!0,.5);y+=4}t.restore()}function C(t,e,n,i,s,o,r){const a=document.createElement("canvas"),l=a.getContext("2d");l.font="12px monospace";const c=l.measureText(g([t]).join("")).width,u=l.measureText(g([e]).join("")).width,d=Math.max(c,u);return a.height=r,a.width=d+4,l.font="12px monospace",l.textBaseline="top",h(0,s-o,d,r,l,t,n,0,!0),h(0,s+o,d,r,l,e,i,0,!0),a}var S,M=n(701),x=n(2433),T=n(9298);!function(t){t.Unknown="unknown",t.FR="framework",t.CDR="cdr"}(S||(S={})),new class{constructor(){this.regionTypes=[S.CDR],this.chains=["Heavy","Light"],this.skipEmptyPositions=!1,this.positionWidth=16,this.positionHeight=T.ES.Entropy}};var N=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const E=S;class A extends o.JsViewer{constructor(){super(),this.viewed=!1,this.regionsFg=null,this.regionsRoot=null,this.isOpened=!1,this.panelNode=null,this.regions=[],this.viewPromise=Promise.resolve(),this.host=null,this.filterSourceInput=null,this.mainLayout=null,this.logos=[],this.viewSubs=[],this.regionTypes=this.stringList("regionTypes",[E.CDR],{choices:Object.values(E).filter((t=>t!=E.Unknown))}),this.chains=this.stringList("chains",["Heavy","Light"],{choices:["Heavy","Light"]}),this.skipEmptyPositions=this.bool("skipEmptyPositions",!1),this.positionWidth=this.float("positionWidth",16),this.positionHeight=this.string("positionHeight",T.ES.Entropy,{choices:Object.keys(T.ES)})}init(){return N(this,void 0,void 0,(function*(){this.subs.push(s.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),this.subs.push(M.fromEvent(this.root,"mousemove").subscribe(this.rootOnMouseMove.bind(this)))}))}onTableAttached(){const t=Object.create(null,{onTableAttached:{get:()=>super.onTableAttached}});return N(this,void 0,void 0,(function*(){const e=t.onTableAttached.bind(this);this.viewPromise=this.viewPromise.then((()=>N(this,void 0,void 0,(function*(){e(),this.viewed||(yield this.buildView("onTableAttached"),this.viewed=!0)}))))}))}onPropertyChanged(t){if(super.onPropertyChanged(t),t)switch(t&&t.name,t.name){case"skipEmptyPositions":case"positionWidth":case"positionHeight":this.setData(this.dataFrame,this.regions)}else console.warn("Bio: VdRegionsViewer.onPropertyChanged() property is null")}setData(t,e){console.debug("Bio: VdRegionsViewer.setData()"),this.viewPromise=this.viewPromise.then((()=>N(this,void 0,void 0,(function*(){this.viewed&&(yield this.destroyView("setData"),this.viewed=!1)})))),this.regions=e,this.dataFrame=t,this.viewPromise=this.viewPromise.then((()=>N(this,void 0,void 0,(function*(){this.viewed||(yield this.buildView("setData"),this.viewed=!0)}))))}detach(){const t=super.detach.bind(this);this.viewPromise=this.viewPromise.then((()=>N(this,void 0,void 0,(function*(){this.viewed&&(yield this.destroyView("detach"),this.viewed=!1),t()}))))}destroyView(t){return N(this,void 0,void 0,(function*(){console.debug(`Bio: VdRegionsViewer.destroyView( mainLayout = ${this.mainLayout?"value":"none"} ), purpose = '${t}'`),this.filterSourceInput&&s.empty(this.filterSourceInput.root),null!=this.mainLayout&&(this.mainLayout.remove(),this.host.remove(),this.host=null,this.mainLayout=null);for(const t of this.viewSubs)t.unsubscribe()}))}buildView(t){return N(this,void 0,void 0,(function*(){console.debug(`Bio: VdRegionsViewer.buildView() begin, purpose = '${t}'`);const e=this.regions.filter((t=>this.regionTypes.includes(t.type))),n=Array.from(new Set(e.map((t=>t.order)))).sort();this.logos=[];for(let t=0;t<n.length;t++){const i={};for(const s of this.chains){const o=e.find((e=>e.order==n[t]&&e.chain==s));i[s]=yield this.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:o.sequenceColumnName,startPositionName:o.positionStartName,endPositionName:o.positionEndName,fixWidth:!0,skipEmptyPositions:this.skipEmptyPositions,positionWidth:this.positionWidth,positionHeight:this.positionHeight})}this.logos[t]=i}this.mainLayout=s.table(this.chains,(t=>[...n.length>0?[s.div(t,{style:{transform:"rotate(-90deg)",font:"12px Roboto, Roboto Local, sans-serif",textAlign:"center",width:"16px",marginTop:"24px",marginLeft:"6px"}})]:[],...[...Array(n.length).keys()].map((e=>{const n=this.logos[e][t];return n.root.style.height="100%",s.div([n.root],{style:{marginTop:"4px",marginBottom:"4px"}})}))]),["",...[...Array(n.length).keys()].map((t=>e.find((e=>e.order==n[t]&&e.chain==this.chains[0])).name||"Name"))]),this.mainLayout.className="mlb-vd-regions-viewer-table2",this.filterSourceInput=s.boolInput("",!1,this.filterSourceInputOnValueChanged.bind(this)),this.filterSourceInput.root.style.position="absolute",this.filterSourceInput.root.style.left="10px",this.filterSourceInput.root.style.top="-3px",s.tooltip.bind(this.filterSourceInput.root,"Check to filter sequences for selected VRs"),Math.ceil(255*Math.random()).toString(16),this.host=s.div([this.mainLayout,this.filterSourceInput.root],{}),this.root.appendChild(this.host),this.root.style.overflowX="auto",this.calcSize(),console.debug("Bio: VdRegionsViewer.buildView() end")}))}calcSize(){const t=(this.root.clientHeight-54)/this.chains.length,e=Math.min(t,Math.max(...this.logos.map((t=>Math.max(...Object.values(t).map((t=>t.maxHeight)))))));for(let t=0;t<this.logos.length;t++)for(let n=0;n<this.chains.length;n++){const i=this.chains[n];this.logos[t][i].root.style.height=`${e}px`}}rootOnSizeChanged(t){this.calcSize()}rootOnMouseMove(t){}filterSourceInputOnValueChanged(){const t=1==this.filterSourceInput.value?T.Ct.Selected:T.Ct.Filtered;for(let e=0;e<this.logos.length;e++)for(let n=0;n<this.chains.length;n++){const i=this.chains[n];this.logos[e][i].setOptions({[x.bo.filterSource]:t})}}}var I=n(9017);class L extends Float32Array{}function _(t){return Math.random()*t}function R(t){return Math.floor(_(t))}function k(t,e,n=0){return new Array(t).fill(n).map((()=>new L(e).fill(n)))}function G(t,e,n=1){const i=t.length;!function(t=!1,e="Assertion error."){if(!t)throw new Error(e)}(i==e.length,"Vector lengths do not match.");const s=new L(i);for(let i=0;i<t.length;++i)s[i]=t[i]+n*e[i];return s}function P(t,e){const n=function(t){let e=0;for(let n=0;n<t.length;++n)e+=t[n];return e}(function(t){const e=t.length,n=new L(e);for(let e=0;e<t.length;++e)n[e]=t[e]*t[e];return n}(G(t,e,-1)));return Math.sqrt(n)}var O=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function F(t,e,i,s){return O(this,void 0,void 0,(function*(){const o=yield function(t,e,i){return new Promise((function(s,o){const r=new Worker(new URL(n.p+n.u(105),n.b));r.postMessage({columnData:t.data,method:e,measure:t.metric,options:i}),r.onmessage=({data:{error:t,distance:e,embedding:n}})=>{t?o(t):s({distance:e,embedding:n})}}))}({data:t,metric:i},e,s);return o.embedding=o.embedding.map((t=>function(t){let e=0,n=0;for(let n=0;n<t.length;++n)e+=t[n];e/=t.length;for(let i=0;i<t.length;++i)n+=(t[i]-e)*(t[i]-e);n=Math.sqrt(n/t.length);for(let i=0;i<t.length;++i)t[i]=(t[i]-e)/n;return t}(t))),o}))}var W=n(7983),V=n(499),H=n(7767),Z=n(489),U=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function D(t){return U(this,void 0,void 0,(function*(){const e=new H.L(t.seqCol);if(e.isFasta()||e.isSeparator()&&e.alphabet&&"UN"!==e.alphabet){let n=Z.U.LEVENSHTEIN,i=t.seqCol.toList();if(e.isSeparator()){const t=e.convert("fasta");i=t.toList(),n=new V.C(t).getDistanceFunctionName()}else n=e.getDistanceFunctionName();const s=yield F(i,t.methodName,n,t.options),r=t.embedAxesNames.map(((t,e)=>o.Column.fromFloat32Array(t,s.embedding[e])));return{distance:s.distance,coordinates:new o.ColumnList(r)}}return yield function(t){return U(this,void 0,void 0,(function*(){return t.seqCol.version!==t.seqCol.temp["last-invalidated-version"]&&(yield(0,W.HV)(t.seqCol,!1)),yield i.functions.call("Chem:getChemSpaceEmbeddings",{col:t.seqCol.temp["monomeric-mols"],methodName:t.methodName,similarityMetric:t.similarityMetric,xAxis:t.embedAxesNames[0],yAxis:t.embedAxesNames[1],options:t.options})}))}(t)}))}function B(t){const e=["Embed_X","Embed_Y"],n=t.columns.names().filter((t=>t.includes(e[0]))).length+1;return e.map((t=>`${t}_${n}`))}const Y=["Tanimoto","Dice","Cosine","Hamming","Euclidean"],z=["Tanimoto","Asymmetric","Cosine","Sokal"];function X(t){return 1/(1+t)}function q(t){return 1/t-1}var K=n(3379),j=n.n(K),$=n(7795),J=n.n($),Q=n(569),tt=n.n(Q),et=n(3565),nt=n.n(et),it=n(9216),st=n.n(it),ot=n(4589),rt=n.n(ot),at=n(9414),lt={};lt.styleTagTransform=rt(),lt.setAttributes=nt(),lt.insert=tt().bind(null,"head"),lt.domAPI=J(),lt.insertStyleElement=st(),j()(at.Z,lt),at.Z&&at.Z.locals&&at.Z.locals;var ht=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};let ct=0;const ut="cliffsDf",dt=new M.Subject,ft="act_diff",mt="sali",pt="sim",gt="line_index",yt=["1_seq","2_seq"],vt="filterCliffs";function bt(t,e,n){const i=e.getBoundingClientRect(),s=t.clientX-i.left,o=t.clientY-i.top;let r=null,a=0;for(const t of n){const e=Math.abs(Math.hypot(t.a[0]-s,t.a[1]-o)+Math.hypot(t.b[0]-s,t.b[1]-o)-Math.hypot(t.a[0]-t.b[0],t.a[1]-t.b[1]));(!a&&e<2||e<a)&&(a=e,r=t)}return r}var wt,Ct,St,Mt,xt=n(1811),Tt=n(3979);(Mt=wt||(wt={})).Levenshtein="Levenshtein",Mt.JaroWinkler="Jaro-Winkler",Mt.Manhattan="Manhattan",function(t){t.Euclidean="Euclidean"}(Ct||(Ct={})),function(t){t.Tanimoto="Tanimoto",t.Dice="Dice",t.Asymmetric="Asymmetric",t.BraunBlanquet="Braun-Blanquet",t.Cosine="Cosine",t.Kulczynski="Kulczynski",t.McConnaughey="Mc-Connaughey",t.RogotGoldberg="Rogot-Goldberg",t.Russel="Russel",t.Sokal="Sokal",t.Hamming="Hamming",t.Euclidean="Euclidean"}(St||(St={}));const Nt={[Ct.Euclidean]:P},Et={[wt.Levenshtein]:xt.T,[wt.JaroWinkler]:Tt.H$,[wt.Manhattan]:function(t,e){if(t.length!==e.length)return 1;{let n=0;for(let i=1;i<t.length;i++)n+=t[i]==e[i]?0:1;return n/t.length}}},At={[St.Tanimoto]:function(t,e){return q(function(t,e){const n=t.trueCount()+e.trueCount();if(0==n)return 1;const i=t.andWithCountBits(e,!0);return i/(n-i)}(t,e))},[St.Dice]:function(t,e){return q(function(t,e){const n=t.trueCount()+e.trueCount();return 0==n?0:2*t.andWithCountBits(e,!0)/n}(t,e))},[St.Asymmetric]:function(t,e){return q(function(t,e){const n=Math.min(t.trueCount(),e.trueCount());return 0==n?0:t.andWithCountBits(e,!0)/n}(t,e))},[St.BraunBlanquet]:function(t,e){return q(function(t,e){const n=Math.max(t.trueCount(),e.trueCount());return 0==n?0:t.andWithCountBits(e,!0)/n}(t,e))},[St.Cosine]:function(t,e){return q(function(t,e){const n=t.trueCount()*e.trueCount();return 0==n?0:t.andWithCountBits(e,!0)/Math.sqrt(n)}(t,e))},[St.Kulczynski]:function(t,e){return q(function(t,e){const n=t.trueCount()+e.trueCount(),i=t.trueCount()*e.trueCount();return 0==i?0:t.andWithCountBits(e,!0)*n/(2*i)}(t,e))},[St.McConnaughey]:function(t,e){return q(function(t,e){const n=t.trueCount()+e.trueCount(),i=t.trueCount()*e.trueCount();return 0==i?0:(t.andWithCountBits(e,!0)*n-i)/i}(t,e))},[St.RogotGoldberg]:function(t,e){return q(function(t,e){const n=t.andWithCountBits(e,!0),i=t.countBits(!0)+e.countBits(!0),s=t.length,o=s-i+n;return n==s||o==s?1:n/i+o/(2*s-i)}(t,e))},[St.Russel]:function(t,e){return q(function(t,e){return 0==t.length?0:t.andWithCountBits(e,!0)/t.length}(t,e))},[St.Sokal]:function(t,e){return q(function(t,e){const n=t.trueCount()+e.trueCount(),i=t.andWithCountBits(e,!0);return i/(2*n-3*i)}(t,e))},[St.Hamming]:function(t,e){return t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0)},[St.Euclidean]:function(t,e){return Math.sqrt(t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0))}};var It,Lt;(Lt=It||(It={})).Vector="Vector",Lt.String="String",Lt.BitArray="BitArray",Lt.MacroMolecule="MacroMolecule";const _t={[It.Vector]:{[Ct.Euclidean]:Nt[Ct.Euclidean]},[It.String]:{[wt.Levenshtein]:Et[wt.Levenshtein],[wt.JaroWinkler]:Et[wt.JaroWinkler],[wt.Manhattan]:Et[wt.Manhattan]},[It.BitArray]:{[St.Tanimoto]:At[St.Tanimoto],[St.Dice]:At[St.Dice],[St.Asymmetric]:At[St.Asymmetric],[St.BraunBlanquet]:At[St.BraunBlanquet],[St.Cosine]:At[St.Cosine],[St.Kulczynski]:At[St.Kulczynski],[St.McConnaughey]:At[St.McConnaughey],[St.RogotGoldberg]:At[St.RogotGoldberg],[St.Russel]:At[St.Russel],[St.Sokal]:At[St.Sokal]},[It.MacroMolecule]:{[Z.U.HAMMING]:Z.o[Z.U.HAMMING],[Z.U.LEVENSHTEIN]:Z.o[Z.U.LEVENSHTEIN],[Z.U.NEEDLEMANN_WUNSCH]:Z.o[Z.U.NEEDLEMANN_WUNSCH]}};Object.keys(_t).reduce(((t,e)=>{for(const n of Object.keys(_t[e]))t[n]=e;return t}),{});var Rt=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function kt(t,e,n,s,r){return Rt(this,void 0,void 0,(function*(){e.version!==e.temp["last-invalidated-version"]&&(yield(0,W.HV)(e,!1));const n=o.DataFrame.create(e.length);return n.columns.addNewString(s).init((t=>e.temp["monomeric-mols"].get(t))),yield i.functions.call("Chem:getChemSimilaritiesMatrix",{dim:t,col:e.temp["monomeric-mols"],df:n,colName:s,simArr:r})}))}function Gt(t){const e=s.divH([]),n=s.divV([s.divText(t.seqCol.name),s.divText(t.activityCol.name)]);return n.style.fontWeight="bold",n.style.display="flex",n.style.justifyContent="space-between",e.append(n),t.line.mols.forEach(((n,i)=>{const o=s.divText(t.activityCol.get(n).toFixed(2));o.style.display="flex",o.style.justifyContent="left",o.style.paddingLeft="30px",e.append(s.divV([s.divText(t.seqCol.get(n)),o]))})),e}function Pt(t){const e=s.div();e.append(s.divText(t.seqCol.name,{style:{fontWeight:"bold"}}));const n=new Array(2),i=new Array(2);t.line.mols.forEach(((e,s)=>{n[s]=t.seqCol.get(e),i[s]=t.activityCol.get(e)}));const r={},a=t.seqCol.getTag(o.TAGS.UNITS),l=t.seqCol.getTag("separator"),h=(0,u.vU)(a,l),c=Ft(h(n[0]),h(n[1]),a,r);return e.append(s.div(c,{style:{width:"300px",overflow:"scroll"}})),e.append(Wt(r)),e.append(Ot("Activity delta",Math.abs(i[0]-i[1]))),e.append(Ot("Cliff",t.sali)),e}function Ot(t,e){return s.divH([s.divText(`${t}: `,{style:{fontWeight:"bold",paddingRight:"5px"}}),s.divText(e.toFixed(2))],{style:{paddingTop:"10px"}})}function Ft(t,e,n,i){const s=document.createElement("canvas"),o=s.getContext("2d");return s.height=30,w(o,0,0,0,30,t,e,n,!0,i),s}function Wt(t){const e=s.div();if(Object.keys(t).length>0){const n=s.divV([]);n.append(s.divH([s.divText("Pos",{style:{fontWeight:"bold",width:"30px",borderBottom:"1px solid"}}),s.divText("Difference",{style:{fontWeight:"bold",borderBottom:"1px solid"}})]));for(const e of Object.keys(t))t[e].style.borderBottom="1px solid lightgray",n.append(s.divH([s.divText((parseInt(e)+1).toString(),{style:{width:"30px",borderBottom:"1px solid lightgray"}}),t[e]]));e.append(n)}return e}function Vt(t,e){const n=o.Column.string("seq_diff",t.rowCount).init((n=>`${t.get(e[0],n)}#${t.get(e[1],n)}`));n.semType="MacromoleculeDifference",n.setTag(o.TAGS.UNITS,t.col(e[0]).getTag(o.TAGS.UNITS)),n.setTag("separator",t.col(e[0]).getTag("separator")),t.columns.add(n);const i=t.plot.grid();return i.col(e[0]).visible=!1,i.col(e[1]).visible=!1,i}var Ht=n(4004),Zt=n(7228),Ut=n(6103),Dt=n(5226);n(9133);var Bt=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};class Yt extends o.JsViewer{constructor(t){super(),this.name="",this.metricsProperties=["distanceMetric","fingerprint"],this.fingerprintChoices=["Morgan","Pattern"],this.initialized=!1,this.tags=[o.TAGS.UNITS,"aligned","separator","alphabet"],this.fingerprint=this.string("fingerprint",this.fingerprintChoices[0],{choices:this.fingerprintChoices}),this.limit=this.int("limit",10),this.distanceMetric=this.string("distanceMetric",Y[0],{choices:Y}),this.moleculeColumnName=this.string("moleculeColumnName"),this.name=t}init(){this.initialized=!0}detach(){this.subs.forEach((t=>t.unsubscribe()))}onTableAttached(){var t;return Bt(this,void 0,void 0,(function*(){if(this.init(),this.dataFrame){this.subs.push(o.debounce(this.dataFrame.onRowsRemoved,50).subscribe((t=>Bt(this,void 0,void 0,(function*(){return yield this.render()})))));const e="diversity"!==this.name;this.subs.push(o.debounce(this.dataFrame.onCurrentRowChanged,50).subscribe((t=>Bt(this,void 0,void 0,(function*(){return yield this.render(e)}))))),this.subs.push(o.debounce(this.dataFrame.selection.onChanged,50).subscribe((t=>Bt(this,void 0,void 0,(function*(){return yield this.render(!1)}))))),this.subs.push(o.debounce(s.onSizeChanged(this.root),50).subscribe((t=>Bt(this,void 0,void 0,(function*(){return yield this.render(!1)}))))),this.moleculeColumn=this.dataFrame.columns.bySemType(o.SEMTYPE.MACROMOLECULE),this.moleculeColumnName=null===(t=this.moleculeColumn)||void 0===t?void 0:t.name,this.getProperty("limit").fromOptions({min:1,max:this.dataFrame.rowCount})}yield this.render()}))}onPropertyChanged(t){if(super.onPropertyChanged(t),this.initialized){if("moleculeColumnName"===t.name){const e=this.dataFrame.col(t.get(this));e.semType===o.SEMTYPE.MACROMOLECULE&&(this.moleculeColumn=e)}this.render()}}render(t=!0){return Bt(this,void 0,void 0,(function*(){}))}beforeRender(){return!(!this.initialized||this.dataFrame&&this.moleculeColumnName&&this.dataFrame.col(this.moleculeColumnName).semType!==o.SEMTYPE.MACROMOLECULE&&(i.shell.error(`${this.moleculeColumnName} is not Macromolecule type`),1))}}var zt=n(7241),Xt=n(4293);class qt extends Yt{constructor(){super("similarity"),this.sketchedMolecule="",this.curIdx=0,this.molCol=null,this.idxs=null,this.scores=null,this.gridSelect=!1,this.targetMoleculeIdx=0,this.computeCompleted=new M.Subject,this.cutoff=this.float("cutoff",.01,{min:0,max:1}),this.hotSearch=this.bool("hotSearch",!0),this.similarColumnLabel=this.string("similarColumnLabel",null)}init(){this.hotSearch=!0,this.initialized=!0}render(t=!0){var e,n,s,r,a;return n=this,s=void 0,a=function*(){if(this.beforeRender()&&this.moleculeColumn&&(this.curIdx=-1==this.dataFrame.currentRowIdx?0:this.dataFrame.currentRowIdx,t&&!this.gridSelect)){this.targetMoleculeIdx=-1==this.dataFrame.currentRowIdx?0:this.dataFrame.currentRowIdx;const t=yield(0,zt.D)(this.moleculeColumn),n=(o.DataFrame.fromColumns([t]),yield i.functions.call("Chem:callChemSimilaritySearch",{df:this.dataFrame,col:t,molecule:t.get(this.targetMoleculeIdx),metricName:this.distanceMetric,limit:this.limit,minScore:this.cutoff,fingerprint:this.fingerprint}));this.idxs=n.getCol("indexes"),this.scores=n.getCol("score");const s=null!=this.similarColumnLabel?this.similarColumnLabel:`similar (${this.moleculeColumnName})`;this.molCol=o.Column.string(s,this.idxs.length).init((t=>{var e,n;return null===(e=this.moleculeColumn)||void 0===e?void 0:e.get(null===(n=this.idxs)||void 0===n?void 0:n.get(t))})),this.molCol.semType=o.SEMTYPE.MACROMOLECULE,this.tags.forEach((t=>this.molCol.setTag(t,this.moleculeColumn.getTag(t))));const r=o.DataFrame.fromColumns([this.idxs,this.molCol,this.scores]);r.onCurrentRowChanged.subscribe((t=>{this.dataFrame.currentRowIdx=r.col("indexes").get(r.currentRowIdx),setTimeout((()=>{this.createPropertyPanel(r)}),1e3),this.gridSelect=!0}));const a=r.plot.grid();a.col("indexes").visible=!1;const l=null===(e=this.idxs)||void 0===e?void 0:e.getRawData().findIndex((t=>t==this.targetMoleculeIdx));a.cell("score",l).cell.value=null,i.shell.v.grid.root.addEventListener("click",(t=>{this.gridSelect=!1})),(0,Xt.Y)(this.root,a.root),this.computeCompleted.next(!0)}},new((r=void 0)||(r=Promise))((function(t,e){function i(t){try{l(a.next(t))}catch(t){e(t)}}function o(t){try{l(a.throw(t))}catch(t){e(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r((function(t){t(n)}))).then(i,o)}l((a=a.apply(n,s||[])).next())}))}createPropertyPanel(t){const e=s.div(),n={},r=t.col("sequence").getTag(o.TAGS.UNITS),a=t.col("sequence").getTag("separator"),l=(0,u.vU)(r,a),h=l(this.moleculeColumn.get(this.targetMoleculeIdx)),c=l(t.get("sequence",t.currentRowIdx)),d=Ft(h,c,r,n);e.append(s.div(d,{style:{width:"300px",overflow:"scroll"}})),h.length!==c.length&&e.append(s.divV([s.divText("Different sequence length:",{style:{fontWeight:"bold"}}),s.divText(`target: ${h.length} monomers`),s.divText(`selected: ${c.length} monomers`)],{style:{paddingBottom:"10px"}})),e.append(Wt(n));const f=s.accordion(),m=s.element("i");m.className="grok-icon svg-icon svg-view-layout",f.addTitle(s.span([m,s.label("Similarity search")])),f.addPane("Differences",(()=>e),!0),i.shell.o=f.root}}class Kt extends Yt{constructor(){super("diversity"),this.renderMolIds=null,this.columnNames=[],this.computeCompleted=new M.Subject,this.diverseColumnLabel=this.string("diverseColumnLabel",null)}render(t=!0){return e=this,n=void 0,r=function*(){if(this.beforeRender()&&this.dataFrame&&t&&this.moleculeColumn){const t=yield(0,zt.D)(this.moleculeColumn);o.DataFrame.fromColumns([t]),this.renderMolIds=yield i.functions.call("Chem:callChemDiversitySearch",{col:t,metricName:this.distanceMetric,limit:this.limit,fingerprint:this.fingerprint});const e=null!=this.diverseColumnLabel?this.diverseColumnLabel:`diverse (${this.moleculeColumnName})`,n=o.Column.string(e,this.renderMolIds.length).init((t=>{var e;return null===(e=this.moleculeColumn)||void 0===e?void 0:e.get(this.renderMolIds[t])}));n.semType=o.SEMTYPE.MACROMOLECULE,this.tags.forEach((t=>n.setTag(t,this.moleculeColumn.getTag(t))));const s=o.DataFrame.fromColumns([n]);(0,Xt.Y)(this.root,s.plot.grid().root),this.computeCompleted.next(!0)}},new((s=void 0)||(s=Promise))((function(t,i){function o(t){try{l(r.next(t))}catch(t){i(t)}}function a(t){try{l(r.throw(t))}catch(t){i(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof s?n:new s((function(t){t(n)}))).then(o,a)}l((r=r.apply(e,n||[])).next())}));var e,n,s,r}}var jt=n(9943),$t=n(4413),Jt=n(1061),Qt=n(1345);n(4221),n(7659);class te{constructor(t){var e,n,i,s,o,r,a;this.steps=null!==(e=null==t?void 0:t.steps)&&void 0!==e?e:0,this.cycles=null!==(n=null==t?void 0:t.cycles)&&void 0!==n?n:1e6,this.cutoff=null!==(i=null==t?void 0:t.cutoff)&&void 0!==i?i:0,this.lambda=null!==(s=null==t?void 0:t.lambda)&&void 0!==s?s:2,this.dlambda=null!==(o=null==t?void 0:t.dlambda)&&void 0!==o?o:.01,this.lambda2=this.lambda/2,this.dlambda2=this.dlambda/2,this.epsilon=null!==(r=null==t?void 0:t.epsilon)&&void 0!==r?r:1e-10,this.distanceFunction=null!==(a=null==t?void 0:t.distance)&&void 0!==a?a:P,this.distance=[]}initDistance(t){this.distance=function(t,e){const n=t.length,i=k(n,n,0);for(let s=0;s<n;++s)for(let o=s+1;o<n;++o){const n=null==t[s]||null==t[o]?0:e(t[s],t[o]);i[s][o]=i[o][s]=n}return i}(t,this.distanceFunction)}calcDistance(t,e,n){return this.distance[e][n]}embed(t){const e=t.length,n=function(t,e,n=1){const i=k(t,e);for(let s=0;s<t;++s)for(let t=0;t<e;++t)i[s][t]=_(n);return i}(e,te.dimension,40);let i=this.lambda2;0==this.steps&&(this.steps=t.length-1),this.initDistance(t);for(let s=0;s<this.cycles;++s){for(let s=0;s<this.steps;++s){const s=R(e);let o=R(e);for(;s==o;)o=R(e);const r=n[s],a=n[o],l=this.calcDistance(t,s,o),h=P(r,a);if(0==this.cutoff||l<=this.cutoff||h<l){const t=i*(l-h)/(h+this.epsilon),e=G(r,a,-1);n[s]=G(r,e,t),n[o]=G(a,e,-t)}}if(i-=this.dlambda2,i<=0)break}return n}}te.dimension=2;class ee{constructor(t,e=!1){if(this._length=0,this._version=0,this._updateLevel=0,this._selectedCount=0,this._selectedCountVersion=-1,this._selectedIndexesVersion=-1,this._versionedName="",this._versionedNameVersion=-1,this.SHRINK_THRESHOLD=256,"number"==typeof t){const n=t,i=ee._createBuffer(n);if(e)for(let t=0;t<i.length;t++)i[t]=-1;this._data=i,this._length=n}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=e}}getRawData(){return this._data}assureGoez(t,e){if(t<0)throw new Error(`${e} should be greater than zero`)}assureInRange(t,e,n,i){if(t<e||t>n)throw new Error(`Argument ${i} (${t}) out of range (${e}, ${n})`)}copy(t,e,n){for(let i=0;i<n;i++)e[i]=t[i]}copyFrom(t){if(this._length!=t._length)throw new Error(`Lengths differ (${this._length} != ${t._length})`);this.copy(t._data,this._data,this.lengthInInts),this._version++}get length(){return this._length}get buffer(){return this._data}set buffer(t){this._data=t,this._version++}get version(){return this._version}set version(t){this._version=t}incrementVersion(t=!0){this._version++}get lengthInInts(){return Math.floor((this._length+31)/32)}get versionedName(){return this._version==this._versionedNameVersion?this._versionedName:""}set versionedName(t){this._versionedName=t,this._versionedNameVersion=this._version}get self(){return this}setLength(t){if(t<0)throw new Error("should be >= 0");if(t==this._length)return;const e=Math.floor((t+31)/32);if(e>this._data.length||e+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(e);this.copy(this._data,t,e>this._data.length?this._data.length:e),this._data=t}t>this._length&&(this._length%32>0&&(this._data[this.lengthInInts-1]&=(1<<(this._length%32&31))-1),this._data.fill(0,this.lengthInInts,e)),this._length=t,this._version++}static fromAnd(t,e){if(t._length!=e._length)throw new Error(`Lengths differ (${t._length} != ${e._length})`);const n=new ee(t._length);n._length=t._length,n._data=ee._createBuffer(n._length),n._version=0;const i=t.lengthInInts;for(let s=0;s<i;s++)n._data[s]=t._data[s]&e._data[s];return n}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const e=new ee(t.length);e._version=0;for(let n=0;n<e._length;n++)t[n]&&(e._data[Math.floor(n/32)]|=1<<(n%32&31));return e}static fromSeq(t,e){const n=new ee(t);for(let i=0;i<t;++i)n.setBit(i,e(i));return n._version=0,n}static fromString(t){return ee.fromSeq(t.length,(e=>"1"==t.charAt(e)))}static fromUint32Array(t,e){const n=new ee(t);return n._data=e,n}static fromBytes(t){const e=t.length,n=new ee(8*e);n._data=new Uint32Array(Math.floor((e+3)/4)),n._length=8*e;let i=0,s=0;for(;e-s>=4;)n._data[i++]=255&t[s]|(255&t[s+1])<<8|(255&t[s+2])<<16|(255&t[s+3])<<24,s+=4;return e-s==3&&(n._data[i]=(255&t[s+2])<<16),e-s==2&&(n._data[i]|=(255&t[s+1])<<8),e-s==1&&(n._data[i]|=255&t[s]),n._version=0,n}toString(){return`${this._length} bits, ${this.countBits(!0)} set`}equals(t){if(this==t)return!0;if(null==t)return!1;if(this._length!=t._length)return!1;if(0==this._length)return!0;for(let e=0;e<this._data.length-1;e++)if(this._data[e]!=t._data[e])return!1;for(let e=8*(this._data.length-1);e<this._length;e++)if(this.getBit(e)!=t.getBit(e))return!1;return!0}clone(){const t=new ee(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,e){this.setAll(!1,!1);for(let e=0;e<this._length;e++)t(e)&&(this._data[Math.floor(e/32)]|=1<<(e%32&31));return this.incrementVersion(e),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,e=!1){const n=t?-1:0,i=this.lengthInInts;for(let t=0;t<i;t++)this._data[t]=n;this.incrementVersion(e)}setIndexes(t,e=!0,n=!0,i=!0){n&&this.setAll(!e,!1);for(const n of t)this.setFast(n,e);this.incrementVersion(i)}everyIndex(t,e=!0){for(const n of t)if(this.getBit(n)!=e)return!1;return!0}anyIndex(t,e=!0){for(const n of t)if(this.getBit(n)==e)return!0;return!1}setWhere(t,e=!0,n=!0,i=!0,s=!0){if(n&&s&&this.setAll(!e,!1),s)for(let n=0;n<this._length;n++)t(n)&&this.setFast(n,e);else for(let n=0;n<this._length;n++)this.setFast(n,t(n)?e:!e);this.incrementVersion(i)}getRange(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const n=[];for(let i=t;i<e;++i)n.push(this.getBit(i));return ee.fromValues(n)}getRangeAsList(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const n=[];for(let i=t;i<e;++i)n.push(this.getBit(i));return n}setRange(t,e,n,i=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length-1,"to");const s=Math.min(t,e),o=Math.max(t,e);if(n)for(let t=s;t<=o;t++)this.setTrue(t);else for(let t=s;t<=o;t++)this.setFalse(t);return this.incrementVersion(i),this}setRandom(t,e,n=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!e),this.setAll(!e);for(let n=0;n<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=e&&(this.setFast(t,e),n++)}this.incrementVersion(n)}and(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]&=t._data[e];return this.incrementVersion(e),this}andNot(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const n=this.lengthInInts;for(let e=0;e<n;e++)this._data[e]&=~t._data[e];return this.incrementVersion(e),this}notAnd(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]=~this._data[e]&t._data[e];return this.incrementVersion(e),this}not(t=!0){for(let t=0,e=this.lengthInInts;t<e;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]|=t._data[e];return this.incrementVersion(e),this}xor(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]^=t._data[e];return this.incrementVersion(e),this}insertAt(t,e,n=!1){if(this.assureInRange(t,0,this._length,"pos"),0==e)return;const i=this._length;this.setLength(this._length+e);for(let n=i-1;n>=t;n--)this.setBit(n+e,this.getBit(n));for(let i=t;i<t+e;i++)this.setBit(i,n)}removeAt(t,e=1){if(e<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-e,"pos"),this.contains(!0))for(let n=t;n<this._length-e;n++)this.setBit(n,this.getBit(n+e));this.setLength(this._length-e)}removeByMask(t,e=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!e)),this.setAll(!e);else{let n=0;for(let i=-1;-1!=(i=t.findNext(i,!e));)this.setFast(n++,this.getBit(i));this._length=n,this._version++}return this}getBit(t){return 0!=(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,e,n=!0){this.setFast(t,e),this._version++}setFast(t,e){e?this._data[Math.floor(t/32)]|=1<<(31&t):this._data[Math.floor(t/32)]&=~(1<<(31&t))}setTrue(t){this._data[Math.floor(t/32)]|=1<<(31&t)}setFalse(t){this._data[Math.floor(t/32)]&=~(1<<(31&t))}trueCount(){return this.countBits(!0)}falseCount(){return this.countBits(!1)}countBits(t){if(0==this._length)return 0;if(this._selectedCountVersion!=this._version){this._selectedCount=0;const t=this.lengthInInts;let e=0;for(;e<t-1;e++)for(let t=this._data[e];0!=t;t>>>=8)this._selectedCount+=ee._onBitCount[255&t];let n=this._data[e];const i=31&this._length;for(0!=i&&(n&=~(4294967295<<i));0!=n;n>>>=8)this._selectedCount+=ee._onBitCount[255&n];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let e=0;if(this.trueCount()==this._length)for(let n=0;n<this._length;n++)e+=t(n)?1:0;else for(let n=-1;-1!=(n=this.findNext(n,!0));)e+=t(n)?1:0;return e}andWithCountBits(t,e){if(0==this._length)return 0;let n=0;const i=this.lengthInInts;let s=0;for(;s<i-1;s++)for(let e=this._data[s]&t._data[s];0!=e;e>>>=8)n+=ee._onBitCount[255&e];let o=this._data[s]&t._data[s];const r=31&this._length;for(0!=r&&(o&=~(4294967295<<r));0!=o;o>>>=8)n+=ee._onBitCount[255&o];return e?n:this._length-n}clear(){this.setLength(0)}contains(t){return this.findNext(-1,t)>=0}get allTrue(){return this.countBits(!0)==this._length}get allFalse(){return this.countBits(!1)==this._length}get anyTrue(){return this.countBits(!0)>0}get anyFalse(){return this.countBits(!1)>0}findNext(t,e=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let n=31&(t=t<0?0:t+1);const i=this.lengthInInts;for(let s=Math.floor(t/32);s<i;s++){let i=e?this._data[s]:~this._data[s];if(0!=n)i&=4294967295<<n&4294967295,n=0;else if(!e&&-4294967296==i)continue;for(let e=0;0!=i;e+=8,i>>>=8){const n=ee._firstOnBit[255&i];if(n>=0)return(t=n+32*s+e)>=this._length?-1:t}}return-1}findPrev(t,e=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let n=1+(t=t<0?this._length-1:t-1)&31;for(let i=Math.floor(t/32);i>=0;i--){let t=e?this._data[i]:~this._data[i];0!=n&&(t&=~(4294967295<<n),n=0);for(let e=24;0!=t;e-=8,t<<=8){const n=ee._lastOnBit[t>>>24];if(n>=0)return n+32*i+e}}return-1}}ee._onBitCount=Int8Array.from([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]),ee._firstOnBit=Int8Array.from([-1,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0]),ee._lastOnBit=Int8Array.from([-1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]);const ne="UMAP",ie="t-SNE";class se{constructor(){this.learningRate={uiName:"Learinig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"},this.nComponents={uiName:"Components",value:2,tooltip:"The number of components (dimensions) to project the data to"},this.nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"},this.nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"},this.spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control the clumped/dispersed nature of the embedding"},this.minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, used with spread to control the clumped/dispersed nature of the embedding"}}}class oe{constructor(){this.epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"},this.perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"},this.dim={uiName:"Dimensionality",value:2,tooltip:"Dimensionality of the embedding"}}}const re={[o.SEMTYPE.MOLECULE]:"Molecules",[o.SEMTYPE.MACROMOLECULE]:"Sequences"};class ae{get algorithmOptions(){const t=this.methodsParams[this.methodInput.value],e={};return Object.keys(t).forEach((n=>{null!=t[n].value&&(e[n]=t[n].value)})),e}constructor(t){this.methodSettingsDiv=s.inputs([]),this.methodsParams={[ne]:new se,[ie]:new oe},this.tableInput=s.tableInput("Table",i.shell.tv.dataFrame,void 0,(()=>{this.onTableInputChanged(t)})),this.molColInput=s.columnInput(re[t],this.tableInput.value,this.tableInput.value.columns.bySemType(t)),this.molColInputRoot=this.molColInput.root,this.methodInput=s.choiceInput("Method",ne,[ne,ie],(()=>{e&&this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value])})),this.methodSettingsIcon=s.icons.settings((()=>{e=!e,e?this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value]):s.empty(this.methodSettingsDiv)}),"Modify methods parameters"),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.methodSettingsDiv=s.inputs([]);let e=!1;this.similarityMetricInput=s.choiceInput("Similarity","Tanimoto",z)}createAlgorithmSettingsDiv(t,e){return s.empty(t),Object.keys(e).forEach((n=>{const i=e[n],o=s.floatInput(i.uiName,i.value,(()=>{i.value=o.value}));s.tooltip.bind(o.root,i.tooltip),t.append(o.root)})),t}onTableInputChanged(t){this.molColInput=s.columnInput(re[t],this.tableInput.value,this.tableInput.value.columns.bySemType(t)),s.empty(this.molColInputRoot),Array.from(this.molColInput.root.children).forEach((t=>this.molColInputRoot.append(t)))}}class le extends ae{get funcParams(){return{table:this.tableInput.value,molecules:this.molColInput.value,methodName:this.methodInput.value,similarityMetric:this.similarityMetricInput.value,plotEmbeddings:this.plotEmbeddingsInput.value,options:this.algorithmOptions}}get paramsUI(){return this.funcParamsDiv}constructor(t){super(t),this.plotEmbeddingsInput=s.boolInput("Plot Embeddings",!0),this.funcParamsDiv=s.inputs([this.tableInput,this.molColInput,this.methodInput,this.methodSettingsDiv,this.similarityMetricInput,this.plotEmbeddingsInput],{style:{minWidth:"320px"}})}}class he extends ae{get funcParams(){return{table:this.tableInput.value,molecules:this.molColInput.value,activities:this.activitiesInput.value,similarity:this.similarityInput.value,methodName:this.methodInput.value,similarityMetric:this.similarityMetricInput.value,options:this.algorithmOptions}}get paramsUI(){return this.funcParamsDiv}constructor(t){super(t),this.activitiesInput=s.columnInput("Activities",this.tableInput.value,this.tableInput.value.columns.byIndex(0)),this.activitiesInputRoot=this.activitiesInput.root,this.similarityInput=s.intInput("Similarity cutoff",80),s.tooltip.bind(this.similarityInput.root,"Pairs of similar (cutoff is used) molecules with high difference in activity are considered 'cliffs'"),this.funcParamsDiv=s.inputs([this.tableInput,this.molColInput,this.activitiesInput,this.similarityInput,this.methodInput,this.methodSettingsDiv,this.similarityMetricInput],{style:{minWidth:"320px"}})}onTableInputChanged(t){super.onTableInputChanged(t),s.empty(this.activitiesInputRoot),this.activitiesInput=s.columnInput("Activities",this.tableInput.value,this.tableInput.value.columns.byIndex(0)),Array.from(this.activitiesInput.root.children).forEach((t=>this.activitiesInputRoot.append(t)))}}var ce,ue=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};!function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(ce||(ce={}));var de=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};class fe{constructor(t,e,n=!1,i){var o;this.name="",this.description="",this._isAutomatic=!1,this._autoStartFirstStep=!1,this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._isStepProcessed=!1,this._root=s.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._steps=[],this._mainHeader=s.panel([],"tutorials-main-header"),this._header=s.h2(""),this._headerDiv=s.divH([],"tutorials-root-header"),this._stopStartBtn=s.button(s.iconFA("pause"),(()=>this._changeStopState()),"Play / pause"),this._restartBtn=s.button(s.iconFA("redo"),(()=>this._restartScript()),"Restart"),this._nextStepBtn=s.button(s.iconFA("play"),(()=>{this._isStepProcessed||this._nextStep()}),"Next step"),this._activity=s.panel([],"tutorials-root-description"),this._progressDiv=s.divV([],"tutorials-root-progress"),this._progress=s.element("progress"),this._progressSteps=s.divText(""),this._closeBtn=s.button(s.iconFA("chevron-left"),(()=>this._closeDock()),"Back to demo"),this.name=t,this.description=e,this._isAutomatic=n,this._autoStartFirstStep=null!==(o=null==i?void 0:i.autoStartFirstStep)&&void 0!==o&&o,this._progress.max=0,this._progress.value=1,fe.currentObject=this}get steps(){return this._steps}get stepNumber(){return this._steps.length}_addHeader(){this._createHeaderDiv(),this._createProgressDiv(),this._mainHeader.append(this._headerDiv,this._progressDiv)}_createHeaderDiv(){this._header.innerText=this.name,this._headerDiv.append(this._closeBtn),this._headerDiv.append(this._header),this._nextStepBtn.firstChild.className="grok-icon fas fa-play",this._headerDiv.append(this._isAutomatic?this._stopStartBtn:this._nextStepBtn)}_createProgressDiv(){this._progress.max=this.stepNumber,this._progressDiv.append(this._progress),this._progressSteps=s.divText(`Step: ${this._progress.value} of ${this.stepNumber}`),this._progressDiv.append(this._progressSteps)}_addDescription(){var t;this._activity.append(s.div(this.description,"tutorials-root-description"));for(let e=0;e<this.stepNumber;e++){let n=s.iconFA("clock");this._isAutomatic||0===e&&(n=s.iconFA("play",(()=>this._nextStep()),"Next step"),n.className="grok-icon fas fa-play");const i=s.div(this._steps[e].name,"grok-tutorial-entry-instruction"),o=s.div(null===(t=this._steps[e].options)||void 0===t?void 0:t.description,"grok-tutorial-step-description hidden"),r=s.divH([n,i],"grok-tutorial-entry");this._activity.append(r,o)}}_initRoot(){var t,e,n;i.shell.windows.showContextPanel=!0,i.shell.windows.showHelp=!1;const s=Array.from(i.shell.dockManager.rootNode.children)[0];this._node=i.shell.dockManager.dock(this._root,o.DOCK_TYPE.FILL,s,""),(null===(e=null===(t=s.parent.container.containerElement.firstElementChild)||void 0===t?void 0:t.lastElementChild)||void 0===e?void 0:e.classList.contains("tab-handle-list-container"))&&(null===(n=s.parent.container.containerElement.firstElementChild)||void 0===n||n.lastElementChild.remove()),this._node.container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_nextStep(){var t,e;return de(this,void 0,void 0,(function*(){this._isStepProcessed=!0,this._isAutomatic||(this._nextStepBtn.classList.add("disabled"),this._nextStepBtn.firstChild.classList.add("fa-disabled"));const n=this._activity.getElementsByClassName("grok-tutorial-entry")[this._currentStep],i=this._activity.getElementsByClassName("grok-icon")[this._currentStep],o=this._activity.getElementsByClassName("grok-tutorial-step-description")[this._currentStep];i.className="grok-icon far fa-spinner-third fa-spin",o.classList.remove("hidden"),o.classList.add("visible");const r=n,a=(null===(t=this._steps[this._currentStep].options)||void 0===t?void 0:t.delay)?null===(e=this._steps[this._currentStep].options)||void 0===e?void 0:e.delay:2e3;yield this._steps[this._currentStep].func(),this._scrollTo(this._root,r.offsetTop-this._mainHeader.offsetHeight),yield this._countdown(n,i,a),yield function(t){return ue(this,void 0,void 0,(function*(){yield new Promise((e=>setTimeout(e,t)))}))}(a);const l=s.iconFA("check");if(i.replaceWith(l),l.className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++,this._isStepProcessed=!1,this._currentStep!==this.stepNumber){if(!this._isAutomatic){const t=this._activity.getElementsByClassName("grok-icon")[this._currentStep],e=s.iconFA("play",(()=>this._nextStep()),"Next step");e.className="grok-icon fas fa-play",t.replaceWith(e),this._nextStepBtn.classList.remove("disabled"),this._nextStepBtn.firstChild.classList.remove("fa-disabled")}}else this._isAutomatic?this._stopStartBtn.replaceWith(this._restartBtn):this._nextStepBtn.replaceWith(this._restartBtn)}))}_startScript(){return de(this,void 0,void 0,(function*(){for(let t=this._currentStep;t<this.stepNumber&&!this._isStopped&&!this._isCancelled;t++)yield this._nextStep()}))}_scrollTo(t,e){t.focus(),t.scrollTop=e}_countdown(t,e,n){return de(this,void 0,void 0,(function*(){const i=s.div([],"demo-script-countdown");e.classList.add("hidden");let o=n/1e3;const r=this._createSVGIndicator(o);i.append(r),t.prepend(i);const a=setInterval((()=>{o--,0===o&&(clearInterval(a),i.remove(),e.classList.remove("hidden"),e.classList.add("visible"))}),1e3)}))}_createSVGIndicator(t){const e=document.createElementNS("http://www.w3.org/2000/svg","svg"),n=document.createElementNS("http://www.w3.org/2000/svg","circle");return n.setAttributeNS(null,"cx","7"),n.setAttributeNS(null,"cy","7"),n.setAttributeNS(null,"r","6"),n.setAttributeNS(null,"style",`animation: countdown ${t}s linear infinite forwards`),e.append(n),e}_changeStopState(){const t=this._stopStartBtn.getElementsByClassName("grok-icon");t[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(t[0].className="grok-icon fal fa-pause",this._isStepProcessed||this._startScript())}_restartScript(){i.shell.dockManager.close(this._node),i.shell.closeAll(),this._clearRoot(),this._setInitParams(),this.start()}_clearRoot(){this._root=s.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._mainHeader=s.panel([],"tutorials-main-header"),this._header=s.h2(""),this._headerDiv=s.divH([],"tutorials-root-header"),this._activity=s.panel([],"tutorials-root-description"),this._progressDiv=s.divV([],"tutorials-root-progress"),this._progress=s.element("progress"),this._progressSteps=s.divText(""),this._progress.max=0,this._progress.value=1}_setInitParams(){this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._stopStartBtn.getElementsByClassName("grok-icon")[0].className="grok-icon fal fa-pause",this._nextStepBtn.classList.remove("disabled")}_closeDock(){i.shell.dockManager.close(this._node),this.cancelScript()}cancelScript(){this._isCancelled=!0,fe.currentObject=null}step(t,e,n){return this._steps[this.steps.length]={name:t,func:e,options:n},this}start(){return de(this,void 0,void 0,(function*(){this._initRoot(),i.shell.newView(this.name),this._isAutomatic?this._startScript():this._autoStartFirstStep&&(yield this._nextStep())}))}}fe.currentObject=null;var me,pe=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function ge(t){const e=t instanceof Error?t.message:t.toString(),n=t instanceof Error?t.stack:void 0;i.shell.error(e),We.logger.error(t.message,void 0,n)}!function(t){t.X="Embed_X",t.Y="Embed_Y"}(me||(me={}));var ye=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const ve="data/sample_FASTA_PT_activity.csv";var be=n(6535),we=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function Ce(){return we(this,void 0,void 0,(function*(){const t="Dendrogram",e=o.Func.find({package:t,name:"getTreeHelper"});if(0===e.length)throw new Error(`Package "${t}" must be installed for TreeHelper.`);return(yield e[0].prepare().call()).getOutputParamValue()}))}var Se=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};function Me(){return Se(this,void 0,void 0,(function*(){return yield i.functions.call("Dendrogram:getDendrogramService",{})}))}var xe=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const Te="data/sample_FASTA_PT_activity.csv",Ne="sequence";var Ee=n(3336),Ae=n.n(Ee),Ie=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const Le="data/sample_FASTA_PT_activity.csv";var _e=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))},Re=n(8341),ke=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const Ge="samples/sample_HELM.csv";var Pe=n(2568),Oe=n(525),Fe=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const We=new o.Package;function Ve(){return Qt.NT.instance}let He=null;class Ze{constructor(t){this._palette=t}get(t){return this._palette[t]}}function Ue(){return Fe(this,void 0,void 0,(function*(){yield Qt.NT.instance.loadLibraries();const t=Qt.NT.instance.getBioLib(),e=[],n=[],s=yield i.functions.call("Chem:getRdKitModule"),o=t.getMonomerMolsByType("PEPTIDE");Object.keys(o).forEach((t=>{e.push(t);const i=o[t].replaceAll("#R","O "),r=s.get_mol(i),a=JSON.parse(r.get_descriptors()).CrippenClogP;n.push(a),null==r||r.delete()}));const r=n.reduce(((t,e)=>t+e),0)/n.length||0,a={};for(let t=0;t<e.length;t++)a[e[t]]=n[t]<r?"#4682B4":"#DC143C";He=new Ze(a)}))}function De(t){return Fe(this,void 0,void 0,(function*(){const e=i.shell.tv,n=yield e.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:t.name,backgroundColor:4294836197,fitArea:!1,positionHeight:"Entropy",fixWidth:!0});return n.root.style.height="50px",n}))}function Be(){return Qt.NT.instance.getBioLib()}function Ye(){return Fe(this,void 0,void 0,(function*(){const t=s.dialog({title:"Manage files"}).add(s.fileBrowser({path:"System:AppData/Bio/libraries"}).root).addButton("OK",(()=>t.close())).show()}))}function ze(t){return Fe(this,void 0,void 0,(function*(){const t=s.button("Manage",Ye),e=s.div(),n=yield(0,Qt.P4)();new Set(Object.keys(yield i.dapi.userDataStorage.get(Qt.RV,!0)));let r=Promise.resolve();for(const t of n){const n=yield(0,Qt.nW)(),o=s.boolInput(t,!n.exclude.includes(t),(()=>{r=r.then((()=>Fe(this,void 0,void 0,(function*(){1==o.value?n.exclude=n.exclude.filter((e=>e!=t)):n.exclude.includes(t)||n.exclude.push(t),yield(0,Qt.QD)(n),yield Qt.NT.instance.loadLibraries(!0),i.shell.info("Monomer library user settings saved.")}))))}));e.append(o.root)}return new o.Widget(s.splitV([e,s.divV([t])]))}))}function Xe(){return new y}function qe(t){return function(t){const e=Array.from(t.dataFrame.columns).filter((t=>t.semType===o.SEMTYPE.MOLECULE)).map((t=>t.name));new Set(e).delete(t.name);const n=s.choiceInput("Monomer width",null!=(null==t?void 0:t.temp["monomer-width"])?t.temp["monomer-width"]:"short",["short","long"],(e=>{t.temp["monomer-width"]=e,t.setTag(".calculatedCellRender","0"),t.dataFrame.fireValuesChanged()}));n.setTooltip("In short mode, only the first character should be visible, followed by .. if there are more characters");const i=s.boolInput("Color code",null==(null==t?void 0:t.temp["color-code"])||t.temp["color-code"],(e=>{t.temp["color-code"]=e,t.dataFrame.fireValuesChanged()}));i.setTooltip("Color code");const r=s.stringInput("Reference sequence",null!=(null==t?void 0:t.temp["reference-sequence"])?null==t?void 0:t.temp["reference-sequence"]:"",(e=>{t.temp["reference-sequence"]=e,t.dataFrame.fireValuesChanged()}));r.setTooltip("Reference sequence is not empty, then the sequence will be render \nas a difference from the reference sequence");const a=s.boolInput("Compare with current",null==(null==t?void 0:t.temp["compare-with-current"])||t.temp["compare-with-current"],(e=>{t.temp["compare-with-current"]=e,t.dataFrame.fireValuesChanged()}));a.setTooltip('When on, all sequences get rendered in the "diff" mode');const l=s.inputs([n,i,r,a]);return new o.Widget(l)}(t)}function Ke(){return new y}function je(){return new b}function $e(t,e,n,i,s){const o=new I.k(i,s,n,e);return"Local alignment"==t?o.smithWaterman():o.needlemanWunch()}function Je(){return new x.OZ}function Qe(){return new A}function tn(t){const e=new he(o.SEMTYPE.MACROMOLECULE);s.dialog({title:"Activity Cliffs"}).add(e.paramsUI).onOK((()=>Fe(this,void 0,void 0,(function*(){t.func.prepare(e.funcParams).call(!0)})))).show()}function en(t,e,r,a,l,h){return Fe(this,void 0,void 0,(function*(){if(!(0,Pe.n)(e,"Activity Cliffs"))return;const c=B(t),u={units:e.getTag(o.TAGS.UNITS),aligned:e.getTag("aligned"),separator:e.getTag("separator"),alphabet:e.getTag("alphabet")},d=new H.L(e);let f="Tanimoto",m=e;return(d.isFasta()||d.isSeparator()&&d.alphabet&&"UN"!==d.alphabet)&&(d.isFasta()?f=d.getDistanceFunctionName():(m=d.convert("fasta"),f=new V.C(m).getDistanceFunctionName(),u.units="fasta")),yield function(t,e,r,a,l,h,c,u,d,f,m,p,g,y,v,b,w,C){return ht(this,void 0,void 0,(function*(){ct++;const S=c/100,M=null!=r?r:e;let x=!1,T=!1;const N={};let E,A;const I={seqCol:M,methodName:d,similarityMetric:u,embedAxesNames:a,options:w},{distance:L,coordinates:_}=yield p(I);for(const e of _)t.columns.add(e);let R=L;var k,G;Object.values(Z.U).map((t=>t.toString())).includes(u)&&(R=yield(k=e,G=u,new Promise((function(t,e){const i=new Worker(new URL(n.p+n.u(367),n.b));i.postMessage({values:k.toList(),fnName:G,options:void 0}),i.onmessage=({data:{distanceMatrixData:n,error:s}})=>{s?e(s):t(n),i.terminate()}}))));const P=yield function(t,e,n,i){return ht(this,void 0,void 0,(function*(){const s=t.categories,r=t.getRawData(),a=o.Column.string("seq",t.length).init((t=>s[r[t]])),l=o.DataFrame.fromColumns([a]),h=t.length;let c=Array(h-1);return n?function(t,e,n){for(let i=0;i<t-1;++i){const s=new Float32Array(t-i-1).fill(0);for(let n=i+1;n<t;++n)s[n-i-1]=e[i][n]===o.FLOAT_NULL?0:X(e[i][n]);n[i]=o.Column.fromFloat32Array("similarity",s)}}(h,e,c):c=yield i(h,t,l,"seq",c),c}))}(M,R,!!R,g),O=function(t,e,n){const i=[],s=[],o=[],r=[],a=new Set;for(let l=0;l!=t.length;++l)for(let h=0;h!=t.length-l;++h){const c=t[l]?t[l].get(h):0;if(c>=e){o.push(l),r.push(l+h+1),a.add(l),a.add(l+h+1),i.push(c);const t=Math.abs(n.get(l)-n.get(l+h+1));1!=c?s.push(t/(1-c)):s.push(1/0)}}return{simVals:i,saliVals:s,n1:o,n2:r,cliffsMolIds:a}}(P,S,h),F=function(t,e,n,i,s,r){const a=new Array(t).fill(0);for(let t=0;t!=n.length;++t)e[t]!=1/0&&(r.get(n[t])>r.get(i[t])?a[n[t]]+=e[t]:a[i[t]]+=e[t]);return o.Column.fromList("double",`sali_${s[0].substring(s[0].lastIndexOf("_"))}`,a)}(M.length,O.saliVals,O.n1,O.n2,a,h);t.columns.add(F);const W=function(t,e){const n="containsCliff",i=t.columns.names().filter((t=>t.includes(n))).length+1,s=`${n}_${i}`;return o.Column.bool(s,t.rowCount).init((t=>e.has(t)))}(t,O.cliffsMolIds);t.columns.add(W);const V=function(t){const e=t.filter((t=>t!==1/0)),n=Math.min(...e);return{max:Math.max(...e),min:n}}(O.saliVals),H=.8/(V.max-V.min),U=i.shell.getTableView(t.name);U.grid.columns.byName(W.name).visible=!1;const D=U.addViewer(o.VIEWER.SCATTER_PLOT,{xColumnName:a[0],yColumnName:a[1],size:F.name,color:h.name,showXSelector:!1,showYSelector:!1,showSizeSelector:!1,showColorSelector:!1,markerMinSize:5,markerMaxSize:25,title:l}),B=D.getInfo().canvas,Y=function(t,e,n,i,s){const r=new Array(t.n1.length).fill(null);for(let e=0;e<t.n1.length;e++){const n=t.n1[e],i=t.n2[e];r[e]={id:e,mols:[n,i],selected:!1,a:[],b:[]}}const a=o.DataFrame.create(r.length);return yt.forEach(((t,n)=>{a.columns.addNewString(t).init((t=>e.get(r[t].mols[n]))),function(t,e){Object.keys(e).forEach((n=>{t.tags[n]=e[n]}))}(a.col(t),s),a.col(t).semType=i})),a.columns.addNewFloat(ft).init((t=>Math.abs(n.get(r[t].mols[0])-n.get(r[t].mols[1])))),a.columns.addNewInt(gt).init((t=>t)),a.columns.addNewFloat(mt).init((e=>t.saliVals[e])),a.columns.addNewFloat(pt).init((e=>t.simVals[e])),a.name=`${ut}${ct}`,{lines:r,linesDf:a}}(O,e,h,f,m),z=b?b(Y.linesDf,yt).sort([mt],[!1]):Y.linesDf.plot.grid().sort([mt],[!1]);t.temp[".cliffsDfGrid"]=z;const q=s.button(`${Y.linesDf.rowCount} cliffs`,(()=>{U.dockManager.dock(z,"down",null,"Activity cliffs",null!=C?C:.2)}));q.classList.add("scatter_plot_link","cliffs_grid"),D.root.append(q);const K=s.switchInput("Show only cliffs",!1,(()=>{K.value?(D.dataFrame.setTag(vt,W.name),t.rows.match({[W.name]:!0}).filter(),dt.next(W.name)):(D.dataFrame.setTag(vt,""),t.filter.setAll(!0,!0),dt.next(""))}));K.root.classList.add("scatter_plot_link","show_only_cliffs"),D.root.append(K.root),dt.subscribe((t=>{""!==t?t!==W.name&&(K.enabled=!1):K.enabled=!0}));const j=i.events.onViewerClosed.subscribe((t=>{t.args.viewer===D&&(U.dockManager.close(z.root),j.unsubscribe(),U.subs=U.subs.filter((t=>t!==j)))}));return U.subs.push(j),Y.linesDf.onCurrentCellChanged.subscribe((()=>{x=!0;const n=Y.linesDf.currentCol&&Y.linesDf.currentCol.name===yt[1]?1:0,o=-1!==Y.linesDf.currentRowIdx?Y.lines[Y.linesDf.currentRowIdx]:null;D.dataFrame.currentRowIdx=o?o.mols[n]:-1,D.dataFrame.filter.set(0,!Y.lines[0].selected),D.dataFrame.filter.set(0,Y.lines[0].selected),o&&setTimeout((()=>{!function(t,e,n,o,r,a,l,h){const c=e.getPane("Cliff Details");s.empty(c.root);const u=h({cashedData:n,line:o,df:t,seqCol:r,activityCol:a,sali:l});c.root.append(u),setTimeout((()=>{i.shell.o=e.root}),500)}(t,E,N,o,e,h,Y.linesDf.get(mt,o.id),v);const n=D.dataFrame.getSortedOrder(U.grid.sortByColumns,U.grid.sortTypes);U.grid.scrollToCell(e.name,n.indexOf(D.dataFrame.currentRowIdx))}),1e3)})),Y.linesDf.onSelectionChanged.subscribe((e=>{if(!1===Y.linesDf.selection.anyTrue)Y.lines.forEach((t=>{t.selected=!1}));else if(-1!==Y.linesDf.mouseOverRowIdx){const t=Y.lines[Y.linesDf.mouseOverRowIdx];t.selected=!t.selected}setTimeout((()=>{const e=o.BitSet.create(t.rowCount);Y.lines.forEach((t=>{t.selected&&t.mols.forEach((n=>{e.set(n,t.selected,!0)}))})),t.selection.copyFrom(e),U.grid.invalidate()}),300)})),t.onSelectionChanged.subscribe((e=>{T?T=!1:!1===t.selection.anyTrue&&"number"==typeof e&&(Y.lines.forEach((t=>{t.selected=!1})),z.dataFrame.selection.setAll(!1,!1),z.invalidate())})),B.addEventListener("mousemove",(function(i){clearTimeout(A),A=n.g.setTimeout((function(){const n=bt(i,B,Y.lines);n&&-1===t.mouseOverRowIdx&&s.tooltip.show(y({cashedData:N,line:n,df:t,seqCol:e,activityCol:h}),i.clientX,i.clientY)}),500)})),B.addEventListener("mousedown",(function(e){T=!0;const n=bt(e,B,Y.lines);if(n&&-1===t.mouseOverRowIdx){e.ctrlKey?(n.selected=!n.selected,Y.linesDf.selection.set(n.id,n.selected)):Y.linesDf.currentRowIdx!==n.id&&(Y.linesDf.currentRowIdx=n.id,t.currentRowIdx=n.mols[0],t.filter.set(0,!Y.lines[0].selected),t.filter.set(0,Y.lines[0].selected));const i=Y.linesDf.getSortedOrder(z.sortByColumns,z.sortTypes);z.scrollToCell(yt[0],i.indexOf(n.id))}})),D.onEvent("d4-before-draw-scene").subscribe((e=>{const n=function(t,e,n,i,s,o,r){const a=i.lines,l=t.getInfo().canvas.getContext("2d"),h=t.dataFrame.columns.byName(e),c=t.dataFrame.columns.byName(n);for(let e=0;e<a.length;e++){const n=t.worldToScreen(h.get(a[e].mols[0]),c.get(a[e].mols[0])),u=t.worldToScreen(h.get(a[e].mols[1]),c.get(a[e].mols[1]));a[e].a=[n.x,n.y],a[e].b=[u.x,u.y];const d=new Path2D;d.moveTo(a[e].a[0],a[e].a[1]);const f=a[e].selected?"255,255,0":"0,128,0",m=s[e]===1/0?1:.2+(s[e]-r)*o;l.strokeStyle=`rgba(${f},${m})`,l.lineWidth=a[e].id===i.linesDf.currentRowIdx?3:1,d.lineTo(a[e].b[0],a[e].b[1]),l.stroke(d)}return a}(D,a[0],a[1],Y,O.saliVals,H,V.min);if(x){const t=n[Y.linesDf.currentRowIdx];setTimeout((()=>{const{zoomLeft:e,zoomRight:n,zoomTop:i,zoomBottom:s}=function(t,e,n,i,s,o){const r=Math.abs(n-s),a=Math.abs(i-o),l=t/r,h=e/a,c=Math.min(l,h),u=t/c*5,d=e/c*5,f=(n<s?n:s)+r/2-u/2,m=(i>o?i:o)-a/2+d/2;return{zoomLeft:f,zoomRight:f+u,zoomTop:m,zoomBottom:m-d}}(D.viewport.width,D.viewport.height,D.dataFrame.get(a[0],t.mols[0]),D.dataFrame.get(a[1],t.mols[0]),D.dataFrame.get(a[0],t.mols[1]),D.dataFrame.get(a[1],t.mols[1]));D.zoom(e,i,n,s)}),300),x=!1}K.value?t.rows.match({[W.name]:!0}).filter():!0===K.enabled&&t.filter.setAll(!0,!1)})),D.addProperty("similarityLimit","double",S),E=function(){const t=s.accordion(),e=s.element("i");return e.className="grok-icon svg-icon svg-view-layout",t.addTitle(s.span([e,s.label("Activity cliffs")])),t.addPane("Cliff Details",(()=>s.divText("Cliff has not been selected")),!0),i.shell.o=t.root,t}(),D}))}(t,m,null,c,"Activity cliffs",r,a,f,l,o.SEMTYPE.MACROMOLECULE,u,D,kt,Gt,Pt,Vt,h)}))}function nn(t){const e=new le(o.SEMTYPE.MACROMOLECULE);s.dialog({title:"Sequence Space"}).add(e.paramsUI).onOK((()=>Fe(this,void 0,void 0,(function*(){t.func.prepare(e.funcParams).call(!0)})))).show()}function sn(t,e,n,s="Tanimoto",r,a){return Fe(this,void 0,void 0,(function*(){if(yield(0,Jt.gw)(10),!(0,Pe.n)(e,"Sequence space"))return;const l=B(t),h=o.DataFrame.fromColumns([e]).clone(),c=function(t,e){const n=e.categories.map(((t,e)=>t?null:e)).filter((t=>null!==t)),i=[...e.getRawData()],s=[];let o=0;for(let e=0;e<t.rowCount;e++)n.includes(i[e])&&(t.rows.removeAt(e-o),s.push(e),o+=1);return s}(h,e),u={seqCol:h.col(e.name),methodName:n,similarityMetric:s,embedAxesNames:l,options:a},d=(yield D(u)).coordinates;for(const e of d){const n=e.toList();c.forEach((t=>n.splice(t,0,null))),t.columns.add(o.Column.float(e.name,t.rowCount).init((t=>n[t])))}return r?i.shell.tableView(t.name).scatterPlot({x:l[0],y:l[1],title:"Sequence space"}):void 0}))}function on(t,e){return Fe(this,void 0,void 0,(function*(){if(0===o.Func.find({package:"Chem",name:"getRdKitModule"}).length)return void i.shell.warning('Transformation to atomic level requires package "Chem" installed.');if(!(0,Pe.n)(e,"To Atomic Level"))return;const n=(yield Ve()).getBioLib(),r=yield(0,Ut.i0)(t,e,n);null!==r.col&&(t.columns.add(r.col,!0),yield i.data.detectSemanticTypes(t)),r.warnings&&r.warnings.length>0&&i.shell.warning(s.list(r.warnings))}))}function rn(){(0,Oe.K)()}function an(t=null,e=null){return Fe(this,void 0,void 0,(function*(){return(0,Oe.K)({col:t,clustersCol:e})}))}function ln(){return Fe(this,void 0,void 0,(function*(){const t=i.shell.tv,e=t.dataFrame.columns.toList().filter((t=>t.semType==o.SEMTYPE.MACROMOLECULE&&(new V.C(t),!0))),n=e=>Fe(this,void 0,void 0,(function*(){if(!(0,Pe.n)(e,"Composition"))return;const n=t.addViewer("WebLogo",{sequenceColumnName:e.name});i.shell.tv.dockManager.dock(n,o.DOCK_TYPE.DOWN,null,"Composition analysis",.25)}));let r=null;if(0!=e.length){if(e.length>1){const t=e.map((t=>t.name)),i=e.find((t=>new V.C(t).isMsa())),o=s.choiceInput("Column",i?i.name:t[0],t);s.dialog({title:"Composition Analysis",helpUrl:"/help/domains/bio/macromolecules.md#composition-analysis"}).add(s.div([o])).onOK((()=>Fe(this,void 0,void 0,(function*(){var t;const i=null!==(t=e.find((t=>t.name==o.value)))&&void 0!==t?t:null;i&&(yield n(i))})))).show()}else r=e[0];r&&(yield n(r))}else i.shell.error("Current table does not contain sequences")}))}function hn(t){return Fe(this,void 0,void 0,(function*(){(0,Zt.Xk)(t)}))}function cn(t){return new Dt.i(t).importFasta()}function un(){const t=(0,Xt.m)();(0,Ht.O)(t)}function dn(){return new v}function fn(t){return Fe(this,void 0,void 0,(function*(){const e=o.TaskBarProgressIndicator.create("Test detectMacromolecule..."),n=(yield i.dapi.files.list(t,!0,"")).filter((t=>t.fileName.endsWith(".csv")));let s=0;const r=[];for(const a of n)try{const e=yield i.dapi.files.readAsText(t+a.fullPath),n=o.DataFrame.fromCsv(e);for(const t of n.columns)(yield i.functions.call("Bio:detectMacromolecule",{col:t}))===o.SEMTYPE.MACROMOLECULE&&r.push({file:a.path,result:"detected",column:t.name,message:`units: ${t.getTag(o.TAGS.UNITS)}`})}catch(t){r.push({file:a.path,result:"error",column:null,message:t instanceof Error?t.message:t.toString()})}finally{s+=1,e.update(100*s/n.length,`Test ${a.fileName}`)}i.shell.info("Test Demo:Files for detectMacromolecule finished."),e.close();const a=o.DataFrame.fromObjects(r);return a.name=`datasets_detectMacromolecule_${t}`,a}))}function mn(){const t=(0,Xt.m)(),e=function(t){const e=(0,r.Mj)(t),n=t=>{const e=a.columns.addNewString((t+1).toString());return i.push(e),e},i=[],s=t.length,a=o.DataFrame.create(s);for(let o=0;o<s;++o){const s=t.get(o);null!=s&&e(s).forEach(((t,e)=>{var s;((null!==(s=i[e])&&void 0!==s?s:null)||n(e)).set(o,t||"-",!1)}))}return a}(t),n=t.dataFrame;for(const i of e.columns){const e=n.columns.add(i);e.semType=c.Of.MONOMER,e.setTag(o.TAGS.CELL_RENDERER,c.Of.MONOMER),e.setTag("alphabet",t.getTag("alphabet"))}i.shell.tv.grid.invalidate()}function pn(t){const e=(0,u.fy)(t,1,u.gP);return Object.keys(e.freq)}function gn(){return new qt}function yn(){const t=i.shell.v,e=t.addViewer("Sequence Similarity Search");t.dockManager.dock(e,"down")}function vn(){return new Kt}function bn(){const t=i.shell.v,e=t.addViewer("Sequence Diversity Search");t.dockManager.dock(e,"down")}function wn(){const t=(0,Xt.m)();(0,W.gQ)(t)}function Cn(){(0,jt.C2)()}function Sn(){return new $t.ST}function Mn(){return Fe(this,void 0,void 0,(function*(){yield function(){return ye(this,void 0,void 0,(function*(){let t,e;try{const n=new fe("Similarity, Diversity","Sequence similarity tracking and evaluation dataset diversity");yield n.step("Load DNA sequences",(()=>ye(this,void 0,void 0,(function*(){i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,e=yield We.files.readCsv(ve),t=i.shell.addTableView(e),t.grid.columns.byName("cluster").visible=!1,t.grid.columns.byName("sequence_id").visible=!1,t.grid.columns.byName("sequence").width=300,t.grid.columns.byName("activity").visible=!1,t.grid.columns.byName("is_cliff").visible=!1}))),{description:"Load dataset with macromolecules of 'fasta' notation, 'DNA' alphabet.",delay:2e3}).step("Find the most similar sequences to the current one",(()=>ye(this,void 0,void 0,(function*(){const n=yield e.plot.fromType("Sequence Similarity Search",{moleculeColumnName:"sequence",similarColumnLabel:"Similar to current"});t.dockManager.dock(n,o.DOCK_TYPE.RIGHT,null,"Similarity search",.35)}))),{description:"Add 'Sequence Similarity Search' viewer.",delay:2e3}).step("Explore most diverse sequences in a dataset",(()=>ye(this,void 0,void 0,(function*(){const n=yield e.plot.fromType("Sequence Diversity Search",{moleculeColumnName:"sequence",diverseColumnLabel:"Top diverse sequences of all data"});t.dockManager.dock(n,o.DOCK_TYPE.DOWN,null,"Diversity search",.27)}))),{description:"Add 'Sequence Deversity Search' viewer.",delay:2e3}).step("Choose another sequence for similarity search",(()=>ye(this,void 0,void 0,(function*(){e.currentRowIdx=3}))),{description:"Handling current row changed of data frame showing update of similar sequences.",delay:2e3}).step("One more sequence for similarity search",(()=>ye(this,void 0,void 0,(function*(){e.currentRowIdx=7}))),{description:"Just one more sequence to search similar ones.",delay:2e3}).start()}catch(t){ge(t)}}))}()}))}function xn(){return Fe(this,void 0,void 0,(function*(){yield function(){return xe(this,void 0,void 0,(function*(){let t,e,n,s,r;try{const a=new fe("Sequence Space","Exploring sequence space of Macromolecules, comparison with hierarchical clustering results");yield a.step("Load DNA sequences",(()=>xe(this,void 0,void 0,(function*(){[s,t,e]=yield Promise.all([We.files.readCsv(Te),Ce(),Me()]),n=i.shell.addTableView(s),n.grid.props.rowHeight=22,n.grid.columns.byName("cluster").visible=!1,n.grid.columns.byName("sequence").width=200,n.grid.columns.byName("is_cliff").visible=!1,i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1}))),{description:"Load dataset with macromolecules of 'fasta' notation, 'DNA' alphabet.",delay:2e3}).step("Build sequence space",(()=>xe(this,void 0,void 0,(function*(){r=yield function(t,e,n,i){return pe(this,void 0,void 0,(function*(){let i;{const t=Object.values(me);for(let n=0;n<t.length;n++){const i=t[n];if(!e.col(i)){const s=n==t.length-1;e.columns.add(o.Column.float(i,e.rowCount),s)}}if(e.rowCount>=1){const i=e.getCol(n).toList(),s=Date.now();We.logger.debug("Bio: demoBio01aUI(), calc reduceDimensionality start...");const o=yield F(i,"UMAP",wt.Levenshtein,{}),r=Date.now();We.logger.debug(`Bio: demoBio01aUI(), calc reduceDimensionality ET: ${(r-s)/1e3} s`);for(let n=0;n<t.length;n++){const i=t[n],s=e.getCol(i),r=o.embedding[n];s.init((t=>r[t]))}const a=Date.now();We.logger.debug(`MLB: MlbVrSpaceBrowser.buildView(), postprocess reduceDimensionality ET: ${(a-r)/1e3} s`)}i=yield e.plot.fromType(o.VIEWER.SCATTER_PLOT,{xColumnName:me.X,yColumnName:me.Y,lassoTool:!0})}return t.dockManager.dock(i,o.DOCK_TYPE.RIGHT,null,"Sequence Space",.35),i}))}(n,s,Ne)}))),{description:"Reduce sequence space dimensionality to display on 2D representation.",delay:2e3}).step("Cluster sequences",(()=>xe(this,void 0,void 0,(function*(){const i=s.getCol(Ne).toList(),o=be.H.calc(i,((t,e)=>xt.T(t,e)/((t.length+e.length)/2))),r=yield t.hierarchicalClusteringByDistance(o,"ward");e.injectTreeForGrid(n.grid,r,void 0,150,void 0)}))),{description:"Perform hierarchical clustering to reveal relationships between sequences.",delay:2e3}).step("Select a sequence",(()=>xe(this,void 0,void 0,(function*(){s.selection.init((t=>[15].includes(t)))}))),{description:"Handling selection of data frame row reflecting on linked viewers.",delay:2e3}).step("Select a bunch of sequences",(()=>xe(this,void 0,void 0,(function*(){const t=s.getCol("sequence_id");s.selection.init((e=>["c0_seq120","c0_seq105","c0_seq121","c0_seq93"].includes(t.get(e)))),s.currentRowIdx=27}))),{description:"Selecting a group of rows from a data frame to show their similarity and proximity to each other on a viewer..",delay:2e3}).start()}catch(t){ge(t)}}))}()}))}function Tn(){return Fe(this,void 0,void 0,(function*(){yield function(){return Ie(this,void 0,void 0,(function*(){let t,e,n,s,r;try{const a=new fe("Activity Cliffs","Activity Cliffs analysis on Macromolecules data");yield a.step("Load DNA sequences",(()=>Ie(this,void 0,void 0,(function*(){i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,[n,t,e]=yield Promise.all([We.files.readCsv(Le),Ce(),Me()]),s=i.shell.addTableView(n),s.grid.props.rowHeight=22,s.grid.columns.byName("cluster").visible=!1,s.grid.columns.byName("sequence").width=300,s.grid.columns.byName("is_cliff").visible=!1}))),{description:"Load dataset with macromolecules of 'fasta' notation, 'DNA' alphabet.",delay:2e3}).step("Find activity cliffs",(()=>Ie(this,void 0,void 0,(function*(){r=yield en(n,n.getCol("Sequence"),n.getCol("Activity"),80,"UMAP"),s.dockManager.dock(r,o.DOCK_TYPE.RIGHT,null,"Activity Cliffs",.35),Ae()(r.root).find("button.scatter_plot_link,cliffs_grid").get()[0].click()}))),{description:"Reveal similar sequences with a cliff of activity.",delay:2e3}).step("Cluster sequences",(()=>Ie(this,void 0,void 0,(function*(){const i=n.getCol("sequence").toList(),o=be.H.calc(i,((t,e)=>xt.T(t,e)/((t.length+e.length)/2))),r=yield t.hierarchicalClusteringByDistance(o,"ward");e.injectTreeForGrid(s.grid,r,void 0,150,void 0),s.grid.columns.byName("Activity").scrollIntoView()}))),{description:"Perform hierarchical clustering to reveal relationships between sequences.",delay:2e3}).step("Browse the cliff",(()=>Ie(this,void 0,void 0,(function*(){const t=r.dataFrame.temp[".cliffsDfGrid"];t.dataFrame.rowCount>0&&(t.dataFrame.currentRowIdx=0)}))),{description:"Zoom in to explore selected activity cliff details.",delay:2e3}).start()}catch(t){ge(t)}}))}()}))}function Nn(){return Fe(this,void 0,void 0,(function*(){yield function(){return _e(this,void 0,void 0,(function*(){const t="HELM";let e,n,r;try{yield new fe("Atomic Level","Atomic level structure of Macromolecules").step("Loading Macromolecules notation 'Helm'",(()=>_e(this,void 0,void 0,(function*(){i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1,e=yield We.files.readCsv("samples/sample_HELM.csv"),n=i.shell.addTableView(e);for(let e=0;e<n.grid.columns.length;e++){const i=n.grid.columns.byIndex(e);[t,"Activity"].includes(i.name)||(i.visible=!1)}}))),{description:"Load dataset with macromolecules of 'fasta' notation, 'PT' alphabet (protein, aminoacids).",delay:2e3}).step("To atomic level",(()=>_e(this,void 0,void 0,(function*(){const n=e.getCol(t);yield on(e,n)}))),{description:"Get atomic level structures of Macromolecules.",delay:2e3}).step("Sketcher",(()=>_e(this,void 0,void 0,(function*(){const n=`molfile(${t})`;e.currentCell=e.cell(1,n);const i=e.currentCell.value,a=new o.chem.Sketcher(o.chem.SKETCHER_MODE.INPLACE);a.setMolFile(i),r=s.dialog().add(a).show(),yield(0,Jt.gw)(3e3),r.close()}))),{description:"Display atomic level structure within a sketcher.",delay:2e3}).start()}catch(t){ge(t)}}))}()}))}function En(){return Fe(this,void 0,void 0,(function*(){yield function(){return ke(this,void 0,void 0,(function*(){let t,e,n,s,r,a;const l="msa(HELM)";try{const h=new fe("Helm, MSA, Sequence Space","MSA and composition analysis on Helm data");yield h.step("Load peptides with non-natural aminoacids in 'HELM' notation",(()=>ke(this,void 0,void 0,(function*(){t=i.shell.addTableView(e=yield We.files.readCsv(Ge)),i.shell.windows.showContextPanel=!1,i.shell.windows.showProperties=!1}))),{description:"Load dataset with macromolecules of 'Helm' notation.",delay:2e3}).step("Align peptides with non-natural aminoacids with PepSeA",(()=>ke(this,void 0,void 0,(function*(){n=e.getCol("HELM");const t=Re.J[0];s=yield(0,Re.f)(n,l,t,1.53,0,void 0),e.columns.add(s),yield i.data.detectSemanticTypes(e)}))),{description:"Multiple sequence alignment (MSA) performed with PepSeA tool operating on non-natural aminoacids as well.",delay:2e3}).step("Build sequence space",(()=>ke(this,void 0,void 0,(function*(){a=yield sn(e,s,"UMAP",wt.Levenshtein,!0),t.dockManager.dock(a,o.DOCK_TYPE.RIGHT,null,"Sequence Space",.35)}))),{description:"Reduce sequence space dimensionality to display on 2D representation.",delay:2e3}).step("Analyse sequence composition",(()=>ke(this,void 0,void 0,(function*(){r=yield e.plot.fromType("WebLogo",{sequenceColumnName:l,positionWidth:40,maxHeight:50}),t.dockManager.dock(r,o.DOCK_TYPE.DOWN,null,"Composition analysis",.2)}))),{description:"Composition analysis allows to reveal functional features of sequences like motifs, or variable loops.",delay:2e3}).start()}catch(t){ge(t)}}))}()}))}},9017:(t,e,n)=>{"use strict";n.d(e,{k:()=>o});class i{constructor(){this.value=0,this.parentI=0,this.parentJ=0}}class s{constructor(t,e,n){this.seq1=t,this.seq2=e,this.score=n}}class o{fillNeedleman(){for(let t=0;t<=this.len1;t++)this.dpGrid[t][0].value=-t*this.gap,this.dpGrid[t][0].parentI=t-1,this.dpGrid[t][0].parentJ=0;for(let t=1;t<=this.len2;t++)this.dpGrid[0][t].value=-t*this.gap,this.dpGrid[0][t].parentI=0,this.dpGrid[0][t].parentJ=t-1}fillOne(t,e){this.dpGrid[t][e].value=Math.max(this.dpGrid[t-1][e-1].value+this.scores[t-1][e-1],Math.max(this.dpGrid[t-1][e].value-this.gap,this.dpGrid[t][e-1].value-this.gap)),this.dpGrid[t][e].value==this.dpGrid[t-1][e-1].value+this.scores[t-1][e-1]?(this.dpGrid[t][e].parentI=t-1,this.dpGrid[t][e].parentJ=e-1):this.dpGrid[t][e].value==this.dpGrid[t-1][e].value-this.gap?(this.dpGrid[t][e].parentI=t-1,this.dpGrid[t][e].parentJ=e):(this.dpGrid[t][e].parentI=t,this.dpGrid[t][e].parentJ=e-1)}gridFromName(t){switch(t){case"BLOSUM45":this.alignGrid=this.BLOSUM45,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM50":this.alignGrid=this.BLOSUM50,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM62":this.alignGrid=this.BLOSUM62,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM80":this.alignGrid=this.BLOSUM80,this.connections=this.CONBLO,this.step=1;break;case"BLOSUM90":this.alignGrid=this.BLOSUM90,this.connections=this.CONBLO,this.step=1;break;case"PAM30":this.alignGrid=this.PAM30,this.connections=this.CONBLO,this.step=1;break;case"PAM70":this.alignGrid=this.PAM70,this.connections=this.CONBLO,this.step=1;break;case"PAM250":this.alignGrid=this.PAM250,this.connections=this.CONBLO,this.step=1;break;case"NUCLEOTIDES":this.alignGrid=this.NUCLEOTIDES,this.connections=this.CONNUCL,this.step=1;break;case"TRANS":this.alignGrid=this.TRANS,this.connections=this.CONNUCL,this.step=1;break;case"SCHNEIDER":this.alignGrid=this.SCHNEIDER,this.connections=this.CONSCHN,this.step=3}this.fillScores()}constructResult(t,e){let n="",i="",o="",r=this.dpGrid[t][e].value;for(let t=0;t<this.step;t++)o+="|";for(;t>0||e>0;){this.dpGrid[t][e].parentI==t?(n=o+n,i=this.seq2.substr((e-1)*this.step,this.step)+i):this.dpGrid[t][e].parentJ==e?(i=o+i,n=this.seq1.substr((t-1)*this.step,this.step)+n):(n=t-1>=0?this.seq1.substr((t-1)*this.step,this.step)+n:o+n,i=e-1>=0?this.seq2.substr((e-1)*this.step,this.step)+i:o+i);let s=t;t=this.dpGrid[t][e].parentI,e=this.dpGrid[s][e].parentJ}return new s(n,i,r)}fillScores(){this.scores=[];for(let t=0;t<this.len1;t++){this.scores.push([]);for(let e=0;e<this.len2;e++)this.scores[t].push(this.alignGrid[this.connections[this.seq1.substr(t*this.step,this.step)]][this.connections[this.seq2.substr(e*this.step,this.step)]])}}typeRec(){if(/[ATGC]*/.test(this.seq1)&&/[ATGC]*/.test(this.seq2))return"NUCLEOTIDES";if(/[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq1)&&/[ARNDCQEGHILKMFPSTWYVBZX*]*/.test(this.seq2))return"BLOSUM62";throw Error("Can't recognize sequence type")}needlemanWunch(){this.dpGrid=[];for(let t=0;t<this.len1+1;t++){let t=[];for(let e=0;e<this.len2+1;e++)t.push(new i);this.dpGrid.push(t)}this.fillNeedleman();for(let t=1;t<=this.len1;t++)for(let e=1;e<=this.len2;e++)this.fillOne(t,e);return this.constructResult(this.len1,this.len2)}smithWaterman(){this.dpGrid=[];for(let t=0;t<this.len1+1;t++){let t=[];for(let e=0;e<this.len2+1;e++)t.push(new i);this.dpGrid.push(t)}let t=0,e=0,n=0;for(let i=1;i<=this.len1;i++)for(let s=1;s<=this.len2;s++)this.fillOne(i,s),this.dpGrid[i][s].value<=0?(this.dpGrid[i][s].value=0,this.dpGrid[i][s].parentI=0,this.dpGrid[i][s].parentJ=0):0==this.dpGrid[this.dpGrid[i][s].parentI][this.dpGrid[i][s].parentJ].value&&(this.dpGrid[i][s].parentI=0,this.dpGrid[i][s].parentJ=0),this.dpGrid[i][s].value>t&&(t=this.dpGrid[i][s].value,e=i,n=s);return this.constructResult(e,n)}setSequences(t,e){this.seq1=t,this.seq2=e,this.len1=this.seq1.length/this.step,this.len2=this.seq2.length/this.step,this.fillScores()}setGap(t){this.gap=t}setMethod(t=""){"AUTO"==t&&(t=this.typeRec()),this.gridFromName(t)}constructor(t,e,n,i=""){this.seq1="",this.seq2="",this.gap=1,this.len1=0,this.len2=0,this.step=1,this.alignGrid=[],this.scores=[],this.dpGrid=[],this.connections={},this.BLOSUM45=[[5,-2,-1,-2,-1,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-2,-2,0,-1,-1,0,-5],[-2,7,0,-1,-3,1,0,-2,0,-3,-2,3,-1,-2,-2,-1,-1,-2,-1,-2,-1,0,-1,-5],[-1,0,6,2,-2,0,0,0,1,-2,-3,0,-2,-2,-2,1,0,-4,-2,-3,4,0,-1,-5],[-2,-1,2,7,-3,0,2,-1,0,-4,-3,0,-3,-4,-1,0,-1,-4,-2,-3,5,1,-1,-5],[-1,-3,-2,-3,12,-3,-3,-3,-3,-3,-2,-3,-2,-2,-4,-1,-1,-5,-3,-1,-2,-3,-2,-5],[-1,1,0,0,-3,6,2,-2,1,-2,-2,1,0,-4,-1,0,-1,-2,-1,-3,0,4,-1,-5],[-1,0,0,2,-3,2,6,-2,0,-3,-2,1,-2,-3,0,0,-1,-3,-2,-3,1,4,-1,-5],[0,-2,0,-1,-3,-2,-2,7,-2,-4,-3,-2,-2,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-5],[-2,0,1,0,-3,1,0,-2,10,-3,-2,-1,0,-2,-2,-1,-2,-3,2,-3,0,0,-1,-5],[-1,-3,-2,-4,-3,-2,-3,-4,-3,5,2,-3,2,0,-2,-2,-1,-2,0,3,-3,-3,-1,-5],[-1,-2,-3,-3,-2,-2,-2,-3,-2,2,5,-3,2,1,-3,-3,-1,-2,0,1,-3,-2,-1,-5],[-1,3,0,0,-3,1,1,-2,-1,-3,-3,5,-1,-3,-1,-1,-1,-2,-1,-2,0,1,-1,-5],[-1,-1,-2,-3,-2,0,-2,-2,0,2,2,-1,6,0,-2,-2,-1,-2,0,1,-2,-1,-1,-5],[-2,-2,-2,-4,-2,-4,-3,-3,-2,0,1,-3,0,8,-3,-2,-1,1,3,0,-3,-3,-1,-5],[-1,-2,-2,-1,-4,-1,0,-2,-2,-2,-3,-1,-2,-3,9,-1,-1,-3,-3,-3,-2,-1,-1,-5],[1,-1,1,0,-1,0,0,0,-1,-2,-3,-1,-2,-2,-1,4,2,-4,-2,-1,0,0,0,-5],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-1,-1,2,5,-3,-1,0,0,-1,0,-5],[-2,-2,-4,-4,-5,-2,-3,-2,-3,-2,-2,-2,-2,1,-3,-4,-3,15,3,-3,-4,-2,-2,-5],[-2,-1,-2,-2,-3,-1,-2,-3,2,0,0,-1,0,3,-3,-2,-1,3,8,-1,-2,-2,-1,-5],[0,-2,-3,-3,-1,-3,-3,-3,-3,3,1,-2,1,0,-3,-1,0,-3,-1,5,-3,-3,-1,-5],[-1,-1,4,5,-2,0,1,-1,0,-3,-3,0,-2,-3,-2,0,0,-4,-2,-3,4,2,-1,-5],[-1,0,0,1,-3,4,4,-2,0,-3,-2,1,-1,-3,-1,0,-1,-2,-2,-3,2,4,-1,-5],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-2,-1,-1,-1,-1,-1,-5],[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,1]],this.BLOSUM50=[[5,-2,-1,-2,-1,-1,-1,0,-2,-1,-2,-1,-1,-3,-1,1,0,-3,-2,0,-2,-1,-1,-5],[-2,7,-1,-2,-4,1,0,-3,0,-4,-3,3,-2,-3,-3,-1,-1,-3,-1,-3,-1,0,-1,-5],[-1,-1,7,2,-2,0,0,0,1,-3,-4,0,-2,-4,-2,1,0,-4,-2,-3,4,0,-1,-5],[-2,-2,2,8,-4,0,2,-1,-1,-4,-4,-1,-4,-5,-1,0,-1,-5,-3,-4,5,1,-1,-5],[-1,-4,-2,-4,13,-3,-3,-3,-3,-2,-2,-3,-2,-2,-4,-1,-1,-5,-3,-1,-3,-3,-2,-5],[-1,1,0,0,-3,7,2,-2,1,-3,-2,2,0,-4,-1,0,-1,-1,-1,-3,0,4,-1,-5],[-1,0,0,2,-3,2,6,-3,0,-4,-3,1,-2,-3,-1,-1,-1,-3,-2,-3,1,5,-1,-5],[0,-3,0,-1,-3,-2,-3,8,-2,-4,-4,-2,-3,-4,-2,0,-2,-3,-3,-4,-1,-2,-2,-5],[-2,0,1,-1,-3,1,0,-2,10,-4,-3,0,-1,-1,-2,-1,-2,-3,2,-4,0,0,-1,-5],[-1,-4,-3,-4,-2,-3,-4,-4,-4,5,2,-3,2,0,-3,-3,-1,-3,-1,4,-4,-3,-1,-5],[-2,-3,-4,-4,-2,-2,-3,-4,-3,2,5,-3,3,1,-4,-3,-1,-2,-1,1,-4,-3,-1,-5],[-1,3,0,-1,-3,2,1,-2,0,-3,-3,6,-2,-4,-1,0,-1,-3,-2,-3,0,1,-1,-5],[-1,-2,-2,-4,-2,0,-2,-3,-1,2,3,-2,7,0,-3,-2,-1,-1,0,1,-3,-1,-1,-5],[-3,-3,-4,-5,-2,-4,-3,-4,-1,0,1,-4,0,8,-4,-3,-2,1,4,-1,-4,-4,-2,-5],[-1,-3,-2,-1,-4,-1,-1,-2,-2,-3,-4,-1,-3,-4,10,-1,-1,-4,-3,-3,-2,-1,-2,-5],[1,-1,1,0,-1,0,-1,0,-1,-3,-3,0,-2,-3,-1,5,2,-4,-2,-2,0,0,-1,-5],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,2,5,-3,-2,0,0,-1,0,-5],[-3,-3,-4,-5,-5,-1,-3,-3,-3,-3,-2,-3,-1,1,-4,-4,-3,15,2,-3,-5,-2,-3,-5],[-2,-1,-2,-3,-3,-1,-2,-3,2,-1,-1,-2,0,4,-3,-2,-2,2,8,-1,-3,-2,-1,-5],[0,-3,-3,-4,-1,-3,-3,-4,-4,4,1,-3,1,-1,-3,-2,0,-3,-1,5,-4,-3,-1,-5],[-2,-1,4,5,-3,0,1,-1,0,-4,-4,0,-3,-4,-2,0,0,-5,-3,-4,5,2,-1,-5],[-1,0,0,1,-3,4,5,-2,0,-3,-3,1,-1,-4,-1,0,-1,-2,-2,-3,2,5,-1,-5],[-1,-1,-1,-1,-2,-1,-1,-2,-1,-1,-1,-1,-1,-2,-2,-1,0,-3,-1,-1,-1,-1,-1,-5],[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,1]],this.BLOSUM62=[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],this.BLOSUM80=[[7,-3,-3,-3,-1,-2,-2,0,-3,-3,-3,-1,-2,-4,-1,2,0,-5,-4,-1,-3,-2,-1,-8],[-3,9,-1,-3,-6,1,-1,-4,0,-5,-4,3,-3,-5,-3,-2,-2,-5,-4,-4,-2,0,-2,-8],[-3,-1,9,2,-5,0,-1,-1,1,-6,-6,0,-4,-6,-4,1,0,-7,-4,-5,5,-1,-2,-8],[-3,-3,2,10,-7,-1,2,-3,-2,-7,-7,-2,-6,-6,-3,-1,-2,-8,-6,-6,6,1,-3,-8],[-1,-6,-5,-7,13,-5,-7,-6,-7,-2,-3,-6,-3,-4,-6,-2,-2,-5,-5,-2,-6,-7,-4,-8],[-2,1,0,-1,-5,9,3,-4,1,-5,-4,2,-1,-5,-3,-1,-1,-4,-3,-4,-1,5,-2,-8],[-2,-1,-1,2,-7,3,8,-4,0,-6,-6,1,-4,-6,-2,-1,-2,-6,-5,-4,1,6,-2,-8],[0,-4,-1,-3,-6,-4,-4,9,-4,-7,-7,-3,-5,-6,-5,-1,-3,-6,-6,-6,-2,-4,-3,-8],[-3,0,1,-2,-7,1,0,-4,12,-6,-5,-1,-4,-2,-4,-2,-3,-4,3,-5,-1,0,-2,-8],[-3,-5,-6,-7,-2,-5,-6,-7,-6,7,2,-5,2,-1,-5,-4,-2,-5,-3,4,-6,-6,-2,-8],[-3,-4,-6,-7,-3,-4,-6,-7,-5,2,6,-4,3,0,-5,-4,-3,-4,-2,1,-7,-5,-2,-8],[-1,3,0,-2,-6,2,1,-3,-1,-5,-4,8,-3,-5,-2,-1,-1,-6,-4,-4,-1,1,-2,-8],[-2,-3,-4,-6,-3,-1,-4,-5,-4,2,3,-3,9,0,-4,-3,-1,-3,-3,1,-5,-3,-2,-8],[-4,-5,-6,-6,-4,-5,-6,-6,-2,-1,0,-5,0,10,-6,-4,-4,0,4,-2,-6,-6,-3,-8],[-1,-3,-4,-3,-6,-3,-2,-5,-4,-5,-5,-2,-4,-6,12,-2,-3,-7,-6,-4,-4,-2,-3,-8],[2,-2,1,-1,-2,-1,-1,-1,-2,-4,-4,-1,-3,-4,-2,7,2,-6,-3,-3,0,-1,-1,-8],[0,-2,0,-2,-2,-1,-2,-3,-3,-2,-3,-1,-1,-4,-3,2,8,-5,-3,0,-1,-2,-1,-8],[-5,-5,-7,-8,-5,-4,-6,-6,-4,-5,-4,-6,-3,0,-7,-6,-5,16,3,-5,-8,-5,-5,-8],[-4,-4,-4,-6,-5,-3,-5,-6,3,-3,-2,-4,-3,4,-6,-3,-3,3,11,-3,-5,-4,-3,-8],[-1,-4,-5,-6,-2,-4,-4,-6,-5,4,1,-4,1,-2,-4,-3,0,-5,-3,7,-6,-4,-2,-8],[-3,-2,5,6,-6,-1,1,-2,-1,-6,-7,-1,-5,-6,-4,0,-1,-8,-5,-6,6,0,-3,-8],[-2,0,-1,1,-7,5,6,-4,0,-6,-5,1,-3,-6,-2,-1,-2,-5,-4,-4,0,6,-1,-8],[-1,-2,-2,-3,-4,-2,-2,-3,-2,-2,-2,-2,-2,-3,-3,-1,-1,-5,-3,-2,-3,-1,-2,-8],[-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,1]],this.BLOSUM90=[[5,-2,-2,-3,-1,-1,-1,0,-2,-2,-2,-1,-2,-3,-1,1,0,-4,-3,-1,-2,-1,-1,-6],[-2,6,-1,-3,-5,1,-1,-3,0,-4,-3,2,-2,-4,-3,-1,-2,-4,-3,-3,-2,0,-2,-6],[-2,-1,7,1,-4,0,-1,-1,0,-4,-4,0,-3,-4,-3,0,0,-5,-3,-4,4,-1,-2,-6],[-3,-3,1,7,-5,-1,1,-2,-2,-5,-5,-1,-4,-5,-3,-1,-2,-6,-4,-5,4,0,-2,-6],[-1,-5,-4,-5,9,-4,-6,-4,-5,-2,-2,-4,-2,-3,-4,-2,-2,-4,-4,-2,-4,-5,-3,-6],[-1,1,0,-1,-4,7,2,-3,1,-4,-3,1,0,-4,-2,-1,-1,-3,-3,-3,-1,4,-1,-6],[-1,-1,-1,1,-6,2,6,-3,-1,-4,-4,0,-3,-5,-2,-1,-1,-5,-4,-3,0,4,-2,-6],[0,-3,-1,-2,-4,-3,-3,6,-3,-5,-5,-2,-4,-5,-3,-1,-3,-4,-5,-5,-2,-3,-2,-6],[-2,0,0,-2,-5,1,-1,-3,8,-4,-4,-1,-3,-2,-3,-2,-2,-3,1,-4,-1,0,-2,-6],[-2,-4,-4,-5,-2,-4,-4,-5,-4,5,1,-4,1,-1,-4,-3,-1,-4,-2,3,-5,-4,-2,-6],[-2,-3,-4,-5,-2,-3,-4,-5,-4,1,5,-3,2,0,-4,-3,-2,-3,-2,0,-5,-4,-2,-6],[-1,2,0,-1,-4,1,0,-2,-1,-4,-3,6,-2,-4,-2,-1,-1,-5,-3,-3,-1,1,-1,-6],[-2,-2,-3,-4,-2,0,-3,-4,-3,1,2,-2,7,-1,-3,-2,-1,-2,-2,0,-4,-2,-1,-6],[-3,-4,-4,-5,-3,-4,-5,-5,-2,-1,0,-4,-1,7,-4,-3,-3,0,3,-2,-4,-4,-2,-6],[-1,-3,-3,-3,-4,-2,-2,-3,-3,-4,-4,-2,-3,-4,8,-2,-2,-5,-4,-3,-3,-2,-2,-6],[1,-1,0,-1,-2,-1,-1,-1,-2,-3,-3,-1,-2,-3,-2,5,1,-4,-3,-2,0,-1,-1,-6],[0,-2,0,-2,-2,-1,-1,-3,-2,-1,-2,-1,-1,-3,-2,1,6,-4,-2,-1,-1,-1,-1,-6],[-4,-4,-5,-6,-4,-3,-5,-4,-3,-4,-3,-5,-2,0,-5,-4,-4,11,2,-3,-6,-4,-3,-6],[-3,-3,-3,-4,-4,-3,-4,-5,1,-2,-2,-3,-2,3,-4,-3,-2,2,8,-3,-4,-3,-2,-6],[-1,-3,-4,-5,-2,-3,-3,-5,-4,3,0,-3,0,-2,-3,-2,-1,-3,-3,5,-4,-3,-2,-6],[-2,-2,4,4,-4,-1,0,-2,-1,-5,-5,-1,-4,-4,-3,0,-1,-6,-4,-4,4,0,-2,-6],[-1,0,-1,0,-5,4,4,-3,0,-4,-4,1,-2,-4,-2,-1,-1,-4,-3,-3,0,4,-1,-6],[-1,-2,-2,-2,-3,-1,-2,-2,-2,-2,-2,-1,-1,-2,-2,-1,-1,-3,-2,-2,-2,-1,-2,-6],[-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,1]],this.NUCLEOTIDES=[[1,-1,-1,-1],[-1,1,-1,-1],[-1,-1,1,-1],[-1,-1,-1,1]],this.PAM30=[[6,-7,-4,-3,-6,-4,-2,-2,-7,-5,-6,-7,-5,-8,-2,0,-1,-13,-8,-2,-3,-3,-3,-17],[-7,8,-6,-10,-8,-2,-9,-9,-2,-5,-8,0,-4,-9,-4,-3,-6,-2,-10,-8,-7,-4,-6,-17],[-4,-6,8,2,-11,-3,-2,-3,0,-5,-7,-1,-9,-9,-6,0,-2,-8,-4,-8,6,-3,-3,-17],[-3,-10,2,8,-14,-2,2,-3,-4,-7,-12,-4,-11,-15,-8,-4,-5,-15,-11,-8,6,1,-5,-17],[-6,-8,-11,-14,10,-14,-14,-9,-7,-6,-15,-14,-13,-13,-8,-3,-8,-15,-4,-6,-12,-14,-9,-17],[-4,-2,-3,-2,-14,8,1,-7,1,-8,-5,-3,-4,-13,-3,-5,-5,-13,-12,-7,-3,6,-5,-17],[-2,-9,-2,2,-14,1,8,-4,-5,-5,-9,-4,-7,-14,-5,-4,-6,-17,-8,-6,1,6,-5,-17],[-2,-9,-3,-3,-9,-7,-4,6,-9,-11,-10,-7,-8,-9,-6,-2,-6,-15,-14,-5,-3,-5,-5,-17],[-7,-2,0,-4,-7,1,-5,-9,9,-9,-6,-6,-10,-6,-4,-6,-7,-7,-3,-6,-1,-1,-5,-17],[-5,-5,-5,-7,-6,-8,-5,-11,-9,8,-1,-6,-1,-2,-8,-7,-2,-14,-6,2,-6,-6,-5,-17],[-6,-8,-7,-12,-15,-5,-9,-10,-6,-1,7,-8,1,-3,-7,-8,-7,-6,-7,-2,-9,-7,-6,-17],[-7,0,-1,-4,-14,-3,-4,-7,-6,-6,-8,7,-2,-14,-6,-4,-3,-12,-9,-9,-2,-4,-5,-17],[-5,-4,-9,-11,-13,-4,-7,-8,-10,-1,1,-2,11,-4,-8,-5,-4,-13,-11,-1,-10,-5,-5,-17],[-8,-9,-9,-15,-13,-13,-14,-9,-6,-2,-3,-14,-4,9,-10,-6,-9,-4,2,-8,-10,-13,-8,-17],[-2,-4,-6,-8,-8,-3,-5,-6,-4,-8,-7,-6,-8,-10,8,-2,-4,-14,-13,-6,-7,-4,-5,-17],[0,-3,0,-4,-3,-5,-4,-2,-6,-7,-8,-4,-5,-6,-2,6,0,-5,-7,-6,-1,-5,-3,-17],[-1,-6,-2,-5,-8,-5,-6,-6,-7,-2,-7,-3,-4,-9,-4,0,7,-13,-6,-3,-3,-6,-4,-17],[-13,-2,-8,-15,-15,-13,-17,-15,-7,-14,-6,-12,-13,-4,-14,-5,-13,13,-5,-15,-10,-14,-11,-17],[-8,-10,-4,-11,-4,-12,-8,-14,-3,-6,-7,-9,-11,2,-13,-7,-6,-5,10,-7,-6,-9,-7,-17],[-2,-8,-8,-8,-6,-7,-6,-5,-6,2,-2,-9,-1,-8,-6,-6,-3,-15,-7,7,-8,-6,-5,-17],[-3,-7,6,6,-12,-3,1,-3,-1,-6,-9,-2,-10,-10,-7,-1,-3,-10,-6,-8,6,0,-5,-17],[-3,-4,-3,1,-14,6,6,-5,-1,-6,-7,-4,-5,-13,-4,-5,-6,-14,-9,-6,0,6,-5,-17],[-3,-6,-3,-5,-9,-5,-5,-5,-5,-5,-6,-5,-5,-8,-5,-3,-4,-11,-7,-5,-5,-5,-5,-17],[-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,1]],this.PAM70=[[5,-4,-2,-1,-4,-2,-1,0,-4,-2,-4,-4,-3,-6,0,1,1,-9,-5,-1,-1,-1,-2,-11],[-4,8,-3,-6,-5,0,-5,-6,0,-3,-6,2,-2,-7,-2,-1,-4,0,-7,-5,-4,-2,-3,-11],[-2,-3,6,3,-7,-1,0,-1,1,-3,-5,0,-5,-6,-3,1,0,-6,-3,-5,5,-1,-2,-11],[-1,-6,3,6,-9,0,3,-1,-1,-5,-8,-2,-7,-10,-4,-1,-2,-10,-7,-5,5,2,-3,-11],[-4,-5,-7,-9,9,-9,-9,-6,-5,-4,-10,-9,-9,-8,-5,-1,-5,-11,-2,-4,-8,-9,-6,-11],[-2,0,-1,0,-9,7,2,-4,2,-5,-3,-1,-2,-9,-1,-3,-3,-8,-8,-4,-1,5,-2,-11],[-1,-5,0,3,-9,2,6,-2,-2,-4,-6,-2,-4,-9,-3,-2,-3,-11,-6,-4,2,5,-3,-11],[0,-6,-1,-1,-6,-4,-2,6,-6,-6,-7,-5,-6,-7,-3,0,-3,-10,-9,-3,-1,-3,-3,-11],[-4,0,1,-1,-5,2,-2,-6,8,-6,-4,-3,-6,-4,-2,-3,-4,-5,-1,-4,0,1,-3,-11],[-2,-3,-3,-5,-4,-5,-4,-6,-6,7,1,-4,1,0,-5,-4,-1,-9,-4,3,-4,-4,-3,-11],[-4,-6,-5,-8,-10,-3,-6,-7,-4,1,6,-5,2,-1,-5,-6,-4,-4,-4,0,-6,-4,-4,-11],[-4,2,0,-2,-9,-1,-2,-5,-3,-4,-5,6,0,-9,-4,-2,-1,-7,-7,-6,-1,-2,-3,-11],[-3,-2,-5,-7,-9,-2,-4,-6,-6,1,2,0,10,-2,-5,-3,-2,-8,-7,0,-6,-3,-3,-11],[-6,-7,-6,-10,-8,-9,-9,-7,-4,0,-1,-9,-2,8,-7,-4,-6,-2,4,-5,-7,-9,-5,-11],[0,-2,-3,-4,-5,-1,-3,-3,-2,-5,-5,-4,-5,-7,7,0,-2,-9,-9,-3,-4,-2,-3,-11],[1,-1,1,-1,-1,-3,-2,0,-3,-4,-6,-2,-3,-4,0,5,2,-3,-5,-3,0,-2,-1,-11],[1,-4,0,-2,-5,-3,-3,-3,-4,-1,-4,-1,-2,-6,-2,2,6,-8,-4,-1,-1,-3,-2,-11],[-9,0,-6,-10,-11,-8,-11,-10,-5,-9,-4,-7,-8,-2,-9,-3,-8,13,-3,-10,-7,-10,-7,-11],[-5,-7,-3,-7,-2,-8,-6,-9,-1,-4,-4,-7,-7,4,-9,-5,-4,-3,9,-5,-4,-7,-5,-11],[-1,-5,-5,-5,-4,-4,-4,-3,-4,3,0,-6,0,-5,-3,-3,-1,-10,-5,6,-5,-4,-2,-11],[-1,-4,5,5,-8,-1,2,-1,0,-4,-6,-1,-6,-7,-4,0,-1,-7,-4,-5,5,1,-2,-11],[-1,-2,-1,2,-9,5,5,-3,1,-4,-4,-2,-3,-9,-2,-2,-3,-10,-7,-4,1,5,-3,-11],[-2,-3,-2,-3,-6,-2,-3,-3,-3,-3,-4,-3,-3,-5,-3,-1,-2,-7,-5,-2,-2,-3,-3,-11],[-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,-11,1]],this.PAM250=[[2,-2,0,0,-2,0,0,1,-1,-1,-2,-1,-1,-3,1,1,1,-6,-3,0,0,0,0,-8],[-2,6,0,-1,-4,1,-1,-3,2,-2,-3,3,0,-4,0,0,-1,2,-4,-2,-1,0,-1,-8],[0,0,2,2,-4,1,1,0,2,-2,-3,1,-2,-3,0,1,0,-4,-2,-2,2,1,0,-8],[0,-1,2,4,-5,2,3,1,1,-2,-4,0,-3,-6,-1,0,0,-7,-4,-2,3,3,-1,-8],[-2,-4,-4,-5,12,-5,-5,-3,-3,-2,-6,-5,-5,-4,-3,0,-2,-8,0,-2,-4,-5,-3,-8],[0,1,1,2,-5,4,2,-1,3,-2,-2,1,-1,-5,0,-1,-1,-5,-4,-2,1,3,-1,-8],[0,-1,1,3,-5,2,4,0,1,-2,-3,0,-2,-5,-1,0,0,-7,-4,-2,3,3,-1,-8],[1,-3,0,1,-3,-1,0,5,-2,-3,-4,-2,-3,-5,0,1,0,-7,-5,-1,0,0,-1,-8],[-1,2,2,1,-3,3,1,-2,6,-2,-2,0,-2,-2,0,-1,-1,-3,0,-2,1,2,-1,-8],[-1,-2,-2,-2,-2,-2,-2,-3,-2,5,2,-2,2,1,-2,-1,0,-5,-1,4,-2,-2,-1,-8],[-2,-3,-3,-4,-6,-2,-3,-4,-2,2,6,-3,4,2,-3,-3,-2,-2,-1,2,-3,-3,-1,-8],[-1,3,1,0,-5,1,0,-2,0,-2,-3,5,0,-5,-1,0,0,-3,-4,-2,1,0,-1,-8],[-1,0,-2,-3,-5,-1,-2,-3,-2,2,4,0,6,0,-2,-2,-1,-4,-2,2,-2,-2,-1,-8],[-3,-4,-3,-6,-4,-5,-5,-5,-2,1,2,-5,0,9,-5,-3,-3,0,7,-1,-4,-5,-2,-8],[1,0,0,-1,-3,0,-1,0,0,-2,-3,-1,-2,-5,6,1,0,-6,-5,-1,-1,0,-1,-8],[1,0,1,0,0,-1,0,1,-1,-1,-3,0,-2,-3,1,2,1,-2,-3,-1,0,0,0,-8],[1,-1,0,0,-2,-1,0,0,-1,0,-2,0,-1,-3,0,1,3,-5,-3,0,0,-1,0,-8],[-6,2,-4,-7,-8,-5,-7,-7,-3,-5,-2,-3,-4,0,-6,-2,-5,17,0,-6,-5,-6,-4,-8],[-3,-4,-2,-4,0,-4,-4,-5,0,-1,-1,-4,-2,7,-5,-3,-3,0,10,-2,-3,-4,-2,-8],[0,-2,-2,-2,-2,-2,-2,-1,-2,4,2,-2,2,-1,-1,-1,0,-6,-2,4,-2,-2,-1,-8],[0,-1,2,3,-4,1,3,0,1,-2,-3,1,-2,-4,-1,0,0,-5,-3,-2,3,2,-1,-8],[0,0,1,3,-5,3,3,0,2,-2,-3,0,-2,-5,0,0,-1,-6,-4,-2,2,3,-1,-8],[0,-1,0,-1,-3,-1,-1,-1,-1,-1,-1,-1,-1,-2,-1,0,0,-4,-2,-1,-1,-1,-1,-8],[-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,-8,1]],this.SCHNEIDER=[[11.6,-2.7,9.7,-1.7,-2.7,-6.4,-3.9,-5.6,5.1,-5,3.6,-4.2,-6.3,-13,-7.1,-11.5,.4,-6,-1.9,-5.3,-8.5,-11.2,-8.9,-10.8,2.1,0,1.4,.2,-10.2,-13.5,-13,-12.5,-2.6,-8.5,-5,-8.1,-6.3,-9.9,-7.5,-9,-7.1,-10.2,-8.2,-9.2,-8.2,-12.5,-11.1,-11.4,-50,-14.8,-50,-13.8,-7.3,-10.1,-8.4,-9.1,-50,-13,-13.5,-12.4,-10.7,-18.1,-11.8,-17.2],[-2.7,13,-3.3,10.9,-3.5,-.4,-3.3,-1.8,-5.4,4.6,-5.5,3,-10.2,-7.9,-9.9,-9.6,-5,.5,-5.5,-1,-10.3,-8.1,-9.4,-9.6,-8.1,-5,-7.3,-6.3,-13.4,-11.3,-14.4,-12.9,-6.3,.8,-6.4,-1.1,-7.4,-5,-6.2,-6.5,-5.6,-1.6,-4.7,-3,-10.8,-8.7,-11.9,-10,-50,-6.2,-50,-7.5,-6.3,-4.3,-6.2,-5.4,-50,-7,-16.3,-8.2,-13.2,-12.3,-13.1,-13.3],[9.7,-3.3,11.6,-2.8,-4.5,-6.7,-3.1,-6.9,3.3,-5.5,4.8,-5.1,-8.9,-13.2,-5.7,-12.6,-1.5,-6.1,-.6,-6.1,-10,-11.8,-8.6,-11.9,1.2,.5,2.2,.1,-11.8,-14,-11.9,-13.4,-4.9,-9.1,-3.4,-8.9,-8,-10,-7.2,-10,-9.1,-10.2,-7.1,-9.9,-10.1,-13,-10.6,-12.7,-50,-14.9,-50,-14.4,-8.9,-10.8,-8.9,-10.4,-50,-13.1,-11.8,-13,-12.4,-19.4,-11.5,-17.8],[-1.7,10.9,-2.8,12.9,-2.7,-2.2,-2.8,.2,-4.8,2.9,-5.2,5.2,-9.1,-9.5,-9,-7,-4,-1,-5,1,-9,-8.8,-8.9,-7.7,-7,-6.8,-7.1,-4.3,-12.4,-12.9,-13.9,-10,-4.9,-.7,-5.6,1.4,-6,-6.5,-6.2,-4.8,-5.1,-3.2,-5,-1.2,-9.8,-9.9,-11.3,-8.2,-50,-7.6,-50,-5.1,-5.5,-5.8,-5.9,-4.2,-50,-8.3,-15.5,-5.9,-11.6,-14.2,-12,-11.6],[-2.7,-3.5,-4.5,-2.7,11.7,9,10.6,9.6,-3.2,-.7,-5.1,-.4,.7,-4.6,-.4,-3.6,-4.8,-8.9,-6.5,-7.8,-1.4,-4.1,-2.9,-3.3,-8,-9.1,-8,-8.2,-6,-9.3,-7.7,-8.5,-6.4,-10.1,-7.5,-8.6,2.8,-.7,.9,.1,-5.9,-7.3,-6.5,-6.5,-.4,-3.9,-2.6,-3.1,-50,-14.6,-50,-12.6,2.9,.1,1.8,1,-50,-9.2,-13.6,-7.7,-4.8,-12.2,-6.2,-11],[-6.4,-.4,-6.7,-2.2,9,12.3,9.8,9.6,-7.1,2.4,-7.2,.3,-2.9,-1.2,-3,-3.3,-7.6,-6.7,-8.1,-7.9,-4.9,-1.9,-4.5,-3.8,-9.5,-7.8,-9.3,-8.9,-9.4,-7.1,-9,-9,-9.4,-7.5,-9.3,-9.2,-.7,2.6,.2,-.1,-8,-4.6,-7.7,-6.1,-3.6,-1,-4.1,-3.1,-50,-11.6,-50,-11.6,.2,2.3,.4,.5,-50,-6.5,-15.3,-7.8,-8.4,-9.5,-8.3,-11.1],[-3.9,-3.3,-3.1,-2.8,10.6,9.8,12.2,9.8,-4.9,.1,-3.6,-.2,-1.7,-4.1,.9,-3.5,-5.9,-8.9,-5.6,-8.5,-3.9,-3.9,-2.2,-4.5,-7.3,-7.5,-6.4,-8.5,-7.1,-8.2,-6.7,-7.8,-7.9,-9.1,-7.1,-9.4,.9,-.2,2.5,-.3,-6.9,-6.5,-5.5,-6.8,-1.7,-3.4,-1.7,-2.8,-50,-13,-50,-11.5,1.5,.7,2.7,.6,-50,-8.9,-12.1,-7.4,-6.1,-11.5,-5.4,-10.4],[-5.6,-1.8,-6.9,.2,9.6,9.6,9.8,11.6,-6.6,.9,-7.2,2.5,-2.3,-3.4,-2.3,-.6,-6.5,-8.2,-8,-6.3,-3.7,-3.5,-3.9,-1.6,-9.9,-8.9,-9.6,-7,-8.6,-8.9,-8.8,-6.8,-8.6,-8.2,-8.8,-6.8,.3,.1,.2,2.4,-7.4,-6.2,-6.9,-4.4,-2.9,-2.9,-3.5,-.9,-50,-12.2,-50,-10.1,1.2,.6,1.2,2.4,-50,-7.6,-16.1,-5.8,-7.2,-10.8,-7.4,-9],[5.1,-5.4,3.3,-4.8,-3.2,-7.1,-4.9,-6.6,13.3,-2.8,11.2,-1.9,-5.7,-12.5,-7.2,-11.6,-.7,-4.8,-3.1,-4.3,-10,-11.6,-8.8,-11.7,10.5,7.7,9.1,8.5,-9.8,-12.7,-11.7,-11.8,-6.3,-11.4,-8.8,-11,-7.5,-10.3,-8.3,-9.9,-1.9,-6.7,-4.1,-6.4,-7.9,-12.5,-11.4,-11.7,-50,-14,-50,-13.2,-8.5,-10.4,-9.1,-9.6,-50,-9.8,-7.7,-8.8,-10.3,-17.9,-11.8,-16],[-5,4.6,-5.5,2.9,-.7,2.4,.1,.9,-2.8,12.8,-2.6,11,-8.4,-6.3,-8.3,-7.7,-6.1,-2.9,-6.5,-4.2,-8.5,-5.9,-7.5,-7.7,-5.5,-2.4,-5.5,-4.1,-12.9,-10.3,-12.7,-11.3,-7.4,-3.1,-7.4,-4.9,-4.4,-1.8,-3.5,-3.5,-1.6,3,-.8,.9,-8.4,-6.3,-9.6,-7.3,-50,-9,-50,-9.7,-2.3,-.2,-1.2,-1.5,-50,-.7,-13.3,-2,-11.8,-11.9,-12.3,-12.7],[3.6,-5.5,4.8,-5.2,-5.1,-7.2,-3.6,-7.2,11.2,-2.6,13.4,-2.1,-7.7,-12.5,-5.3,-11.9,-2.2,-4.4,-1.9,-4.8,-10.2,-11.5,-8.1,-12,9.3,8.2,10,8,-10.8,-11.9,-10.7,-12.4,-8.2,-11.8,-6.9,-11.5,-8.4,-9.9,-7.1,-10.6,-4.7,-6.8,-1.2,-7,-9.8,-11.6,-9.6,-12.1,-50,-14.1,-50,-12.7,-10,-10.8,-8.8,-10.5,-50,-9.2,-4.2,-9.3,-11,-18.2,-11.1,-16.1],[-4.2,3,-5.1,5.2,-.4,.3,-.2,2.5,-1.9,11,-2.1,13.2,-7.6,-8.5,-8,-5.3,-5.6,-4.5,-6.8,-2.4,-7.8,-7.9,-7.9,-6.2,-5.7,-5.1,-5.4,-2.1,-12.4,-12.3,-13.1,-10.1,-6.6,-4.4,-6.9,-2.6,-3.6,-3.8,-3.7,-2,-1.4,.8,-.9,3,-8.2,-8.1,-9.2,-5.8,-50,-10.1,-50,-7.4,-1.7,-2,-1.5,-.5,-50,-2.1,-12.6,-.4,-11.6,-13.9,-11.4,-11.1],[-6.3,-10.2,-8.9,-9.1,.7,-2.9,-1.7,-2.3,-5.7,-8.4,-7.7,-7.6,13.2,9.6,3.5,9.7,-8.7,-12.4,-10.7,-10.7,-7.8,-10.2,-8.8,-9.6,-9.5,-11.9,-10.9,-10.5,2.3,-.4,-.2,-.3,-9.7,-15.5,-11.4,-13.7,-3,-6.4,-4.1,-5.4,-9.6,-11.9,-10.5,-11.8,6.2,3.3,3.7,3.6,-50,-13.6,-50,-11.9,-5.6,-8.8,-7.2,-8.9,-50,-12.4,-14.1,-11.6,2.8,-6.4,.5,-5.2],[-13,-7.9,-13.2,-9.5,-4.6,-1.2,-4.1,-3.4,-12.5,-6.3,-12.5,-8.5,9.6,12.7,.2,10.5,-12.4,-11.6,-13.2,-12,-12.4,-10.1,-11.6,-12,-15.1,-13.1,-14.3,-13.4,-1.4,1.4,-1.6,-.5,-14.9,-14.3,-15.2,-16.8,-7.7,-4.7,-6.3,-6.6,-14.6,-10.8,-12.8,-13,2.3,6,2.5,3.6,-50,-11.2,-50,-11.9,-10.5,-9.2,-10.5,-10.5,-50,-10.3,-16.2,-11.3,-1.7,-3.7,-2.5,-5.4],[-7.1,-9.9,-5.7,-9,-.4,-3,.9,-2.3,-7.2,-8.3,-5.3,-8,3.5,.2,14.3,1,-7.3,-11.2,-6.9,-9.7,-8.5,-10.2,-7.7,-9.8,-10,-10.4,-8.4,-10.2,1,-.6,1.7,-.5,-11.1,-14.8,-9.7,-14.5,-3.7,-5.8,-3.1,-5.6,-10.4,-11.5,-8.2,-11.1,.6,-1.6,1.6,-1.1,-50,-12.4,-50,-11.5,-5.5,-8,-4.9,-7.2,-50,-12.4,-10.3,-11.6,.7,-6.8,2.4,-6],[-11.5,-9.6,-12.6,-7,-3.6,-3.3,-3.5,-.6,-11.6,-7.7,-11.9,-5.3,9.7,10.5,1,12.6,-12,-12.2,-12.5,-9.7,-11.1,-11.2,-11.9,-9.4,-12.9,-14.3,-14,-11.9,-1,-.4,-1.6,1.2,-13.9,-15.4,-13.7,-12.6,-6.2,-6.7,-6.3,-4.4,-13,-12.2,-13,-10.4,2.9,3.8,2.5,5.8,-50,-12.5,-50,-10.2,-9.6,-9.7,-9.6,-8.3,-50,-11.6,-15.4,-9.4,-1.1,-5.4,-1.6,-3.3],[.4,-5,-1.5,-4,-4.8,-7.6,-5.9,-6.5,-.7,-6.1,-2.2,-5.6,-8.7,-12.4,-7.3,-12,12.8,2.3,10.2,3,0,-3.4,-.7,-3.2,2.5,-.8,.9,.2,-3,-7.2,-5.7,-6.1,-.2,-6.6,-1.8,-6,-5.3,-8.2,-5.7,-7.6,-6.7,-9.6,-7.5,-9.3,-7.1,-10.5,-9.6,-9.4,-50,-8.1,-50,-7.2,-4.3,-6.8,-5.7,-6.3,-50,-9.5,-9.6,-8.9,-6.2,-12.8,-6.8,-11.8],[-6,.5,-6.1,-1,-8.9,-6.7,-8.9,-8.2,-4.8,-2.9,-4.4,-4.5,-12.4,-11.6,-11.2,-12.2,2.3,14.6,1.9,12.9,-5.5,-2.6,-4.1,-4.7,-1.2,3,-1.1,1.6,-8,-4.7,-8.7,-6,-8.2,-4.7,-7.8,-6.7,-10,-8.3,-8.9,-9.9,-10.8,-7.1,-10,-9.2,-11.6,-10.1,-12.3,-11.9,-50,2.2,-50,.9,-7.9,-5.9,-7.4,-6.9,-50,-4.6,-11.6,-5.6,-9.7,-5.9,-9.9,-7.3],[-1.9,-5.5,-.6,-5,-6.5,-8.1,-5.6,-8,-3.1,-6.5,-1.9,-6.8,-10.7,-13.2,-6.9,-12.5,10.2,1.9,11.9,2.1,-2.3,-4.1,-.5,-4.6,-.1,-.9,2.4,-.8,-5.1,-6.9,-4.8,-6.7,-2.3,-7.1,-.8,-7.2,-7.2,-8,-5.6,-8.5,-9.4,-9.7,-7.2,-9.8,-9.2,-11.1,-9.5,-10.7,-50,-8.7,-50,-8.6,-6.1,-7.5,-5.5,-7.7,-50,-10.4,-7.7,-10,-7.3,-13.6,-6.4,-13.3],[-5.3,-1,-6.1,1,-7.8,-7.9,-8.5,-6.3,-4.3,-4.2,-4.8,-2.4,-10.7,-12,-9.7,-9.7,3,12.9,2.1,14.7,-4.9,-3.8,-4,-2.4,-1,.8,-1.3,3.4,-7.6,-5.7,-8.1,-3.5,-6.8,-5.8,-7.2,-4.2,-8.9,-10.2,-8.4,-8.2,-9.9,-8.4,-9.7,-6.4,-11.1,-11.1,-11.8,-10,-50,.4,-50,2.6,-7.2,-7,-7.4,-5.1,-50,-5.7,-9.8,-3.2,-8.4,-7.4,-8.9,-5.9],[-8.5,-10.3,-10,-9,-1.4,-4.9,-3.9,-3.7,-10,-8.5,-10.2,-7.8,-7.8,-12.4,-8.5,-11.1,0,-5.5,-2.3,-4.9,12.6,10,11.1,10.5,-6,-8.3,-6.9,-7.5,-2.2,-7.4,-5.3,-5.9,-8.9,-12.5,-9.4,-11.6,-.7,-3.9,-2.3,-3,-9.1,-9.8,-9.2,-9.5,-5.6,-9,-8,-8.5,-50,-15.3,-50,-14.1,2.3,-1.4,.3,-.5,-50,-13.6,-14.3,-11.5,-5.3,-13.7,-6.1,-12.7],[-11.2,-8.1,-11.8,-8.8,-4.1,-1.9,-3.9,-3.5,-11.6,-5.9,-11.5,-7.9,-10.2,-10.1,-10.2,-11.2,-3.4,-2.6,-4.1,-3.8,10,13.1,10.7,10.6,-8.1,-5.2,-8,-6.7,-6.1,-3.7,-7.5,-5.6,-11.1,-10.3,-10.6,-11.9,-3.2,-1,-2.2,-2.8,-10.5,-8.1,-9.4,-9.5,-8.3,-6.9,-9.4,-8.8,-50,-11.3,-50,-12.8,-.6,2.2,-.3,.1,-50,-10.1,-17.5,-11.1,-8.6,-9.9,-8.6,-11.9],[-8.9,-9.4,-8.6,-8.9,-2.9,-4.5,-2.2,-3.9,-8.8,-7.5,-8.1,-7.9,-8.8,-11.6,-7.7,-11.9,-.7,-4.1,-.5,-4,11.1,10.7,13.2,10.4,-5.7,-5.8,-3.5,-6.1,-3.6,-6.5,-3.3,-5.5,-9.4,-11,-8.7,-11.2,-1.8,-2.7,.7,-3,-9.1,-8.2,-7.3,-9.4,-7.2,-8.2,-7.2,-8.2,-50,-13.2,-50,-13.3,.5,-.9,1.8,-.6,-50,-11.4,-11.1,-10.5,-6.1,-12.9,-5,-11.9],[-10.8,-9.6,-11.9,-7.7,-3.3,-3.8,-4.5,-1.6,-11.7,-7.7,-12,-6.2,-9.6,-12,-9.8,-9.4,-3.2,-4.7,-4.6,-2.4,10.5,10.6,10.4,12.6,-8.2,-7.9,-9,-4.7,-6.1,-6,-7.5,-2.9,-10.9,-12.2,-11.2,-10.9,-2.4,-2.9,-2.7,-.9,-10.4,-9.7,-10.2,-8,-8.4,-9.1,-9.3,-6.5,-50,-13.3,-50,-11,-0,-.4,-.4,2.3,-50,-10.9,-17.2,-8.3,-8.3,-12.7,-7.8,-9.3],[2.1,-8.1,1.2,-7,-8,-9.5,-7.3,-9.9,10.5,-5.5,9.3,-5.7,-9.5,-15.1,-10,-12.9,2.5,-1.2,-.1,-1,-6,-8.1,-5.7,-8.2,13.8,11.3,11.8,12.1,-6,-9.1,-9,-9.5,-8.9,-13.4,-10,-13.1,-9.9,-11.7,-9.8,-12.8,-5.9,-9.4,-6.5,-8.1,-10.7,-14,-13.3,-13.9,-50,-11.9,-50,-9.7,-8.9,-10.8,-9,-11.1,-50,-6.5,-5.3,-6.3,-10.5,-16.2,-10.4,-15.2],[0,-5,.5,-6.8,-9.1,-7.8,-7.5,-8.9,7.7,-2.4,8.2,-5.1,-11.9,-13.1,-10.4,-14.3,-.8,3,-.9,.8,-8.3,-5.2,-5.8,-7.9,11.3,15,11.2,12.8,-9.7,-5.3,-9.2,-7.8,-11.7,-10.6,-10.1,-12.2,-11.7,-8.8,-8.9,-11.8,-9.3,-5,-8,-8.2,-13.6,-11.4,-12.8,-13,-50,-7.2,-50,-8.4,-11,-7.7,-8.7,-10.2,-50,-1.5,-7.1,-4.9,-11.2,-11.6,-11.6,-15],[1.4,-7.3,2.2,-7.1,-8,-9.3,-6.4,-9.6,9.1,-5.5,10,-5.4,-10.9,-14.3,-8.4,-14,.9,-1.1,2.4,-1.3,-6.9,-8,-3.5,-9,11.8,11.2,13.4,11.4,-7.3,-8.8,-6.5,-8.5,-10,-12.5,-7.8,-12.5,-9.6,-11,-7.1,-10.7,-7.9,-8,-4.3,-9.4,-11.4,-12.3,-10.9,-12.9,-50,-11.8,-50,-11.2,-9.4,-9.8,-7.3,-10.5,-50,-6.2,-2.2,-6.7,-9.8,-15.2,-8.5,-14.9],[.2,-6.3,.1,-4.3,-8.2,-8.9,-8.5,-7,8.5,-4.1,8,-2.1,-10.5,-13.4,-10.2,-11.9,.2,1.6,-.8,3.4,-7.5,-6.7,-6.1,-4.7,12.1,12.8,11.4,14.7,-8.7,-7.4,-9.4,-5.3,-9.9,-11.8,-10.5,-10.3,-9.9,-10.1,-9.3,-9.3,-8.1,-7.2,-8,-5.2,-12,-12.1,-12.6,-10.9,-50,-7.9,-50,-5.3,-9.3,-8.8,-8.9,-7,-50,-3.6,-7.1,-1.2,-10.2,-12.7,-9.9,-11],[-10.2,-13.4,-11.8,-12.4,-6,-9.4,-7.1,-8.6,-9.8,-12.9,-10.8,-12.4,2.3,-1.4,1,-1,-3,-8,-5.1,-7.6,-2.2,-6.1,-3.6,-6.1,-6,-9.7,-7.3,-8.7,11.2,7.9,8.9,8.1,-12.1,-17.4,-13.2,-16.8,-6.3,-9.5,-7.5,-8.8,-12.7,-15.2,-13.1,-14.2,0,-3.1,-1.8,-3.1,-50,-10.7,-50,-9.3,-4.6,-8.9,-5.9,-8.3,-50,-12.8,-9.6,-10.6,9.5,-3.2,8.2,-2.8],[-13.5,-11.3,-14,-12.9,-9.3,-7.1,-8.2,-8.9,-12.7,-10.3,-11.9,-12.3,-.4,1.4,-.6,-.4,-7.2,-4.7,-6.9,-5.7,-7.4,-3.7,-6.5,-6,-9.1,-5.3,-8.8,-7.4,7.9,11.9,7.8,9.3,-15.2,-15.1,-14.6,-17.2,-9.7,-7.3,-8.2,-9.2,-15,-12.8,-14.1,-14.9,-2.8,.2,-2.9,-2.3,-50,-7.4,-50,-8.7,-9.4,-7.3,-9.4,-9.4,-50,-8,-11.9,-9.7,6.5,.5,6.4,-1.8],[-13,-14.4,-11.9,-13.9,-7.7,-9,-6.7,-8.8,-11.7,-12.7,-10.7,-13.1,-.2,-1.6,1.7,-1.6,-5.7,-8.7,-4.8,-8.1,-5.3,-7.5,-3.3,-7.5,-9,-9.2,-6.5,-9.4,8.9,7.8,10.1,7.8,-14.3,-17.7,-13,-17.8,-8,-9.4,-6.2,-9.2,-15.1,-14.9,-12.2,-14.9,-1.8,-3.2,-.8,-3.2,-50,-10.8,-50,-9.9,-7.3,-9.6,-6.4,-9.4,-50,-12.3,-8.7,-11.3,7.6,-3.3,8.7,-2.9],[-12.5,-12.9,-13.4,-10,-8.5,-9,-7.8,-6.8,-11.8,-11.3,-12.4,-10.1,-.3,-.5,-.5,1.2,-6.1,-6,-6.7,-3.5,-5.9,-5.6,-5.5,-2.9,-9.5,-7.8,-8.5,-5.3,8.1,9.3,7.8,11.8,-14.4,-15.7,-14.5,-14.6,-8.4,-8.7,-7.9,-7.1,-14.3,-13.8,-13.8,-12.3,-2.4,-2.2,-2.9,-.2,-50,-8.9,-50,-7.1,-8.1,-9.1,-8.7,-6.6,-50,-9.7,-11.4,-8,6.8,-1.8,6.9,.4],[-2.6,-6.3,-4.9,-4.9,-6.4,-9.4,-7.9,-8.6,-6.3,-7.4,-8.2,-6.6,-9.7,-14.9,-11.1,-13.9,-.2,-8.2,-2.3,-6.8,-8.9,-11.1,-9.4,-10.9,-8.9,-11.7,-10,-9.9,-12.1,-15.2,-14.3,-14.4,11.1,2.9,9.2,3.5,-3,-7,-4.3,-6.2,-2.2,-6.6,-3.7,-5.7,-6,-10.4,-8.6,-9.5,-50,-15.5,-50,-13.9,-7.8,-10.5,-8.7,-9.6,-50,-16.5,-17.1,-14.8,-12.1,-18.9,-12.4,-17.4],[-8.5,.8,-9.1,-.7,-10.1,-7.5,-9.1,-8.2,-11.4,-3.1,-11.8,-4.4,-15.5,-14.3,-14.8,-15.4,-6.6,-4.7,-7.1,-5.8,-12.5,-10.3,-11,-12.2,-13.4,-10.6,-12.5,-11.8,-17.4,-15.1,-17.7,-15.7,2.9,12.5,3.1,10.3,-7.7,-5.2,-6.2,-7.3,-5.4,-1.7,-5.4,-3.7,-11.6,-9.1,-13,-10.8,-50,-10.3,-50,-11.2,-9.8,-8.3,-9.1,-9.7,-50,-12.7,-20.6,-13.1,-16,-16.6,-17,-18.4],[-5,-6.4,-3.4,-5.6,-7.5,-9.3,-7.1,-8.8,-8.8,-7.4,-6.9,-6.9,-11.4,-15.2,-9.7,-13.7,-1.8,-7.8,-.8,-7.2,-9.4,-10.6,-8.7,-11.2,-10,-10.1,-7.8,-10.5,-13.2,-14.6,-13,-14.5,9.2,3.1,10.8,3,-4.5,-6.7,-2.7,-6.7,-5,-6.8,-2.5,-6.7,-7.5,-10.4,-7.4,-10.2,-50,-15.5,-50,-14.2,-8.9,-10.2,-8.5,-10,-50,-15.6,-15.3,-15.5,-13,-18.8,-12.6,-18.3],[-8.1,-1.1,-8.9,1.4,-8.6,-9.2,-9.4,-6.8,-11,-4.9,-11.5,-2.6,-13.7,-16.8,-14.5,-12.6,-6,-6.7,-7.2,-4.2,-11.6,-11.9,-11.2,-10.9,-13.1,-12.2,-12.5,-10.3,-16.8,-17.2,-17.8,-14.6,3.5,10.3,3,12.4,-6.9,-7.5,-6.8,-4.9,-5.4,-4.2,-5.4,-1.3,-10.8,-11.5,-12.4,-8.2,-50,-12.5,-50,-8.9,-9.2,-10,-9.4,-7.9,-50,-14.3,-19.9,-11.4,-16.2,-19.2,-15.8,-15.9],[-6.3,-7.4,-8,-6,2.8,-.7,.9,.3,-7.5,-4.4,-8.4,-3.6,-3,-7.7,-3.7,-6.2,-5.3,-10,-7.2,-8.9,-.7,-3.2,-1.8,-2.4,-9.9,-11.7,-9.6,-9.9,-6.3,-9.7,-8,-8.4,-3,-7.7,-4.5,-6.9,11.3,8.2,9.4,9.1,-1,-3.3,-1.8,-2.4,1.5,-2.1,-.4,-1.1,-50,-14.5,-50,-12.9,2.8,-0,1.4,.7,-50,-8.7,-14.1,-7.5,-5.2,-12.5,-6.5,-10.7],[-9.9,-5,-10,-6.5,-.7,2.6,-.2,.1,-10.3,-1.8,-9.9,-3.8,-6.4,-4.7,-5.8,-6.7,-8.2,-8.3,-8,-10.2,-3.9,-1,-2.7,-2.9,-11.7,-8.8,-11,-10.1,-9.5,-7.3,-9.4,-8.7,-7,-5.2,-6.7,-7.5,8.2,11.6,8.8,9.1,-3.7,-.9,-3.1,-3,-2,1.2,-2.3,-1.3,-50,-12.1,-50,-12.6,.1,2.5,.7,.6,-50,-6,-14.8,-7.5,-8.6,-9.4,-8.5,-11.2],[-7.5,-6.2,-7.2,-6.2,.9,.2,2.5,.2,-8.3,-3.5,-7.1,-3.7,-4.1,-6.3,-3.1,-6.3,-5.7,-8.9,-5.6,-8.4,-2.3,-2.2,.7,-2.7,-9.8,-8.9,-7.1,-9.3,-7.5,-8.2,-6.2,-7.9,-4.3,-6.2,-2.7,-6.8,9.4,8.8,12.1,8.8,-2.1,-2,.1,-2.4,0,-1.1,1.3,-.8,-50,-11.9,-50,-12.6,1.2,.7,3.5,.8,-50,-7.1,-12.4,-7.1,-7.1,-10.6,-5,-10.6],[-9,-6.5,-10,-4.8,.1,-.1,-.3,2.4,-9.9,-3.5,-10.6,-2,-5.4,-6.6,-5.6,-4.4,-7.6,-9.9,-8.5,-8.2,-3,-2.8,-3,-.9,-12.8,-11.8,-10.7,-9.3,-8.8,-9.2,-9.2,-7.1,-6.2,-7.3,-6.7,-4.9,9.1,9.1,8.8,11.2,-3.1,-3,-3.3,-1,-1.1,-1.4,-2,1.2,-50,-12.8,-50,-10.9,.8,.5,.7,2.3,-50,-7.5,-16.5,-5.9,-7.8,-11.1,-7.8,-9],[-7.1,-5.6,-9.1,-5.1,-5.9,-8,-6.9,-7.4,-1.9,-1.6,-4.7,-1.4,-9.6,-14.6,-10.4,-13,-6.7,-10.8,-9.4,-9.9,-9.1,-10.5,-9.1,-10.4,-5.9,-9.3,-7.9,-8.1,-12.7,-15,-15.1,-14.3,-2.2,-5.4,-5,-5.4,-1,-3.7,-2.1,-3.1,12.8,9.6,11.1,10.1,-4.8,-9.4,-8.1,-8.6,-50,-18.3,-50,-15.4,-5.9,-7.5,-6.6,-7.1,-50,-9.5,-11.7,-8.4,-12.5,-17.3,-13.2,-15.4],[-10.2,-1.6,-10.2,-3.2,-7.3,-4.6,-6.5,-6.2,-6.7,3,-6.8,.8,-11.9,-10.8,-11.5,-12.2,-9.6,-7.1,-9.7,-8.4,-9.8,-8.1,-8.2,-9.7,-9.4,-5,-8,-7.2,-15.2,-12.8,-14.9,-13.8,-6.6,-1.7,-6.8,-4.2,-3.3,-.9,-2,-3,9.6,12.8,9.7,10.5,-8.5,-5.6,-9.3,-7.8,-50,-12.7,-50,-13.8,-6.8,-5.1,-5.3,-6.5,-50,-4.1,-12.8,-5.8,-14.4,-14.1,-13.6,-14.8],[-8.2,-4.7,-7.1,-5,-6.5,-7.7,-5.5,-6.9,-4.1,-.8,-1.2,-.9,-10.5,-12.8,-8.2,-13,-7.5,-10,-7.2,-9.7,-9.2,-9.4,-7.3,-10.2,-6.5,-8,-4.3,-8,-13.1,-14.1,-12.2,-13.8,-3.7,-5.4,-2.5,-5.4,-1.8,-3.1,.1,-3.3,11.1,9.7,12.9,9.8,-5.5,-8.1,-5.4,-7.8,-50,-16.4,-50,-14.8,-5.9,-7.1,-4.7,-7.2,-50,-8.4,-6.4,-8.1,-12.1,-16.2,-10.3,-15.8],[-9.2,-3,-9.9,-1.2,-6.5,-6.1,-6.8,-4.4,-6.4,.9,-7,3,-11.8,-13,-11.1,-10.4,-9.3,-9.2,-9.8,-6.4,-9.5,-9.5,-9.4,-8,-8.1,-8.2,-9.4,-5.2,-14.2,-14.9,-14.9,-12.3,-5.7,-3.7,-6.7,-1.3,-2.4,-3,-2.4,-1,10.1,10.5,9.8,13.1,-7.2,-8,-8.4,-5,-50,-14.7,-50,-11.4,-6.3,-6.7,-5.8,-5,-50,-6.1,-13.4,-3.6,-13,-16,-13.7,-13.3],[-8.2,-10.8,-10.1,-9.8,-.4,-3.6,-1.7,-2.9,-7.9,-8.4,-9.8,-8.2,6.2,2.3,.6,2.9,-7.1,-11.6,-9.2,-11.1,-5.6,-8.3,-7.2,-8.4,-10.7,-13.6,-11.4,-12,0,-2.8,-1.8,-2.4,-6,-11.6,-7.5,-10.8,1.5,-2,0,-1.1,-4.8,-8.5,-5.5,-7.2,11.9,8.6,10,9,-50,-14.2,-50,-12.8,-4.1,-7.4,-5.7,-6.5,-50,-11,-14.3,-9.9,1.4,-7.9,-.7,-6.8],[-12.5,-8.7,-13,-9.9,-3.9,-1,-3.4,-2.9,-12.5,-6.3,-11.6,-8.1,3.3,6,-1.6,3.8,-10.5,-10.1,-11.1,-11.1,-9,-6.9,-8.2,-9.1,-14,-11.4,-12.3,-12.1,-3.1,.2,-3.2,-2.2,-10.4,-9.1,-10.4,-11.5,-2.1,1.2,-1.1,-1.4,-9.4,-5.6,-8.1,-8,8.6,12.4,8.6,9.5,-50,-10.4,-50,-11.6,-7.2,-5.7,-7.5,-7.4,-50,-8.6,-15.7,-9.7,-3,-3.7,-3.2,-5.9],[-11.1,-11.9,-10.6,-11.3,-2.6,-4.1,-1.7,-3.5,-11.4,-9.6,-9.6,-9.2,3.7,2.5,1.6,2.5,-9.6,-12.3,-9.5,-11.8,-8,-9.4,-7.2,-9.3,-13.3,-12.8,-10.9,-12.6,-1.8,-2.9,-.8,-2.9,-8.6,-13,-7.4,-12.4,-.4,-2.3,1.3,-2,-8.1,-9.3,-5.4,-8.4,10,8.6,11.4,8.9,-50,-13.7,-50,-13.2,-6.1,-8.1,-5.5,-7.5,-50,-11.3,-12.7,-10.1,-1.6,-7.8,-.3,-7.2],[-11.4,-10,-12.7,-8.2,-3.1,-3.1,-2.8,-.9,-11.7,-7.3,-12.1,-5.8,3.6,3.6,-1.1,5.8,-9.4,-11.9,-10.7,-10,-8.5,-8.8,-8.2,-6.5,-13.9,-13,-12.9,-10.9,-3.1,-2.3,-3.2,-.2,-9.5,-10.8,-10.2,-8.2,-1.1,-1.3,-.8,1.2,-8.6,-7.8,-7.8,-5,9,9.5,8.9,12,-50,-13,-50,-10.3,-6.2,-7,-7.1,-5.4,-50,-9.3,-14,-8.2,-2.4,-6.3,-2.4,-3.9],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,33.3,-50,30.6,-50,-50,-50,-50,-50,29.2,-50,-50,-50,-50,-50,-50,-50],[-14.8,-6.2,-14.9,-7.6,-14.6,-11.6,-13,-12.2,-14,-9,-14.1,-10.1,-13.6,-11.2,-12.4,-12.5,-8.1,2.2,-8.7,.4,-15.3,-11.3,-13.2,-13.3,-11.9,-7.2,-11.8,-7.9,-10.7,-7.4,-10.8,-8.9,-15.5,-10.3,-15.5,-12.5,-14.5,-12.1,-11.9,-12.8,-18.3,-12.7,-16.4,-14.7,-14.2,-10.4,-13.7,-13,-50,15.1,-50,13.3,-9.9,-5.8,-8.9,-7.6,-50,-1.5,-7.8,-3,-8.1,3.6,-9.4,2],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,30.6,-50,35.2,-50,-50,-50,-50,-50,28.5,-50,-50,-50,-50,-50,-50,-50],[-13.8,-7.5,-14.4,-5.1,-12.6,-11.6,-11.5,-10.1,-13.2,-9.7,-12.7,-7.4,-11.9,-11.9,-11.5,-10.2,-7.2,.9,-8.6,2.6,-14.1,-12.8,-13.3,-11,-9.7,-8.4,-11.2,-5.3,-9.3,-8.7,-9.9,-7.1,-13.9,-11.2,-14.2,-8.9,-12.9,-12.6,-12.6,-10.9,-15.4,-13.8,-14.8,-11.4,-12.8,-11.6,-13.2,-10.3,-50,13.3,-50,15.2,-8.6,-7,-8.4,-4.8,-50,-3,-7.1,-.1,-7.3,2.3,-8.7,3.9],[-7.3,-6.3,-8.9,-5.5,2.9,.2,1.5,1.2,-8.5,-2.3,-10,-1.7,-5.6,-10.5,-5.5,-9.6,-4.3,-7.9,-6.1,-7.2,2.3,-.6,.5,-0,-8.9,-11,-9.4,-9.3,-4.6,-9.4,-7.3,-8.1,-7.8,-9.8,-8.9,-9.2,2.8,.1,1.2,.8,-5.9,-6.8,-5.9,-6.3,-4.1,-7.2,-6.1,-6.2,-50,-9.9,-50,-8.6,12.5,9.4,11,9.8,-50,-4.8,-8.7,-3.5,-0,-8.6,-2.1,-7],[-10.1,-4.3,-10.8,-5.8,.1,2.3,.7,.6,-10.4,-.2,-10.8,-2,-8.8,-9.2,-8,-9.7,-6.8,-5.9,-7.5,-7,-1.4,2.2,-.9,-.4,-10.8,-7.7,-9.8,-8.8,-8.9,-7.3,-9.6,-9.1,-10.5,-8.3,-10.2,-10,-0,2.5,.7,.5,-7.5,-5.1,-7.1,-6.7,-7.4,-5.7,-8.1,-7,-50,-5.8,-50,-7,9.4,12.7,10.1,10,-50,-1.5,-11.3,-3.3,-5.4,-4.2,-5.6,-6.8],[-8.4,-6.2,-8.9,-5.9,1.8,.4,2.7,1.2,-9.1,-1.2,-8.8,-1.5,-7.2,-10.5,-4.9,-9.6,-5.7,-7.4,-5.5,-7.4,.3,-.3,1.8,-.4,-9,-8.7,-7.3,-8.9,-5.9,-9.4,-6.4,-8.7,-8.7,-9.1,-8.5,-9.4,1.4,.7,3.5,.7,-6.6,-5.3,-4.7,-5.8,-5.7,-7.5,-5.5,-7.1,-50,-8.9,-50,-8.4,11,10.1,13.2,10.2,-50,-4.2,-6.1,-3.6,-3.5,-8.4,-1.2,-6.8],[-9.1,-5.4,-10.4,-4.2,1,.5,.6,2.4,-9.6,-1.5,-10.5,-.5,-8.9,-10.5,-7.2,-8.3,-6.3,-6.9,-7.7,-5.1,-.5,.1,-.6,2.3,-11.1,-10.2,-10.5,-7,-8.3,-9.4,-9.4,-6.6,-9.6,-9.7,-10,-7.9,.7,.6,.8,2.3,-7.1,-6.5,-7.2,-5,-6.5,-7.4,-7.5,-5.4,-50,-7.6,-50,-4.8,9.8,10,10.2,12.1,-50,-3.1,-11.4,-.7,-4.6,-6.6,-4.9,-3.9],[-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,29.2,-50,28.5,-50,-50,-50,-50,-50,33.3,-50,-50,-50,-50,-50,-50,-50],[-13,-7,-13.1,-8.3,-9.2,-6.5,-8.9,-7.6,-9.8,-.7,-9.2,-2.1,-12.4,-10.3,-12.4,-11.6,-9.5,-4.6,-10.4,-5.7,-13.6,-10.1,-11.4,-10.9,-6.5,-1.5,-6.2,-3.6,-12.8,-8,-12.3,-9.7,-16.5,-12.7,-15.6,-14.3,-8.7,-6,-7.1,-7.5,-9.5,-4.1,-8.4,-6.1,-11,-8.6,-11.3,-9.3,-50,-1.5,-50,-3,-4.8,-1.5,-4.2,-3.1,-50,16.4,-5.1,14.2,-10.1,-4.3,-10,-5.4],[-13.5,-16.3,-11.8,-15.5,-13.6,-15.3,-12.1,-16.1,-7.7,-13.3,-4.2,-12.6,-14.1,-16.2,-10.3,-15.4,-9.6,-11.6,-7.7,-9.8,-14.3,-17.5,-11.1,-17.2,-5.3,-7.1,-2.2,-7.1,-9.6,-11.9,-8.7,-11.4,-17.1,-20.6,-15.3,-19.9,-14.1,-14.8,-12.4,-16.5,-11.7,-12.8,-6.4,-13.4,-14.3,-15.7,-12.7,-14,-50,-7.8,-50,-7.1,-8.7,-11.3,-6.1,-11.4,-50,-5.1,18.6,-4.8,-8.6,-8.1,-4.5,-7.3],[-12.4,-8.2,-13,-5.9,-7.7,-7.8,-7.4,-5.8,-8.8,-2,-9.3,-.4,-11.6,-11.3,-11.6,-9.4,-8.9,-5.6,-10,-3.2,-11.5,-11.1,-10.5,-8.3,-6.3,-4.9,-6.7,-1.2,-10.6,-9.7,-11.3,-8,-14.8,-13.1,-15.5,-11.4,-7.5,-7.5,-7.1,-5.9,-8.4,-5.8,-8.1,-3.6,-9.9,-9.7,-10.1,-8.2,-50,-3,-50,-.1,-3.5,-3.3,-3.6,-.7,-50,14.2,-4.8,16.4,-8.9,-5.8,-8.9,-3.4],[-10.7,-13.2,-12.4,-11.6,-4.8,-8.4,-6.1,-7.2,-10.3,-11.8,-11,-11.6,2.8,-1.7,.7,-1.1,-6.2,-9.7,-7.3,-8.4,-5.3,-8.6,-6.1,-8.3,-10.5,-11.2,-9.8,-10.2,9.5,6.5,7.6,6.8,-12.1,-16,-13,-16.2,-5.2,-8.6,-7.1,-7.8,-12.5,-14.4,-12.1,-13,1.4,-3,-1.6,-2.4,-50,-8.1,-50,-7.3,-0,-5.4,-3.5,-4.6,-50,-10.1,-8.6,-8.9,13.2,-.9,9.7,-.3],[-18.1,-12.3,-19.4,-14.2,-12.2,-9.5,-11.5,-10.8,-17.9,-11.9,-18.2,-13.9,-6.4,-3.7,-6.8,-5.4,-12.8,-5.9,-13.6,-7.4,-13.7,-9.9,-12.9,-12.7,-16.2,-11.6,-15.2,-12.7,-3.2,.5,-3.3,-1.8,-18.9,-16.6,-18.8,-19.2,-12.5,-9.4,-10.6,-11.1,-17.3,-14.1,-16.2,-16,-7.9,-3.7,-7.8,-6.3,-50,3.6,-50,2.3,-8.6,-4.2,-8.4,-6.6,-50,-4.3,-8.1,-5.8,-.9,14.2,-1.8,11.6],[-11.8,-13.1,-11.5,-12,-6.2,-8.3,-5.4,-7.4,-11.8,-12.3,-11.1,-11.4,.5,-2.5,2.4,-1.6,-6.8,-9.9,-6.4,-8.9,-6.1,-8.6,-5,-7.8,-10.4,-11.6,-8.5,-9.9,8.2,6.4,8.7,6.9,-12.4,-17,-12.6,-15.8,-6.5,-8.5,-5,-7.8,-13.2,-13.6,-10.3,-13.7,-.7,-3.2,-.3,-2.4,-50,-9.4,-50,-8.7,-2.1,-5.6,-1.2,-4.9,-50,-10,-4.5,-8.9,9.7,-1.8,11.3,-.9],[-17.2,-13.3,-17.8,-11.6,-11,-11.1,-10.4,-9,-16,-12.7,-16.1,-11.1,-5.2,-5.4,-6,-3.3,-11.8,-7.3,-13.3,-5.9,-12.7,-11.9,-11.9,-9.3,-15.2,-15,-14.9,-11,-2.8,-1.8,-2.9,.4,-17.4,-18.4,-18.3,-15.9,-10.7,-11.2,-10.6,-9,-15.4,-14.8,-15.8,-13.3,-6.8,-5.9,-7.2,-3.9,-50,2,-50,3.9,-7,-6.8,-6.8,-3.9,-50,-5.4,-7.3,-3.4,-.3,11.6,-.9,14.1]],this.TRANS=[[5,0,0,4],[0,5,4,0],[0,4,5,0],[4,0,0,5]],this.CONBLO={A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23},this.CONNUCL={A:0,T:1,C:2,G:3},this.CONSCHN={AAA:0,AAC:1,AAG:2,AAT:3,ACA:4,ACC:5,ACG:6,ACT:7,AGA:8,AGC:9,AGG:10,AGT:11,ATA:12,ATC:13,ATG:14,ATT:15,CAA:16,CAC:17,CAG:18,CAT:19,CCA:20,CCC:21,CCG:22,CCT:23,CGA:24,CGC:25,CGG:26,CGT:27,CTA:28,CTC:29,CTG:30,CTT:31,GAA:32,GAC:33,GAG:34,GAT:35,GCA:36,GCC:37,GCG:38,GCT:39,GGA:40,GGC:41,GGG:42,GGT:43,GTA:44,GTC:45,GTG:46,GTT:47,TAA:48,TAC:49,TAG:50,TAT:51,TCA:52,TCC:53,TCG:54,TCT:55,TGA:56,TGC:57,TGG:58,TGT:59,TTA:60,TTC:61,TTG:62,TTT:63},this.setMethod(i),this.setSequences(t,e),this.setGap(n)}}},7983:(t,e,n)=>{"use strict";n.d(e,{HV:()=>m,QF:()=>f,gQ:()=>u,pf:()=>d});var i=n(4469),s=n(3870),o=n(976),r=n(7241),a=n(4293),l=n(1061),h=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const c="substr_helm";function u(t){const e=t.getTag(o.TAGS.UNITS),n=t.getTag("separator"),r=s.textInput("Substructure",""),l=s.link("Edit helm",(()=>h(this,void 0,void 0,(function*(){(0,a.Y)(g,m.root),yield s.tools.waitForElementInDom(m.root),setTimeout((()=>{m.cell(c,0).element.children[0].dispatchEvent(new KeyboardEvent("keydown",{key:"Enter"}))}),100)})))),u=o.DataFrame.create(1);u.columns.addNewString(c).init((t=>"")),u.col(c).semType=t.semType,u.col(c).setTag(o.TAGS.UNITS,"helm");const m=u.plot.grid(),p=s.textInput("Separator",n),g=s.div(),y="helm"===e?s.divV([l]):"separator"===e?s.inputs([r,p]):s.inputs([r]);(0,a.Y)(g,y),s.dialog("Substructure Search").add(s.divV([s.divText(`Notation: ${e}`),g])).onOK((()=>h(this,void 0,void 0,(function*(){let s="helm"===e?u.get(c,0):r.value;"separator"===e&&p.value!==n&&""!==p.value&&(s=s.replaceAll(p.value,n));const a=`Matches: ${s}`;if(t.dataFrame.columns.names().filter((t=>t.toLocaleLowerCase()===a.toLocaleLowerCase())).length>0)i.shell.warning(`Search ${s} is already performed`);else{let n;n="helm"===e?yield f(s,t):d(s,t),t.dataFrame.columns.add(o.Column.fromBitSet(a,n))}})))).show()}function d(t,e,n){const i=n?function(t,e){const n=`${e}`.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),i=t.charAt(0)===e,s=t.charAt(t.length-1)===e,o=t.replace(new RegExp(`^${n}|${n}$`,"g"),"");return i?s?`${n}${o}${n}`:`${n}${o}${n}|${n}${o}$`:s?`^${o}${n}|${n}${o}${n}`:`^${o}${n}|${n}${o}${n}|${n}${o}$`}(t,n):t,s=o.BitSet.create(e.length);for(let n=0;n<e.length;n++){const o=e.get(n);(o.match(i)||o===t)&&s.set(n,!0,!1)}return s}function f(t,e){return h(this,void 0,void 0,(function*(){e.version!==e.temp["last-invalidated-version"]&&(yield m(e,!0));const n=o.Column.string("helm",1).init((e=>t));n.setTag(o.TAGS.UNITS,"helm");const s=yield(0,r.D)(n,!0,e.temp["monomers-dict"]);return(yield i.functions.call("Chem:searchSubstructure",{molStringsColumn:e.temp["monomeric-mols"],molString:s.get(0),molBlockFailover:""})).get(0)}))}function m(t,e){return h(this,void 0,void 0,(function*(){const n=o.TaskBarProgressIndicator.create(`Invalidating molfiles for ${t.name}`);yield(0,l.gw)(10);const i=new Map,s=yield(0,r.D)(t,e,i);t.temp["monomeric-mols"]=s,t.temp["monomers-dict"]=i,t.temp["last-invalidated-version"]=t.version,n.close()}))}},2568:(t,e,n)=>{"use strict";n.d(e,{n:()=>r});var i=n(4469),s=n(976),o=n(499);function r(t,e,n=[],r=[],a=!0){const[l,h]=function(t,e,n=[],r=[]){let a=!0,l="";const h=new o.C(t);if(t.semType!==s.SEMTYPE.MACROMOLECULE)i.shell.warning(e+" analysis is allowed for Macromolecules semantic type"),a=!1;else{const t=h.notation;if(n.length>0&&!n.some((e=>t.toUpperCase()==e.toUpperCase())))l=`${e} + ' analysis is allowed for Macromolecules with notation ${0==n.length?"any notation":`notation${n.length>1?"s":""} ${n.map((t=>`"${t}"`)).join(", ")} `}.`,a=!1;else if(!h.isHelm()){const t=h.alphabet;r.length>0&&!r.some((e=>t.toUpperCase()==e.toUpperCase()))&&(l=`${e} + ' analysis is allowed for Macromolecules with alphabet ${0==r.length?"any alphabet":`alphabet${r.length>1?"s":""} ${r.map((t=>`"${t}"`)).join(", ")}.`}.`,a=!1)}}return[a,l]}(t,e,n,r);return a&&!l&&i.shell.warning(h),l}},3553:(t,e,n)=>{"use strict";n.d(e,{Of:()=>o,WY:()=>h,jB:()=>c,rs:()=>a});var i,s,o,r,a,l=n(8341);!function(t){t.SPLIT_COL="~split",t.ACTIVITY="~activity",t.ACTIVITY_SCALED="activity_scaled",t.ALIGNED_SEQUENCE="~aligned_sequence",t.AMINO_ACID_RESIDUE="AAR",t.POSITION="Pos",t.P_VALUE="pValue",t.MEAN_DIFFERENCE="Mean difference"}(i||(i={})),function(t){t.AAR="AAR",t.POSITION="Pos",t.SELECTION="selection"}(s||(s={})),function(t){t.MONOMER="Monomer",t.MACROMOLECULE_DIFFERENCE="MacromoleculeDifference",t.ACTIVITY="activity",t.ACTIVITY_SCALED="activityScaled"}(o||(o={})),function(t){t.CELL_CHANGING="isCellChanging"}(r||(r={})),function(t){t.SEPARATOR="."}(a||(a={}));const h="3.3.1",c={pepsea:{gapOpen:1.53,gapExtend:0,method:l.J[0]},kalign:{gapOpen:null,gapExtend:null,terminalGap:null}}},4004:(t,e,n)=>{"use strict";n.d(e,{O:()=>u});var i=n(3870),s=n(4469),o=n(3336),r=n.n(o),a=n(7767),l=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};let h=null,c=[];function u(t){const e=new a.L(t).notation,n=["-",".","/"],o=["fasta","separator","helm"].filter((t=>t!==e)),u=i.choiceInput("Convert to",o[0],o),d=i.choiceInput("Separator",n[0],n),f=()=>{"separator"!==u.value?r()(d.root).hide():r()(d.root).show()};f(),u.onChanged((()=>{f()})),null==h&&(h=i.dialog("Convert Sequence Notation").add(i.div([i.divText("Current notation: "+e,{style:{"text-align":"center","font-weight":"bold","font-size":"14px",padding:"5px"}}),u.root,d.root])).onOK((()=>l(this,void 0,void 0,(function*(){const e=u.value,n=d.value;yield function(t,e,n){return l(this,void 0,void 0,(function*(){const i=new a.L(t).convert(e,n);t.dataFrame.columns.add(i);const o=yield s.functions.call("Bio:detectMacromolecule",{col:i});return o&&(i.semType=o),yield s.data.detectSemanticTypes(t.dataFrame),i}))}(t,e,n)})))).show({x:350,y:100}),c.push(h.onClose.subscribe((t=>{c.forEach((t=>{t.unsubscribe()})),c=[],h=null}))))}},1345:(t,e,n)=>{"use strict";n.d(e,{NT:()=>m,P4:()=>c,QD:()=>d,RV:()=>l,nW:()=>u});var i=n(976),s=n(4469),o=n(701),r=n(7228),a=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const l="Libraries",h="System:AppData/Bio/libraries/";function c(){return a(this,void 0,void 0,(function*(){return(yield s.dapi.files.list(`${h}`,!1,"")).map((t=>t.fileName))}))}function u(){return a(this,void 0,void 0,(function*(){const t=yield s.dapi.userDataStorage.getValue(l,"Settings",!0),e=t?JSON.parse(t):{exclude:[]};return e.exclude=e.exclude instanceof Array?e.exclude:[],e}))}function d(t){return a(this,void 0,void 0,(function*(){yield s.dapi.userDataStorage.postValue(l,"Settings",JSON.stringify(t),!0)}))}class f{constructor(t){this._monomers={},this._onChanged=new o.Subject,this._monomers=t}getMonomer(t,e){return t in this._monomers&&e in this._monomers[t]?this._monomers[t][e]:null}getTypes(){return Object.keys(this._monomers)}getMonomerMolsByType(t){const e={};return Object.keys(this._monomers[t]).forEach((n=>{e[n]=this._monomers[t][n].molfile})),e}getMonomerNamesByType(t){return Object.keys(this._monomers[t])}get onChanged(){return this._onChanged}_updateInt(t){const e=t.getTypes(),n=this.getTypes();e.forEach((e=>{n.includes(e)||(this._monomers[e]={}),t.getMonomerNamesByType(e).forEach((n=>{this._monomers[e][n]=t.getMonomer(e,n)}))}))}update(t){this._updateInt(t),this._onChanged.next()}updateLibs(t,e=!1){e&&(this._monomers={});for(const e of t)this._updateInt(e);this._onChanged.next()}clear(){this._monomers={},this._onChanged.next()}}class m{constructor(){this._monomerLib=new f({}),this.loadLibrariesPromise=Promise.resolve()}getBioLib(){return this._monomerLib}loadLibraries(t=!1){return a(this,void 0,void 0,(function*(){return this.loadLibrariesPromise=this.loadLibrariesPromise.then((()=>a(this,void 0,void 0,(function*(){const[e,n]=yield Promise.all([c(),u()]),i=yield Promise.all(e.filter((t=>!n.exclude.includes(t))).map((t=>this.readLibrary(h,t))));this._monomerLib.updateLibs(i,t)}))))}))}readLibrary(t,e){return a(this,void 0,void 0,(function*(){let n,o,a=[];const l=new i.FileSource(t);if(e.endsWith(".sdf"))1===i.Func.find({package:"Chem",name:"importSdf"}).length?(n=yield l.readAsBytes(e),o=yield s.functions.call("Chem:importSdf",{bytes:n}),a=(0,r.Xk)(o[0])):s.shell.warning("Chem package is not installed");else{const t=yield l.readAsText(e);a=JSON.parse(t)}const h={},c=[];return a.forEach((t=>{const e={symbol:t.symbol,name:t.name,naturalAnalog:t.naturalAnalog,molfile:t.molfile,rgroups:t.rgroups,polymerType:t.polymerType,monomerType:t.monomerType,data:{}};Object.keys(t).forEach((n=>{r.DC.includes(n)||(e.data[n]=t[n])})),c.includes(t.polymerType)||(h[t.polymerType]={},c.push(t.polymerType)),h[t.polymerType][t.symbol]=e})),new f(h)}))}static get instance(){return m._instance||(m._instance=new m),m._instance}}m._instance=null},525:(t,e,n)=>{"use strict";n.d(e,{K:()=>A});var i=n(4469),s=n(976),o=n(3870),r=n(6098),a=n(8341),l=n(2568),h=n(7767),c=n(473),u=n(3553),d=n(3379),f=n.n(d),m=n(7795),p=n.n(m),g=n(569),y=n.n(g),v=n(3565),b=n.n(v),w=n(9216),C=n.n(w),S=n(4589),M=n.n(S),x=n(9564),T={};T.styleTagTransform=M(),T.setAttributes=b(),T.insert=y().bind(null,"head"),T.domAPI=p(),T.insertStyleElement=C(),f()(x.Z,T),x.Z&&x.Z.locals&&x.Z.locals;var N=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};class E extends Error{constructor(t,e){super(t,e)}}function A(t={}){return N(this,void 0,void 0,(function*(){return new Promise(((e,n)=>N(this,void 0,void 0,(function*(){var r,l,h,c,d,f,m,p,g,y,v,b,w;null!==(r=t.clustersCol)&&void 0!==r||(t.clustersCol=null),null!==(l=t.pepsea)&&void 0!==l||(t.pepsea={}),null!==(h=(v=t.pepsea).method)&&void 0!==h||(v.method=u.jB.pepsea.method),null!==(c=(b=t.pepsea).gapOpen)&&void 0!==c||(b.gapOpen=u.jB.pepsea.gapOpen),null!==(d=(w=t.pepsea).gapExtend)&&void 0!==d||(w.gapExtend=u.jB.pepsea.gapExtend);const C=null!==(m=null===(f=t.col)||void 0===f?void 0:f.dataFrame)&&void 0!==m?m:i.shell.t,S=null!==(p=t.col)&&void 0!==p?p:C.columns.bySemType(s.SEMTYPE.MACROMOLECULE);if(null==S){const t="MSAError: dataset doesn't conain any Macromolecule column";i.shell.warning(t),n(new E(t))}const M=o.choiceInput("Method",t.pepsea.method,a.J);M.setTooltip("Alignment method");const x=o.floatInput("Terminal gap",null!==(y=null===(g=null==t?void 0:t.kalign)||void 0===g?void 0:g.terminalGap)&&void 0!==y?y:null);x.setTooltip("Penalty for opening a gap at the beginning or end of the sequence");const T=o.p(`Kalign version: ${u.WY}`,"kalign-version"),A=o.floatInput("Gap open",t.pepsea.gapOpen);A.setTooltip("Gap opening penalty at group-to-group alignment");const _=o.floatInput("Gap extend",t.pepsea.gapExtend);_.setTooltip("Gap extension penalty to skip the alignment");const R=[M.root.style],k=[x.root.style,T.style];let G;const P=o.columnInput("Sequence",C,S,(()=>N(this,void 0,void 0,(function*(){G=yield L(P.value,C,R,k,M,O,A,_,x)}))));P.setTooltip("Sequences column to use for alignment");const O=o.columnInput("Clusters",C,t.clustersCol);if(O.nullable=!0,P.fireChanged(),t.col)return G=yield L(t.col,C,R,k,M,O,A,_,x),void(yield I(P,C,G,e,n));o.dialog("MSA").add(P).add(O).add(M).add(A).add(_).add(x).add(T).onOK((()=>N(this,void 0,void 0,(function*(){yield I(P,C,G,e,n)})))).show()}))))}))}function I(t,e,n,o,r){return N(this,void 0,void 0,(function*(){let a=null;const l=s.TaskBarProgressIndicator.create("Analyze for MSA ...");try{if(t.fireChanged(),t.value.semType!==s.SEMTYPE.MACROMOLECULE)throw new Error("Chosen column has to be of Macromolecule semantic type");if(void 0===n)throw new Error("Invalid column format");if(a=yield n(),null==a)return i.shell.warning("Wrong column format");e.columns.add(a),yield i.data.detectSemanticTypes(e),o(a)}catch(t){const e=t instanceof Error?t.message:t.toString();i.shell.error(e),r(t)}finally{l.close()}}))}function L(t,e,n,o,d,f,m,p,g){return N(this,void 0,void 0,(function*(){try{if(t.semType!==s.SEMTYPE.MACROMOLECULE)return;const i=e.columns.getUnusedName(`msa(${t.name})`);if((0,l.n)(t,t.name,["fasta","separator"],["DNA","RNA","PT"],!1)){_(n,o,"kalign"),m.value=null,p.value=null,g.value=null;const e=new h.L(t),s=e.isFasta()?t:e.convert("fasta");return()=>N(this,void 0,void 0,(function*(){return yield(0,r.U)(s,!1,i,f.value)}))}if((0,l.n)(t,t.name,["helm"],[],!1))return _(n,o,"pepsea"),m.value=u.jB.pepsea.gapOpen,p.value=u.jB.pepsea.gapExtend,()=>N(this,void 0,void 0,(function*(){return yield(0,a.f)(t,i,d.value,m.value,p.value,f.value)}));if((0,l.n)(t,t.name,["separator"],["UN"],!1)){const e=new h.L(t);if(!(yield e.checkHelmCompatibility()))return;const s=e.convert("helm");return _(n,o,"pepsea"),m.value=u.jB.pepsea.gapOpen,p.value=u.jB.pepsea.gapExtend,()=>N(this,void 0,void 0,(function*(){return yield(0,a.f)(s,i,d.value,m.value,p.value,f.value)}))}return void _(n,o,"kalign")}catch(t){const e=t instanceof Error?t.message:t.toString();i.shell.error(e),c._package.logger.error(e)}}))}function _(t,e,n){if("kalign"===n){for(const e of t)e.display="none";for(const t of e)t.removeProperty("display")}else{for(const t of e)t.display="none";for(const e of t)e.removeProperty("display")}}},6098:(t,e,n)=>{"use strict";n.d(e,{U:()=>P});var i=n(976),s=n(5226);const o=Symbol("Comlink.proxy"),r=Symbol("Comlink.endpoint"),a=Symbol("Comlink.releaseProxy"),l=Symbol("Comlink.thrown"),h=t=>"object"==typeof t&&null!==t||"function"==typeof t,c=new Map([["proxy",{canHandle:t=>h(t)&&t[o],serialize(t){const{port1:e,port2:n}=new MessageChannel;return u(t,e),[n,[n]]},deserialize:t=>(t.start(),f(t))}],["throw",{canHandle:t=>h(t)&&l in t,serialize({value:t}){let e;return e=t instanceof Error?{isError:!0,value:{message:t.message,name:t.name,stack:t.stack}}:{isError:!1,value:t},[e,[]]},deserialize(t){throw t.isError?Object.assign(new Error(t.value.message),t.value):t.value}}]]);function u(t,e=self){e.addEventListener("message",(function n(i){if(!i||!i.data)return;const{id:s,type:r,path:a}=Object.assign({path:[]},i.data),h=(i.data.argumentList||[]).map(w);let c;try{const e=a.slice(0,-1).reduce(((t,e)=>t[e]),t),n=a.reduce(((t,e)=>t[e]),t);switch(r){case"GET":c=n;break;case"SET":e[a.slice(-1)[0]]=w(i.data.value),c=!0;break;case"APPLY":c=n.apply(e,h);break;case"CONSTRUCT":c=function(t){return Object.assign(t,{[o]:!0})}(new n(...h));break;case"ENDPOINT":{const{port1:e,port2:n}=new MessageChannel;u(t,n),c=function(t,e){return v.set(t,e),t}(e,[e])}break;case"RELEASE":c=void 0;break;default:return}}catch(t){c={value:t,[l]:0}}Promise.resolve(c).catch((t=>({value:t,[l]:0}))).then((t=>{const[i,o]=b(t);e.postMessage(Object.assign(Object.assign({},i),{id:s}),o),"RELEASE"===r&&(e.removeEventListener("message",n),d(e))}))})),e.start&&e.start()}function d(t){(function(t){return"MessagePort"===t.constructor.name})(t)&&t.close()}function f(t,e){return p(t,[],e)}function m(t){if(t)throw new Error("Proxy has been released and is not useable")}function p(t,e=[],n=function(){}){let i=!1;const s=new Proxy(n,{get(n,o){if(m(i),o===a)return()=>C(t,{type:"RELEASE",path:e.map((t=>t.toString()))}).then((()=>{d(t),i=!0}));if("then"===o){if(0===e.length)return{then:()=>s};const n=C(t,{type:"GET",path:e.map((t=>t.toString()))}).then(w);return n.then.bind(n)}return p(t,[...e,o])},set(n,s,o){m(i);const[r,a]=b(o);return C(t,{type:"SET",path:[...e,s].map((t=>t.toString())),value:r},a).then(w)},apply(n,s,o){m(i);const a=e[e.length-1];if(a===r)return C(t,{type:"ENDPOINT"}).then(w);if("bind"===a)return p(t,e.slice(0,-1));const[l,h]=y(o);return C(t,{type:"APPLY",path:e.map((t=>t.toString())),argumentList:l},h).then(w)},construct(n,s){m(i);const[o,r]=y(s);return C(t,{type:"CONSTRUCT",path:e.map((t=>t.toString())),argumentList:o},r).then(w)}});return s}function g(t){return Array.prototype.concat.apply([],t)}function y(t){const e=t.map(b);return[e.map((t=>t[0])),g(e.map((t=>t[1])))]}const v=new WeakMap;function b(t){for(const[e,n]of c)if(n.canHandle(t)){const[i,s]=n.serialize(t);return[{type:"HANDLER",name:e,value:i},s]}return[{type:"RAW",value:t},v.get(t)||[]]}function w(t){switch(t.type){case"HANDLER":return c.get(t.name).deserialize(t.value);case"RAW":return t.value}}function C(t,e,n){return new Promise((i=>{const s=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");t.addEventListener("message",(function e(n){!n.data||!n.data.id||n.data.id!==s||(t.removeEventListener("message",e),i(n.data))})),t.start&&t.start(),t.postMessage(Object.assign({id:s},e),n)}))}const S="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0ICQ9U3ltYm9sKCJDb21saW5rLnByb3h5IiksQT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxSPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx5PVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxfPWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLEw9e2NhbkhhbmRsZTplPT5fKGUpJiZlWyRdLHNlcmlhbGl6ZShlKXtjb25zdHtwb3J0MTpyLHBvcnQyOml9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gdyhlLHIpLFtpLFtpXV19LGRlc2VyaWFsaXplKGUpe3JldHVybiBlLnN0YXJ0KCksQyhlKX19LE89e2NhbkhhbmRsZTplPT5fKGUpJiZ5IGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9yPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06cj17aXNFcnJvcjohMSx2YWx1ZTplfSxbcixbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSxFPW5ldyBNYXAoW1sicHJveHkiLExdLFsidGhyb3ciLE9dXSk7ZnVuY3Rpb24gdyhlLHI9c2VsZil7ci5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKHMpe2lmKCFzfHwhcy5kYXRhKXJldHVybjtjb25zdHtpZDpvLHR5cGU6YSxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LHMuZGF0YSksdT0ocy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChtKTtsZXQgbDt0cnl7Y29uc3QgYz1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZCxoKT0+ZFtoXSxlKSxmPW4ucmVkdWNlKChkLGgpPT5kW2hdLGUpO3N3aXRjaChhKXtjYXNlIkdFVCI6bD1mO2JyZWFrO2Nhc2UiU0VUIjpjW24uc2xpY2UoLTEpWzBdXT1tKHMuZGF0YS52YWx1ZSksbD0hMDticmVhaztjYXNlIkFQUExZIjpsPWYuYXBwbHkoYyx1KTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2NvbnN0IGQ9bmV3IGYoLi4udSk7bD16KGQpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntjb25zdHtwb3J0MTpkLHBvcnQyOmh9PW5ldyBNZXNzYWdlQ2hhbm5lbDt3KGUsaCksbD1OKGQsW2RdKX1icmVhaztjYXNlIlJFTEVBU0UiOmw9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChjKXtsPXt2YWx1ZTpjLFt5XTowfX1Qcm9taXNlLnJlc29sdmUobCkuY2F0Y2goYz0+KHt2YWx1ZTpjLFt5XTowfSkpLnRoZW4oYz0+e2NvbnN0W2YsZF09UyhjKTtyLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxmKSx7aWQ6b30pLGQpLGE9PT0iUkVMRUFTRSImJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLEYocikpfSl9KSxyLnN0YXJ0JiZyLnN0YXJ0KCl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBGKGUpe1QoZSkmJmUuY2xvc2UoKX1mdW5jdGlvbiBDKGUscil7cmV0dXJuIGIoZSxbXSxyKX1mdW5jdGlvbiBwKGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBiKGUscj1bXSxpPWZ1bmN0aW9uKCl7fSl7bGV0IHM9ITE7Y29uc3Qgbz1uZXcgUHJveHkoaSx7Z2V0KGEsbil7aWYocChzKSxuPT09UilyZXR1cm4oKT0+ZyhlLHt0eXBlOiJSRUxFQVNFIixwYXRoOnIubWFwKHU9PnUudG9TdHJpbmcoKSl9KS50aGVuKCgpPT57RihlKSxzPSEwfSk7aWYobj09PSJ0aGVuIil7aWYoci5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtjb25zdCB1PWcoZSx7dHlwZToiR0VUIixwYXRoOnIubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKG0pO3JldHVybiB1LnRoZW4uYmluZCh1KX1yZXR1cm4gYihlLFsuLi5yLG5dKX0sc2V0KGEsbix1KXtwKHMpO2NvbnN0W2wsY109Uyh1KTtyZXR1cm4gZyhlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnIsbl0ubWFwKGY9PmYudG9TdHJpbmcoKSksdmFsdWU6bH0sYykudGhlbihtKX0sYXBwbHkoYSxuLHUpe3Aocyk7Y29uc3QgbD1yW3IubGVuZ3RoLTFdO2lmKGw9PT1BKXJldHVybiBnKGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4obSk7aWYobD09PSJiaW5kIilyZXR1cm4gYihlLHIuc2xpY2UoMCwtMSkpO2NvbnN0W2MsZl09TSh1KTtyZXR1cm4gZyhlLHt0eXBlOiJBUFBMWSIscGF0aDpyLm1hcChkPT5kLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpjfSxmKS50aGVuKG0pfSxjb25zdHJ1Y3QoYSxuKXtwKHMpO2NvbnN0W3UsbF09TShuKTtyZXR1cm4gZyhlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ci5tYXAoYz0+Yy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6dX0sbCkudGhlbihtKX19KTtyZXR1cm4gb31mdW5jdGlvbiBEKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIE0oZSl7Y29uc3Qgcj1lLm1hcChTKTtyZXR1cm5bci5tYXAoaT0+aVswXSksRChyLm1hcChpPT5pWzFdKSldfWNvbnN0IFA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTihlLHIpe3JldHVybiBQLnNldChlLHIpLGV9ZnVuY3Rpb24geihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbJF06ITB9KX1mdW5jdGlvbiBTKGUpe2Zvcihjb25zdFtyLGldb2YgRSlpZihpLmNhbkhhbmRsZShlKSl7Y29uc3RbcyxvXT1pLnNlcmlhbGl6ZShlKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6cix2YWx1ZTpzfSxvXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6ZX0sUC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBtKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEUuZ2V0KGUubmFtZSkuZGVzZXJpYWxpemUoZS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBlLnZhbHVlfX1mdW5jdGlvbiBnKGUscixpKXtyZXR1cm4gbmV3IFByb21pc2Uocz0+e2NvbnN0IG89VSgpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gYShuKXshbi5kYXRhfHwhbi5kYXRhLmlkfHxuLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhKSxzKG4uZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sciksaSl9KX1mdW5jdGlvbiBVKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1jb25zdCBXPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpLHg9ImVhZ2VyIixrPSJsYXp5IixqPXtzc3c6WyJzaW1kIl0sbWluaW1hcDI6WyJzaW1kIl19LHQ9e3Rvb2xzOltdLGNvbmZpZzp7fSxmaWxlczpbXSxiYXNlOnt9LGZzOnt9LGFzeW5jIGluaXQoKXtpZih0LnRvb2xzLmxlbmd0aD09PTApdGhyb3ciRXhwZWN0aW5nIGF0IGxlYXN0IDEgdG9vbC4iO2lmKG5ldyBTZXQodC50b29scy5tYXAocj0+YCR7ci50b29sfS8ke3IucHJvZ3JhbXx8ci50b29sfWApKS5zaXplIT09dC50b29scy5sZW5ndGgpdGhyb3ciRm91bmQgZHVwbGljYXRlIHRvb2xzOyBjYW4gb25seSBoYXZlIGVhY2ggdG9vbC9wcm9ncmFtIGNvbWJpbmF0aW9uIGF0IG1vc3Qgb25jZS4iO2lmKHQuYmFzZT10LnRvb2xzLmZpbmQocj0+ci5yZWluaXQhPT0hMCksIXQuYmFzZSl0aHJvdyJDb3VsZCBub3QgZmluZCBhIHRvb2wgd2l0aCBgcmVpbml0OiBmYWxzZWAgdG8gdXNlIGFzIHRoZSBiYXNlIG1vZHVsZS4gVG8gZml4IHRoaXMgaXNzdWUsIGluY2x1ZGUgdGhlIHRvb2wgYGJhc2UvMS4wLjBgIHdoZW4gaW5pdGlhbGl6aW5nIEFpb2xpLiI7cmV0dXJuIHQuYmFzZS5pc0Jhc2VNb2R1bGU9ITAsYXdhaXQgdGhpcy5fc2V0dXAodC5iYXNlKSxhd2FpdCB0aGlzLl9pbml0TW9kdWxlcygpLHQuX2xvZygiUmVhZHkiKSwhMH0sYXN5bmMgX2luaXRNb2R1bGVzKCl7YXdhaXQgUHJvbWlzZS5hbGwodC50b29scy5tYXAodGhpcy5fc2V0dXApKSxhd2FpdCB0aGlzLl9zZXR1cEZTKCl9LG1vdW50KGU9W10pe2NvbnN0IHI9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyRGF0YX1gLGk9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyTW91bnRlZH1gO2xldCBzPVtdLG89W10sYT1bXTshQXJyYXkuaXNBcnJheShlKSYmIShlIGluc3RhbmNlb2YgRmlsZUxpc3QpJiYoZT1bZV0pLHQuX2xvZyhgTW91bnRpbmcgJHtlLmxlbmd0aH0gZmlsZXNgKTtmb3IobGV0IG4gb2YgZSl7aWYobiBpbnN0YW5jZW9mIEZpbGV8fChuPT1udWxsP3ZvaWQgMDpuLmRhdGEpaW5zdGFuY2VvZiBCbG9iJiZuLm5hbWV8fHR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmbi5uYW1lKXR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmKG4uZGF0YT1uZXcgQmxvYihbbi5kYXRhXSx7dHlwZToidGV4dC9wbGFpbiJ9KSkscy5wdXNoKG4pO2Vsc2UgaWYobi5uYW1lJiZuLnVybClvLnB1c2gobik7ZWxzZSBpZih0eXBlb2Ygbj09InN0cmluZyImJm4uc3RhcnRzV2l0aCgiaHR0cCIpKW49e3VybDpuLG5hbWU6bi5zcGxpdCgiLy8iKS5wb3AoKS5yZXBsYWNlKC9cLy9nLCItIil9LG8ucHVzaChuKTtlbHNlIHRocm93J0Nhbm5vdCBtb3VudCBmaWxlKHMpIHNwZWNpZmllZC4gTXVzdCBiZSBhIEZpbGUsIEJsb2IsIGEgVVJMIHN0cmluZywgb3IgeyBuYW1lOiAiZmlsZS50eHQiLCBkYXRhOiAic3RyaW5nIiB9Lic7YS5wdXNoKG4ubmFtZSl9dHJ5e3QuZnMudW5tb3VudChpKX1jYXRjaHt9Zm9yKGxldCBuIG9mIG8pdC5mcy5jcmVhdGVMYXp5RmlsZShyLG4ubmFtZSxuLnVybCwhMCwhMCk7cmV0dXJuIHQuZmlsZXM9dC5maWxlcy5jb25jYXQocyksdC5iYXNlLm1vZHVsZS5GUy5tb3VudCh0LmJhc2UubW9kdWxlLldPUktFUkZTLHtmaWxlczp0LmZpbGVzLmZpbHRlcihuPT5uIGluc3RhbmNlb2YgRmlsZSksYmxvYnM6dC5maWxlcy5maWx0ZXIobj0+KG49PW51bGw/dm9pZCAwOm4uZGF0YSlpbnN0YW5jZW9mIEJsb2IpfSxpKSxzLm1hcChuPT57Y29uc3QgdT1gJHtpfS8ke24ubmFtZX1gLGw9YCR7cn0vJHtuLm5hbWV9YDt0cnl7dC5mcy51bmxpbmsobCl9Y2F0Y2h7fXQuX2xvZyhgQ3JlYXRpbmcgc3ltbGluazogJHtsfSAtLT4gJHt1fWApLHQuZnMuc3ltbGluayh1LGwpfSksYS5tYXAobj0+YCR7cn0vJHtufWApfSxhc3luYyBleGVjKGUscj1udWxsKXtpZih0Ll9sb2coYEV4ZWN1dGluZyAlYyR7ZX0lYyBhcmdzPSR7cn1gLCJjb2xvcjpkYXJrYmx1ZTsgZm9udC13ZWlnaHQ6Ym9sZCIsIiIpLCFlKXRocm93IkV4cGVjdGluZyBhIGNvbW1hbmQiO2xldCBpPWU7cj09bnVsbCYmKHI9ZS5zcGxpdCgiICIpLGk9ci5zaGlmdCgpKTtjb25zdCBzPXQudG9vbHMuZmluZChhPT57dmFyIHU7bGV0IG49aTtyZXR1cm4oKHU9YT09bnVsbD92b2lkIDA6YS5mZWF0dXJlcyk9PW51bGw/dm9pZCAwOnUuc2ltZCk9PT0hMCYmKG49YCR7bn0tc2ltZGApLGEucHJvZ3JhbT09bn0pO2lmKHM9PW51bGwpdGhyb3dgUHJvZ3JhbSAke2l9IG5vdCBmb3VuZC5gO3Muc3Rkb3V0PSIiLHMuc3RkZXJyPSIiLHMubG9hZGluZz09ayYmKHMubG9hZGluZz14LGF3YWl0IHRoaXMuX2luaXRNb2R1bGVzKCkpO3RyeXtzLm1vZHVsZS5jYWxsTWFpbihyKX1jYXRjaChhKXtjb25zb2xlLmVycm9yKGEpfXRyeXtzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzFdKSxzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzJdKX1jYXRjaHt9cy5tb2R1bGUuRlMuc3RyZWFtc1sxXT1zLm1vZHVsZS5GUy5vcGVuKCIvZGV2L3N0ZG91dCIsInciKSxzLm1vZHVsZS5GUy5zdHJlYW1zWzJdPXMubW9kdWxlLkZTLm9wZW4oIi9kZXYvc3RkZXJyIiwidyIpO2xldCBvPXtzdGRvdXQ6cy5zdGRvdXQsc3RkZXJyOnMuc3RkZXJyfTtpZih0LmNvbmZpZy5wcmludEludGVybGVhdmVkJiYobz1zLnN0ZG91dCkscy5yZWluaXQ9PT0hMCl7Y29uc3QgYT10LmJhc2UubW9kdWxlLkZTLmN3ZCgpO09iamVjdC5hc3NpZ24ocyxzLmNvbmZpZykscy5yZWFkeT0hMSxhd2FpdCB0aGlzLmluaXQoKSxzLmlzQmFzZU1vZHVsZSYmdGhpcy5tb3VudCgpLHRoaXMuY2QoYSl9cmV0dXJuIG99LGNhdChlKXtyZXR1cm4gdC5fZmlsZW9wKCJjYXQiLGUpfSxscyhlKXtyZXR1cm4gdC5fZmlsZW9wKCJscyIsZSl9LGRvd25sb2FkKGUpe3JldHVybiB0Ll9maWxlb3AoImRvd25sb2FkIixlKX0scHdkKCl7cmV0dXJuIHQuZnMuY3dkKCl9LGNkKGUpe2ZvcihsZXQgciBvZiB0LnRvb2xzKSFyLm1vZHVsZXx8ci5tb2R1bGUuRlMuY2hkaXIoZSl9LG1rZGlyKGUpe3JldHVybiB0LmZzLm1rZGlyKGUpLCEwfSxyZWFkKHtwYXRoOmUsbGVuZ3RoOnIsZmxhZzppPSJyIixvZmZzZXQ6cz0wLHBvc2l0aW9uOm89MH0pe2NvbnN0IGE9dC5mcy5vcGVuKGUsaSksbj1uZXcgVWludDhBcnJheShyKTtyZXR1cm4gdC5mcy5yZWFkKGEsbixzLHIsbyksdC5mcy5jbG9zZShhKSxufSx3cml0ZSh7cGF0aDplLGJ1ZmZlcjpyLGZsYWc6aT0idysiLG9mZnNldDpzPTAscG9zaXRpb246bz0wfSl7Y29uc3QgYT10LmZzLm9wZW4oZSxpKTt0LmZzLndyaXRlKGEscixzLHIubGVuZ3RoLG8pLHQuZnMuY2xvc2UoYSl9LF9zdGRpblR4dDoiIixfc3RkaW5QdHI6MCxnZXQgc3RkaW4oKXtyZXR1cm4gdC5fc3RkaW5UeHR9LHNldCBzdGRpbihlPSIiKXt0Ll9sb2coYFNldHRpbmcgc3RkaW4gdG8gJWMke2V9JWNgLCJjb2xvcjpkYXJrYmx1ZSIsIiIpLHQuX3N0ZGluVHh0PWUsdC5fc3RkaW5QdHI9MH0sYXN5bmMgX3NldHVwKGUpe2lmKGUucmVhZHkpcmV0dXJuO2lmKHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gKGJhc2UgPSAke2UuaXNCYXNlTW9kdWxlPT09ITB9KS4uLmApLGUuY29uZmlnPU9iamVjdC5hc3NpZ24oe30sZSksZS51cmxQcmVmaXh8fChlLnVybFByZWZpeD1gJHt0LmNvbmZpZy51cmxDRE59LyR7ZS50b29sfS8ke2UudmVyc2lvbn1gKSxlLnByb2dyYW18fChlLnByb2dyYW09ZS50b29sKSxlLmZlYXR1cmVzfHwoZS5mZWF0dXJlcz17fSwoaltlLnByb2dyYW1dfHxbXSkuaW5jbHVkZXMoInNpbWQiKSYmKGF3YWl0IFcoKT8oZS5wcm9ncmFtKz0iLXNpbWQiLGUuZmVhdHVyZXMuc2ltZD0hMCk6dC5fbG9nKGBXZWJBc3NlbWJseSBTSU1EIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyOyB3aWxsIGxvYWQgbm9uLVNJTUQgdmVyc2lvbiBvZiAke2UucHJvZ3JhbX0uYCkpKSxlLmlzQmFzZU1vZHVsZSYmKGUubG9hZGluZz14KSxlLmxvYWRpbmc9PT1rKXt0Ll9sb2coYFdpbGwgbGF6eS1sb2FkICR7ZS50b29sfTsgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24uYCk7cmV0dXJufXNlbGYuaW1wb3J0U2NyaXB0cyhgJHtlLnVybFByZWZpeH0vJHtlLnByb2dyYW19LmpzYCksZS5tb2R1bGU9YXdhaXQgTW9kdWxlKHt0aGlzUHJvZ3JhbTplLnByb2dyYW0sbG9jYXRlRmlsZTooaSxzKT0+YCR7ZS51cmxQcmVmaXh9LyR7aX1gLHN0ZGluOigpPT50Ll9zdGRpblB0cjx0LnN0ZGluLmxlbmd0aD90LnN0ZGluLmNoYXJDb2RlQXQodC5fc3RkaW5QdHIrKyk6KHQuc3RkaW49IiIsbnVsbCkscHJpbnQ6aT0+ZS5zdGRvdXQrPWAke2l9CmAscHJpbnRFcnI6dC5jb25maWcucHJpbnRJbnRlcmxlYXZlZD9pPT5lLnN0ZG91dCs9YCR7aX0KYDppPT5lLnN0ZGVycis9YCR7aX0KYH0pO2NvbnN0IHI9ZS5tb2R1bGUuRlM7ZS5pc0Jhc2VNb2R1bGU/KHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gd2l0aCBiYXNlIG1vZHVsZSBmaWxlc3lzdGVtLi4uYCksci5ta2Rpcih0LmNvbmZpZy5kaXJTaGFyZWQsNTExKSxyLm1rZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJEYXRhfWAsNTExKSxyLm1rZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJNb3VudGVkfWAsNTExKSxyLmNoZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJEYXRhfWApLHQuZnM9cik6KHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gd2l0aCBmaWxlc3lzdGVtLi4uYCksci5ta2Rpcih0LmNvbmZpZy5kaXJTaGFyZWQpLHIubW91bnQoZS5tb2R1bGUuUFJPWFlGUyx7cm9vdDp0LmNvbmZpZy5kaXJTaGFyZWQsZnM6dC5mc30sdC5jb25maWcuZGlyU2hhcmVkKSxyLmNoZGlyKHQuZnMuY3dkKCkpKSxlLnN0ZG91dD0iIixlLnN0ZGVycj0iIixlLnJlYWR5PSEwfSxhc3luYyBfc2V0dXBGUygpe2NvbnN0IGU9dC5mcztmb3IobGV0IHIgb2YgdC50b29scyl7aWYoIXIucmVhZHkpY29udGludWU7Y29uc3QgaT1yLm1vZHVsZS5GUyxzPWAvJHtyLnRvb2x9YCxvPWAke3QuY29uZmlnLmRpclNoYXJlZH0ke3N9YDshaS5hbmFseXplUGF0aChzKS5leGlzdHN8fGUuYW5hbHl6ZVBhdGgobykuZXhpc3RzfHwodC5fbG9nKGBNb3VudGluZyAke3N9IG9udG8gJHt0LmJhc2UudG9vbH0gZmlsZXN5c3RlbSBhdCAke299YCksZS5ta2RpcihvKSxlLm1vdW50KHQuYmFzZS5tb2R1bGUuUFJPWFlGUyx7cm9vdDpzLGZzOml9LG8pKX19LF9maWxlb3AoZSxyKXt0Ll9sb2coYFJ1bm5pbmcgJHtlfSAke3J9YCk7Y29uc3QgaT10LmZzLmFuYWx5emVQYXRoKHIpO2lmKCFpLmV4aXN0cylyZXR1cm4gdC5fbG9nKGBGaWxlICR7cn0gbm90IGZvdW5kLmApLCExO3N3aXRjaChlKXtjYXNlImNhdCI6cmV0dXJuIHQuZnMucmVhZEZpbGUocix7ZW5jb2Rpbmc6InV0ZjgifSk7Y2FzZSJscyI6cmV0dXJuIHQuZnMuaXNGaWxlKGkub2JqZWN0Lm1vZGUpP3QuZnMuc3RhdChyKTp0LmZzLnJlYWRkaXIocik7Y2FzZSJkb3dubG9hZCI6Y29uc3Qgcz1uZXcgQmxvYihbdGhpcy5jYXQocildKTtyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChzKX1yZXR1cm4hMX0sX2xvZyhlKXtpZighdC5jb25maWcuZGVidWcpcmV0dXJuO2xldCByPVsuLi5hcmd1bWVudHNdO3Iuc2hpZnQoKSxjb25zb2xlLmxvZyhgJWNbV2ViV29ya2VyXSVjICR7ZX1gLCJmb250LXdlaWdodDpib2xkIiwiIiwuLi5yKX19O3codCl9KSgpOwo=",M=typeof window<"u"&&window.Blob&&new Blob([atob(S)],{type:"text/javascript;charset=utf-8"});function x(){const t=M&&(window.URL||window.webkitURL).createObjectURL(M);try{return t?new Worker(t):new Worker("data:application/javascript;base64,"+S)}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}const T={urlCDN:"https://biowasm.com/cdn/v3",urlCDNStg:"https://stg.biowasm.com/cdn/v3",dirShared:"/shared",dirMounted:"/mnt",dirData:"/data",printInterleaved:!0,callback:null,debug:!1,env:"prd"};class N{constructor(t,e={}){if(null==t)throw"Expecting array of tools as input to Aioli constructor.";return Array.isArray(t)||(t=[t]),e=Object.assign({},T,e),t=t.map(this._parseTool),"stg"===e.env&&(e.urlCDN=e.urlCDNStg),this.tools=t,this.config=e,null!=this.config.callback&&(this.callback=this.config.callback),delete this.config.callback,this.init()}async init(){const t=new x;this.callback&&(t.onmessage=t=>{"biowasm"===t.data.type&&this.callback(t.data.value)});const e=f(t);return e.tools=this.tools,e.config=this.config,await e.init(),e}_parseTool(t){if("string"!=typeof t)return t;const e=t.split("/");if(2!=e.length&&3!=e.length)throw"Expecting '<tool>/<version>' or '<tool>/<program>/<version>'";return{tool:e[0],program:3==e.length?e[1]:e[0],version:e[e.length-1]}}}var E=n(850);class A{static getAvailableScales(){return Object.entries(this.scales).map((([t,e])=>t))}static getScale(t){return(0,E.hu)(!(void 0===this.scales[t]),`Scale '${t}' was not found.`),this.scales[t]}}A.scales={WimleyWhite:{"-":0,A:.17,C:-.24,D:-.07,E:-.01,F:-1.13,G:.01,H:.17,I:-.31,K:.99,L:-.56,M:-.23,N:.42,P:.45,Q:.58,R:.81,S:.13,T:.14,V:.07,W:-1.85,Y:-.94},categorial:{"-":0,A:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,K:9,L:10,M:11,N:12,P:13,Q:14,R:15,S:16,T:17,V:18,W:19,Y:20}};class I{constructor(t="categorial"){this.aa2num=A.getScale(t),this.num2aa={},Object.entries(this.aa2num).forEach((([t,e])=>this.num2aa[e]=t))}static _truncateSequence(t){let e=0,n=t.length;const i=["NH2","COOH"];if(t.startsWith(i[0])){const n=i[0].length;(0,E.hu)("-"==t[n],`Wrong sequence format: ${i[0]} without following '-' in '${t}'.`),e=n}if(t.endsWith(i[1])){const e=i[1].length+1;(0,E.hu)("-"==t[n-e],`Wrong sequence format: ${i[1]} without '-' precending in '${t}'.`),n-=e}return t.substring(e,n)}static _dropDefises(t){return t.replace(/(-)([^-]+)/g,"$2")}static clean(t){return I._dropDefises(I._truncateSequence(t))}encode(t){const e=t.length,n=new Array(e).fill(0);for(let i=0;i<e;++i){const e=t[i];(0,E.hu)(e in this.aa2num,`Unknown char '${e}' found in sequence '${t}'`),n[i]=this.encodeLettter(e)}return n}encodeLettter(t){return this.aa2num[t]}decode(t){let e="";for(let n=0;n<t.length;++n){const i=t[n];(0,E.hu)(i in this.num2aa,`Unknown code '${i}' found in vector '${t}'`),e+=this.num2aa[i]}return e}}var L=n(3553),_=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const R="input.fa",k="result.fasta";function G(t){return t.reduce(((t,e,n)=>t+`>sample${n+1}\n${e}\n`),"")}function P(t,e=!1,n="",o=null,r,a,l){var h,c;return _(this,void 0,void 0,(function*(){let u=t.toList();e&&(u=u.map((t=>I.clean(t).replace(/\-/g,""))));const d=t.length;null!=o||(o=i.Column.string("Clusters",d).init("0")),o.type!=i.COLUMN_TYPE.STRING&&(o=o.convertTo(i.TYPE.STRING)),o.compact();const f=o.categories,m=o.getRawData(),p=new Array(f.length),g=new Array(f.length);for(let t=0;t<d;++t){const e=m[t];(null!==(h=p[e])&&void 0!==h?h:p[e]=[]).push(u[t]),(null!==(c=g[e])&&void 0!==c?c:g[e]=[]).push(t)}const y=yield new N(["base/1.0.0",{tool:"kalign",version:L.WY,reinit:!0}]),v=i.Column.string(n,d);for(let t=0;t<f.length;++t){const e=G(p[t]);yield y.fs.writeFile(R,e);const n=`${void 0!==r?` --gpo ${r}`:""}${void 0!==a?` --gpe ${a}`:""}${void 0!==l?` --tgpe ${l}`:""}`,i=yield y.exec(`kalign ${R} -f fasta -o ${k}${n}`);console.warn(i);const o=yield y.cat(k);if(!o)throw new Error("kalign output no result");const h=new s.i(o).sequencesArray,c=g[t];for(let t=0;t<h.length;++t)v.set(c[t],h[t])}const b=t.getTag(i.TAGS.UNITS),w=t.getTag("alphabet");return v.setTag(i.TAGS.UNITS,b),v.setTag("aligned","SEQ.MSA"),v.setTag("alphabet",w),v.semType=i.SEMTYPE.MACROMOLECULE,v}))}},8341:(t,e,n)=>{"use strict";n.d(e,{J:()=>a,f:()=>h});var i=n(4469),s=n(976),o=n(3553),r=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};const a=["mafft --auto","mafft","linsi","ginsi","einsi","fftns","fftnsi","nwns","nwnsi"],l=["AlignedSeq","AlignedSubpeptide","HELM","ID","PolymerID"];function h(t,e,n="ginsi",a=1.53,h=0,u=null){var d;return r(this,void 0,void 0,(function*(){const r=t.length;null!=u||(u=s.Column.int("Clusters",r).init(0)),u.type!=s.COLUMN_TYPE.STRING&&(u=u.convertTo(s.TYPE.STRING));const f=u.categories,m=new Array(f.length);for(let e=0;e<r;++e){const n=u.get(e);if(""===n)continue;const i=f.indexOf(n),s=t.get(e);s&&(null!==(d=m[i])&&void 0!==d?d:m[i]=[]).push({ID:e.toString(),HELM:s})}const p=yield(void 0!==i.dapi.docker?i.dapi.docker.dockerContainers:i.dapi.dockerfiles).filter("bio").first(),g=new Array(r);for(const t of m){const e=(yield c(p.id,t,n,a,h)).Alignment;for(const t of e)g[parseInt(t.ID)]=Object.entries(t).filter((t=>!l.includes(t[0]))).map((t=>"-"!==t[1]?t[1]:"")).join(o.rs.SEPARATOR)}const y=s.Column.fromStrings(e,g);return y.setTag(s.TAGS.UNITS,"separator"),y.setTag("separator",o.rs.SEPARATOR),y.setTag("aligned","SEQ.MSA"),y.setTag("alphabet","UN"),y.setTag(".alphabetIsMultichar","true"),y.semType=s.SEMTYPE.MACROMOLECULE,y}))}function c(t,e,n,s,o){return r(this,void 0,void 0,(function*(){const r={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(e)},a=`/align?method=${n}&gap_open=${s}&gap_extend=${o}`,l=yield(void 0!==i.dapi.docker?i.dapi.docker.dockerContainers:i.dapi.dockerfiles).request(t,a,r);return JSON.parse(null!=l?l:"{}")}))}},9943:(t,e,n)=>{"use strict";n.d(e,{C2:()=>u});var i=n(976),s=n(3870),o=n(4469),r=n(6414),a=n.n(r),l=n(8447),h=n(499);const c=60;function u(){const t=o.shell.tv.grid,e=a().count(0).take(t.columns.length).map((e=>t.columns.byIndex(e))).filter((t=>!!t.column&&t.column.semType!==i.SEMTYPE.MACROMOLECULE)).toArray(),n=e.find((t=>-1!==t.name.toLowerCase().indexOf("id"))),r=n?[n.name]:[],u=s.multiChoiceInput("Seq id columns",r,e.map((t=>t.name))),f=a().count(0).take(t.columns.length).map((e=>t.columns.byIndex(e))).filter((t=>{const e=t.column;return!(!e||e.semType!==i.SEMTYPE.MACROMOLECULE)&&new h.C(e).isFasta()})).toArray(),m=f.length>0?f[0].name:[],p=s.choiceInput("Seq column",m,f.map((t=>t.name))),g=s.intInput("FASTA line width",c);s.dialog({title:"Save as FASTA"}).add(s.inputs([u,p,g])).onOK((()=>{var e;const n=u.value?u.value.map((e=>t.columns.byName(e).column)):[],i=p.value?t.columns.byName(p.value).column:null,s=null!==(e=g.value)&&void 0!==e?e:c;i||o.shell.warning("Seq column is mandatory to save as FASTA.");const r=function(t,e,n=c,i="\n"){const s=l.kB,o=[];for(let r=0;r<e.length;r++){const a=t.map((t=>t.get(r).toString())).join("|"),l=d(e.get(r),s,n);o.push(`>${a}${i}`);for(const t of l)o.push(`${t}${i}`)}return"".concat(...o)}(n,i,s),a=document.createElement("a");a.setAttribute("href",`data:text/plain;charset=utf-8,${encodeURIComponent(r)}`),a.setAttribute("download",`${t.dataFrame.name}.fasta`),a.click()})).show()}function d(t,e,n=c){const i=e(t);let s=0;const o=i.length,r=[];for(;s<o;){const t=i.slice(s,s+n),e=t.map((t=>t.length>1?`[${t}]`:t)).join("");r.push(e),s+=t.length}return r}},4293:(t,e,n)=>{"use strict";n.d(e,{Y:()=>r,m:()=>o});var i=n(4469),s=n(976);function o(){const t=i.shell.t.columns.bySemType(s.SEMTYPE.MACROMOLECULE);if(null!==t)return t;i.shell.error("Current table does not contain macromolecules")}function r(t,e){t.innerHTML="",t.append(e)}},2433:(t,e,n)=>{"use strict";n.d(e,{OZ:()=>v,bo:()=>s});var i,s,o=n(4469),r=n(3870),a=n(976),l=n(6414),h=n.n(l),c=n(701),u=n(499),d=n(8447),f=n(9298),m=n(7604);HTMLCanvasElement.prototype.getCursorPosition=function(t,e){const n=this.getBoundingClientRect();return new a.Point((t.clientX-n.left)*e,(t.clientY-n.top)*e)},a.Rect.prototype.contains=function(t,e){return this.left<=t&&t<=this.right&&this.top<=e&&e<=this.bottom};class p{constructor(t=0,e=new a.Rect(0,0,0,0)){this.count=t,this.bounds=e}}class g{constructor(t,e,n={},i=0,s=0){this.pos=t,this.name=e,this.freq=n,this.rowCount=i,this.sumForHeightCalc=s}}!function(t){t.STYLE="Style",t.BEHAVIOR="Behavior",t.LAYOUT="Layout",t.DATA="Data"}(i||(i={})),function(t){t.sequenceColumnName="sequenceColumnName",t.startPositionName="startPositionName",t.endPositionName="endPositionName",t.skipEmptySequences="skipEmptySequences",t.skipEmptyPositions="skipEmptyPositions",t.shrinkEmptyTail="shrinkEmptyTail",t.backgroundColor="backgroundColor",t.positionHeight="positionHeight",t.positionWidth="positionWidth",t.verticalAlignment="verticalAlignment",t.horizontalAlignment="horizontalAlignment",t.fixWidth="fixWidth",t.fitArea="fitArea",t.minHeight="minHeight",t.maxHeight="maxHeight",t.positionMarginState="positionMarginState",t.positionMargin="positionMargin",t.filterSource="filterSource"}(s||(s={}));const y=f.vS;class v extends a.JsViewer{get filter(){let t;switch(this.filterSource){case f.Ct.Filtered:t=this.dataFrame.filter;break;case f.Ct.Selected:t=this.dataFrame.selection}return t}get Length(){return this.skipEmptyPositions?this.positions.length:this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0}get positionWidthWithMargin(){return this._positionWidth+this.positionMarginValue}get positionMarginValue(){var t;return"auto"===this.positionMarginState&&!0===(null===(t=this.unitsHandler)||void 0===t?void 0:t.getAlphabetIsMultichar())||"enable"===this.positionMarginState?this.positionMargin:0}get countOfRenderPositions(){if(null==this.host)return 0;const t=window.devicePixelRatio;return t>1?this.canvasWidthWithRatio/this.positionWidthWithMargin:this.canvas.width/(this.positionWidthWithMargin*t)}get canvasWidthWithRatio(){return this.canvas.width*window.devicePixelRatio}get firstVisibleIndex(){return this.visibleSlider?Math.floor(this.slider.min):0}constructor(){super(),this.viewerId=-1,this.initialized=!1,this.cp=null,this.axisHeight=12,this.seqCol=null,this.splitter=null,this.positions=[],this.rowsMasked=0,this.rowsNull=0,this.visibleSlider=!1,this.allowResize=!0,this.turnOfResizeForOneSetValue=!1,this.backgroundColor=4294967295,this.positionMargin=0,this.positionNames=[],this.startPosition=-1,this.endPosition=-1,this.viewSubs=[],this.viewerId=v.viewerCount,v.viewerCount+=1,this.textBaseline="top",this.unitsHandler=null,this.sequenceColumnName=this.string(s.sequenceColumnName,y.sequenceColumnName,{category:i.DATA}),this.startPositionName=this.string(s.startPositionName,y.startPositionName,{category:i.DATA}),this.endPositionName=this.string(s.endPositionName,y.endPositionName,{category:i.DATA}),this.skipEmptySequences=this.bool(s.skipEmptySequences,y.skipEmptySequences,{category:i.DATA}),this.skipEmptyPositions=this.bool(s.skipEmptyPositions,y.skipEmptyPositions,{category:i.DATA}),this.shrinkEmptyTail=this.bool(s.shrinkEmptyTail,y.shrinkEmptyTail,{category:i.DATA}),this.backgroundColor=this.int(s.backgroundColor,y.backgroundColor,{category:i.STYLE}),this.positionHeight=this.string(s.positionHeight,y.positionHeight,{category:i.STYLE,choices:Object.values(f.ES)}),this._positionWidth=this.positionWidth=this.float(s.positionWidth,y.positionWidth,{category:i.STYLE}),this.verticalAlignment=this.string(s.verticalAlignment,y.verticalAlignment,{category:i.LAYOUT,choices:Object.values(f.vw)}),this.horizontalAlignment=this.string(s.horizontalAlignment,y.horizontalAlignment,{category:i.LAYOUT,choices:Object.values(f.iD)}),this.fixWidth=this.bool(s.fixWidth,y.fixWidth,{category:i.LAYOUT}),this.fitArea=this.bool(s.fitArea,y.fitArea,{category:i.LAYOUT}),this.minHeight=this.float(s.minHeight,y.minHeight,{category:i.LAYOUT}),this.maxHeight=this.float(s.maxHeight,y.maxHeight,{category:i.LAYOUT}),this.positionMarginState=this.string(s.positionMarginState,y.positionMarginState,{category:i.LAYOUT,choices:Object.values(f.dE)});let t=0;"auto"===this.positionMarginState&&(t=4),this.positionMargin=this.int(s.positionMargin,t,{category:i.LAYOUT,min:0,max:16}),this.filterSource=this.string(s.filterSource,y.filterSource,{category:i.BEHAVIOR,choices:Object.values(f.Ct)}),this.slider=r.rangeSlider(0,100,0,20,!1,{style:"barbell"}),this.canvas=r.canvas(),this.canvas.style.width="100%"}init(){this.initialized?console.error("Bio: WebLogoViewer.init() second initialization!"):(this.initialized=!0,this.helpUrl="/help/visualize/viewers/web-logo.md",this.msgHost=r.div("No message"),this.msgHost.style.display="none",this.canvas=r.canvas(),this.canvas.style.width="100%",this.slider.root.style.position="absolute",this.slider.root.style.zIndex="999",this.slider.root.style.display="none",this.slider.root.style.height="0.7em",this.visibleSlider=!1,this.subs.push(this.slider.onValuesChanged.subscribe(this.sliderOnValuesChanged.bind(this))),this.host=r.div([this.msgHost,this.canvas]),this.host.style.justifyContent="center",this.host.style.alignItems="center",this.host.style.position="relative",this.host.style.setProperty("overflow","hidden","important"),this.subs.push(c.fromEvent(this.canvas,"mousemove").subscribe(this.canvasOnMouseMove.bind(this))),this.subs.push(c.fromEvent(this.canvas,"mousedown").subscribe(this.canvasOnMouseDown.bind(this))),this.subs.push(c.fromEvent(this.canvas,"wheel").subscribe(this.canvasOnWheel.bind(this))),this.subs.push(r.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),this.root.append(this.host),this.root.append(this.slider.root),this._calculate(window.devicePixelRatio),this.updateSlider(),this.render(!0))}rootOnSizeChanged(){this._calculate(window.devicePixelRatio),this.updateSlider(),this.render(!0)}updateSeqCol(){if(this.dataFrame)if(this.seqCol=this.sequenceColumnName?this.dataFrame.col(this.sequenceColumnName):null,null==this.seqCol&&(this.seqCol=(0,d.up)(this.dataFrame),this.sequenceColumnName=this.seqCol?this.seqCol.name:null),this.seqCol){const t=this.seqCol.getTag(a.TAGS.UNITS),e=this.seqCol.getTag("separator");this.splitter=(0,d.vU)(t,e),this.unitsHandler=new u.C(this.seqCol),this.updatePositions(),this.cp=(0,d.dQ)(this.seqCol)}else this.splitter=null,this.positionNames=[],this.startPosition=-1,this.endPosition=-1,this.cp=null;this.render()}updatePositions(){if(!this.seqCol)return;let t;if(this.shrinkEmptyTail){const e=this.dataFrame.filter.getSelectedIndexes();t=Array.from(new Set(Array.from(Array(e.length).keys()).map((t=>this.seqCol.get(e[t])))))}else t=this.seqCol.categories;const e=t.length>0?Math.max(...t.map((t=>null!==t?this.splitter(t).length:0))):0,n=this.seqCol.getTag(f.DX.positionNames);this.positionNames=n?n.split(f.CI).map((t=>t.trim())):[...Array(e).keys()].map((t=>`${t+1}`)),this.startPosition=this.startPositionName&&this.positionNames&&this.positionNames.includes(this.startPositionName)?this.positionNames.indexOf(this.startPositionName):0,this.endPosition=this.endPositionName&&this.positionNames&&this.positionNames.includes(this.endPositionName)?this.positionNames.indexOf(this.endPositionName):e-1}get widthArea(){return this.Length*this.positionWidth/window.devicePixelRatio}get heightArea(){return Math.min(this.maxHeight,Math.max(this.minHeight,this.root.clientHeight))}get xScale(){return this.widthArea>0?(this.root.clientWidth-this.Length*this.positionMarginValue)/this.widthArea:0}get yScale(){return this.root.clientHeight/this.heightArea}checkIsHideSlider(){let t=!0;const e=Math.min(this.xScale,this.yScale);return(e==this.xScale||e<=1)&&this.fitArea&&(t=!1),this.fixWidth||Math.ceil(this.canvas.width/this.positionWidthWithMargin)>=this.Length||t}setSliderVisibility(t){t?(this.slider.root.style.display="inherit",this.visibleSlider=!0):(this.slider.root.style.display="none",this.visibleSlider=!1)}updateSlider(){if(this.checkIsHideSlider()?this.setSliderVisibility(!1):this.setSliderVisibility(!0),null!=this.slider&&null!=this.canvas){const t=Math.max(0,Math.floor(this.slider.min+this.canvas.width/this.positionWidthWithMargin)-this.Length);let e=Math.floor(this.slider.min-t),n=Math.floor(this.slider.min-t)+Math.floor(this.canvas.width/this.positionWidthWithMargin);this.checkIsHideSlider()&&(e=0,n=Math.max(e,this.Length-1)),this.turnOfResizeForOneSetValue=!0,this.slider.setValues(0,this.Length,e,n)}}onPropertyChanged(t){switch(super.onPropertyChanged(t),t.name){case s.sequenceColumnName:case s.startPositionName:case s.endPositionName:case s.filterSource:this.updateSeqCol();break;case s.positionWidth:this._positionWidth=this.positionWidth,this.updateSlider();break;case s.fixWidth:case s.fitArea:case s.positionMargin:this.updateSlider();break;case s.shrinkEmptyTail:case s.skipEmptyPositions:this.updatePositions()}this.render(!0)}onTableAttached(){super.onTableAttached();const t=this.dataFrame?"data":"null";console.debug(`Bio: WebLogoViewer<${this.viewerId}>.onTableAttached( dataFrame = ${t} ) start`),this.updateSeqCol(),void 0!==this.dataFrame&&(this.viewSubs.push(this.dataFrame.filter.onChanged.subscribe(this.dataFrameFilterOnChanged.bind(this))),this.viewSubs.push(this.dataFrame.selection.onChanged.subscribe(this.dataFrameSelectionOnChanged.bind(this)))),this.init(),console.debug(`Bio: WebLogoViewer<${this.viewerId}>.onTableAttached() end`)}detach(){const t=Object.create(null,{detach:{get:()=>super.detach}});return e=this,n=void 0,s=function*(){const e=this.dataFrame?"data":"null";console.debug(`Bio: WebLogoViewer<${this.viewerId}>.onTableAttached( dataFrame = ${e} ) start`),t.detach.call(this),this.viewSubs.forEach((t=>t.unsubscribe())),this.host.remove(),this.msgHost=void 0,this.host=void 0,this.initialized=!1,console.debug(`Bio: WebLogoViewer<${this.viewerId}>.onTableAttached() end`)},new((i=void 0)||(i=Promise))((function(t,o){function r(t){try{l(s.next(t))}catch(t){o(t)}}function a(t){try{l(s.throw(t))}catch(t){o(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i((function(t){t(n)}))).then(r,a)}l((s=s.apply(e,n||[])).next())}));var e,n,i,s}getMonomer(t){const e=t.x+this.firstVisibleIndex*this.positionWidthWithMargin,n=Math.floor(t.x/this.positionWidthWithMargin+this.firstVisibleIndex),i=this.positions[n];if(null==i)return[n,null,null];const s=Object.keys(i.freq).find((n=>i.freq[n].bounds.contains(e,t.y)));return void 0===s?[n,null,null]:[n,s,i.freq[s]]}_nullSequence(t="X"){return this.skipEmptySequences?"":new Array(this.Length).fill(t).join("")}removeWhere(t,e){const n=t.length;let i=0;for(let s=0;s<n;s++)e(t[s])||(t[i]=t[s],i++);return t.length=i,t}_removeEmptyPositions(){this.skipEmptyPositions&&this.removeWhere(this.positions,(t=>{var e;return(null===(e=null==t?void 0:t.freq["-"])||void 0===e?void 0:e.count)===t.rowCount}))}_calculate(t){if(!this.host||!this.seqCol||!this.dataFrame)return;this.unitsHandler=new u.C(this.seqCol),this.calcSize();const e=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.positions=new Array(e);for(let t=0;t<this.Length;t++){const e=this.positionNames[this.startPosition+t];this.positions[t]=new g(this.startPosition+t,e)}const n=this.filter.getSelectedIndexes();this.rowsMasked=n.length,this.rowsNull=0;for(const t of n){let e=this.seqCol.get(t);e||(e=this._nullSequence(),++this.rowsNull);const n=this.splitter(e);for(let t=0;t<this.Length;t++){const e=this.positions[t].freq,i=n[this.startPosition+t]||"-";i in e||(e[i]=new p),e[i].count++}}for(let t=0;t<this.Length;t++){this.positions[t].rowCount=0;for(const e in this.positions[t].freq)this.positions[t].rowCount+=this.positions[t].freq[e].count;if(this.positionHeight==f.ES.Entropy){this.positions[t].sumForHeightCalc=0;for(const e in this.positions[t].freq){const n=this.positions[t].freq[e].count/this.positions[t].rowCount;this.positions[t].sumForHeightCalc+=-n*Math.log2(n)}}}this._removeEmptyPositions();const i=this.canvas.height-this.axisHeight*t;for(let e=0;e<this.Length;e++){const n=this.positions[e].freq,s=this.positions[e].rowCount,r=this.getAlphabetSize();this.positionHeight==f.ES.Entropy&&null==r&&o.shell.error("WebLogo: alphabet is undefined.");const l=Math.log2(r),h=this.positionHeight==f.ES.Entropy?i*(l-this.positions[e].sumForHeightCalc)/l:i;let c=this.axisHeight*t+(i-h-1);const u=Object.entries(n).sort(((t,e)=>"-"!==t[0]&&"-"!==e[0]?e[1].count-t[1].count:"-"===t[0]&&"-"===e[0]?0:"-"===t[0]?-1:1));for(const t of u){const n=t[1],i=h*n.count/s;n.bounds=new a.Rect(e*this.positionWidthWithMargin,c,this._positionWidth,i),c+=i}}}render(t=!0){var e;if(this.msgHost&&(this.seqCol&&!this.cp?(this.msgHost.innerText=`Unknown palette (column semType: '${this.seqCol.semType}').`,this.msgHost.style.display=""):this.msgHost.style.display="none"),!this.seqCol||!this.dataFrame||!this.cp||-1===this.startPosition||-1===this.endPosition||null==this.host||null==this.slider)return;const n=this.canvas.getContext("2d");if(!n)return;this.slider.root.style.width=`${this.host.clientWidth}px`;const i=window.devicePixelRatio;t&&this._calculate(i),n.resetTransform(),n.fillStyle=a.Color.toHtml(this.backgroundColor),n.fillRect(0,0,this.canvas.width,this.canvas.height),n.textBaseline=this.textBaseline;const s=this.countOfRenderPositions+1,o=this.visibleSlider?Math.floor(this.slider.min):0,r=Math.min(this.Length,o+s),l=10*i;n.resetTransform(),n.fillStyle="black",n.textAlign="center",n.font=`${l.toFixed(1)}px Roboto, Roboto Local, sans-serif`;const h=Math.max(...this.positions.map((t=>n.measureText(t.name).width))),c=h<this._positionWidth-2?1:(this._positionWidth-2)/h;for(let t=this.firstVisibleIndex;t<r;t++){const e=this.positions[t];n.resetTransform(),n.setTransform(c,0,0,1,t*this.positionWidthWithMargin+this._positionWidth/2-this.positionWidthWithMargin*o,0),n.fillText(e.name,0,0)}for(let t=this.firstVisibleIndex;t<r;t++)for(const[i,s]of Object.entries(this.positions[t].freq))if("-"!==i){const t=(0,d.GU)(i,5),o=s.bounds,r=o.left-this.positionWidthWithMargin*this.firstVisibleIndex;n.resetTransform(),n.strokeStyle="lightgray",n.lineWidth=1,n.rect(r,o.top,o.width,o.height),n.fillStyle=null!==(e=this.cp.get(i))&&void 0!==e?e:this.cp.get("other"),n.textAlign="left",n.font="16px Roboto, Roboto Local, sans-serif";const a=n.measureText(t);n.setTransform(o.width/a.width,0,0,o.height/12.2,r,o.top),n.fillText(t,0,-.25)}}calcSize(){if(!this.host)return;const t=window.devicePixelRatio;let e=this.widthArea,n=this.heightArea;if(this.fitArea&&!this.visibleSlider){const t=Math.max(1,Math.min(this.xScale,this.yScale));e*=t,n*=t,this._positionWidth=this.positionWidth*t}e=this.Length*this.positionWidthWithMargin/t,this.canvas.width=this.root.clientWidth*t,this.canvas.style.width=`${this.root.clientWidth}px`,this.host.style.setProperty("height",`${n}px`);const i=this.host.clientHeight;if(this.canvas.height=i*t,this.fixWidth)this.root.style.width=this.host.style.width=`${e}px`,this.root.style.height=`${n}px`,this.root.style.overflow="hidden",this.host.style.setProperty("overflow-y","hidden","important");else{this.root.style.width=this.host.style.width="100%",this.host.style.overflowX="auto!important",this.host.style.setProperty("text-align",this.horizontalAlignment);const t=this.visibleSlider?10:0;let s=0;switch(this.verticalAlignment){case"top":s=0;break;case"middle":s=Math.max(0,(this.root.clientHeight-n)/2);break;case"bottom":s=Math.max(0,this.root.clientHeight-n-t)}let o=0;switch(this.horizontalAlignment){case"left":o=0;break;case"center":o=Math.max(0,(this.root.clientWidth-e)/2);break;case"right":o=Math.max(0,this.root.clientWidth-e)}this.host.style.setProperty("margin-top",`${s}px`,"important"),this.host.style.setProperty("margin-left",`${o}px`,"important"),null!=this.slider&&this.slider.root.style.setProperty("margin-top",`${s+i}px`,"important"),this.root.clientHeight<=n?(this.host.style.setProperty("height",`${this.root.clientHeight}px`),this.host.style.setProperty("overflow-y",null)):this.host.style.setProperty("overflow-y","hidden","important")}}getAlphabetSize(){var t,e;return null!==(e=null===(t=this.unitsHandler)||void 0===t?void 0:t.getAlphabetSize())&&void 0!==e?e:0}sliderOnValuesChanged(t){if(null!=this.host)try{if(this.allowResize&&!this.turnOfResizeForOneSetValue&&this.visibleSlider){const t=Math.ceil(this.slider.max-this.slider.min),e=this.canvas.width/t-this.positionMarginValue;this.positionWidth=e,this._positionWidth=e}this.turnOfResizeForOneSetValue=!1,this.render(!0)}catch(t){const e=(0,m.O)(t);console.error("Bio: WebLogoViewer.sliderOnValuesChanged() error:\n"+e)}}dataFrameFilterOnChanged(t){console.debug("Bio: WebLogoViewer.dataFrameFilterChanged()");try{this.updatePositions(),this.render()}catch(t){const e=(0,m.O)(t);console.error("Bio: WebLogoViewer.dataFrameFilterOnChanged() error:\n"+e)}}dataFrameSelectionOnChanged(t){console.debug("Bio: WebLogoViewer.dataFrameSelectionOnChanged()");try{this.render()}catch(t){const e=(0,m.O)(t);console.error("Bio: WebLogoViewer.dataFrameSelectionOnChanged() error:\n"+e)}}canvasOnMouseMove(t){try{const e=t,n=window.devicePixelRatio,i=this.canvas.getCursorPosition(e,n),[s,o]=this.getMonomer(i);if(this.dataFrame&&this.seqCol&&this.splitter&&o){const t=this.positions[s],n=function(t,e,n,i,s,o){return h().count(0).take(t.rowCount).filter((t=>n.get(t))).map((t=>{const n=e.get(t),s=n?i(n):[],r=o.pos;return r<s.length?s[r]:null})).toArray().filter((t=>t==s)).reduce(((t,e)=>t+1),0)}(this.dataFrame,this.seqCol,this.filter,this.splitter,o,t),i=r.div([r.div(`${o}`),r.div(`${n} rows`)]);r.tooltip.show(i,e.x+16,e.y+16)}else r.tooltip.hide()}catch(t){const e=(0,m.O)(t);console.error("Bio: WebLogoViewer.canvasOnMouseMove() error:\n"+e)}}canvasOnMouseDown(t){try{const e=t,n=window.devicePixelRatio,[i,s]=this.getMonomer(this.canvas.getCursorPosition(e,n));if(this.dataFrame&&this.seqCol&&this.splitter&&s){const t=this.positions[i],e=a.BitSet.create(this.dataFrame.selection.length,(e=>function(t,e,n,i,s,o,r){if(!n.getSelectedIndexes().includes(i))return!1;const a=e.get(i),l=a?s(a)[r.pos]:null;return l===o||""===l&&"-"===o}(this.dataFrame,this.seqCol,this.filter,e,this.splitter,s,t)));this.dataFrame.selection.init((t=>e.get(t)))}}catch(t){const e=(0,m.O)(t);console.error("Bio: WebLogoViewer.canvasOnMouseDown() error:\n"+e)}}canvasOnWheel(t){try{if(!this.visibleSlider)return;const e=t.deltaY/100*Math.max(Math.floor(this.countOfRenderPositions/2),1);this.slider.scrollBy(this.slider.min+e)}catch(t){const e=(0,m.O)(t);console.error("Bio: WebLogoViewer.canvasOnWheel() error:\n"+e)}}}v.residuesSet="nucleotides",v.viewerCount=-1},4413:(t,e,n)=>{"use strict";n.d(e,{ST:()=>m});var i=n(3870),s=n(976),o=n(4469),r=n(6414),a=n.n(r),l=n(7983),h=n(701),c=n(4293),u=n(1061);const d=rxjs.operators;var f=function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,a)}l((i=i.apply(t,e||[])).next())}))};class m extends s.Filter{get calculating(){return"initial"==this.loader.style.display}set calculating(t){this.loader.style.display=t?"initial":"none"}get filterSummary(){return this.bioFilter.substructure}get isFiltering(){return super.isFiltering&&""!==this.bioFilter.substructure}get isReadyToApplyFilter(){return!this.calculating&&null!=this.bitset}get _debounceTime(){if(null==this.column)return 1e3;const t=this.column.length;return t<500?0:t>1e4?1e3:Math.floor((t-500)/9500*1e3)}constructor(){super(),this.bioFilter=null,this.bitset=null,this.loader=i.loader(),this.notation=void 0,this.root=i.divV([]),this.calculating=!1}attach(t){var e,n,i,o,r;super.attach(t),this.column=t.columns.bySemType(s.SEMTYPE.MACROMOLECULE),null!==(e=this.columnName)&&void 0!==e||(this.columnName=null===(n=this.column)||void 0===n?void 0:n.name),null!==(i=this.notation)&&void 0!==i||(this.notation=null===(o=this.column)||void 0===o?void 0:o.getTag(s.TAGS.UNITS)),this.bioFilter="fasta"===this.notation?new g:"separator"===this.notation?new y(this.column.getTag("separator")):new v,this.root.appendChild(this.bioFilter.filterPanel),this.root.appendChild(this.loader),null===(r=this.onBioFilterChangedSubs)||void 0===r||r.unsubscribe();let a=this.bioFilter.onChanged;a=a.pipe((0,d.debounceTime)(this._debounceTime)),this.onBioFilterChangedSubs=a.subscribe((t=>f(this,void 0,void 0,(function*(){return yield this._onInputChanged()}))))}detach(){super.detach()}applyFilter(){var t;this.bitset&&!this.isDetached&&(null===(t=this.dataFrame)||void 0===t||t.filter.and(this.bitset))}saveState(){var t;const e=super.saveState();return e.bioSubstructure=null===(t=this.bioFilter)||void 0===t?void 0:t.substructure,e}applyState(t){super.applyState(t),t.bioSubstructure&&(this.bioFilter.substructure=t.bioSubstructure);const e=this;t.bioSubstructure&&setTimeout((function(){e._onInputChanged()}),1e3)}_onInputChanged(){var t,e,n;return f(this,void 0,void 0,(function*(){if(this.isFiltering){if(a()(this.dataFrame.rows.filters).has(`${this.columnName}: ${this.filterSummary}`))return;this.calculating=!0;try{this.bitset=yield null===(e=this.bioFilter)||void 0===e?void 0:e.substrucrureSearch(this.column),this.calculating=!1,null===(n=this.dataFrame)||void 0===n||n.rows.requestFilter()}finally{this.calculating=!1}}else this.bitset=null,null===(t=this.dataFrame)||void 0===t||t.rows.requestFilter()}))}}class p{constructor(){this.onChanged=new h.Subject}get filterPanel(){return new HTMLElement}get substructure(){return""}set substructure(t){}substrucrureSearch(t){return f(this,void 0,void 0,(function*(){return null}))}}class g extends p{constructor(){super(),this.substructureInput=i.stringInput("","",(()=>{this.onChanged.next()}),{placeholder:"Substructure"})}get filterPanel(){return this.substructureInput.root}get substructure(){return this.substructureInput.value}set substructure(t){this.substructureInput.value=t}substrucrureSearch(t){return f(this,void 0,void 0,(function*(){return yield(0,l.pf)(this.substructure,t)}))}}class y extends g{constructor(t){super(),this.colSeparator="",this.separatorInput=i.stringInput("","",(()=>{this.onChanged.next()}),{placeholder:"Separator"}),this.colSeparator=t,this.separatorInput.value=t}get filterPanel(){return i.divV([this.substructureInput.root,this.separatorInput.root])}get substructure(){return this.separatorInput.value&&this.separatorInput.value!==this.colSeparator?this.substructureInput.value.replaceAll(this.separatorInput.value,this.colSeparator):this.substructureInput.value}set substructure(t){this.substructureInput.value=t}substrucrureSearch(t){return f(this,void 0,void 0,(function*(){return yield(0,l.pf)(this.substructure,t,this.colSeparator)}))}}class v extends p{constructor(){super(),this._filterPanel=i.div("",{style:{cursor:"pointer"}}),this.helmSubstructure="",this.init()}init(){return f(this,void 0,void 0,(function*(){this.helmEditor=yield o.functions.call("HELM:helmWebEditor"),yield i.tools.waitForElementInDom(this._filterPanel),this.updateFilterPanel(),this._filterPanel.addEventListener("click",(t=>{const{editorDiv:e,webEditor:n}=this.helmEditor.createWebEditor(this.helmSubstructure);i.dialog({showHeader:!1,showFooter:!0}).add(e).onOK((()=>{const t=n.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.helmSubstructure=t,this.updateFilterPanel(this.substructure),setTimeout((()=>{this.onChanged.next()}),10)})).show({modal:!0,fullScreen:!0})})),i.onSizeChanged(this._filterPanel).subscribe((t=>{const e=this.helmEditor.webEditor.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.updateFilterPanel(e)}))}))}get filterPanel(){return this._filterPanel}get substructure(){return this.helmSubstructure}set substructure(t){this.helmEditor.editor.setHelm(t)}updateFilterPanel(t){const e=this._filterPanel.parentElement.clientWidth<100?100:this._filterPanel.parentElement.clientWidth,n=e/2;if(t)(0,c.Y)(this._filterPanel,this.helmEditor.host),this.helmEditor.editor.setHelm(t),this.helmEditor.resizeEditor(e,n);else{const t=i.divText("Click to edit","helm-substructure-filter");(0,c.Y)(this._filterPanel,t)}}substrucrureSearch(t){return f(this,void 0,void 0,(function*(){i.setUpdateIndicator(this._filterPanel,!0),yield(0,u.gw)(10);const e=yield(0,l.QF)(this.substructure,t);return i.setUpdateIndicator(this._filterPanel,!1),e}))}}},9378:function(t,e,n){"use strict";var i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var s=i(n(4517));function o(t,e){var n=function(n){return s.empty(t).map((function(){return s.filled(e,n)}))},i=[];return i.push(n(-1)),i.push(n(1/0)),i.push(n(0)),i}function r(t,e,n,i,s){e=Math.floor(e);var o=t[0][e],r=t[1][e];if(t[2][e],n>=r[0])return 0;for(var l=0;l<o.length;l++)if(i===o[l])return 0;return a(t,e,n,i,s)}function a(t,e,n,i,s){var o=t[0][e],r=t[1][e],a=t[2][e];if(n>=r[0])return 0;r[0]=n,o[0]=i,a[0]=s;for(var l=0,h=0;;){var c=2*l+1,u=c+1,d=t[0][0].length;if(c>=d)break;if(u>=d){if(!(r[c]>n))break;h=c}else if(r[c]>=r[u]){if(!(n<r[c]))break;h=c}else{if(!(n<r[u]))break;h=u}r[l]=r[h],o[l]=o[h],a[l]=a[h],l=h}return r[l]=n,o[l]=i,a[l]=s,1}function l(t,e,n,i){for(;2*i+1<n;){var s=2*i+1,o=s+1,r=i;if(t[r]<t[s]&&(r=s),o<n&&t[r]<t[o]&&(r=o),r===i)break;var a=t[i];t[i]=t[r],t[r]=a;var l=e[i];e[i]=e[r],e[r]=l,i=r}}e.makeHeap=o,e.rejectionSample=function(t,e,n){for(var i=s.zeros(t),o=0;o<t;o++){for(var r=!0,a=0;r;){a=s.tauRandInt(e,n);for(var l=!1,h=0;h<o;h++)if(a===i[h]){l=!0;break}l||(r=!1)}i[o]=a}return i},e.heapPush=r,e.uncheckedHeapPush=a,e.buildCandidates=function(t,e,n,i,a){for(var l=o(e,i),h=0;h<e;h++)for(var c=0;c<n;c++)if(!(t[0][h][c]<0)){var u=t[0][h][c],d=t[2][h][c],f=s.tauRand(a);r(l,h,f,u,d),r(l,u,f,h,d),t[2][h][c]=0}return l},e.deheapSort=function(t){for(var e=t[0],n=t[1],i=0;i<e.length;i++)for(var s=e[i],o=n[i],r=0;r<s.length-1;r++){var a=s.length-r-1,h=o.length-r-1,c=s[0];s[0]=s[a],s[a]=c;var u=o[0];o[0]=o[h],o[h]=u,l(o,s,h,0)}return{indices:e,weights:n}},e.smallestFlagged=function(t,e){for(var n=t[0][e],i=t[1][e],s=t[2][e],o=1/0,r=-1,a=0;a>n.length;a++)1===s[a]&&i[a]<o&&(o=i[a],r=a);return r>=0?(s[r]=0,Math.floor(n[r])):-1}},4221:(t,e,n)=>{"use strict";var i=n(4364);e.u=i.UMAP},5686:function(t,e,n){"use strict";var i,s=this&&this.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var i,s,o=n.call(t),r=[];try{for(;(void 0===e||e-- >0)&&!(i=o.next()).done;)r.push(i.value)}catch(t){s={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(s)throw s.error}}return r},o=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}},r=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var a=r(n(4517)),l=function(){function t(t,e,n,i){if(this.entries=new Map,this.nRows=0,this.nCols=0,t.length!==e.length||t.length!==n.length)throw new Error("rows, cols and values arrays must all have the same length");this.nRows=i[0],this.nCols=i[1];for(var s=0;s<n.length;s++){var o=t[s],r=e[s];this.checkDims(o,r);var a=this.makeKey(o,r);this.entries.set(a,{value:n[s],row:o,col:r})}}return t.prototype.makeKey=function(t,e){return t+":"+e},t.prototype.checkDims=function(t,e){if(!(t<this.nRows&&e<this.nCols))throw new Error("row and/or col specified outside of matrix dimensions")},t.prototype.set=function(t,e,n){this.checkDims(t,e);var i=this.makeKey(t,e);this.entries.has(i)?this.entries.get(i).value=n:this.entries.set(i,{value:n,row:t,col:e})},t.prototype.get=function(t,e,n){void 0===n&&(n=0),this.checkDims(t,e);var i=this.makeKey(t,e);return this.entries.has(i)?this.entries.get(i).value:n},t.prototype.getAll=function(t){void 0===t&&(t=!0);var e=[];return this.entries.forEach((function(t){e.push(t)})),t&&e.sort((function(t,e){return t.row===e.row?t.col-e.col:t.row-e.row})),e},t.prototype.getDims=function(){return[this.nRows,this.nCols]},t.prototype.getRows=function(){return Array.from(this.entries,(function(t){var e=s(t,2);return e[0],e[1].row}))},t.prototype.getCols=function(){return Array.from(this.entries,(function(t){var e=s(t,2);return e[0],e[1].col}))},t.prototype.getValues=function(){return Array.from(this.entries,(function(t){var e=s(t,2);return e[0],e[1].value}))},t.prototype.forEach=function(t){this.entries.forEach((function(e){return t(e.value,e.row,e.col)}))},t.prototype.map=function(e){var n=[];this.entries.forEach((function(t){n.push(e(t.value,t.row,t.col))}));var i=[this.nRows,this.nCols];return new t(this.getRows(),this.getCols(),n,i)},t.prototype.toArray=function(){var t=this,e=a.empty(this.nRows).map((function(){return a.zeros(t.nCols)}));return this.entries.forEach((function(t){e[t.row][t.col]=t.value})),e},t}();e.SparseMatrix=l,e.transpose=function(t){var e=[],n=[],i=[];t.forEach((function(t,s,o){e.push(s),n.push(o),i.push(t)}));var s=[t.nCols,t.nRows];return new l(n,e,i,s)},e.identity=function(t){for(var e=s(t,1)[0],n=new l([],[],[],t),i=0;i<e;i++)n.set(i,i,1);return n},e.pairwiseMultiply=function(t,e){return c(t,e,(function(t,e){return t*e}))},e.add=function(t,e){return c(t,e,(function(t,e){return t+e}))},e.subtract=function(t,e){return c(t,e,(function(t,e){return t-e}))},e.maximum=function(t,e){return c(t,e,(function(t,e){return t>e?t:e}))},e.multiplyScalar=function(t,e){return t.map((function(t){return t*e}))},e.eliminateZeros=function(t){for(var e=new Set,n=t.getValues(),i=t.getRows(),s=t.getCols(),o=0;o<n.length;o++)0===n[o]&&e.add(o);var r=function(t,n){return!e.has(n)},a=n.filter(r),h=i.filter(r),c=s.filter(r);return new l(h,c,a,t.getDims())},e.normalize=function(t,e){var n,i;void 0===e&&(e="l2");var s=h[e],r=new Map;t.forEach((function(t,e,n){var i=r.get(e)||[];i.push(n),r.set(e,i)}));var a=new l([],[],[],t.getDims()),c=function(e){for(var n=r.get(e).sort(),i=n.map((function(n){return t.get(e,n)})),o=s(i),l=0;l<o.length;l++)a.set(e,n[l],o[l])};try{for(var u=o(r.keys()),d=u.next();!d.done;d=u.next())c(d.value)}catch(t){n={error:t}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(n)throw n.error}}return a};var h=((i={}).max=function(t){for(var e=-1/0,n=0;n<t.length;n++)e=t[n]>e?t[n]:e;return t.map((function(t){return t/e}))},i.l1=function(t){for(var e=0,n=0;n<t.length;n++)e+=t[n];return t.map((function(t){return t/e}))},i.l2=function(t){for(var e=0,n=0;n<t.length;n++)e+=Math.pow(t[n],2);return t.map((function(t){return Math.sqrt(Math.pow(t,2)/e)}))},i);function c(t,e,n){for(var i=new Set,s=[],o=[],r=[],a=function(i,a){s.push(i),o.push(a);var l=n(t.get(i,a),e.get(i,a));r.push(l)},h=t.getValues(),c=t.getRows(),u=t.getCols(),d=0;d<h.length;d++){var f=(y=c[d])+":"+(v=u[d]);i.add(f),a(y,v)}var m=e.getValues(),p=e.getRows(),g=e.getCols();for(d=0;d<m.length;d++){var y,v;f=(y=p[d])+":"+(v=g[d]),i.has(f)||a(y,v)}var b=[t.nRows,t.nCols];return new l(s,o,r,b)}e.getCSR=function(t){var e=[];t.forEach((function(t,n,i){e.push({value:t,row:n,col:i})})),e.sort((function(t,e){return t.row===e.row?t.col-e.col:t.row-e.row}));for(var n=[],i=[],s=[],o=-1,r=0;r<e.length;r++){var a=e[r],l=a.row,h=a.col,c=a.value;l!==o&&(o=l,s.push(r)),n.push(h),i.push(c)}return{indices:n,values:i,indptr:s}}},760:function(t,e,n){"use strict";var i=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}},s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var o=s(n(9378)),r=s(n(5686)),a=s(n(2320)),l=s(n(4517));e.makeNNDescent=function(t,e){return function(n,i,s,r,a,h,c,u){void 0===r&&(r=10),void 0===a&&(a=50),void 0===h&&(h=.001),void 0===c&&(c=.5),void 0===u&&(u=!0);for(var d=n.length,f=o.makeHeap(n.length,s),m=0;m<n.length;m++)for(var p=o.rejectionSample(s,n.length,e),g=0;g<p.length;g++){var y=t(n[m],n[p[g]]);o.heapPush(f,m,y,p[g],1),o.heapPush(f,p[g],y,m,1)}if(u)for(var v=0;v<i.length;v++)for(m=0;m<i[v].length&&!(i[v][m]<0);m++)for(g=m+1;g<i[v].length&&!(i[v][g]<0);g++)y=t(n[i[v][m]],n[i[v][g]]),o.heapPush(f,i[v][m],y,i[v][g],1),o.heapPush(f,i[v][g],y,i[v][m],1);for(v=0;v<r;v++){var b=o.buildCandidates(f,d,s,a,e),w=0;for(m=0;m<d;m++)for(g=0;g<a;g++){var C=Math.floor(b[0][m][g]);if(!(C<0||l.tauRand(e)<c))for(var S=0;S<a;S++){var M=Math.floor(b[0][m][S]),x=b[2][m][g],T=b[2][m][S];M<0||!x&&!T||(y=t(n[C],n[M]),w+=o.heapPush(f,C,y,M,1),w+=o.heapPush(f,M,y,C,1))}}if(w<=h*s*n.length)break}return o.deheapSort(f)}},e.makeInitializations=function(t){return{initFromRandom:function(e,n,i,s,r){for(var a=0;a<i.length;a++)for(var h=l.rejectionSample(e,n.length,r),c=0;c<h.length;c++)if(!(h[c]<0)){var u=t(n[h[c]],i[a]);o.heapPush(s,a,u,h[c],1)}},initFromTree:function(e,n,i,s,r){for(var l=0;l<i.length;l++)for(var h=a.searchFlatTree(i[l],e,r),c=0;c<h.length;c++){if(h[c]<0)return;var u=t(n[h[c]],i[l]);o.heapPush(s,l,u,h[c],1)}}}},e.makeInitializedNNSearch=function(t){return function(e,n,s,a){for(var l,h,c=r.getCSR(n),u=c.indices,d=c.indptr,f=0;f<a.length;f++)for(var m=new Set(s[0][f]);;){var p=o.smallestFlagged(s,f);if(-1===p)break;var g=u.slice(d[p],d[p+1]);try{for(var y=i(g),v=y.next();!v.done;v=y.next()){var b=v.value;if(b!==p&&-1!==b&&!m.has(b)){var w=t(e[b],a[f]);o.uncheckedHeapPush(s,f,w,b,1),m.add(b)}}}catch(t){l={error:t}}finally{try{v&&!v.done&&(h=y.return)&&h.call(y)}finally{if(l)throw l.error}}}return s}},e.initializeSearch=function(t,e,n,s,r,a,l){var h,c,u=o.makeHeap(n.length,s);if(r(s,e,n,u,l),t)try{for(var d=i(t),f=d.next();!f.done;f=d.next())a(f.value,e,n,u,l)}catch(t){h={error:t}}finally{try{f&&!f.done&&(c=d.return)&&c.call(d)}finally{if(h)throw h.error}}return u}},2320:function(t,e,n){"use strict";var i=this&&this.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var i,s,o=n.call(t),r=[];try{for(;(void 0===e||e-- >0)&&!(i=o.next()).done;)r.push(i.value)}catch(t){s={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(s)throw s.error}}return r},s=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(i(arguments[e]));return t},o=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}},r=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var a=r(n(4517)),l=function(t,e,n,i){this.hyperplanes=t,this.offsets=e,this.children=n,this.indices=i};function h(t,e,n,i,s){if(void 0===n&&(n=30),e.length>n){var o=function(t,e,n){var i=t[0].length,s=a.tauRandInt(e.length,n),o=a.tauRandInt(e.length,n);o=(o+=s===o?1:0)%e.length;for(var r=e[s],l=e[o],h=0,c=a.zeros(i),u=0;u<c.length;u++)c[u]=t[r][u]-t[l][u],h-=c[u]*(t[r][u]+t[l][u])/2;var d=0,f=0,m=a.zeros(e.length);for(u=0;u<e.length;u++){for(var p=h,g=0;g<i;g++)p+=c[g]*t[e[u]][g];0===p?(m[u]=a.tauRandInt(2,n),0===m[u]?d+=1:f+=1):p>0?(m[u]=0,d+=1):(m[u]=1,f+=1)}var y=a.zeros(d),v=a.zeros(f);for(d=0,f=0,u=0;u<m.length;u++)0===m[u]?(y[d]=e[u],d+=1):(v[f]=e[u],f+=1);return{indicesLeft:y,indicesRight:v,hyperplane:c,offset:h}}(t,e,s),r=o.indicesLeft,l=o.indicesRight,c=o.hyperplane,u=o.offset;return{leftChild:h(t,r,n,i+1,s),rightChild:h(t,l,n,i+1,s),isLeaf:!1,hyperplane:c,offset:u}}return{indices:e,isLeaf:!0}}function c(t,e,n,i,o,r,a){var l;if(t.isLeaf)return i[r][0]=-a,(l=o[a]).splice.apply(l,s([0,t.indices.length],t.indices)),{nodeNum:r,leafNum:a+=1};e[r]=t.hyperplane,n[r]=t.offset,i[r][0]=r+1;var h=r,u=c(t.leftChild,e,n,i,o,r+1,a);return r=u.nodeNum,a=u.leafNum,i[h][1]=r+1,{nodeNum:(u=c(t.rightChild,e,n,i,o,r+1,a)).nodeNum,leafNum:u.leafNum}}function u(t){return t.isLeaf?1:1+u(t.leftChild)+u(t.rightChild)}function d(t){return t.isLeaf?1:d(t.leftChild)+d(t.rightChild)}function f(t,e,n,i){for(var s=e,o=0;o<n.length;o++)s+=t[o]*n[o];return 0===s?a.tauRandInt(2,i):s>0?0:1}e.FlatTree=l,e.makeForest=function(t,e,n,i){var s=Math.max(10,e);return a.range(n).map((function(e,n){return function(t,e,n,i){return void 0===e&&(e=30),h(t,a.range(t.length),e,n,i)}(t,s,n,i)})).map((function(t){return function(t,e){var n=u(t),i=d(t),s=a.range(n).map((function(){return a.zeros(t.hyperplane?t.hyperplane.length:0)})),o=a.zeros(n),r=a.range(n).map((function(){return[-1,-1]})),h=a.range(i).map((function(){return a.range(e).map((function(){return-1}))}));return c(t,s,o,r,h,0,0),new l(s,o,r,h)}(t,s)}))},e.makeLeafArray=function(t){var e,n;if(t.length>0){var i=[];try{for(var r=o(t),a=r.next();!a.done;a=r.next()){var l=a.value;i.push.apply(i,s(l.indices))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=r.return)&&n.call(r)}finally{if(e)throw e.error}}return i}return[[-1]]},e.searchFlatTree=function(t,e,n){for(var i=0;e.children[i][0]>0;)i=0===f(e.hyperplanes[i],e.offsets[i],t,n)?e.children[i][0]:e.children[i][1];var s=-1*e.children[i][0];return e.indices[s]}},4364:function(t,e,n){"use strict";var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(s,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function a(t){try{l(i.throw(t))}catch(t){o(t)}}function l(t){t.done?s(t.value):new n((function(e){e(t.value)})).then(r,a)}l((i=i.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var n,i,s,o,r={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;r;)try{if(n=1,i&&(s=2&o[0]?i.return:o[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,o[1])).done)return s;switch(i=0,s&&(o=[2&o[0],s.value]),o[0]){case 0:case 1:s=o;break;case 4:return r.label++,{value:o[1],done:!1};case 5:r.label++,i=o[1],o=[0];continue;case 7:o=r.ops.pop(),r.trys.pop();continue;default:if(!((s=(s=r.trys).length>0&&s[s.length-1])||6!==o[0]&&2!==o[0])){r=0;continue}if(3===o[0]&&(!s||o[1]>s[0]&&o[1]<s[3])){r.label=o[1];break}if(6===o[0]&&r.label<s[1]){r.label=s[1],s=o;break}if(s&&r.label<s[2]){r.label=s[2],r.ops.push(o);break}s[2]&&r.ops.pop(),r.trys.pop();continue}o=e.call(t,r)}catch(t){o=[6,t],i=0}finally{n=s=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,a])}}},o=this&&this.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var i,s,o=n.call(t),r=[];try{for(;(void 0===e||e-- >0)&&!(i=o.next()).done;)r.push(i.value)}catch(t){s={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(s)throw s.error}}return r},r=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t},a=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var h=a(n(9378)),c=a(n(5686)),u=a(n(760)),d=a(n(2320)),f=a(n(4517)),m=l(n(9251)),p=1e-5,g=.001,y=function(){function t(t){void 0===t&&(t={});var e=this;this.learningRate=1,this.localConnectivity=1,this.minDist=.1,this.nComponents=2,this.nEpochs=0,this.nNeighbors=15,this.negativeSampleRate=5,this.random=Math.random,this.repulsionStrength=1,this.setOpMixRatio=1,this.spread=1,this.transformQueueSize=4,this.targetMetric="categorical",this.targetWeight=.5,this.targetNNeighbors=this.nNeighbors,this.distanceFn=v,this.isInitialized=!1,this.rpForest=[],this.embedding=[],this.optimizationState=new b;var n=function(n){void 0!==t[n]&&(e[n]=t[n])};n("distanceFn"),n("learningRate"),n("localConnectivity"),n("minDist"),n("nComponents"),n("nEpochs"),n("nNeighbors"),n("negativeSampleRate"),n("random"),n("repulsionStrength"),n("setOpMixRatio"),n("spread"),n("transformQueueSize")}return t.prototype.fit=function(t){return this.initializeFit(t),this.optimizeLayout(),this.embedding},t.prototype.fitAsync=function(t,e){return void 0===e&&(e=function(){return!0}),i(this,void 0,void 0,(function(){return s(this,(function(n){switch(n.label){case 0:return this.initializeFit(t),[4,this.optimizeLayoutAsync(e)];case 1:return n.sent(),[2,this.embedding]}}))}))},t.prototype.setSupervisedProjection=function(t,e){void 0===e&&(e={}),this.Y=t,this.targetMetric=e.targetMetric||this.targetMetric,this.targetWeight=e.targetWeight||this.targetWeight,this.targetNNeighbors=e.targetNNeighbors||this.targetNNeighbors},t.prototype.setPrecomputedKNN=function(t,e){this.knnIndices=t,this.knnDistances=e},t.prototype.initializeFit=function(t){if(t.length<=this.nNeighbors)throw new Error("Not enough data points ("+t.length+") to create nNeighbors: "+this.nNeighbors+". Add more data points or adjust the configuration.");if(this.X===t&&this.isInitialized)return this.getNEpochs();if(this.X=t,!this.knnIndices&&!this.knnDistances){var e=this.nearestNeighbors(t);this.knnIndices=e.knnIndices,this.knnDistances=e.knnDistances}this.graph=this.fuzzySimplicialSet(t,this.nNeighbors,this.setOpMixRatio),this.makeSearchFns(),this.searchGraph=this.makeSearchGraph(t),this.processGraphForSupervisedProjection();var n=this.initializeSimplicialSetEmbedding(),i=n.head,s=n.tail,o=n.epochsPerSample;return this.optimizationState.head=i,this.optimizationState.tail=s,this.optimizationState.epochsPerSample=o,this.initializeOptimization(),this.prepareForOptimizationLoop(),this.isInitialized=!0,this.getNEpochs()},t.prototype.makeSearchFns=function(){var t=u.makeInitializations(this.distanceFn),e=t.initFromTree,n=t.initFromRandom;this.initFromTree=e,this.initFromRandom=n,this.search=u.makeInitializedNNSearch(this.distanceFn)},t.prototype.makeSearchGraph=function(t){for(var e=this.knnIndices,n=this.knnDistances,i=[t.length,t.length],s=new c.SparseMatrix([],[],[],i),o=0;o<e.length;o++)for(var r=e[o],a=n[o],l=0;l<r.length;l++){var h=r[l],u=a[l];u>0&&s.set(o,h,u)}var d=c.transpose(s);return c.maximum(s,d)},t.prototype.transform=function(t){var e=this,n=this.X;if(void 0===n||0===n.length)throw new Error("No data has been fit.");var i=Math.floor(this.nNeighbors*this.transformQueueSize);i=Math.min(n.length,i);var s=u.initializeSearch(this.rpForest,n,t,i,this.initFromRandom,this.initFromTree,this.random),o=this.search(n,this.searchGraph,s,t),r=h.deheapSort(o),a=r.indices,l=r.weights;a=a.map((function(t){return t.slice(0,e.nNeighbors)})),l=l.map((function(t){return t.slice(0,e.nNeighbors)}));var d=Math.max(0,this.localConnectivity-1),m=this.smoothKNNDistance(l,this.nNeighbors,d),p=m.sigmas,g=m.rhos,y=this.computeMembershipStrengths(a,l,p,g),v=y.rows,b=y.cols,w=y.vals,C=[t.length,n.length],S=new c.SparseMatrix(v,b,w,C),M=c.normalize(S,"l1"),x=c.getCSR(M),N=t.length,E=T(f.reshape2d(x.indices,N,this.nNeighbors),f.reshape2d(x.values,N,this.nNeighbors),this.embedding),A=this.nEpochs?this.nEpochs/3:S.nRows<=1e4?100:30,I=S.getValues().reduce((function(t,e){return e>t?e:t}),0);S=S.map((function(t){return t<I/A?0:t})),S=c.eliminateZeros(S);var L=this.makeEpochsPerSample(S.getValues(),A),_=S.getRows(),R=S.getCols();return this.assignOptimizationStateParameters({headEmbedding:E,tailEmbedding:this.embedding,head:_,tail:R,currentEpoch:0,nEpochs:A,nVertices:S.getDims()[1],epochsPerSample:L}),this.prepareForOptimizationLoop(),this.optimizeLayout()},t.prototype.processGraphForSupervisedProjection=function(){var t=this.Y,e=this.X;if(t){if(t.length!==e.length)throw new Error("Length of X and y must be equal");if("categorical"===this.targetMetric){var n=this.targetWeight<1?1/(1-this.targetWeight)*2.5:1e12;this.graph=this.categoricalSimplicialSetIntersection(this.graph,t,n)}}},t.prototype.step=function(){var t=this.optimizationState.currentEpoch;return t<this.getNEpochs()&&this.optimizeLayoutStep(t),this.optimizationState.currentEpoch},t.prototype.getEmbedding=function(){return this.embedding},t.prototype.nearestNeighbors=function(t){var e,n=this.distanceFn,i=this.nNeighbors,s=u.makeNNDescent(n,this.random),o=5+Math.floor(.5==(e=Math.pow(t.length,.5)/20)?0:Math.round(e)),r=Math.max(5,Math.floor(Math.round(function(t){return Math.log(t)/Math.log(2)}(t.length))));this.rpForest=d.makeForest(t,i,o,this.random);var a=s(t,d.makeLeafArray(this.rpForest),i,r);return{knnIndices:a.indices,knnDistances:a.weights}},t.prototype.fuzzySimplicialSet=function(t,e,n){void 0===n&&(n=1);var i=this,s=i.knnIndices,o=void 0===s?[]:s,r=i.knnDistances,a=void 0===r?[]:r,l=i.localConnectivity,h=this.smoothKNNDistance(a,e,l),u=h.sigmas,d=h.rhos,f=this.computeMembershipStrengths(o,a,u,d),m=f.rows,p=f.cols,g=f.vals,y=[t.length,t.length],v=new c.SparseMatrix(m,p,g,y),b=c.transpose(v),w=c.pairwiseMultiply(v,b),C=c.subtract(c.add(v,b),w),S=c.multiplyScalar(C,n),M=c.multiplyScalar(w,1-n);return c.add(S,M)},t.prototype.categoricalSimplicialSetIntersection=function(t,e,n,i){void 0===i&&(i=1);var s=M(t,e,i,n);return x(s=c.eliminateZeros(s))},t.prototype.smoothKNNDistance=function(t,e,n,i,s){void 0===n&&(n=1),void 0===i&&(i=64),void 0===s&&(s=1);for(var o=Math.log(e)/Math.log(2)*s,r=f.zeros(t.length),a=f.zeros(t.length),l=0;l<t.length;l++){var h=0,c=1/0,u=1,d=t[l],m=d.filter((function(t){return t>0}));if(m.length>=n){var y=Math.floor(n),v=n-y;y>0?(r[l]=m[y-1],v>p&&(r[l]+=v*(m[y]-m[y-1]))):r[l]=v*m[0]}else m.length>0&&(r[l]=f.max(m));for(var b=0;b<i;b++){for(var w=0,C=1;C<t[l].length;C++){var S=t[l][C]-r[l];w+=S>0?Math.exp(-S/u):1}if(Math.abs(w-o)<p)break;w>o?u=(h+(c=u))/2:(h=u,c===1/0?u*=2:u=(h+c)/2)}if(a[l]=u,r[l]>0){var M=f.mean(d);a[l]<g*M&&(a[l]=g*M)}else{var x=f.mean(t.map(f.mean));a[l]<g*x&&(a[l]=g*x)}}return{sigmas:a,rhos:r}},t.prototype.computeMembershipStrengths=function(t,e,n,i){for(var s=t.length,o=t[0].length,r=f.zeros(s*o),a=f.zeros(s*o),l=f.zeros(s*o),h=0;h<s;h++)for(var c=0;c<o;c++){var u=0;-1!==t[h][c]&&(u=t[h][c]===h?0:e[h][c]-i[h]<=0?1:Math.exp(-(e[h][c]-i[h])/n[h]),r[h*o+c]=h,a[h*o+c]=t[h][c],l[h*o+c]=u)}return{rows:r,cols:a,vals:l}},t.prototype.initializeSimplicialSetEmbedding=function(){for(var t=this,e=this.getNEpochs(),n=this.nComponents,i=this.graph.getValues(),s=0,o=0;o<i.length;o++){var r=i[o];s<i[o]&&(s=r)}var a=this.graph.map((function(t){return t<s/e?0:t}));this.embedding=f.zeros(a.nRows).map((function(){return f.zeros(n).map((function(){return 20*f.tauRand(t.random)-10}))}));var l=[],h=[],c=[],u=a.getAll();for(o=0;o<u.length;o++){var d=u[o];d.value&&(l.push(d.value),c.push(d.row),h.push(d.col))}return{head:h,tail:c,epochsPerSample:this.makeEpochsPerSample(l,e)}},t.prototype.makeEpochsPerSample=function(t,e){var n=f.filled(t.length,-1),i=f.max(t),s=t.map((function(t){return t/i*e}));return s.forEach((function(t,i){t>0&&(n[i]=e/s[i])})),n},t.prototype.assignOptimizationStateParameters=function(t){Object.assign(this.optimizationState,t)},t.prototype.prepareForOptimizationLoop=function(){var t=this,e=t.repulsionStrength,n=t.learningRate,i=t.negativeSampleRate,s=this.optimizationState,o=s.epochsPerSample,a=s.headEmbedding,l=s.tailEmbedding,h=a[0].length,c=a.length===l.length,u=o.map((function(t){return t/i})),d=r(u),f=r(o);this.assignOptimizationStateParameters({epochOfNextSample:f,epochOfNextNegativeSample:d,epochsPerNegativeSample:u,moveOther:c,initialAlpha:n,alpha:n,gamma:e,dim:h})},t.prototype.initializeOptimization=function(){var t=this.embedding,e=this.embedding,n=this.optimizationState,i=n.head,s=n.tail,o=n.epochsPerSample,r=this.getNEpochs(),a=this.graph.nCols,l=S(this.spread,this.minDist),h=l.a,c=l.b;this.assignOptimizationStateParameters({headEmbedding:t,tailEmbedding:e,head:i,tail:s,epochsPerSample:o,a:h,b:c,nEpochs:r,nVertices:a})},t.prototype.optimizeLayoutStep=function(t){for(var e=this.optimizationState,n=e.head,i=e.tail,s=e.headEmbedding,o=e.tailEmbedding,r=e.epochsPerSample,a=e.epochOfNextSample,l=e.epochOfNextNegativeSample,h=e.epochsPerNegativeSample,c=e.moveOther,u=e.initialAlpha,d=e.alpha,m=e.gamma,p=e.a,g=e.b,y=e.dim,v=e.nEpochs,b=e.nVertices,S=0;S<r.length;S++)if(!(a[S]>t)){var M=n[S],x=i[S],T=s[M],N=o[x],E=C(T,N),A=0;E>0&&(A=-2*p*g*Math.pow(E,g-1),A/=p*Math.pow(E,g)+1);for(var I=0;I<y;I++){var L=w(A*(T[I]-N[I]),4);T[I]+=L*d,c&&(N[I]+=-L*d)}a[S]+=r[S];for(var _=Math.floor((t-l[S])/h[S]),R=0;R<_;R++){var k=f.tauRandInt(b,this.random),G=o[k],P=C(T,G),O=0;if(P>0)O=2*m*g,O/=(.001+P)*(p*Math.pow(P,g)+1);else if(M===k)continue;for(I=0;I<y;I++)L=4,O>0&&(L=w(O*(T[I]-G[I]),4)),T[I]+=L*d}l[S]+=_*h[S]}return e.alpha=u*(1-t/v),e.currentEpoch+=1,s},t.prototype.optimizeLayoutAsync=function(t){var e=this;return void 0===t&&(t=function(){return!0}),new Promise((function(n,o){var r=function(){return i(e,void 0,void 0,(function(){var e,i,a,l,h,c;return s(this,(function(s){try{if(e=this.optimizationState,i=e.nEpochs,a=e.currentEpoch,this.embedding=this.optimizeLayoutStep(a),l=this.optimizationState.currentEpoch,h=!1===t(l),c=l===i,h||c)return[2,n(c)];setTimeout((function(){return r()}),0)}catch(t){o(t)}return[2]}))}))};setTimeout((function(){return r()}),0)}))},t.prototype.optimizeLayout=function(t){void 0===t&&(t=function(){return!0});for(var e=!1,n=[];!e;){var i=this.optimizationState,s=i.nEpochs,o=i.currentEpoch;n=this.optimizeLayoutStep(o);var r=this.optimizationState.currentEpoch,a=!1===t(r);e=r===s||a}return n},t.prototype.getNEpochs=function(){var t=this.graph;if(this.nEpochs>0)return this.nEpochs;var e=t.nRows;return e<=2500?500:e<=5e3?400:e<=7500?300:200},t}();function v(t,e){for(var n=0,i=0;i<t.length;i++)n+=Math.pow(t[i]-e[i],2);return Math.sqrt(n)}e.UMAP=y,e.euclidean=v,e.cosine=function(t,e){for(var n=0,i=0,s=0,o=0;o<t.length;o++)n+=t[o]*e[o],i+=Math.pow(t[o],2),s+=Math.pow(e[o],2);return 0===i&&0===s?0:0===i||0===s?1:1-n/Math.sqrt(i*s)};var b=function(){this.currentEpoch=0,this.headEmbedding=[],this.tailEmbedding=[],this.head=[],this.tail=[],this.epochsPerSample=[],this.epochOfNextSample=[],this.epochOfNextNegativeSample=[],this.epochsPerNegativeSample=[],this.moveOther=!0,this.initialAlpha=1,this.alpha=1,this.gamma=1,this.a=1.5769434603113077,this.b=.8950608779109733,this.dim=2,this.nEpochs=500,this.nVertices=0};function w(t,e){return t>e?e:t<-e?-e:t}function C(t,e){for(var n=0,i=0;i<t.length;i++)n+=Math.pow(t[i]-e[i],2);return n}function S(t,e){var n=f.linear(0,3*t,300).map((function(t){return t<e?1:t})),i=f.zeros(n.length).map((function(i,s){return n[s]>=e?Math.exp(-(n[s]-e)/t):i})),s={x:n,y:i},r=m.default(s,(function(t){var e=o(t,2),n=e[0],i=e[1];return function(t){return 1/(1+n*Math.pow(t,2*i))}}),{damping:1.5,initialValues:[.5,.5],gradientDifference:.1,maxIterations:100,errorTolerance:.01}).parameterValues,a=o(r,2);return{a:a[0],b:a[1]}}function M(t,e,n,i){return void 0===n&&(n=1),void 0===i&&(i=5),t.map((function(t,s,o){return-1===e[s]||-1===e[o]?t*Math.exp(-n):e[s]!==e[o]?t*Math.exp(-i):t}))}function x(t){t=c.normalize(t,"max");var e=c.transpose(t),n=c.pairwiseMultiply(e,t);return t=c.add(t,c.subtract(e,n)),c.eliminateZeros(t)}function T(t,e,n){for(var i=f.zeros(t.length).map((function(t){return f.zeros(n[0].length)})),s=0;s<t.length;s++)for(var o=0;o<t[0].length;o++)for(var r=0;r<n[0].length;r++){var a=t[s][o];i[s][r]+=e[s][o]*n[a][r]}return i}e.findABParams=S,e.fastIntersection=M,e.resetLocalConnectivity=x,e.initTransform=T},4517:function(t,e){"use strict";var n=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}};function i(t,e){return Math.floor(e()*t)}function s(t){for(var e=[],n=0;n<t;n++)e.push(void 0);return e}function o(t,e){return s(t).map((function(){return e}))}function r(t){return o(t,0)}function a(t){return t.reduce((function(t,e){return t+e}))}Object.defineProperty(e,"__esModule",{value:!0}),e.tauRandInt=i,e.tauRand=function(t){return t()},e.norm=function(t){var e,i,s=0;try{for(var o=n(t),r=o.next();!r.done;r=o.next()){var a=r.value;s+=Math.pow(a,2)}}catch(t){e={error:t}}finally{try{r&&!r.done&&(i=o.return)&&i.call(o)}finally{if(e)throw e.error}}return Math.sqrt(s)},e.empty=s,e.range=function(t){return s(t).map((function(t,e){return e}))},e.filled=o,e.zeros=r,e.ones=function(t){return o(t,1)},e.linear=function(t,e,n){return s(n).map((function(i,s){return t+s*((e-t)/(n-1))}))},e.sum=a,e.mean=function(t){return a(t)/t.length},e.max=function(t){for(var e=0,n=0;n<t.length;n++)e=t[n]>e?t[n]:e;return e},e.max2d=function(t){for(var e=0,n=0;n<t.length;n++)for(var i=0;i<t[n].length;i++)e=t[n][i]>e?t[n][i]:e;return e},e.rejectionSample=function(t,e,n){for(var s=r(t),o=0;o<t;o++)for(var a=!0;a;){for(var l=i(e,n),h=!1,c=0;c<o;c++)if(l===s[c]){h=!0;break}h||(a=!1),s[o]=l}return s},e.reshape2d=function(t,e,n){var i=[],s=0;if(t.length!==e*n)throw new Error("Array dimensions must match input length.");for(var o=0;o<e;o++){for(var r=[],a=0;a<n;a++)r.push(t[s]),s+=1;i.push(r)}return i}},3336:t=>{"use strict";t.exports=$},976:t=>{"use strict";t.exports=DG},4469:t=>{"use strict";t.exports=grok},701:t=>{"use strict";t.exports=rxjs},3870:t=>{"use strict";t.exports=ui},6414:t=>{"use strict";t.exports=wu}},e={};function n(i){var s=e[i];if(void 0!==s)return s.exports;var o=e[i]={id:i,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.exports}n.m=t,n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},n.u=t=>t+".js",n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;n.g.importScripts&&(t=n.g.location+"");var e=n.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var i=e.getElementsByTagName("script");i.length&&(t=i[i.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=t})(),n.b=document.baseURI||self.location.href,n.nc=void 0;var i=n(473);bio=i})();
|
|
2
2
|
//# sourceMappingURL=package.js.map
|