spessasynth_lib 4.0.2 → 4.0.3

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.
@@ -1,21 +1,21 @@
1
- var Fe=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof require<"u"?require:A)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Ja=(e=>typeof Fe<"u"?Fe:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof Fe<"u"?Fe:A)[t]}):e)(function(e){if(typeof Fe<"u")return Fe.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')}),P=class extends Uint8Array{currentIndex=0;slice(e,A){let t=super.slice(e,A);return t.currentIndex=0,t}};function ee(e,A=e.length,t=0){let n="";for(let s=0;s<A;s++){let a=e[t+s];if(a===0)return n;n+=String.fromCharCode(a)}return n}function CA(e,A){let t=e.currentIndex;return e.currentIndex+=A,ee(e,A,t)}function ne(e,A=!1,t=!1){let n=e.length;A&&n++,t&&n%2!==0&&n++;let s=new P(n);return yA(s,e),s}function yA(e,A,t=0){t>0&&A.length>t&&(A=A.slice(0,t));for(let n=0;n<A.length;n++)e[e.currentIndex++]=A.charCodeAt(n);if(t>A.length)for(let n=0;n<t-A.length;n++)e[e.currentIndex++]=0;return e}function N(e,A){let t=xs(e,A,e.currentIndex);return e.currentIndex+=A,t}function xs(e,A,t=0){let n=0;for(let s=0;s<A;s++)n|=e[t+s]<<s*8;return n>>>0}function ht(e,A,t){for(let n=0;n<t;n++)e[e.currentIndex++]=A>>n*8&255}function J(e,A){e[e.currentIndex++]=A&255,e[e.currentIndex++]=A>>8}function IA(e,A){ht(e,A,4)}function jn(e,A){let t=A<<8|e;return t>32767?t-65536:t}function qa(e){return e>127?e-256:e}var Hs=class{header;size;data;constructor(e,A,t){this.header=e,this.size=A,this.data=t}};function oA(e,A=!0,t=!1){let n=CA(e,4),s=N(e,4);n===""&&(s=0);let a;return A?a=e.slice(e.currentIndex,e.currentIndex+s):a=new P(0),(A||t)&&(e.currentIndex+=s,s%2!==0&&e.currentIndex++),new Hs(n,s,a)}function gA(e,A,t=!1,n=!1){if(e.length!==4)throw new Error(`Invalid header length: ${e}`);let s=8,a=e,i=A.length;t&&i++;let I=i;n&&(s+=4,I+=4,a="LIST");let o=s+i;o%2!==0&&o++;let g=new P(o);return yA(g,a),IA(g,I),n&&yA(g,e),g.set(A,s),g}function bA(e,A,t=!1){let n=8,s=e,a=A.reduce((g,B)=>B.length+g,0),i=a;t&&(n+=4,i+=4,s="LIST");let I=n+a;I%2!==0&&I++;let o=new P(I);return yA(o,s),IA(o,i),t&&yA(o,e),A.forEach(g=>{o.set(g,n),n+=g.length}),o}function fe(e,A){return e.find(t=>t.header!=="LIST"?!1:(t.data.currentIndex=4,ee(t.data,4)===A))}function $n(e,A){return{...A,...e??{}}}function Qt(e,A,t=0){let n=0;for(let s=0;s<A;s++)n=n<<8|e[t+s];return n>>>0}function Xe(e,A){let t=Qt(e,A,e.currentIndex);return e.currentIndex+=A,t}function Gt(e,A){let t=new Array(A).fill(0);for(let n=A-1;n>=0;n--)t[n]=e&255,e>>=8;return t}function uA(e){let A=0;for(;e;){let t=e[e.currentIndex++];if(A=A<<7|t&127,t>>7!==1)break}return A}function Cn(e){let A=[e&127];for(e>>=7;e>0;)A.unshift(e&127|128),e>>=7;return A}function fs(e){e=Math.floor(e);let A=Math.floor(e/60),t=Math.round(e-A*60);return{minutes:A,seconds:t,time:`${A.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}}function RA(e){let A="";for(let t of e){let n=t.toString(16).padStart(2,"0").toUpperCase();A+=n,A+=" "}return A}var c={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},Ys;(()=>{var e=Uint8Array,A=Uint16Array,t=Int32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),i=function(G,M){for(var x=new A(31),AA=0;AA<31;++AA)x[AA]=M+=1<<G[AA-1];for(var tA=new t(x[30]),AA=1;AA<30;++AA)for(var FA=x[AA];FA<x[AA+1];++FA)tA[FA]=FA-x[AA]<<5|AA;return{b:x,r:tA}},I=i(n,2),o=I.b,g=I.r;o[28]=258,g[258]=28;var B=i(s,0),d=B.b,C=B.r,h=new A(32768);for(k=0;k<32768;++k)u=(k&43690)>>1|(k&21845)<<1,u=(u&52428)>>2|(u&13107)<<2,u=(u&61680)>>4|(u&3855)<<4,h[k]=((u&65280)>>8|(u&255)<<8)>>1;var u,k,m=function(G,M,x){for(var AA=G.length,tA=0,FA=new A(M);tA<AA;++tA)G[tA]&&++FA[G[tA]-1];var se=new A(M);for(tA=1;tA<M;++tA)se[tA]=se[tA-1]+FA[tA-1]<<1;var zA;if(x){zA=new A(1<<M);var WA=15-M;for(tA=0;tA<AA;++tA)if(G[tA])for(var Ne=tA<<4|G[tA],ae=M-G[tA],$=se[G[tA]-1]++<<ae,EA=$|(1<<ae)-1;$<=EA;++$)zA[h[$]>>WA]=Ne}else for(zA=new A(AA),tA=0;tA<AA;++tA)G[tA]&&(zA[tA]=h[se[G[tA]-1]++]>>15-G[tA]);return zA},y=new e(288);for(k=0;k<144;++k)y[k]=8;var k;for(k=144;k<256;++k)y[k]=9;var k;for(k=256;k<280;++k)y[k]=7;var k;for(k=280;k<288;++k)y[k]=8;var k,F=new e(32);for(k=0;k<32;++k)F[k]=5;var k,D=m(y,9,1),v=m(F,5,1),L=function(G){for(var M=G[0],x=1;x<G.length;++x)G[x]>M&&(M=G[x]);return M},E=function(G,M,x){var AA=M/8|0;return(G[AA]|G[AA+1]<<8)>>(M&7)&x},V=function(G,M){var x=M/8|0;return(G[x]|G[x+1]<<8|G[x+2]<<16)>>(M&7)},K=function(G){return(G+7)/8|0},nA=function(G,M,x){return(M==null||M<0)&&(M=0),(x==null||x>G.length)&&(x=G.length),new e(G.subarray(M,x))},j=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],O=function(G,M,x){var AA=new Error(M||j[G]);if(AA.code=G,Error.captureStackTrace&&Error.captureStackTrace(AA,O),!x)throw AA;return AA},q=function(G,M,x,AA){var tA=G.length,FA=AA?AA.length:0;if(!tA||M.f&&!M.l)return x||new e(0);var se=!x,zA=se||M.i!=2,WA=M.i;se&&(x=new e(tA*3));var Ne=function(yt){var de=x.length;if(yt>de){var st=new e(Math.max(de*2,yt));st.set(x),x=st}},ae=M.f||0,$=M.p||0,EA=M.b||0,_A=M.l,NA=M.d,Ce=M.m,he=M.n,$e=tA*8;do{if(!_A){ae=E(G,$,1);var Ue=E(G,$+1,3);if($+=3,Ue)if(Ue==1)_A=D,NA=v,Ce=9,he=5;else if(Ue==2){var At=E(G,$,31)+257,An=E(G,$+10,15)+4,en=At+E(G,$+5,31)+1;$+=14;for(var Te=new e(en),le=new e(19),UA=0;UA<An;++UA)le[a[UA]]=E(G,$+UA*3,7);$+=An*3;for(var tn=L(le),ft=(1<<tn)-1,xe=m(le,tn,1),UA=0;UA<en;){var et=xe[E(G,$,ft)];$+=et&15;var GA=et>>4;if(GA<16)Te[UA++]=GA;else{var oe=0,tt=0;for(GA==16?(tt=3+E(G,$,3),$+=2,oe=Te[UA-1]):GA==17?(tt=3+E(G,$,7),$+=3):GA==18&&(tt=11+E(G,$,127),$+=7);tt--;)Te[UA++]=oe}}var nn=Te.subarray(0,At),ie=Te.subarray(At);Ce=L(nn),he=L(ie),_A=m(nn,Ce,1),NA=m(ie,he,1)}else O(1);else{var GA=K($)+4,mt=G[GA-4]|G[GA-3]<<8,St=GA+mt;if(St>tA){WA&&O(0);break}zA&&Ne(EA+mt),x.set(G.subarray(GA,St),EA),M.b=EA+=mt,M.p=$=St*8,M.f=ae;continue}if($>$e){WA&&O(0);break}}zA&&Ne(EA+131072);for(var gs=(1<<Ce)-1,cs=(1<<he)-1,pt=$;;pt=$){var oe=_A[V(G,$)&gs],ye=oe>>4;if($+=oe&15,$>$e){WA&&O(0);break}if(oe||O(2),ye<256)x[EA++]=ye;else if(ye==256){pt=$,_A=null;break}else{var sn=ye-254;if(ye>264){var UA=ye-257,re=n[UA];sn=E(G,$,(1<<re)-1)+o[UA],$+=re}var He=NA[V(G,$)&cs],ke=He>>4;He||O(3),$+=He&15;var ie=d[ke];if(ke>3){var re=s[ke];ie+=V(G,$)&(1<<re)-1,$+=re}if($>$e){WA&&O(0);break}zA&&Ne(EA+131072);var nt=EA+sn;if(EA<ie){var Ye=FA-ie,SA=Math.min(ie,nt);for(Ye+EA<0&&O(3);EA<SA;++EA)x[EA]=AA[Ye+EA]}for(;EA<nt;++EA)x[EA]=x[EA-ie]}}M.l=_A,M.p=pt,M.b=EA,M.f=ae,_A&&(ae=1,M.m=Ce,M.d=NA,M.n=he)}while(!ae);return EA!=x.length&&se?nA(x,0,EA):x.subarray(0,EA)},Z=new e(0);function eA(G,M){return q(G,{i:2},M&&M.out,M&&M.dictionary)}var iA=typeof TextDecoder<"u"&&new TextDecoder,YA=0;try{iA.decode(Z,{stream:!0}),YA=1}catch{}Ys=eA})();var Ps=Ys,Js=!1,qs=!0,qt=!1;function Ks(e,A,t){Js=e,qs=A,qt=t}function p(...e){Js&&console.info(...e)}function sA(...e){qs&&console.warn(...e)}function OA(...e){qt&&console.group(...e)}function MA(...e){qt&&console.groupCollapsed(...e)}function X(){qt&&console.groupEnd()}var Ee={consoleColors:c,SpessaSynthInfo:p,SpessaSynthWarn:sA,SpessaSynthGroupCollapsed:MA,SpessaSynthGroup:OA,SpessaSynthGroupEnd:X,readBytesAsUintBigEndian:Qt,readLittleEndian:N,readBytesAsString:CA,readVariableLengthQuantity:uA,inflateSync:Ps};var ZA=class{ticks;statusByte;data;constructor(e,A,t){this.ticks=e,this.statusByte=A,this.data=t}};function Ka(e){let A=e&240,t=e&15,n=t;switch(A){case 128:case 144:case 160:case 176:case 192:case 208:case 224:break;case 240:switch(t){case 0:n=-3;break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:n=-1;break;case 15:n=-2;break}break;default:n=-1}return n}function As(e){let A=e&240,t=e&15,n=-1,s=e;return A>=128&&A<=224&&(n=t,s=A),{status:s,channel:n}}var Oa={8:2,9:2,10:2,11:2,12:1,13:1,14:2},b={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchWheel:224,systemExclusive:240,timecode:241,songPosition:242,songSelect:243,tuneRequest:246,clock:248,start:250,continue:251,stop:252,activeSensing:254,reset:255,sequenceNumber:0,text:1,copyright:2,trackName:3,instrumentName:4,lyric:5,marker:6,cuePoint:7,programName:8,midiChannelPrefix:32,midiPort:33,endOfTrack:47,setTempo:81,smpteOffset:84,timeSignature:88,keySignature:89,sequenceSpecific:127},S={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expressionController:11,effectControl1:12,effectControl2:13,undefinedCC14:14,undefinedCC15:15,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,undefinedCC20:20,undefinedCC21:21,undefinedCC22:22,undefinedCC23:23,undefinedCC24:24,undefinedCC25:25,undefinedCC26:26,undefinedCC27:27,undefinedCC28:28,undefinedCC29:29,undefinedCC30:30,undefinedCC31:31,bankSelectLSB:32,modulationWheelLSB:33,breathControllerLSB:34,undefinedCC3LSB:35,footControllerLSB:36,portamentoTimeLSB:37,dataEntryLSB:38,mainVolumeLSB:39,balanceLSB:40,undefinedCC9LSB:41,panLSB:42,expressionControllerLSB:43,effectControl1LSB:44,effectControl2LSB:45,undefinedCC14LSB:46,undefinedCC15LSB:47,undefinedCC16LSB:48,undefinedCC17LSB:49,undefinedCC18LSB:50,undefinedCC19LSB:51,undefinedCC20LSB:52,undefinedCC21LSB:53,undefinedCC22LSB:54,undefinedCC23LSB:55,undefinedCC24LSB:56,undefinedCC25LSB:57,undefinedCC26LSB:58,undefinedCC27LSB:59,undefinedCC28LSB:60,undefinedCC29LSB:61,undefinedCC30LSB:62,undefinedCC31LSB:63,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,undefinedCC85:85,undefinedCC86:86,undefinedCC87:87,undefinedCC88:88,undefinedCC89:89,undefinedCC90:90,reverbDepth:91,tremoloDepth:92,chorusDepth:93,detuneDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,nonRegisteredParameterLSB:98,nonRegisteredParameterMSB:99,registeredParameterLSB:100,registeredParameterMSB:101,undefinedCC102LSB:102,undefinedCC103LSB:103,undefinedCC104LSB:104,undefinedCC105LSB:105,undefinedCC106LSB:106,undefinedCC107LSB:107,undefinedCC108LSB:108,undefinedCC109LSB:109,undefinedCC110LSB:110,undefinedCC111LSB:111,undefinedCC112LSB:112,undefinedCC113LSB:113,undefinedCC114LSB:114,undefinedCC115LSB:115,undefinedCC116LSB:116,undefinedCC117LSB:117,undefinedCC118LSB:118,undefinedCC119LSB:119,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127};function Va(e){if(!e.tracks)throw new Error("MIDI has no tracks!");let A=[];for(let s of e.tracks){let a=[],i=0,I;for(let o of s.events){let g=Math.max(0,o.ticks-i);if(o.statusByte===b.endOfTrack){i+=g;continue}let B;o.statusByte<=b.sequenceSpecific?(B=[255,o.statusByte,...Cn(o.data.length),...o.data],I=void 0):o.statusByte===b.systemExclusive?(B=[240,...Cn(o.data.length),...o.data],I=void 0):(B=[],I!==o.statusByte&&(I=o.statusByte,B.push(o.statusByte)),B.push(...o.data)),a.push(...Cn(g)),a.push(...B),i+=g}a.push(0),a.push(255),a.push(b.endOfTrack),a.push(0),A.push(new Uint8Array(a))}let t=(s,a)=>{for(let i=0;i<s.length;i++)a.push(s.charCodeAt(i))},n=[];t("MThd",n),n.push(...Gt(6,4)),n.push(0,e.format),n.push(...Gt(e.tracks.length,2)),n.push(...Gt(e.timeDivision,2));for(let s of A)t("MTrk",n),n.push(...Gt(s.length,4)),n.push(...s);return new Uint8Array(n).buffer}var Xa=350,Se=9,Rn=16,Os="gs",Be=-1,Rt=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Vs=32767,Za={time:0},za=.03,Wa=.07,_a=1,ja=64,ms=121,dA=class{static getDefaultBank(e){return e==="gm2"?ms:0}static getDrumBank(e){switch(e){default:throw new Error(`${e} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrums(e){return e===120||e===126||e===127}static isValidXGMSB(e){return this.isXGDrums(e)||e===ja||e===ms}static isSystemXG(e){return e==="gm2"||e==="xg"}static addBankOffset(e,A,t=!0){return this.isXGDrums(e)&&t?e:Math.min(e+A,127)}static subtrackBankOffset(e,A,t=!0){return this.isXGDrums(e)&&t?e:Math.max(0,e-A)}};function es(e){return e.data[0]===67&&e.data[2]===76&&e.data[5]===126&&e.data[6]===0}function Xs(e){return e.data[0]===65&&e.data[2]===66&&e.data[3]===18&&e.data[4]===64&&(e.data[5]&16)!==0&&e.data[6]===21}function Zs(e){return e.data[0]===65&&e.data[2]===66&&e.data[6]===127}function zs(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===1}function Ws(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===3}function _s(e){return new ZA(e,b.systemExclusive,new P([65,16,66,18,64,0,127,0,65,247]))}var te=class js{static toMIDIString(A){return A.isGMGSDrum?`DRUM:${A.program}`:`${A.bankLSB}:${A.bankMSB}:${A.program}`}static fromMIDIString(A){let t=A.split(":");if(t.length>3||t.length<2)throw new Error("Invalid MIDI string:");return A.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:parseInt(t[1]),isGMGSDrum:!0}:{bankLSB:parseInt(t[0]),bankMSB:parseInt(t[1]),program:parseInt(t[2]),isGMGSDrum:!1}}static toNamedMIDIString(A){return`${js.toMIDIString(A)} ${A.name}`}static matches(A,t){return A.isGMGSDrum||t.isGMGSDrum?A.isGMGSDrum===t.isGMGSDrum&&A.program===t.program:A.program===t.program&&A.bankLSB===t.bankLSB&&A.bankMSB===t.bankMSB}static fromNamedMIDIString(A){let t=A.indexOf(" ");if(t<0)throw new Error(`Invalid named MIDI string: ${A}`);let n=this.fromMIDIString(A.substring(0,t)),s=A.substring(t+1);return{...n,name:s}}static sorter(A,t){return A.program!==t.program?A.program-t.program:A.isGMGSDrum&&!t.isGMGSDrum?1:!A.isGMGSDrum&&t.isGMGSDrum?-1:A.bankMSB!==t.bankMSB?A.bankMSB-t.bankMSB:A.bankLSB-t.bankLSB}},$a="Created using SpessaSynth";function Ao(e,A,t){let n="gm",s=[],a=Array(e.tracks.length).fill(0),i=e.tracks.length,I=()=>{let d=0,C=1/0;return e.tracks.forEach((h,u)=>{a[u]>=h.events.length||h.events[a[u]].ticks<C&&(d=u,C=h.events[a[u]].ticks)}),d},o=Array(e.tracks.length).fill(0),g=16+Math.max(...e.portChannelOffsetMap),B=[];for(let d=0;d<g;d++)B.push({program:0,drums:d%16===Se,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});for(;i>0;){let d=I(),C=e.tracks[d];if(a[d]>=C.events.length){i--;continue}let h=C.events[a[d]];a[d]++;let u=e.portChannelOffsetMap[o[d]];if(h.statusByte===b.midiPort){o[d]=h.data[0];continue}let m=h.statusByte&240;if(m!==b.controllerChange&&m!==b.programChange&&m!==b.systemExclusive)continue;if(m===b.systemExclusive){if(!Xs(h)){es(h)?n="xg":Zs(h)?n="gs":zs(h)?(n="gm",s.push({tNum:d,e:h})):Ws(h)&&(n="gm2");continue}let D=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][h.data[5]&15]+u;B[D].drums=!!(h.data[7]>0&&h.data[5]>>4);continue}let y=(h.statusByte&15)+u,F=B[y];if(m===b.programChange){let v={program:h.data[0],bankLSB:F.lastBankLSB?.data?.[1]??0,bankMSB:dA.subtrackBankOffset(F.lastBank?.data?.[1]??0,e.bankOffset),isGMGSDrum:F.drums},L=t.getPreset(v,n);if(p(`%cInput patch: %c${te.toMIDIString(v)}%c. Channel %c${y}%c. Changing patch to ${L.toString()}.`,c.info,c.unrecognized,c.info,c.recognized,c.info),h.data[0]=L.program,L.isGMGSDrum&&dA.isSystemXG(n)||F.lastBank===void 0||(F.lastBank.data[1]=dA.addBankOffset(L.bankMSB,A,L.isXGDrums),F.lastBankLSB===void 0))continue;F.lastBankLSB.data[1]=L.bankLSB;continue}let k=h.data[0]===S.bankSelectLSB;h.data[0]!==S.bankSelect&&!k||(F.hasBankSelect=!0,k?F.lastBankLSB=h:F.lastBank=h)}if(B.forEach((d,C)=>{if(d.hasBankSelect)return;let h=C%16,u=b.programChange|h,m=Math.floor(C/16)*16,y=e.portChannelOffsetMap.indexOf(m),F=e.tracks.find(E=>E.port===y&&E.channels.has(h));if(F===void 0)return;let k=F.events.findIndex(E=>E.statusByte===u);if(k===-1){let E=F.events.findIndex(nA=>nA.statusByte>128&&nA.statusByte<240&&(nA.statusByte&15)===h);if(E===-1)return;let V=F.events[E].ticks,K=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},n).program;F.addEvent(new ZA(V,b.programChange|h,new P([K])),E),k=E}p(`%cAdding bank select for %c${C}`,c.info,c.recognized);let D=F.events[k].ticks,v=t.getPreset({bankLSB:0,bankMSB:0,program:d.program,isGMGSDrum:d.drums},n),L=dA.addBankOffset(v.bankMSB,A,v.isXGDrums);F.addEvent(new ZA(D,b.controllerChange|h,new P([S.bankSelect,L])),k)}),n!=="gs"&&!dA.isSystemXG(n)){for(let C of s){let h=e.tracks[C.tNum];h.deleteEvent(h.events.indexOf(C.e))}let d=0;e.tracks[0].events[0].statusByte===b.trackName&&d++,e.tracks[0].addEvent(_s(0),d)}}var Ss={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function eo(e,A,t){let n=t.metadata;if(OA("%cWriting the RMIDI File...",c.info),p("metadata",n),p("Initial bank offset",e.bankOffset),t.correctBankOffset){if(!t.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");Ao(e,t.bankOffset,t.soundBank)}let s=new P(e.writeMIDI());n.name??=e.getName(),n.creationDate??=new Date,n.copyright??=$a,n.software??="SpessaSynth",Object.entries(n).forEach(I=>{let o=I;o[1]&&e.setRMIDInfo(o[0],o[1])});let a=[];Object.entries(e.rmidiInfo).forEach(I=>{let o=I[0],g=I[1],B=d=>{a.push(gA(d,g))};switch(o){case"album":B("IALB"),B("IPRD");break;case"software":B("ISFT");break;case"infoEncoding":B("IENC");break;case"creationDate":B("ICRD");break;case"picture":B("IPIC");break;case"name":B("INAM");break;case"artist":B("IART");break;case"genre":B("IGNR");break;case"copyright":B("ICOP");break;case"comment":B("ICMT");break;case"engineer":B("IENG");break;case"subject":B("ISBJ");break;case"midiEncoding":B("MENC");break}});let i=new P(2);return ht(i,t.bankOffset,2),a.push(gA("DBNK",i)),p("%cFinished!",c.info),X(),bA("RIFF",[ne("RMID"),gA("data",s),bA("INFO",a,!0),new P(A)]).buffer}function to(e,A){MA("%cSearching for all used programs and keys...",c.info);let t=16+Math.max(...e.portChannelOffsetMap),n=[],s="gs";for(let B=0;B<t;B++){let d=B%16===Se;n.push({preset:A.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:d,program:0},s),bankMSB:0,bankLSB:0,isDrum:d})}let a=new Map,i=Array(e.tracks.length).fill(0),I=e.tracks.length;function o(){let B=0,d=1/0;return e.tracks.forEach(({events:C},h)=>{i[h]>=C.length||C[i[h]].ticks<d&&(B=h,d=C[i[h]].ticks)}),B}let g=e.tracks.map(B=>B.port);for(;I>0;){let B=o(),d=e.tracks[B].events;if(i[B]>=d.length){I--;continue}let C=d[i[B]];if(i[B]++,C.statusByte===b.midiPort){g[B]=C.data[0];continue}let h=C.statusByte&240;if(h!==b.noteOn&&h!==b.controllerChange&&h!==b.programChange&&h!==b.systemExclusive)continue;let u=(C.statusByte&15)+e.portChannelOffsetMap[g[B]]||0,m=n[u];switch(h){case b.programChange:m.preset=A.getPreset({bankMSB:m.bankMSB,bankLSB:m.bankLSB,program:C.data[0],isGMGSDrum:m.isDrum},s);break;case b.controllerChange:switch(C.data[0]){default:continue;case S.bankSelectLSB:m.bankLSB=C.data[1];break;case S.bankSelect:m.bankMSB=C.data[1]}break;case b.noteOn:if(C.data[1]===0)continue;let y=a.get(m.preset);y||(y=new Set,a.set(m.preset,y)),y.add(`${C.data[0]}-${C.data[1]}`);break;case b.systemExclusive:{if(!Xs(C)){es(C)&&(s="xg",p("%cXG on detected!",c.recognized));continue}let F=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][C.data[5]&15]+e.portChannelOffsetMap[g[B]],k=!!(C.data[7]>0&&C.data[5]>>4);m=n[F],m.isDrum=k}break}}return a.forEach((B,d)=>{B.size===0&&(p(`%cDetected change but no keys for %c${d.name}`,c.info,c.value),a.delete(d))}),X(),a}function no(e,A=0){let t=C=>(C.data=new P(C.data.buffer),6e7/Qt(C.data,3)),n=[],a=e.tracks.map(C=>C.events).flat();a.sort((C,h)=>C.ticks-h.ticks);for(let C=0;C<16;C++)n.push([]);let i=0,I=60/(120*e.timeDivision),o=0,g=0,B=[];for(let C=0;C<16;C++)B.push([]);let d=(C,h)=>{let u=B[h].findIndex(y=>y.midiNote===C),m=B[h][u];if(m){let y=i-m.start;m.length=y,h===Se&&(m.length=y<A?A:y),B[h].splice(u,1)}g--};for(;o<a.length;){let C=a[o],h=C.statusByte>>4,u=C.statusByte&15;if(h===8)d(C.data[0],u);else if(h===9)if(C.data[1]===0)d(C.data[0],u);else{d(C.data[0],u);let m={midiNote:C.data[0],start:i,length:-1,velocity:C.data[1]/127};n[u].push(m),B[u].push(m),g++}else C.statusByte===81&&(I=60/(t(C)*e.timeDivision));if(++o>=a.length)break;i+=I*(a[o].ticks-C.ticks)}return g>0&&B.forEach((C,h)=>{C.forEach(u=>{let m=i-u.start;u.length=m,h===Se&&(u.length=m<A?A:m)})}),n}var vt={linear:0,nearestNeighbor:1,hermite:2},hn={soundCanvasText:0,yamahaXGText:1,soundCanvasDotMatrix:2},HA={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},rA={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6};function qe(e,A,t,n){return new ZA(n,b.controllerChange|e%16,new P([A,t]))}function so(e,A){let t=16|[1,2,3,4,5,6,7,8,0,9,10,11,12,13,14,15][e%16],n=[65,16,66,18,64,t,21,1],a=128-(64+t+21+1)%128;return new ZA(A,b.systemExclusive,new P([...n,a,247]))}function ao(e,A=[],t=[],n=[],s=[]){MA("%cApplying changes to the MIDI file...",c.info),p("Desired program changes:",A),p("Desired CC changes:",t),p("Desired channels to clear:",n),p("Desired channels to transpose:",s);let a=new Set;A.forEach(D=>{a.add(D.channel)});let i="gs",I=!1,o=Array(e.tracks.length).fill(0),g=e.tracks.length;function B(){let D=0,v=1/0;return e.tracks.forEach((L,E)=>{o[E]>=L.events.length||L.events[o[E]].ticks<v&&(D=E,v=L.events[o[E]].ticks)}),D}let d=e.tracks.map(D=>D.port),C={},h=0,u=(D,v)=>{e.tracks[D].channels.size!==0&&(h===0&&(h+=16,C[v]=0),C[v]===void 0&&(C[v]=h,h+=16),d[D]=v)};e.tracks.forEach((D,v)=>{u(v,D.port)});let m=h,y=Array(m).fill(!0),F=Array(m).fill(0),k=Array(m).fill(0);for(s.forEach(D=>{let v=Math.trunc(D.keyShift),L=D.keyShift-v;F[D.channel]=v,k[D.channel]=L});g>0;){let D=B(),v=e.tracks[D];if(o[D]>=v.events.length){g--;continue}let L=o[D]++,E=v.events[L],V=()=>{v.deleteEvent(L),o[D]--},K=(Z,eA=0)=>{v.addEvent(Z,L+eA),o[D]++},nA=C[d[D]]||0;if(E.statusByte===b.midiPort){u(D,E.data[0]);continue}if(E.statusByte<=b.sequenceSpecific&&E.statusByte>=b.sequenceNumber)continue;let j=E.statusByte&240,O=E.statusByte&15,q=O+nA;if(n.includes(q)){V();continue}switch(j){case b.noteOn:if(y[q]){y[q]=!1,t.filter(eA=>eA.channel===q).forEach(eA=>{let iA=qe(O,eA.controllerNumber,eA.controllerValue,E.ticks);K(iA)});let Z=k[q];if(Z!==0){let eA=Z*64+64,iA=qe(O,S.registeredParameterMSB,0,E.ticks),YA=qe(O,S.registeredParameterLSB,1,E.ticks),G=qe(q,S.dataEntryMSB,eA,E.ticks),M=qe(O,S.dataEntryLSB,0,E.ticks);K(M),K(G),K(YA),K(iA)}if(a.has(q)){let eA=A.find(AA=>AA.channel===q);if(!eA)continue;p(`%cSetting %c${eA.channel}%c to %c${te.toMIDIString(eA)}%c. Track num: %c${D}`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized);let iA=eA.bankMSB,YA=eA.bankLSB,G=eA.program,M=new ZA(E.ticks,b.programChange|O,new P([G]));K(M);let x=(AA,tA)=>{let FA=qe(O,AA?S.bankSelectLSB:S.bankSelect,tA,E.ticks);K(FA)};dA.isSystemXG(i)&&eA.isGMGSDrum&&(p(`%cAdding XG Drum change on track %c${D}`,c.recognized,c.value),iA=dA.getDrumBank(i),YA=0),x(!1,iA),x(!0,YA),eA.isGMGSDrum&&!dA.isSystemXG(i)&&O!==Se&&(p(`%cAdding GS Drum change on track %c${D}`,c.recognized,c.value),K(so(O,E.ticks)))}}E.data[0]+=F[q];break;case b.noteOff:E.data[0]+=F[q];break;case b.programChange:if(a.has(q)){V();continue}break;case b.controllerChange:{let Z=E.data[0];if(t.find(iA=>iA.channel===q&&Z===iA.controllerNumber)!==void 0){V();continue}(Z===S.bankSelect||Z===S.bankSelectLSB)&&a.has(q)&&V()}break;case b.systemExclusive:if(es(E))p("%cXG system on detected",c.info),i="xg",I=!0;else if(E.data[0]===67&&E.data[2]===76&&E.data[3]===8&&E.data[5]===3)a.has(E.data[4]+nA)&&V();else if(Ws(E))p("%cGM2 system on detected",c.info),i="gm2",I=!0;else if(Zs(E)){I=!0,p("%cGS on detected!",c.recognized);break}else zs(E)&&(p("%cGM on detected, removing!",c.info),V(),I=!1)}}if(!I&&A.length>0){let D=0;e.tracks[0].events[0].statusByte===b.trackName&&D++,e.tracks[0].addEvent(_s(0),D),p("%cGS on not detected. Adding it.",c.info)}e.flush(),X()}function oo(e,A){let t=[],n=[],s=[],a=[];A.channelSnapshots.forEach((i,I)=>{if(i.isMuted){n.push(I);return}let o=i.channelTransposeKeyShift+i.customControllers[rA.channelTransposeFine]/100;o!==0&&t.push({channel:I,keyShift:o}),i.lockPreset&&s.push({channel:I,...i.patch}),i.lockedControllers.forEach((g,B)=>{if(!g||B>127||B===S.bankSelect)return;let d=i.midiControllers[B]>>7;a.push({channel:I,controllerNumber:B,controllerValue:d})})}),e.modify(s,a,n,t)}var ln={XMFFileType:0,nodeName:1,nodeIDNumber:2,resourceFormat:3,filenameOnDisk:4,filenameExtensionOnDisk:5,macOSFileTypeAndCreator:6,mimeType:7,title:8,copyrightNotice:9,comment:10,autoStart:11,preload:12,contentDescription:13,ID3Metadata:14},Ke={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},dn={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},io={standard:0,MMA:1,registered:2,nonRegistered:3},Mt={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},ro=class $s{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(A){let t=A.currentIndex;this.length=uA(A),this.itemCount=uA(A);let n=uA(A),s=A.currentIndex-t,a=n-s,i=A.slice(A.currentIndex,A.currentIndex+a);A.currentIndex+=a,this.metadataLength=uA(i);let I=i.slice(i.currentIndex,i.currentIndex+this.metadataLength);i.currentIndex+=this.metadataLength;let o,g;for(;I.currentIndex<I.length;){if(I[I.currentIndex]===0)I.currentIndex++,o=uA(I),Object.values(ln).includes(o)?g=Object.keys(ln).find(m=>ln[m]===o)??"":(p(`Unknown field specifier: ${o}`),g=`unknown_${o}`);else{let m=uA(I);o=CA(I,m),g=o}let u=uA(I);if(u===0){let m=uA(I),y=I.slice(I.currentIndex,I.currentIndex+m);I.currentIndex+=m,uA(y)<4?this.metadata[g]=CA(y,m-1):this.metadata[g]=y.slice(y.currentIndex)}else p(`International content: ${u}`),I.currentIndex+=uA(I)}let B=i.currentIndex,d=uA(i),C=i.slice(i.currentIndex,B+d);if(i.currentIndex=B+d,d>0)for(this.packedContent=!0;C.currentIndex<d;){let h={};switch(h.id=uA(C),h.id){case Mt.nonRegistered:case Mt.registered:throw X(),new Error(`Unsupported unpacker ID: ${h.id}`);default:throw X(),new Error(`Unknown unpacker ID: ${h.id}`);case Mt.none:h.standardID=uA(C);break;case Mt.MMAUnpacker:{let u=C[C.currentIndex++];u===0&&(u<<=8,u|=C[C.currentIndex++],u<<=8,u|=C[C.currentIndex++]);let m=uA(C);h.manufacturerID=u,h.manufacturerInternalID=m}break}h.decodedSize=uA(C),this.nodeUnpackers.push(h)}switch(A.currentIndex=t+n,this.referenceTypeID=uA(A),this.nodeData=A.slice(A.currentIndex,t+this.length),A.currentIndex=t+this.length,this.referenceTypeID){case Ke.inLineResource:break;case Ke.externalXMF:case Ke.inFileNode:case Ke.XMFFileURIandNodeID:case Ke.externalFile:case Ke.inFileResource:throw X(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw X(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let u=this.nodeData.slice(2,this.nodeData.length);p(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,c.warn,c.value);try{this.nodeData=new P(Ps(u).buffer)}catch(m){if(X(),m instanceof Error)throw new Error(`Error unpacking XMF file contents: ${m.message}.`)}}let h=this.metadata.resourceFormat;if(h===void 0)sA("No resource format for this file node!");else{h[0]!==io.standard&&(p(`Non-standard formatTypeID: ${h.toString()}`),this.resourceFormat=h.toString());let m=h[1];Object.values(dn).includes(m)?this.resourceFormat=Object.keys(dn).find(y=>dn[y]===m):p(`Unrecognized resource format: ${m}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let h=this.nodeData.currentIndex,u=uA(this.nodeData),m=this.nodeData.slice(h,h+u);this.nodeData.currentIndex=h+u,this.innerNodes.push(new $s(m))}}get isFile(){return this.itemCount===0}};function Io(e,A){e.bankOffset=0;let t=CA(A,4);if(t!=="XMF_")throw X(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);OA("%cParsing XMF file...",c.info);let n=CA(A,4);if(p(`%cXMF version: %c${n}`,c.info,c.recognized),n==="2.00"){let o=Xe(A,4),g=Xe(A,4);p(`%cFile Type ID: %c${o}%c, File Type Revision ID: %c${g}`,c.info,c.recognized,c.info,c.recognized)}uA(A);let s=uA(A);A.currentIndex+=s,A.currentIndex=uA(A);let a=new ro(A),i,I=o=>{let g=(B,d)=>{o.metadata[B]!==void 0&&typeof o.metadata[B]=="string"&&(e.rmidiInfo[d]=ne(o.metadata[B]))};if(g("nodeName","name"),g("title","name"),g("copyrightNotice","copyright"),g("comment","comment"),o.isFile)switch(o.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":p("%cFound embedded DLS!",c.recognized),e.embeddedSoundBank=o.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":p("%cFound embedded MIDI!",c.recognized),i=o.nodeData;break}else for(let B of o.innerNodes)I(B)};if(I(a),X(),!i)throw new Error("No MIDI data in the XMF file!");return i}var Kt=class Aa{name="";port=0;channels=new Set;events=[];static copyFrom(A){let t=new Aa;return t.copyFrom(A),t}copyFrom(A){this.name=A.name,this.port=A.port,this.channels=new Set(A.channels),this.events=A.events.map(t=>new ZA(t.ticks,t.statusByte,new P(t.data)))}addEvent(A,t){this.events.splice(t,0,A)}deleteEvent(A){this.events.splice(A,1)}pushEvent(A){this.events.push(A)}};function ps(e,A,t){MA("%cParsing MIDI File...",c.info),e.fileName=t;let n=new P(A),s=n,a=g=>{let B=CA(g,4),d=Xe(g,4),C=new P(d),h={type:B,size:d,data:C},u=g.slice(g.currentIndex,g.currentIndex+h.size);return h.data.set(u,0),g.currentIndex+=h.size,h},i=ee(n,4);if(i==="RIFF"){n.currentIndex+=8;let g=CA(n,4);if(g!=="RMID")throw X(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${g}"`);let B=oA(n);if(B.header!=="data")throw X(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${g}"`);s=B.data;let d=!1,C=!1;for(;n.currentIndex<=n.length;){let h=n.currentIndex,u=oA(n,!0);if(u.header==="RIFF"){let m=CA(u.data,4).toLowerCase();m==="sfbk"||m==="sfpk"||m==="dls "?(p("%cFound embedded soundbank!",c.recognized),e.embeddedSoundBank=n.slice(h,h+u.size).buffer):sA(`Unknown RIFF chunk: "${m}"`),m==="dls "?e.isDLSRMIDI=!0:d=!0}else if(u.header==="LIST"&&CA(u.data,4)==="INFO")for(p("%cFound RMIDI INFO chunk!",c.recognized);u.data.currentIndex<=u.size;){let y=oA(u.data,!0),F=y.header,k=y.data;switch(F){default:sA(`Unknown RMIDI Info: ${F}`);break;case"INAM":e.rmidiInfo.name=k;break;case"IALB":case"IPRD":e.rmidiInfo.album=k;break;case"ICRT":case"ICRD":e.rmidiInfo.creationDate=k;break;case"IART":e.rmidiInfo.artist=k;break;case"IGNR":e.rmidiInfo.genre=k;break;case"IPIC":e.rmidiInfo.picture=k;break;case"ICOP":e.rmidiInfo.copyright=k;break;case"ICMT":e.rmidiInfo.comment=k;break;case"IENG":e.rmidiInfo.engineer=k;break;case"ISFT":e.rmidiInfo.software=k;break;case"ISBJ":e.rmidiInfo.subject=k;break;case"IENC":e.rmidiInfo.infoEncoding=k;break;case"MENC":e.rmidiInfo.midiEncoding=k;break;case"DBNK":e.bankOffset=xs(k,2),C=!0;break}}}d&&!C&&(e.bankOffset=1),e.isDLSRMIDI&&(e.bankOffset=0),e.embeddedSoundBank===void 0&&(e.bankOffset=0)}else i==="XMF_"?s=Io(e,n):s=n;let I=a(s);if(I.type!=="MThd")throw X(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${I.type}"`);if(I.size!==6)throw X(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${I.size}`);e.format=Xe(I.data,2);let o=Xe(I.data,2);e.timeDivision=Xe(I.data,2);for(let g=0;g<o;g++){let B=new Kt,d=a(s);if(d.type!=="MTrk")throw X(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${d.type}"`);let C,h=0;for(e.format===2&&g>0&&(h+=e.tracks[g-1].events[e.tracks[g-1].events.length-1].ticks);d.data.currentIndex<d.size;){h+=uA(d.data);let u=d.data[d.data.currentIndex],m;if(C!==void 0&&u<128)m=C;else{if(u<128)throw X(),new SyntaxError(`Unexpected byte with no running byte. (${u})`);m=d.data[d.data.currentIndex++]}let y=Ka(m),F;switch(y){case-1:F=0;break;case-2:m=d.data[d.data.currentIndex++],F=uA(d.data);break;case-3:F=uA(d.data);break;default:F=Oa[m>>4],C=m;break}let k=new P(F);k.set(d.data.slice(d.data.currentIndex,d.data.currentIndex+F),0);let D=new ZA(h,m,k);B.pushEvent(D),d.data.currentIndex+=F}e.tracks.push(B),p(`%cParsed %c${e.tracks.length}%c / %c${e.tracks.length}`,c.info,c.value,c.info,c.value)}p("%cAll tracks parsed correctly!",c.recognized),e.flush(!1),X(),p(`%cMIDI file parsed. Total tick time: %c${e.lastVoiceEventTick}%c, total seconds time: %c${e.duration}`,c.info,c.recognized,c.info,c.recognized)}var go=new Map([["domingo","Sunday"],["segunda-feira","Monday"],["ter\xE7a-feira","Tuesday"],["quarta-feira","Wednesday"],["quinta-feira","Thursday"],["sexta-feira","Friday"],["s\xE1bado","Saturday"],["janeiro","January"],["fevereiro","February"],["mar\xE7o","March"],["abril","April"],["maio","May"],["junho","June"],["julho","July"],["agosto","August"],["setembro","September"],["outubro","October"],["novembro","November"],["dezembro","December"]]),co=[go];function Eo(e){for(let A of co){let t=e;A.forEach((s,a)=>{let i=new RegExp(a,"gi");t=t.replace(i,s)});let n=new Date(t);if(!isNaN(n.getTime()))return n}}function Bo(e){let A=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(e);if(A){let t=parseInt(A[1]),n=parseInt(A[2])-1,s=parseInt(A[3]),a=new Date(s,n,t);if(!isNaN(a.getTime()))return a}}function Co(e){let A=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(e);if(A){let t=A[1],n=(parseInt(A[2])+1).toString(),s=A[3],a=new Date(`${n}/${t}/${s}`);if(!isNaN(a.getTime()))return a}}function ho(e){let t=/\b\d{4}\b/.exec(e);return t?new Date(t[0]):void 0}function ts(e){if(e=e.trim(),e.length<1)return new Date;let A=e.replace(/\b(\d+)(st|nd|rd|th)\b/g,"$1"),t=new Date(A);if(isNaN(t.getTime())){let n=Eo(e);if(n)return n;let s=Bo(e);if(s)return s;let a=Co(e);if(a)return a;let i=ho(e);return i||(sA(`Invalid date: "${e}". Replacing with the current date!`),new Date)}return t}var Le=class Lt{tracks=[];timeDivision=0;duration=0;tempoChanges=[{ticks:0,tempo:120}];extraMetadata=[];lyrics=[];firstNoteOn=0;keyRange={min:0,max:127};lastVoiceEventTick=0;portChannelOffsetMap=[0];loop={start:0,end:0};fileName;format=0;rmidiInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;isDLSRMIDI=!1;embeddedSoundBank;binaryName;get infoEncoding(){let A=this.rmidiInfo.infoEncoding;if(!A)return;let t=A.byteLength;return A[A.byteLength-1]===0&&t--,ee(A,t)}static fromArrayBuffer(A,t=""){let n=new Lt;return ps(n,A,t),n}static async fromFile(A){let t=new Lt;return ps(t,await A.arrayBuffer(),A.name),t}static copyFrom(A){let t=new Lt;return t.copyFrom(A),t}copyFrom(A){this.copyMetadataFrom(A),this.embeddedSoundBank=A?.embeddedSoundBank?.slice(0)??void 0,this.tracks=A.tracks.map(t=>Kt.copyFrom(t))}midiTicksToSeconds(A){let t=0;for(;A>0;){let n=this.tempoChanges.find(a=>a.ticks<A);if(!n)return t;let s=A-n.ticks;t+=s*60/(n.tempo*this.timeDivision),A-=s}return t}getUsedProgramsAndKeys(A){return to(this,A)}flush(A=!0){if(A)for(let t of this.tracks)t.events.sort((n,s)=>n.ticks-s.ticks);this.parseInternal()}getNoteTimes(A=0){return no(this,A)}writeMIDI(){return Va(this)}writeRMIDI(A,t=Ss){return eo(this,A,$n(t,Ss))}modify(A=[],t=[],n=[],s=[]){ao(this,A,t,n,s)}applySnapshot(A){oo(this,A)}getName(A="Shift_JIS"){let t="",n=this.getRMIDInfo("name");if(n)return n.trim();if(this.binaryName){A=this.getRMIDInfo("midiEncoding")??A;try{t=new TextDecoder(A).decode(this.binaryName).trim()}catch(s){sA(`Failed to decode MIDI name: ${s}`)}}return t||this.fileName}getExtraMetadata(A="Shift_JIS"){A=this.infoEncoding??A;let t=new TextDecoder(A);return this.extraMetadata.map(n=>t.decode(n.data).replace(/@T|@A/g,"").trim())}setRMIDInfo(A,t){if(this.rmidiInfo.infoEncoding=ne("utf-8",!0),A==="picture")this.rmidiInfo.picture=new Uint8Array(t);else if(A==="creationDate")this.rmidiInfo.creationDate=ne(t.toISOString(),!0);else{let n=new TextEncoder().encode(t);this.rmidiInfo[A]=new Uint8Array([...n,0])}}getRMIDInfo(A){if(!this.rmidiInfo[A])return;let t=this.infoEncoding??"UTF-8";if(A==="picture")return this.rmidiInfo[A].buffer;if(A==="creationDate")return ts(ee(this.rmidiInfo[A]));try{let n=new TextDecoder(t),s=this.rmidiInfo[A];return s[s.length-1]===0&&(s=s?.slice(0,s.length-1)),n.decode(s.buffer).trim()}catch(n){sA(`Failed to decode ${A} name: ${n}`);return}}copyMetadataFrom(A){this.fileName=A.fileName,this.timeDivision=A.timeDivision,this.duration=A.duration,this.firstNoteOn=A.firstNoteOn,this.lastVoiceEventTick=A.lastVoiceEventTick,this.format=A.format,this.bankOffset=A.bankOffset,this.isKaraokeFile=A.isKaraokeFile,this.isMultiPort=A.isMultiPort,this.isDLSRMIDI=A.isDLSRMIDI,this.isDLSRMIDI=A.isDLSRMIDI,this.tempoChanges=[...A.tempoChanges],this.extraMetadata=A.extraMetadata.map(t=>new ZA(t.ticks,t.statusByte,new P(t.data))),this.lyrics=A.lyrics.map(t=>new ZA(t.ticks,t.statusByte,new P(t.data))),this.portChannelOffsetMap=[...A.portChannelOffsetMap],this.binaryName=A?.binaryName?.slice(),this.loop={...A.loop},this.keyRange={...A.keyRange},this.rmidiInfo={},Object.entries(A.rmidiInfo).forEach(t=>{let n=t[0],s=t[1];this.rmidiInfo[n]=s.slice()})}parseInternal(){OA("%cInterpreting MIDI events...",c.info);let A=!1;this.keyRange={max:0,min:127},this.extraMetadata=[];let t=!1;typeof this.rmidiInfo.name<"u"&&(t=!0);let n=null,s=null;for(let o of this.tracks){let g=new Set,B=!1;for(let C=0;C<o.events.length;C++){let h=o.events[C];if(h.statusByte>=128&&h.statusByte<240){B=!0;for(let m=0;m<h.data.length;m++)h.data[m]=Math.min(127,h.data[m]);switch(h.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=h.ticks),h.statusByte&240){case b.controllerChange:switch(h.data[0]){case 2:case 116:n=h.ticks;break;case 4:case 117:s===null?s=h.ticks:s=0;break;case 0:this.isDLSRMIDI&&h.data[1]!==0&&h.data[1]!==127&&(p("%cDLS RMIDI with offset 1 detected!",c.recognized),this.bankOffset=1)}break;case b.noteOn:{g.add(h.statusByte&15);let m=h.data[0];this.keyRange.min=Math.min(this.keyRange.min,m),this.keyRange.max=Math.max(this.keyRange.max,m);break}}}let u=ee(h.data);switch(h.statusByte){case b.endOfTrack:C!==o.events.length-1&&(C--,o.deleteEvent(C),sA("Unexpected EndOfTrack. Removing!"));break;case b.setTempo:this.tempoChanges.push({ticks:h.ticks,tempo:6e7/Qt(h.data,3)});break;case b.marker:switch(u.trim().toLowerCase()){default:break;case"start":case"loopstart":n=h.ticks;break;case"loopend":s=h.ticks}break;case b.copyright:this.extraMetadata.push(h);break;case b.lyric:u.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,p("%cKaraoke MIDI detected!",c.recognized)),this.isKaraokeFile?h.statusByte=b.text:this.lyrics.push(h);case b.text:{let m=u.trim();m.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,p("%cKaraoke MIDI detected!",c.recognized)):this.isKaraokeFile&&(m.startsWith("@T")||m.startsWith("@A")?A?this.extraMetadata.push(h):(this.binaryName=h.data.slice(2),A=!0,t=!0):m.startsWith("@")||this.lyrics.push(h));break}}}o.channels=g,o.name="";let d=o.events.find(C=>C.statusByte===b.trackName);d&&this.tracks.indexOf(o)>0&&(o.name=ee(d.data),!B&&!o.name.toLowerCase().includes("setup")&&this.extraMetadata.push(d))}this.tempoChanges.reverse(),p("%cCorrecting loops, ports and detecting notes...",c.info);let a=[];for(let o of this.tracks){let g=o.events.find(B=>(B.statusByte&240)===b.noteOn);g&&a.push(g.ticks)}this.firstNoteOn=Math.min(...a),p(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,c.info,c.recognized,c.info),n!==null&&s===null?(n=this.firstNoteOn,s=this.lastVoiceEventTick):(n??=this.firstNoteOn,(s===null||s===0)&&(s=this.lastVoiceEventTick)),this.loop={start:n,end:s},p(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,c.info,c.recognized,c.info,c.recognized);let i=0;this.portChannelOffsetMap=[];for(let o of this.tracks)if(o.port=-1,o.channels.size!==0)for(let g of o.events){if(g.statusByte!==b.midiPort)continue;let B=g.data[0];o.port=B,this.portChannelOffsetMap[B]===void 0&&(this.portChannelOffsetMap[B]=i,i+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(o=>o??0);let I=1/0;for(let o of this.tracks)o.port!==-1&&I>o.port&&(I=o.port);I===1/0&&(I=0);for(let o of this.tracks)(o.port===-1||o.port===void 0)&&(o.port=I);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?p("%cNo additional MIDI Ports detected.",c.info):(this.isMultiPort=!0,p("%cMIDI Ports detected!",c.recognized)),!t)if(this.tracks.length>1){if(this.tracks[0].events.find(o=>o.statusByte>=b.noteOn&&o.statusByte<b.polyPressure)===void 0){let o=this.tracks[0].events.find(g=>g.statusByte===b.trackName);o&&(this.binaryName=o.data)}}else{let o=this.tracks[0].events.find(g=>g.statusByte===b.trackName);o&&(this.binaryName=o.data)}if(this.extraMetadata=this.extraMetadata.filter(o=>o.data.length>0),this.lyrics.sort((o,g)=>o.ticks-g.ticks),!this.tracks.some(o=>o.events[0].ticks===0)){let o=this.tracks[0],g=this?.binaryName?.buffer;g||(g=new Uint8Array(0).buffer),o.events.unshift(new ZA(0,b.trackName,new P(g)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.binaryName&&this.binaryName.length<1&&(this.binaryName=void 0),p("%cSuccess!",c.recognized),X()}};function lo(e,A){if(this.externalMIDIPlayback&&e.statusByte>=128){this.sendMIDIMessage([e.statusByte,...e.data]);return}let t=this._midiData.tracks[A],n=As(e.statusByte),s=this.midiPortChannelOffsets[this.currentMIDIPorts[A]]||0;switch(n.channel+=s,n.status){case b.noteOn:{let a=e.data[1];if(a>0)this.synth.noteOn(n.channel,e.data[0],a),this.playingNotes.push({midiNote:e.data[0],channel:n.channel,velocity:a});else{this.synth.noteOff(n.channel,e.data[0]);let i=this.playingNotes.findIndex(I=>I.midiNote===e.data[0]&&I.channel===n.channel);i!==-1&&this.playingNotes.splice(i,1)}break}case b.noteOff:{this.synth.noteOff(n.channel,e.data[0]);let a=this.playingNotes.findIndex(i=>i.midiNote===e.data[0]&&i.channel===n.channel);a!==-1&&this.playingNotes.splice(a,1);break}case b.pitchWheel:this.synth.pitchWheel(n.channel,e.data[1]<<7|e.data[0]);break;case b.controllerChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.controllerChange(n.channel,e.data[0],e.data[1]);break;case b.programChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.programChange(n.channel,e.data[0]);break;case b.polyPressure:this.synth.polyPressure(n.channel,e.data[0],e.data[1]);break;case b.channelPressure:this.synth.channelPressure(n.channel,e.data[0]);break;case b.systemExclusive:this.synth.systemExclusive(e.data,s);break;case b.setTempo:{let a=6e7/Qt(e.data,3);this.oneTickToSeconds=60/(a*this._midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this._midiData.timeDivision),p("invalid tempo! falling back to 120 BPM"),a=120);break}case b.timeSignature:case b.endOfTrack:case b.midiChannelPrefix:case b.songPosition:case b.activeSensing:case b.keySignature:case b.sequenceNumber:case b.sequenceSpecific:case b.text:case b.lyric:case b.copyright:case b.trackName:case b.marker:case b.cuePoint:case b.instrumentName:case b.programName:break;case b.midiPort:this.assignMIDIPort(A,e.data[0]);break;case b.reset:this.synth.stopAllChannels(),this.synth.resetAllControllers();break;default:p(`%cUnrecognized Event: %c${e.statusByte}%c status byte: %c${Object.keys(b).find(a=>b[a]===n.status)}`,c.warn,c.unrecognized,c.warn,c.value);break}n.status>=0&&n.status<128&&this.callEvent("metaEvent",{event:e,trackIndex:A})}function Qo(){if(this.paused||!this._midiData)return;let e=this.currentTime;for(;this.playedTime<e;){let A=this.findFirstEventIndex(),n=this._midiData.tracks[A].events[this.eventIndexes[A]++];this.processEvent(n,A);let s=this.findFirstEventIndex(),a=this._midiData.tracks[s];if(this.loopCount>0&&this._midiData.loop.end<=n.ticks){this.loopCount!==1/0&&(this.loopCount--,this.callEvent("loopCountChange",{newCount:this.loopCount})),this.setTimeTicks(this._midiData.loop.start);return}if(a.events.length<=this.eventIndexes[s]){this.songIsFinished();return}let i=a.events[this.eventIndexes[s]];this.playedTime+=this.oneTickToSeconds*(i.ticks-n.ticks)}}function uo(e,A){this._midiData.tracks[e].channels.size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[A]=0),this.midiPortChannelOffsets[A]===void 0&&(this.synth.midiChannels.length<this.midiPortChannelOffset+15&&this.addNewMIDIPort(),this.midiPortChannelOffsets[A]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.currentMIDIPorts[e]=A)}function fo(e){if(!e.tracks)throw new Error("This MIDI has no tracks!");this.oneTickToSeconds=60/(120*e.timeDivision),this._midiData=e,this.synth.clearEmbeddedBank(),this._midiData.embeddedSoundBank!==void 0&&(p("%cEmbedded soundbank detected! Using it.",c.recognized),this.synth.setEmbeddedSoundBank(this._midiData.embeddedSoundBank,this._midiData.bankOffset)),MA("%cPreloading samples...",c.info),this._midiData.getUsedProgramsAndKeys(this.synth.soundBankManager).forEach((t,n)=>{p(`%cPreloading used samples on %c${n.name}%c...`,c.info,c.recognized,c.info);for(let s of t){let[a,i]=s.split("-").map(Number);this.synth.getVoicesForPreset(n,a,i,a)}}),X(),this.currentMIDIPorts=this._midiData.tracks.map(t=>t.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={},this._midiData.tracks.forEach((t,n)=>{this.assignMIDIPort(n,t.port)}),this.firstNoteTime=this._midiData.midiTicksToSeconds(this._midiData.firstNoteOn),p(`%cTotal song time: ${fs(Math.ceil(this._midiData.duration)).time}`,c.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(sA(`%cVery short song: (${fs(Math.round(this._midiData.duration)).time}). Disabling loop!`,c.warn),this.loopCount=0),this.currentTime=0}var r={INVALID:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,unused1:14,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,unused2:18,unused3:19,unused4:20,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,reserved1:42,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,reserved2:49,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,reserved3:55,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,unused5:59,endOper:60,vibLfoToVolume:61,vibLfoToFilterFc:62},Mn=Object.keys(r).length,mo=Math.max(...Object.values(r)),H=[];H[r.startAddrsOffset]={min:0,max:32768,def:0,nrpn:1};H[r.endAddrOffset]={min:-32768,max:32768,def:0,nrpn:1};H[r.startloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};H[r.endloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};H[r.startAddrsCoarseOffset]={min:0,max:32768,def:0,nrpn:1};H[r.modLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};H[r.vibLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};H[r.modEnvToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};H[r.initialFilterFc]={min:1500,max:13500,def:13500,nrpn:2};H[r.initialFilterQ]={min:0,max:960,def:0,nrpn:1};H[r.modLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};H[r.vibLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};H[r.modEnvToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};H[r.endAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};H[r.modLfoToVolume]={min:-960,max:960,def:0,nrpn:1};H[r.vibLfoToVolume]={min:-960,max:960,def:0,nrpn:1};H[r.chorusEffectsSend]={min:0,max:1e3,def:0,nrpn:1};H[r.reverbEffectsSend]={min:0,max:1e3,def:0,nrpn:1};H[r.pan]={min:-500,max:500,def:0,nrpn:1};H[r.delayModLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};H[r.freqModLFO]={min:-16e3,max:4500,def:0,nrpn:4};H[r.delayVibLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};H[r.freqVibLFO]={min:-16e3,max:4500,def:0,nrpn:4};H[r.delayModEnv]={min:-32768,max:5e3,def:-32768,nrpn:2};H[r.attackModEnv]={min:-32768,max:8e3,def:-32768,nrpn:2};H[r.holdModEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};H[r.decayModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};H[r.sustainModEnv]={min:0,max:1e3,def:0,nrpn:1};H[r.releaseModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};H[r.keyNumToModEnvHold]={min:-1200,max:1200,def:0,nrpn:1};H[r.keyNumToModEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};H[r.delayVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};H[r.attackVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};H[r.holdVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};H[r.decayVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};H[r.sustainVolEnv]={min:0,max:1440,def:0,nrpn:1};H[r.releaseVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};H[r.keyNumToVolEnvHold]={min:-1200,max:1200,def:0,nrpn:1};H[r.keyNumToVolEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};H[r.startloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};H[r.keyNum]={min:-1,max:127,def:-1,nrpn:1};H[r.velocity]={min:-1,max:127,def:-1,nrpn:1};H[r.initialAttenuation]={min:0,max:1440,def:0,nrpn:1};H[r.endloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};H[r.coarseTune]={min:-120,max:120,def:0,nrpn:1};H[r.fineTune]={min:-12700,max:12700,def:0,nrpn:1};H[r.scaleTuning]={min:0,max:1200,def:100,nrpn:1};H[r.exclusiveClass]={min:0,max:99999,def:0,nrpn:0};H[r.overridingRootKey]={min:-1,max:127,def:-1,nrpn:0};H[r.sampleModes]={min:0,max:3,def:0,nrpn:0};var DA={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},_={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},QA={linear:0,concave:1,convex:2,switch:3};var T={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},R={none:0,gain:1,reserved:2,pitch:3,pan:4,keyNum:5,chorusSend:128,reverbSend:129,modLfoFreq:260,modLfoDelay:261,vibLfoFreq:276,vibLfoDelay:277,volEnvAttack:518,volEnvDecay:519,reservedEG1:520,volEnvRelease:521,volEnvSustain:522,volEnvDelay:523,volEnvHold:524,modEnvAttack:778,modEnvDecay:779,reservedEG2:780,modEnvRelease:781,modEnvSustain:782,modEnvDelay:783,modEnvHold:784,filterCutoff:1280,filterQ:1281},ys={forward:0,loopAndRelease:1},fA=128,bn=147,We=new Int16Array(bn).fill(0),mA=(e,A)=>We[e]=A<<7;mA(S.mainVolume,100);mA(S.balance,64);mA(S.expressionController,127);mA(S.pan,64);mA(S.portamentoOnOff,127);mA(S.filterResonance,64);mA(S.releaseTime,64);mA(S.attackTime,64);mA(S.brightness,64);mA(S.decayTime,64);mA(S.vibratoRate,64);mA(S.vibratoDepth,64);mA(S.vibratoDelay,64);mA(S.generalPurposeController6,64);mA(S.generalPurposeController8,64);mA(S.registeredParameterLSB,127);mA(S.registeredParameterMSB,127);mA(S.nonRegisteredParameterLSB,127);mA(S.nonRegisteredParameterMSB,127);var ns=1;We[S.portamentoControl]=ns;mA(fA+_.pitchWheel,64);mA(fA+_.pitchWheelRange,2);var ea=Object.keys(rA).length,ta=new Float32Array(ea);ta[rA.modulationMultiplier]=1;function So(e=!0){if(e&&p("%cResetting all controllers!",c.info),this.privateProps.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",Os),!(!this.privateProps.drumPreset||!this.privateProps.defaultPreset)){for(let A=0;A<this.midiChannels.length;A++){let t=this.midiChannels[A];t.resetControllers(!1),t.resetPreset();for(let n=0;n<128;n++)this.midiChannels[A].lockedControllers[n]&&this.privateProps.callEvent("controllerChange",{channel:A,controllerNumber:n,controllerValue:this.midiChannels[A].midiControllers[n]>>7});if(!this.midiChannels[A].lockedControllers[fA+_.pitchWheel]){let n=this.midiChannels[A].midiControllers[fA+_.pitchWheel];this.privateProps.callEvent("pitchWheel",{channel:A,pitch:n})}if(!this.midiChannels[A].lockedControllers[fA+_.channelPressure]){let n=this.midiChannels[A].midiControllers[fA+_.channelPressure]>>7;this.privateProps.callEvent("channelPressure",{channel:A,pressure:n})}}this.privateProps.tunings.length=0,this.privateProps.tunings.length=0;for(let A=0;A<128;A++)this.privateProps.tunings.push([]);this.setMIDIVolume(1)}}function po(e=!0){this.channelOctaveTuning.fill(0);for(let t=0;t<We.length;t++){if(this.lockedControllers[t])continue;let n=We[t];this.midiControllers[t]!==n&&t<127?t===S.portamentoControl?this.midiControllers[t]=ns:t!==S.portamentoControl&&t!==S.dataEntryMSB&&t!==S.registeredParameterMSB&&t!==S.registeredParameterLSB&&t!==S.nonRegisteredParameterMSB&&t!==S.nonRegisteredParameterLSB&&this.controllerChange(t,n>>7,e):this.midiControllers[t]=n}this.channelVibrato={rate:0,depth:0,delay:0},this.randomPan=!1,this.sysExModulators.resetModulators();let A=this.customControllers[rA.channelTransposeFine];this.customControllers.set(ta),this.setCustomController(rA.channelTransposeFine,A),this.resetParameters()}function yo(){this.setBankMSB(dA.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channelNumber%16===Se),this.programChange(0)}var na=new Set([S.bankSelect,S.bankSelectLSB,S.mainVolume,S.mainVolumeLSB,S.pan,S.panLSB,S.reverbDepth,S.tremoloDepth,S.chorusDepth,S.detuneDepth,S.phaserDepth,S.soundVariation,S.filterResonance,S.releaseTime,S.attackTime,S.brightness,S.decayTime,S.vibratoRate,S.vibratoDepth,S.vibratoDelay,S.soundController10]);function ko(){this.channelOctaveTuning.fill(0),this.pitchWheel(8192),this.channelVibrato={rate:0,depth:0,delay:0};for(let e=0;e<128;e++){let A=We[e];!na.has(e)&&A!==this.midiControllers[e]&&(e===S.portamentoControl?this.midiControllers[e]=ns:this.controllerChange(e,A>>7))}this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function Do(){this.dataEntryState=HA.Idle,this.midiControllers[S.nonRegisteredParameterLSB]=16256,this.midiControllers[S.nonRegisteredParameterMSB]=16256,this.midiControllers[S.registeredParameterLSB]=16256,this.midiControllers[S.registeredParameterMSB]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var Ge=We.slice(0,128);function wo(e,A=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.externalMIDIPlayback?this.sendMIDIReset():(this.synth.resetAllControllers(),this.synth.stopAllChannels(!1)),this.playedTime=0,this.eventIndexes=Array(this._midiData.tracks.length).fill(0);let t=this.synth.midiChannels.length,n=Array(t).fill(8192),s=[];for(let o=0;o<t;o++)s.push({program:-1,bank:0,actualBank:0});let a=o=>o===S.dataDecrement||o===S.dataIncrement||o===S.dataEntryMSB||o===S.dataEntryLSB||o===S.registeredParameterLSB||o===S.registeredParameterMSB||o===S.nonRegisteredParameterLSB||o===S.nonRegisteredParameterMSB||o===S.bankSelect||o===S.bankSelectLSB||o===S.resetAllControllers,i=[];for(let o=0;o<t;o++)i.push(Array.from(Ge));function I(o){if(n[o]=8192,i?.[o]!==void 0)for(let g=0;g<Ge.length;g++)na.has(g)||(i[o][g]=Ge[g])}for(;;){let o=this.findFirstEventIndex(),g=this._midiData.tracks[o],B=g.events[this.eventIndexes[o]];if(A!==void 0){if(B.ticks>=A)break}else if(this.playedTime>=e)break;let d=As(B.statusByte),C=d.channel+(this.midiPortChannelOffsets[g.port]||0);switch(d.status){case b.noteOn:i[C]??=Array.from(Ge),i[C][S.portamentoControl]=B.data[0];break;case b.noteOff:break;case b.pitchWheel:n[C]=B.data[1]<<7|B.data[0];break;case b.programChange:{if(this._midiData.isMultiPort&&g.channels.size===0)break;let u=s[C];u.program=B.data[0],u.actualBank=u.bank;break}case b.controllerChange:{if(this._midiData.isMultiPort&&g.channels.size===0)break;let u=B.data[0];if(a(u)){let m=B.data[1];if(u===S.bankSelect){s[C].bank=m;break}else u===S.resetAllControllers&&I(C);this.externalMIDIPlayback?this.sendMIDICC(C,u,m):this.synth.controllerChange(C,u,m)}else i[C]??=Array.from(Ge),i[C][u]=B.data[1];break}default:this.processEvent(B,o);break}this.eventIndexes[o]++,o=this.findFirstEventIndex();let h=this._midiData.tracks[o].events[this.eventIndexes[o]];if(h===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(h.ticks-B.ticks)}if(this.externalMIDIPlayback){for(let o=0;o<t;o++)if(n[o]!==void 0&&this.sendMIDIPitchWheel(o,n[o]>>7,n[o]&127),i[o]!==void 0&&i[o].forEach((g,B)=>{g!==Ge[B]&&!a(B)&&this.sendMIDICC(o,B,g)}),s[o].program>=0&&s[o].actualBank>=0){let g=s[o].actualBank;this.sendMIDICC(o,S.bankSelect,g),this.sendMIDIProgramChange(o,s[o].program)}}else for(let o=0;o<t;o++)if(n[o]!==void 0&&this.synth.pitchWheel(o,n[o]),i[o]!==void 0&&i[o].forEach((g,B)=>{g!==Ge[B]&&!a(B)&&this.synth.controllerChange(o,B,g)}),s[o].actualBank>=0){let g=s[o];g.program!==-1?(this.synth.controllerChange(o,S.bankSelect,g.actualBank),this.synth.programChange(o,g.program)):this.synth.controllerChange(o,S.bankSelect,g.bank)}return this.paused&&(this.pausedTime=this.playedTime),!0}var sa=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;loopCount=0;skipToFirstNoteOn=!0;onEventCall;processTick=Qo.bind(this);firstNoteTime=0;oneTickToSeconds=0;eventIndexes=[];playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=uo.bind(this);loadNewSequence=fo.bind(this);processEvent=lo.bind(this);setTimeTo=wo.bind(this);constructor(e){this.synth=e,this.absoluteStartTime=this.synth.currentSynthTime}_midiData;get midiData(){return this._midiData}get duration(){return this._midiData?.duration??0}_songIndex=0;get songIndex(){return this._songIndex}set songIndex(e){this._songIndex=e,this._songIndex=Math.max(0,e%this.songs.length),this.loadCurrentSong()}_shuffleMode=!1;get shuffleMode(){return this._shuffleMode}set shuffleMode(e){this._shuffleMode=e,e?(this.shuffleSongIndexes(),this._songIndex=0,this.loadCurrentSong()):this._songIndex=this.shuffledSongIndexes[this._songIndex]}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(e){let A=this.currentTime;this._playbackRate=e,this.currentTime=A}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentSynthTime-this.absoluteStartTime)*this._playbackRate}set currentTime(e){if(this._midiData)if(this.paused&&(this.pausedTime=e),e>this._midiData.duration||e<0)this.skipToFirstNoteOn?this.setTimeTicks(this._midiData.firstNoteOn-1):this.setTimeTicks(0);else if(this.skipToFirstNoteOn&&e<this.firstNoteTime){this.setTimeTicks(this._midiData.firstNoteOn-1);return}else{if(this.playingNotes=[],this.callEvent("timeChange",{newTime:e}),this._midiData.duration===0){sA("No duration!"),this.callEvent("pause",{isFinished:!0});return}this.setTimeTo(e),this.recalculateStartTime(e)}}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData)throw new Error("No songs loaded in the sequencer!");this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.externalMIDIPlayback||this.playingNotes.forEach(e=>{this.synth.noteOn(e.channel,e.midiNote,e.velocity)}),this.pausedTime=void 0}pause(){this.pauseInternal(!1)}loadNewSongList(e){this.songs=e,!(this.songs.length<1)&&(this._songIndex=0,this.shuffleSongIndexes(),this.callEvent("songListChange",{newSongList:[...this.songs]}),this.loadCurrentSong())}callEvent(e,A){this?.onEventCall?.({type:e,data:A})}pauseInternal(e){this.paused||(this.stop(),this.callEvent("pause",{isFinished:e}))}songIsFinished(){if(this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime;for(let e=0;e<16;e++)this.synth.controllerChange(e,S.sustainPedal,0);if(this.synth.stopAllChannels(),this.externalMIDIPlayback){for(let e of this.playingNotes)this.sendMIDIMessage([b.noteOff|e.channel%16,e.midiNote]);for(let e=0;e<Rn;e++)this.sendMIDICC(e,S.allNotesOff,0)}}findFirstEventIndex(){let e=0,A=1/0;return this._midiData.tracks.forEach((t,n)=>{if(this.eventIndexes[n]>=t.events.length)return;let s=t.events[this.eventIndexes[n]];s.ticks<A&&(e=n,A=s.ticks)}),e}addNewMIDIPort(){for(let e=0;e<16;e++)this.synth.createMIDIChannel()}sendMIDIMessage(e){this.externalMIDIPlayback&&this.callEvent("midiMessage",{message:e})}sendMIDIReset(){this.sendMIDIMessage([b.reset]);for(let e=0;e<Rn;e++)this.sendMIDIMessage([b.controllerChange|e,S.allSoundOff,0]),this.sendMIDIMessage([b.controllerChange|e,S.resetAllControllers,0])}loadCurrentSong(){let e=this._songIndex;this._shuffleMode&&(e=this.shuffledSongIndexes[this._songIndex]),this.loadNewSequence(this.songs[e])}shuffleSongIndexes(){let e=this.songs.map((A,t)=>t);for(this.shuffledSongIndexes=[];e.length>0;){let A=e[Math.floor(Math.random()*e.length)];this.shuffledSongIndexes.push(A),e.splice(e.indexOf(A),1)}}sendMIDICC(e,A,t){e%=16,this.externalMIDIPlayback&&this.sendMIDIMessage([b.controllerChange|e,A,t])}sendMIDIProgramChange(e,A){e%=16,this.externalMIDIPlayback&&this.sendMIDIMessage([b.programChange|e,A])}sendMIDIPitchWheel(e,A,t){e%=16,this.externalMIDIPlayback&&this.sendMIDIMessage([b.pitchWheel|e,t,A])}setTimeTicks(e){if(!this._midiData)return;this.playingNotes=[];let A=this._midiData.midiTicksToSeconds(e);this.callEvent("timeChange",{newTime:A});let t=this.setTimeTo(0,e);this.recalculateStartTime(this.playedTime)}recalculateStartTime(e){this.absoluteStartTime=this.synth.currentSynthTime-e/this._playbackRate}},lt=lt!==void 0?lt:{},ks=!1,aa;lt.isInitialized=new Promise(e=>aa=e);var Fo=function(e){var A,t,n,s,a,i,I,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",g="",B=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do s=o.indexOf(e.charAt(B++)),a=o.indexOf(e.charAt(B++)),i=o.indexOf(e.charAt(B++)),I=o.indexOf(e.charAt(B++)),A=s<<2|a>>4,t=(15&a)<<4|i>>2,n=(3&i)<<6|I,g+=String.fromCharCode(A),i!==64&&(g+=String.fromCharCode(t)),I!==64&&(g+=String.fromCharCode(n));while(B<e.length);return g};(function(){var e,A,t,n,s,a,i,I,o,g,B,d,C,h,u,m,y,F,k,D,v,L,E=E!==void 0?E:{};E.wasmBinary=Uint8Array.from(Fo("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/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ACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOi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mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(l){return l.charCodeAt(0)});var E=E!==void 0?E:{},V={};for(e in E)E.hasOwnProperty(e)&&(V[e]=E[e]);E.arguments=[],E.thisProgram="./this.program",E.quit=function(l,Q){throw Q},E.preRun=[],E.postRun=[];var K=!1,nA=!1,j=!1,O=!1;K=typeof window=="object",nA=typeof importScripts=="function",j=typeof process=="object"&&typeof Ja=="function"&&!K&&!nA,O=!K&&!j&&!nA;var q="";function Z(l){return E.locateFile?E.locateFile(l,q):q+l}j?(q="/",E.read=function(Q,f){var w;return A||(A=void 0),t||(t=void 0),Q=t.normalize(Q),w=A.readFileSync(Q),f?w:w.toString()},E.readBinary=function(Q){var f=E.read(Q,!0);return f.buffer||(f=new Uint8Array(f)),NA(f.buffer),f},process.argv.length>1&&(E.thisProgram=process.argv[1].replace(/\\/g,"/")),E.arguments=process.argv.slice(2),typeof module<"u",process.on("uncaughtException",function(l){if(!(l instanceof ot))throw l}),process.on("unhandledRejection",function(l,Q){process.exit(1)}),E.quit=function(l){process.exit(l)},E.inspect=function(){return"[Emscripten Module object]"}):O?(typeof read<"u"&&(E.read=function(Q){return read(Q)}),E.readBinary=function(Q){var f;return typeof readbuffer=="function"?new Uint8Array(readbuffer(Q)):(NA(typeof(f=read(Q,"binary"))=="object"),f)},typeof scriptArgs<"u"?E.arguments=scriptArgs:typeof arguments<"u"&&(E.arguments=arguments),typeof quit=="function"&&(E.quit=function(l){quit(l)})):(K||nA)&&(K?document.currentScript&&(q=document.currentScript.src):q=self.location.href,q=q.indexOf("blob:")!==0?q.split("/").slice(0,-1).join("/")+"/":"",E.read=function(Q){var f=new XMLHttpRequest;return f.open("GET",Q,!1),f.send(null),f.responseText},nA&&(E.readBinary=function(Q){var f=new XMLHttpRequest;return f.open("GET",Q,!1),f.responseType="arraybuffer",f.send(null),new Uint8Array(f.response)}),E.readAsync=function(Q,f,w){var U=new XMLHttpRequest;U.open("GET",Q,!0),U.responseType="arraybuffer",U.onload=function(){if(U.status==200||U.status==0&&U.response){f(U.response);return}w()},U.onerror=w,U.send(null)},E.setWindowTitle=function(l){document.title=l});var eA=E.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),iA=E.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||eA);for(e in V)V.hasOwnProperty(e)&&(E[e]=V[e]);function YA(l){var Q=h;return h=h+l+15&-16,Q}function G(l){var Q=o[D>>2],f=Q+l+15&-16;return o[D>>2]=f,f>=SA&&!nt()?(o[D>>2]=Q,0):Q}function M(l,Q){return Q||(Q=16),l=Math.ceil(l/Q)*Q}function x(l){switch(l){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if(l[l.length-1]==="*")return 4;if(l[0]!=="i")return 0;var Q=parseInt(l.substr(1));return NA(Q%8==0),Q/8}}function AA(l){AA.shown||(AA.shown={}),AA.shown[l]||(AA.shown[l]=1,iA(l))}V=void 0;var tA={"f64-rem":function(l,Q){return l%Q},debugger:function(){}},FA=[];function se(l,Q){for(var f=0,w=f;w<f+0;w++)if(!FA[w])return FA[w]=l,1+w;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function zA(l){FA[l-1]=null}var WA={};function Ne(l,Q){if(l){NA(Q),WA[Q]||(WA[Q]={});var f=WA[Q];return f[l]||(Q.length===1?f[l]=function(){return $(Q,l)}:Q.length===2?f[l]=function(U){return $(Q,l,[U])}:f[l]=function(){return $(Q,l,Array.prototype.slice.call(arguments))}),f[l]}}function ae(l,Q,f){return f?+(l>>>0)+4294967296*+(Q>>>0):+(l>>>0)+4294967296*+(0|Q)}function $(l,Q,f){return f&&f.length?E["dynCall_"+l].apply(null,[Q].concat(f)):E["dynCall_"+l].call(null,Q)}var EA=0,_A=0;function NA(l,Q){l||Ie("Assertion failed: "+Q)}function Ce(l){var Q=E["_"+l];return NA(Q,"Cannot call unknown function "+l+", make sure it is exported"),Q}var he={stackSave:function(){gn()},stackRestore:function(){In()},arrayToC:function(l){var Q,f,w=wt(l.length);return Q=l,f=w,s.set(Q,f),w},stringToC:function(l){var Q=0;if(l!=null&&l!==0){var f=(l.length<<2)+1;Q=wt(f),et(l,Q,f)}return Q}},$e={string:he.stringToC,array:he.arrayToC};function Ue(l,Q,f,w,U){var W=Ce(l),aA=[],Y=0;if(w)for(var kA=0;kA<w.length;kA++){var hA=$e[f[kA]];hA?(Y===0&&(Y=gn()),aA[kA]=hA(w[kA])):aA[kA]=w[kA]}var lA,BA=W.apply(null,aA);return BA=(lA=BA,Q==="string"?le(lA):Q==="boolean"?!!lA:lA),Y!==0&&In(Y),BA}function At(l,Q,f,w){switch((f=f||"i8").charAt(f.length-1)==="*"&&(f="i32"),f){case"i1":case"i8":s[l>>0]=Q;break;case"i16":i[l>>1]=Q;break;case"i32":o[l>>2]=Q;break;case"i64":tempI64=[Q>>>0,+Ta(tempDouble=Q)>=1?tempDouble>0?(0|Ha(+hs(tempDouble/4294967296),4294967295))>>>0:~~+xa((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],o[l>>2]=tempI64[0],o[l+4>>2]=tempI64[1];break;case"float":B[l>>2]=Q;break;case"double":d[l>>3]=Q;break;default:Ie("invalid type for setValue: "+f)}}function An(l,Q,f){switch((Q=Q||"i8").charAt(Q.length-1)==="*"&&(Q="i32"),Q){case"i1":case"i8":return s[l>>0];case"i16":return i[l>>1];case"i32":case"i64":return o[l>>2];case"float":return B[l>>2];case"double":return d[l>>3];default:Ie("invalid type for getValue: "+Q)}return null}function en(l,Q,f,w){typeof l=="number"?(W=!0,aA=l):(W=!1,aA=l.length);var U=typeof Q=="string"?Q:null;if(Y=f==4?w:[typeof Dt=="function"?Dt:YA,wt,YA,G][f===void 0?2:f](Math.max(aA,U?1:Q.length)),W){for(w=Y,NA((3&Y)==0),kA=Y+(-4&aA);w<kA;w+=4)o[w>>2]=0;for(kA=Y+aA;w<kA;)s[w++>>0]=0;return Y}if(U==="i8")return l.subarray||l.slice?a.set(l,Y):a.set(new Uint8Array(l),Y),Y;for(var W,aA,Y,kA,hA,lA,BA,z=0;z<aA;){var vA=l[z];if((hA=U||Q[z])===0){z++;continue}hA=="i64"&&(hA="i32"),At(Y+z,vA,hA),BA!==hA&&(lA=x(hA),BA=hA),z+=lA}return Y}function Te(l){return u?on?Dt(l):G(l):YA(l)}function le(l,Q){if(Q===0||!l)return"";for(var f,w,U,W=0,aA=0;W|=w=a[l+aA>>0],(w!=0||Q)&&(aA++,!Q||aA!=Q););Q||(Q=aA);var Y="";if(W<128){for(;Q>0;)U=String.fromCharCode.apply(String,a.subarray(l,l+Math.min(Q,1024))),Y=Y?Y+U:U,l+=1024,Q-=1024;return Y}return f=l,(function(hA,lA){for(var BA=lA;hA[BA];)++BA;if(BA-lA>16&&hA.subarray&&ft)return ft.decode(hA.subarray(lA,BA));for(var z,vA,PA,JA,qA,we,KA="";;){if(!(z=hA[lA++]))return KA;if(!(128&z)){KA+=String.fromCharCode(z);continue}if(vA=63&hA[lA++],(224&z)==192){KA+=String.fromCharCode((31&z)<<6|vA);continue}if(PA=63&hA[lA++],(240&z)==224?z=(15&z)<<12|vA<<6|PA:(JA=63&hA[lA++],(248&z)==240?z=(7&z)<<18|vA<<12|PA<<6|JA:(qA=63&hA[lA++],z=(252&z)==248?(3&z)<<24|vA<<18|PA<<12|JA<<6|qA:(1&z)<<30|vA<<24|PA<<18|JA<<12|qA<<6|(we=63&hA[lA++]))),z<65536)KA+=String.fromCharCode(z);else{var it=z-65536;KA+=String.fromCharCode(55296|it>>10,56320|1023&it)}}})(a,f)}function UA(l){for(var Q="";;){var f=s[l++>>0];if(!f)return Q;Q+=String.fromCharCode(f)}}function tn(l,Q){return(function(w,U,W){for(var aA=0;aA<w.length;++aA)s[U++>>0]=w.charCodeAt(aA);W||(s[U>>0]=0)})(l,Q,!1)}var ft=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function xe(l,Q,f,w){if(!(w>0))return 0;for(var U=f,W=f+w-1,aA=0;aA<l.length;++aA){var Y=l.charCodeAt(aA);if(Y>=55296&&Y<=57343&&(Y=65536+((1023&Y)<<10)|1023&l.charCodeAt(++aA)),Y<=127){if(f>=W)break;Q[f++]=Y}else if(Y<=2047){if(f+1>=W)break;Q[f++]=192|Y>>6,Q[f++]=128|63&Y}else if(Y<=65535){if(f+2>=W)break;Q[f++]=224|Y>>12,Q[f++]=128|Y>>6&63,Q[f++]=128|63&Y}else if(Y<=2097151){if(f+3>=W)break;Q[f++]=240|Y>>18,Q[f++]=128|Y>>12&63,Q[f++]=128|Y>>6&63,Q[f++]=128|63&Y}else if(Y<=67108863){if(f+4>=W)break;Q[f++]=248|Y>>24,Q[f++]=128|Y>>18&63,Q[f++]=128|Y>>12&63,Q[f++]=128|Y>>6&63,Q[f++]=128|63&Y}else{if(f+5>=W)break;Q[f++]=252|Y>>30,Q[f++]=128|Y>>24&63,Q[f++]=128|Y>>18&63,Q[f++]=128|Y>>12&63,Q[f++]=128|Y>>6&63,Q[f++]=128|63&Y}}return Q[f]=0,f-U}function et(l,Q,f){return xe(l,a,Q,f)}function GA(l){for(var Q=0,f=0;f<l.length;++f){var w=l.charCodeAt(f);w>=55296&&w<=57343&&(w=65536+((1023&w)<<10)|1023&l.charCodeAt(++f)),w<=127?++Q:w<=2047?Q+=2:w<=65535?Q+=3:w<=2097151?Q+=4:w<=67108863?Q+=5:Q+=6}return Q}var oe=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function tt(l){for(var Q=l,f=Q>>1;i[f];)++f;if((Q=f<<1)-l>32&&oe)return oe.decode(a.subarray(l,Q));for(var w=0,U="";;){var W=i[l+2*w>>1];if(W==0)return U;++w,U+=String.fromCharCode(W)}}function nn(l,Q,f){if(f===void 0&&(f=2147483647),f<2)return 0;for(var w=Q,U=(f-=2)<2*l.length?f/2:l.length,W=0;W<U;++W){var aA=l.charCodeAt(W);i[Q>>1]=aA,Q+=2}return i[Q>>1]=0,Q-w}function ie(l){return 2*l.length}function mt(l){for(var Q=0,f="";;){var w=o[l+4*Q>>2];if(w==0)return f;if(++Q,w>=65536){var U=w-65536;f+=String.fromCharCode(55296|U>>10,56320|1023&U)}else f+=String.fromCharCode(w)}}function St(l,Q,f){if(f===void 0&&(f=2147483647),f<4)return 0;for(var w=Q,U=w+f-4,W=0;W<l.length;++W){var aA=l.charCodeAt(W);if(aA>=55296&&aA<=57343&&(aA=65536+((1023&aA)<<10)|1023&l.charCodeAt(++W)),o[Q>>2]=aA,(Q+=4)+4>U)break}return o[Q>>2]=0,Q-w}function gs(l){for(var Q=0,f=0;f<l.length;++f){var w=l.charCodeAt(f);w>=55296&&w<=57343&&++f,Q+=4}return Q}function cs(l){var Q=GA(l)+1,f=Dt(Q);return f&&xe(l,s,f,Q),f}function pt(l){var Q=GA(l)+1,f=wt(Q);return xe(l,s,f,Q),f}function ye(l){return l}function sn(){var l,Q=(function(){var w=Error();if(!w.stack){try{throw Error(0)}catch(U){w=U}if(!w.stack)return"(no stack trace available)"}return w.stack.toString()})();return E.extraStackTrace&&(Q+=`
2
- `+E.extraStackTrace()),(l=Q).replace(/__Z[\w\d_]+/g,function(f){var w,U=w=f;return f===U?f:f+" ["+U+"]"})}function re(l,Q){return l%Q>0&&(l+=Q-l%Q),l}function He(l){E.buffer=n=l}function ke(){E.HEAP8=s=new Int8Array(n),E.HEAP16=i=new Int16Array(n),E.HEAP32=o=new Int32Array(n),E.HEAPU8=a=new Uint8Array(n),E.HEAPU16=I=new Uint16Array(n),E.HEAPU32=g=new Uint32Array(n),E.HEAPF32=B=new Float32Array(n),E.HEAPF64=d=new Float64Array(n)}function nt(){var l=E.usingWasm?65536:16777216,Q=2147483648-l;if(o[D>>2]>Q)return!1;var f=SA;for(SA=Math.max(SA,16777216);SA<o[D>>2];)SA=SA<=536870912?re(2*SA,l):Math.min(re((3*SA+2147483648)/4,l),Q);var w=E.reallocBuffer(SA);return w&&w.byteLength==SA?(He(w),ke(),!0):(SA=f,!1)}C=h=m=y=F=k=D=0,u=!1,E.reallocBuffer||(E.reallocBuffer=function(l){try{if(ArrayBuffer.transfer)Q=ArrayBuffer.transfer(n,l);else{var Q,f=s;Q=new ArrayBuffer(l),new Int8Array(Q).set(f)}}catch{return!1}return!!Ya(Q)&&Q});try{(v=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{v=function(Q){return Q.byteLength}}var Ye=E.TOTAL_STACK||5242880,SA=E.TOTAL_MEMORY||16777216;function yt(){return SA}function de(l){for(;l.length>0;){var Q=l.shift();if(typeof Q=="function"){Q();continue}var f=Q.func;typeof f=="number"?Q.arg===void 0?E.dynCall_v(f):E.dynCall_vi(f,Q.arg):f(Q.arg===void 0?null:Q.arg)}}SA<Ye&&iA("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+SA+"! (TOTAL_STACK="+Ye+")"),E.buffer?n=E.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(E.wasmMemory=new WebAssembly.Memory({initial:SA/65536}),n=E.wasmMemory.buffer):n=new ArrayBuffer(SA),E.buffer=n),ke();var st=[],an=[],Es=[],Bs=[],Cs=[],on=!1,La=!1;function Na(l){st.unshift(l)}function Yi(l){an.unshift(l)}function Pi(l){Es.unshift(l)}function Ji(l){Bs.unshift(l)}function Ua(l){Cs.unshift(l)}function qi(l,Q,f){var w,U;AA("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),f&&(w=s[U=Q+GA(l)]),et(l,Q,1/0),f&&(s[U]=w)}function Ki(l,Q,f){return l>=0?l:Q<=32?2*Math.abs(1<<Q-1)+l:Math.pow(2,Q)+l}function Oi(l,Q,f){if(l<=0)return l;var w=Q<=32?Math.abs(1<<Q-1):Math.pow(2,Q-1);return l>=w&&(Q<=32||l>w)&&(l=-2*w+l),l}var Ta=Math.abs,xa=Math.ceil,hs=Math.floor,Ha=Math.min,De=0,rn=null,at=null;function Vi(l){return l}E.preloadedImages={},E.preloadedAudios={};var ls="data:application/octet-stream;base64,";function kt(l){return String.prototype.startsWith?l.startsWith(ls):l.indexOf(ls)===0}(function(){var Q="main.wast",f="main.wasm",w="main.temp.asm";kt(Q)||(Q=Z(Q)),kt(f)||(f=Z(f)),kt(w)||(w=Z(w));var U={global:null,env:null,asm2wasm:tA,parent:E},W=null;function aA(BA){return BA}function Y(){try{if(E.wasmBinary)return new Uint8Array(E.wasmBinary);if(E.readBinary)return E.readBinary(f);throw"both async and sync fetching of the wasm failed"}catch(BA){Ie(BA)}}E.asmPreload=E.asm;var kA=E.reallocBuffer,hA=function(BA){BA=re(BA,E.usingWasm?65536:16777216);var z=E.buffer.byteLength;if(E.usingWasm)try{var vA=E.wasmMemory.grow((BA-z)/65536);return vA!==-1?E.buffer=E.wasmMemory.buffer:null}catch{return null}};E.reallocBuffer=function(BA){return lA==="asmjs"?kA(BA):hA(BA)};var lA="";E.asm=function(BA,z,vA){var PA;if(!(z=PA=z).table){var JA,qA=E.wasmTableSize;qA===void 0&&(qA=1024);var we=E.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?we!==void 0?z.table=new WebAssembly.Table({initial:qA,maximum:we,element:"anyfunc"}):z.table=new WebAssembly.Table({initial:qA,element:"anyfunc"}):z.table=Array(qA),E.wasmTable=z.table}return z.memoryBase||(z.memoryBase=E.STATIC_BASE),z.tableBase||(z.tableBase=0),JA=(function(it,Pe,En){if(typeof WebAssembly!="object")return iA("no native wasm support detected"),!1;if(!(E.wasmMemory instanceof WebAssembly.Memory))return iA("no native wasm Memory in use"),!1;function Ft(jA,$A){if((W=jA.exports).memory){var rt,Bn,us;rt=W.memory,Bn=E.buffer,rt.byteLength<Bn.byteLength&&iA("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),us=new Int8Array(Bn),new Int8Array(rt).set(us),He(rt),ke()}E.asm=W,E.usingWasm=!0,(function($i){if(De--,E.monitorRunDependencies&&E.monitorRunDependencies(De),De==0&&(rn!==null&&(clearInterval(rn),rn=null),at)){var Pa=at;at=null,Pa()}})("wasm-instantiate")}if(Pe.memory=E.wasmMemory,U.global={NaN:NaN,Infinity:1/0},U["global.Math"]=Math,U.env=Pe,De++,E.monitorRunDependencies&&E.monitorRunDependencies(De),E.instantiateWasm)try{return E.instantiateWasm(U,Ft)}catch(jA){return iA("Module.instantiateWasm callback failed with error: "+jA),!1}function Je(jA){Ft(jA.instance,jA.module)}function Qs(jA){(!E.wasmBinary&&(K||nA)&&typeof fetch=="function"?fetch(f,{credentials:"same-origin"}).then(function($A){if(!$A.ok)throw"failed to load wasm binary file at '"+f+"'";return $A.arrayBuffer()}).catch(function(){return Y()}):new Promise(function($A,rt){$A(Y())})).then(function($A){return WebAssembly.instantiate($A,U)}).then(jA).catch(function($A){iA("failed to asynchronously prepare wasm: "+$A),Ie($A)})}return E.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||kt(f)||typeof fetch!="function"?Qs(Je):WebAssembly.instantiateStreaming(fetch(f,{credentials:"same-origin"}),U).then(Je).catch(function(jA){iA("wasm streaming compile failed: "+jA),iA("falling back to ArrayBuffer instantiation"),Qs(Je)}),{}})(BA,z,vA),NA(JA,"no binaryen method succeeded."),JA},E.asm})(),h=(C=1024)+4816,an.push(),E.STATIC_BASE=C,E.STATIC_BUMP=4816;var TA=h;function Xi(l){s[TA]=s[l],s[TA+1]=s[l+1],s[TA+2]=s[l+2],s[TA+3]=s[l+3]}function Zi(l){s[TA]=s[l],s[TA+1]=s[l+1],s[TA+2]=s[l+2],s[TA+3]=s[l+3],s[TA+4]=s[l+4],s[TA+5]=s[l+5],s[TA+6]=s[l+6],s[TA+7]=s[l+7]}function zi(l,Q,f){var w=f>0?f:GA(l)+1,U=Array(w),W=xe(l,U,0,U.length);return Q&&(U.length=W),U}function Wi(l){for(var Q=[],f=0;f<l.length;f++){var w=l[f];w>255&&(w&=255),Q.push(String.fromCharCode(w))}return Q.join("")}h+=16,D=YA(4),F=(m=y=M(h))+Ye,k=M(F),o[D>>2]=k,u=!0,E.wasmTableSize=4,E.wasmMaxTableSize=4,E.asmGlobalArg={},E.asmLibraryArg={abort:Ie,assert:NA,enlargeMemory:nt,getTotalMemory:yt,abortOnCannotGrowMemory:function(){Ie("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+SA+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_iii:function(Q,f,w){var U=gn();try{return E.dynCall_iii(Q,f,w)}catch(W){if(In(U),typeof W!="number"&&W!=="longjmp")throw W;E.setThrew(1,0)}},___assert_fail:function(Q,f,w,U){Ie("Assertion failed: "+le(Q)+", at: "+[f?le(f):"unknown filename",w,U?le(U):"unknown function"])},___setErrNo:function(Q){return E.___errno_location&&(o[E.___errno_location()>>2]=Q),Q},_abort:function(){E.abort()},_emscripten_memcpy_big:function(Q,f,w){return a.set(a.subarray(f,f+w),Q),Q},_llvm_floor_f64:hs,DYNAMICTOP_PTR:D,tempDoublePtr:TA,ABORT:EA,STACKTOP:y,STACK_MAX:F};var ds=E.asm(E.asmGlobalArg,E.asmLibraryArg,n);E.asm=ds,E.___errno_location=function(){return E.asm.___errno_location.apply(null,arguments)};var Ya=E._emscripten_replace_memory=function(){return E.asm._emscripten_replace_memory.apply(null,arguments)};E._free=function(){return E.asm._free.apply(null,arguments)};var Dt=E._malloc=function(){return E.asm._malloc.apply(null,arguments)};E._memcpy=function(){return E.asm._memcpy.apply(null,arguments)},E._memset=function(){return E.asm._memset.apply(null,arguments)},E._sbrk=function(){return E.asm._sbrk.apply(null,arguments)},E._stb_vorbis_js_channels=function(){return E.asm._stb_vorbis_js_channels.apply(null,arguments)},E._stb_vorbis_js_close=function(){return E.asm._stb_vorbis_js_close.apply(null,arguments)},E._stb_vorbis_js_decode=function(){return E.asm._stb_vorbis_js_decode.apply(null,arguments)},E._stb_vorbis_js_open=function(){return E.asm._stb_vorbis_js_open.apply(null,arguments)},E._stb_vorbis_js_sample_rate=function(){return E.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},E.establishStackSpace=function(){return E.asm.establishStackSpace.apply(null,arguments)},E.getTempRet0=function(){return E.asm.getTempRet0.apply(null,arguments)},E.runPostSets=function(){return E.asm.runPostSets.apply(null,arguments)},E.setTempRet0=function(){return E.asm.setTempRet0.apply(null,arguments)},E.setThrew=function(){return E.asm.setThrew.apply(null,arguments)};var wt=E.stackAlloc=function(){return E.asm.stackAlloc.apply(null,arguments)},In=E.stackRestore=function(){return E.asm.stackRestore.apply(null,arguments)},gn=E.stackSave=function(){return E.asm.stackSave.apply(null,arguments)};function ot(l){this.name="ExitStatus",this.message="Program terminated with exit("+l+")",this.status=l}function cn(l){l=l||E.arguments,!(De>0)&&((function(){if(E.preRun)for(typeof E.preRun=="function"&&(E.preRun=[E.preRun]);E.preRun.length;)Na(E.preRun.shift());de(st)})(),!(De>0)&&(E.calledRun||(E.setStatus?(E.setStatus("Running..."),setTimeout(function(){setTimeout(function(){E.setStatus("")},1),Q()},1)):Q())));function Q(){!E.calledRun&&(E.calledRun=!0,EA||(on||(on=!0,de(an)),de(Es),E.onRuntimeInitialized&&E.onRuntimeInitialized(),(function(){if(E.postRun)for(typeof E.postRun=="function"&&(E.postRun=[E.postRun]);E.postRun.length;)Ua(E.postRun.shift());de(Cs)})()))}}function _i(l,Q){(!Q||!E.noExitRuntime||l!==0)&&(E.noExitRuntime||(EA=!0,_A=l,y=L,de(Bs),La=!0,E.onExit&&E.onExit(l)),E.quit(l,new ot(l)))}function Ie(l){throw E.onAbort&&E.onAbort(l),l!==void 0?(eA(l),iA(l),l=JSON.stringify(l)):l="",EA=!0,_A=1,"abort("+l+"). Build with -s ASSERTIONS=1 for more info."}if(E.dynCall_iii=function(){return E.asm.dynCall_iii.apply(null,arguments)},E.asm=ds,E.ccall=Ue,E.cwrap=function(Q,f,w,U){var W=(w=w||[]).every(function(aA){return aA==="number"});return f!=="string"&&W&&!U?Ce(Q):function(){return Ue(Q,f,w,arguments,U)}},ot.prototype=Error(),ot.prototype.constructor=ot,at=function l(){E.calledRun||cn(),E.calledRun||(at=l)},E.run=cn,E.abort=Ie,E.preInit)for(typeof E.preInit=="function"&&(E.preInit=[E.preInit]);E.preInit.length>0;)E.preInit.pop()();E.noExitRuntime=!0,cn(),E.onRuntimeInitialized=()=>{ks=!0,aa()},lt.decode=function(l){return(function(f){if(!ks)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var w={};function U(Pe){return new Int32Array(E.HEAPU8.buffer,Pe,1)[0]}function W(Pe,En){var Ft=new ArrayBuffer(En*Float32Array.BYTES_PER_ELEMENT),Je=new Float32Array(Ft);return Je.set(new Float32Array(E.HEAPU8.buffer,Pe,En)),Je}w.open=E.cwrap("stb_vorbis_js_open","number",[]),w.close=E.cwrap("stb_vorbis_js_close","void",["number"]),w.channels=E.cwrap("stb_vorbis_js_channels","number",["number"]),w.sampleRate=E.cwrap("stb_vorbis_js_sample_rate","number",["number"]),w.decode=E.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var aA,Y,kA,hA,lA=w.open(),BA=(aA=f,Y=f.byteLength,kA=E._malloc(Y),(hA=new Uint8Array(E.HEAPU8.buffer,kA,Y)).set(new Uint8Array(aA,0,Y)),hA),z=E._malloc(4),vA=E._malloc(4),PA=w.decode(lA,BA.byteOffset,BA.byteLength,z,vA);if(E._free(BA.byteOffset),PA<0)throw w.close(lA),E._free(z),Error("stbvorbis decode failed: "+PA);for(var JA=w.channels(lA),qA=Array(JA),we=new Int32Array(E.HEAPU32.buffer,U(z),JA),KA=0;KA<JA;KA++)qA[KA]=W(we[KA],PA),E._free(we[KA]);var it=w.sampleRate(lA);return w.close(lA),E._free(U(z)),E._free(z),{data:qA,sampleRate:it,eof:!0,error:null}})(l)}})();var Ot=lt,ss=-15e3,Go=15e3,vn=new Float32Array(Go-ss+1);for(let e=0;e<vn.length;e++){let A=ss+e;vn[e]=Math.pow(2,A/1200)}function Qe(e){return e<=-32767?0:vn[e-ss]}var Yt=-2e4,oa=16500,Ln=new Float32Array(oa-Yt+1);for(let e=0;e<Ln.length;e++){let A=Yt+e;Ln[e]=440*Math.pow(2,(A-6900)/1200)}function Nn(e){return e<Yt||e>oa?440*Math.pow(2,(e-6900)/1200):Ln[~~e-Yt]}var as=-1660,Ro=1600,Un=new Float32Array((Ro-as)*100+1);for(let e=0;e<Un.length;e++){let A=(as*100+e)/100;Un[e]=Math.pow(10,-A/20)}function Ae(e){return Un[Math.floor((e-as)*100)]}var Mo=.01,xA=100,Qn=90,bo=15e-6,be=class ia{sampleRate;currentAttenuationDb=xA;state=0;attenuation=0;attenuationTargetGain=0;currentSampleTime=0;releaseStartDb=xA;releaseStartTimeSamples=0;currentReleaseGain=1;attackDuration=0;decayDuration=0;releaseDuration=0;attenuationTarget=0;sustainDbRelative=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;canEndOnSilentSustain;constructor(A,t){this.sampleRate=A,this.canEndOnSilentSustain=t/10>=Qn}static startRelease(A){A.volumeEnvelope.releaseStartTimeSamples=A.volumeEnvelope.currentSampleTime,A.volumeEnvelope.currentReleaseGain=Ae(A.volumeEnvelope.currentAttenuationDb),ia.recalculate(A)}static recalculate(A){let t=A.volumeEnvelope,n=g=>Math.max(0,Math.floor(Qe(g)*t.sampleRate));t.attenuationTarget=Math.max(0,Math.min(A.modulatedGenerators[r.initialAttenuation],1440))/10,t.attenuationTargetGain=Ae(t.attenuationTarget),t.sustainDbRelative=Math.min(xA,A.modulatedGenerators[r.sustainVolEnv]/10);let s=Math.min(xA,t.sustainDbRelative);t.attackDuration=n(A.modulatedGenerators[r.attackVolEnv]);let a=A.modulatedGenerators[r.decayVolEnv],i=(60-A.targetKey)*A.modulatedGenerators[r.keyNumToVolEnvDecay],I=s/xA;t.decayDuration=n(a+i)*I,t.releaseDuration=n(Math.max(-7200,A.modulatedGenerators[r.releaseVolEnv])),t.delayEnd=n(A.modulatedGenerators[r.delayVolEnv]),t.attackEnd=t.attackDuration+t.delayEnd;let o=(60-A.targetKey)*A.modulatedGenerators[r.keyNumToVolEnvHold];if(t.holdEnd=n(A.modulatedGenerators[r.holdVolEnv]+o)+t.attackEnd,t.decayEnd=t.decayDuration+t.holdEnd,t.state===0&&t.attackEnd===0&&(t.state=2),A.isInRelease){let g=Math.max(0,Math.min(xA,t.sustainDbRelative)),B=g/xA;switch(t.decayDuration=n(a+i)*B,t.state){case 0:t.releaseStartDb=xA;break;case 1:{let C=1-(t.attackEnd-t.releaseStartTimeSamples)/t.attackDuration;t.releaseStartDb=20*Math.log10(C)*-1;break}case 2:t.releaseStartDb=0;break;case 3:t.releaseStartDb=(1-(t.decayEnd-t.releaseStartTimeSamples)/t.decayDuration)*g;break;case 4:t.releaseStartDb=g;break}t.releaseStartDb=Math.max(0,Math.min(t.releaseStartDb,xA)),t.releaseStartDb>=Qn&&(A.finished=!0),t.currentReleaseGain=Ae(t.releaseStartDb);let d=(xA-t.releaseStartDb)/xA;t.releaseDuration*=d}}static apply(A,t,n,s){let a=A.volumeEnvelope,i=n/10,I=s;if(A.isInRelease){let g=a.currentSampleTime-a.releaseStartTimeSamples;if(g>=a.releaseDuration){for(let d=0;d<t.length;d++)t[d]=0;A.finished=!0;return}let B=xA-a.releaseStartDb;for(let d=0;d<t.length;d++){a.attenuation+=(a.attenuationTargetGain-a.attenuation)*I;let C=g/a.releaseDuration*B+a.releaseStartDb;a.currentReleaseGain=a.attenuation*Ae(C+i),t[d]*=a.currentReleaseGain,a.currentSampleTime++,g++}a.currentReleaseGain<=bo&&(A.finished=!0);return}let o=0;switch(a.state){case 0:for(;a.currentSampleTime<a.delayEnd;)if(a.currentAttenuationDb=xA,t[o]=0,a.currentSampleTime++,++o>=t.length)return;a.state++;case 1:for(;a.currentSampleTime<a.attackEnd;){a.attenuation+=(a.attenuationTargetGain-a.attenuation)*I;let g=1-(a.attackEnd-a.currentSampleTime)/a.attackDuration;if(t[o]*=g*a.attenuation*Ae(i),a.currentAttenuationDb=0,a.currentSampleTime++,++o>=t.length)return}a.state++;case 2:for(;a.currentSampleTime<a.holdEnd;)if(a.attenuation+=(a.attenuationTargetGain-a.attenuation)*I,t[o]*=a.attenuation*Ae(i),a.currentAttenuationDb=0,a.currentSampleTime++,++o>=t.length)return;a.state++;case 3:for(;a.currentSampleTime<a.decayEnd;)if(a.attenuation+=(a.attenuationTargetGain-a.attenuation)*I,a.currentAttenuationDb=(1-(a.decayEnd-a.currentSampleTime)/a.decayDuration)*a.sustainDbRelative,t[o]*=a.attenuation*Ae(a.currentAttenuationDb+i),a.currentSampleTime++,++o>=t.length)return;a.state++;case 4:for(a.canEndOnSilentSustain&&a.sustainDbRelative>=Qn&&(A.finished=!0);;)if(a.attenuation+=(a.attenuationTargetGain-a.attenuation)*I,t[o]*=a.attenuation*Ae(a.sustainDbRelative+i),a.currentAttenuationDb=a.sustainDbRelative,a.currentSampleTime++,++o>=t.length)return}}};function vo(e,A){switch(this.privateProps.masterParameters[e]=A,e){case"masterPan":{let t=A;t=t/2+.5,this.privateProps.panLeft=1-t,this.privateProps.panRight=t;break}case"masterGain":break;case"voiceCap":break;case"interpolationType":break;case"midiSystem":break;case"monophonicRetriggerMode":break;case"transposition":{let t=A;this.privateProps.masterParameters.transposition=0;for(let n of this.midiChannels)n.transposeChannel(t);this.privateProps.masterParameters.transposition=t}}this.callEvent("masterParameterChange",{parameter:e,value:A})}function Lo(e){return this.privateProps.masterParameters[e]}function No(){return{...this.privateProps.masterParameters}}function Me(e,A){return(e>>A&1)>0}function un(e){return e?1:0}var LA=16384,Pt=Object.keys(QA).length,ra=4,ce=new Float32Array(LA+1),ve=new Float32Array(LA+1);ce[0]=0;ce[ce.length-1]=1;ve[0]=0;ve[ve.length-1]=1;for(let e=1;e<LA-1;e++){let A=-.4166666666666667*Math.log(e/(ce.length-1))/Math.LN10;ve[e]=1-A,ce[ce.length-1-e]=A}function Ia(e,A,t){let n=!!(e&2);switch(!!(e&1)&&(t=1-t),A){case QA.linear:return n?t*2-1:t;case QA.switch:return t=t>.5?1:0,n?t*2-1:t;case QA.concave:return n?(t=t*2-1,t<0?-ce[~~(t*-LA)]:ce[~~(t*LA)]):ce[~~(t*LA)];case QA.convex:return n?(t=t*2-1,t<0?-ve[~~(t*-LA)]:ve[~~(t*LA)]):ve[~~(t*LA)]}}var XA=class Tn{isBipolar;isNegative;index;isCC;curveType;constructor(A=_.noController,t=QA.linear,n=!1,s=!1,a=!1){this.isBipolar=s,this.isNegative=a,this.index=A,this.isCC=n,this.curveType=t}get sourceName(){return this.isCC?Object.keys(S).find(A=>S[A]===this.index)??this.index.toString():Object.keys(_).find(A=>_[A]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(QA).find(A=>QA[A]===this.curveType)??this.curveType.toString()}static fromSourceEnum(A){let t=Me(A,9),n=Me(A,8),s=Me(A,7),a=A&127,i=A>>10&3;return new Tn(a,i,s,t,n)}static copyFrom(A){return new Tn(A.index,A.curveType,A.isCC,A.isBipolar,A.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|un(this.isBipolar)<<9|un(this.isNegative)<<8|un(this.isCC)<<7|this.index}isIdentical(A){return this.index===A.index&&this.isNegative===A.isNegative&&this.isCC===A.isCC&&this.isBipolar===A.isBipolar&&this.curveType===A.curveType}getValue(A,t){let n;if(this.isCC)n=A[this.index];else switch(this.index){case _.noController:n=16383;break;case _.noteOnKeyNum:n=t.midiNote<<7;break;case _.noteOnVelocity:n=t.velocity<<7;break;case _.polyPressure:n=t.pressure<<7;break;default:n=A[this.index+fA];break}let s=(this.isBipolar?2:0)|(this.isNegative?1:0);return ga[LA*(this.curveType*Pt+s)+n]}},ga=new Float32Array(LA*ra*Pt);for(let e=0;e<Pt;e++)for(let A=0;A<ra;A++){let t=LA*(e*Pt+A);for(let n=0;n<LA;n++)ga[t+n]=Ia(A,e,n/LA)}var me=10;function ge(e,A,t,n,s){return new XA(s,e,n,A,t).toSourceEnum()}var ca=ge(QA.linear,!0,!1,!0,S.filterResonance),cA=class xn{currentValue=0;destination=r.initialAttenuation;transformAmount=0;transformType=0;isEffectModulator=!1;isDefaultResonantModulator=!1;primarySource;secondarySource;constructor(A=new XA,t=new XA,n=r.INVALID,s=0,a=0,i=!1,I=!1){this.primarySource=A,this.secondarySource=t,this.destination=n,this.transformAmount=s,this.transformType=a,this.isEffectModulator=i,this.isDefaultResonantModulator=I}get destinationName(){return Object.keys(r).find(A=>r[A]===this.destination)}static isIdentical(A,t,n=!1){return A.primarySource.isIdentical(t.primarySource)&&A.secondarySource.isIdentical(t.secondarySource)&&A.destination===t.destination&&A.transformType===t.transformType&&(!n||A.transformAmount===t.transformAmount)}static copyFrom(A){return new xn(XA.copyFrom(A.primarySource),XA.copyFrom(A.secondarySource),A.destination,A.transformAmount,A.transformType,A.isEffectModulator,A.isDefaultResonantModulator)}toString(){return`Source: ${this.primarySource.toString()}
1
+ var Fe=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof require<"u"?require:A)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Ja=(e=>typeof Fe<"u"?Fe:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(typeof Fe<"u"?Fe:A)[t]}):e)(function(e){if(typeof Fe<"u")return Fe.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')}),Y=class extends Uint8Array{currentIndex=0;slice(e,A){let t=super.slice(e,A);return t.currentIndex=0,t}};function ee(e,A=e.length,t=0){let n="";for(let s=0;s<A;s++){let a=e[t+s];if(a===0)return n;n+=String.fromCharCode(a)}return n}function hA(e,A){let t=e.currentIndex;return e.currentIndex+=A,ee(e,A,t)}function ne(e,A=!1,t=!1){let n=e.length;A&&n++,t&&n%2!==0&&n++;let s=new Y(n);return kA(s,e),s}function kA(e,A,t=0){t>0&&A.length>t&&(A=A.slice(0,t));for(let n=0;n<A.length;n++)e[e.currentIndex++]=A.charCodeAt(n);if(t>A.length)for(let n=0;n<t-A.length;n++)e[e.currentIndex++]=0;return e}function N(e,A){let t=xs(e,A,e.currentIndex);return e.currentIndex+=A,t}function xs(e,A,t=0){let n=0;for(let s=0;s<A;s++)n|=e[t+s]<<s*8;return n>>>0}function ht(e,A,t){for(let n=0;n<t;n++)e[e.currentIndex++]=A>>n*8&255}function J(e,A){e[e.currentIndex++]=A&255,e[e.currentIndex++]=A>>8}function gA(e,A){ht(e,A,4)}function jn(e,A){let t=A<<8|e;return t>32767?t-65536:t}function qa(e){return e>127?e-256:e}var Hs=class{header;size;data;constructor(e,A,t){this.header=e,this.size=A,this.data=t}};function iA(e,A=!0,t=!1){let n=hA(e,4),s=N(e,4);n===""&&(s=0);let a;return A?a=e.slice(e.currentIndex,e.currentIndex+s):a=new Y(0),(A||t)&&(e.currentIndex+=s,s%2!==0&&e.currentIndex++),new Hs(n,s,a)}function cA(e,A,t=!1,n=!1){if(e.length!==4)throw new Error(`Invalid header length: ${e}`);let s=8,a=e,i=A.length;t&&i++;let I=i;n&&(s+=4,I+=4,a="LIST");let o=s+i;o%2!==0&&o++;let g=new Y(o);return kA(g,a),gA(g,I),n&&kA(g,e),g.set(A,s),g}function vA(e,A,t=!1){let n=8,s=e,a=A.reduce((g,B)=>B.length+g,0),i=a;t&&(n+=4,i+=4,s="LIST");let I=n+a;I%2!==0&&I++;let o=new Y(I);return kA(o,s),gA(o,i),t&&kA(o,e),A.forEach(g=>{o.set(g,n),n+=g.length}),o}function fe(e,A){return e.find(t=>t.header!=="LIST"?!1:(t.data.currentIndex=4,ee(t.data,4)===A))}function $n(e,A){return{...A,...e??{}}}function Qt(e,A,t=0){let n=0;for(let s=0;s<A;s++)n=n<<8|e[t+s];return n>>>0}function Xe(e,A){let t=Qt(e,A,e.currentIndex);return e.currentIndex+=A,t}function Gt(e,A){let t=new Array(A).fill(0);for(let n=A-1;n>=0;n--)t[n]=e&255,e>>=8;return t}function uA(e){let A=0;for(;e;){let t=e[e.currentIndex++];if(A=A<<7|t&127,t>>7!==1)break}return A}function Cn(e){let A=[e&127];for(e>>=7;e>0;)A.unshift(e&127|128),e>>=7;return A}function fs(e){e=Math.floor(e);let A=Math.floor(e/60),t=Math.round(e-A*60);return{minutes:A,seconds:t,time:`${A.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}}function MA(e){let A="";for(let t of e){let n=t.toString(16).padStart(2,"0").toUpperCase();A+=n,A+=" "}return A}var c={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},Ys;(()=>{var e=Uint8Array,A=Uint16Array,t=Int32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),i=function(G,b){for(var K=new A(31),eA=0;eA<31;++eA)K[eA]=b+=1<<G[eA-1];for(var aA=new t(K[30]),eA=1;eA<30;++eA)for(var GA=K[eA];GA<K[eA+1];++GA)aA[GA]=GA-K[eA]<<5|eA;return{b:K,r:aA}},I=i(n,2),o=I.b,g=I.r;o[28]=258,g[258]=28;var B=i(s,0),d=B.b,h=B.r,C=new A(32768);for(k=0;k<32768;++k)Q=(k&43690)>>1|(k&21845)<<1,Q=(Q&52428)>>2|(Q&13107)<<2,Q=(Q&61680)>>4|(Q&3855)<<4,C[k]=((Q&65280)>>8|(Q&255)<<8)>>1;var Q,k,m=function(G,b,K){for(var eA=G.length,aA=0,GA=new A(b);aA<eA;++aA)G[aA]&&++GA[G[aA]-1];var se=new A(b);for(aA=1;aA<b;++aA)se[aA]=se[aA-1]+GA[aA-1]<<1;var zA;if(K){zA=new A(1<<b);var WA=15-b;for(aA=0;aA<eA;++aA)if(G[aA])for(var Ne=aA<<4|G[aA],ae=b-G[aA],AA=se[G[aA]-1]++<<ae,BA=AA|(1<<ae)-1;AA<=BA;++AA)zA[C[AA]>>WA]=Ne}else for(zA=new A(eA),aA=0;aA<eA;++aA)G[aA]&&(zA[aA]=C[se[G[aA]-1]++]>>15-G[aA]);return zA},y=new e(288);for(k=0;k<144;++k)y[k]=8;var k;for(k=144;k<256;++k)y[k]=9;var k;for(k=256;k<280;++k)y[k]=7;var k;for(k=280;k<288;++k)y[k]=8;var k,F=new e(32);for(k=0;k<32;++k)F[k]=5;var k,D=m(y,9,1),v=m(F,5,1),L=function(G){for(var b=G[0],K=1;K<G.length;++K)G[K]>b&&(b=G[K]);return b},E=function(G,b,K){var eA=b/8|0;return(G[eA]|G[eA+1]<<8)>>(b&7)&K},X=function(G,b){var K=b/8|0;return(G[K]|G[K+1]<<8|G[K+2]<<16)>>(b&7)},O=function(G){return(G+7)/8|0},nA=function(G,b,K){return(b==null||b<0)&&(b=0),(K==null||K>G.length)&&(K=G.length),new e(G.subarray(b,K))},$=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],V=function(G,b,K){var eA=new Error(b||$[G]);if(eA.code=G,Error.captureStackTrace&&Error.captureStackTrace(eA,V),!K)throw eA;return eA},q=function(G,b,K,eA){var aA=G.length,GA=eA?eA.length:0;if(!aA||b.f&&!b.l)return K||new e(0);var se=!K,zA=se||b.i!=2,WA=b.i;se&&(K=new e(aA*3));var Ne=function(yt){var de=K.length;if(yt>de){var st=new e(Math.max(de*2,yt));st.set(K),K=st}},ae=b.f||0,AA=b.p||0,BA=b.b||0,_A=b.l,UA=b.d,Ce=b.m,he=b.n,$e=aA*8;do{if(!_A){ae=E(G,AA,1);var Ue=E(G,AA+1,3);if(AA+=3,Ue)if(Ue==1)_A=D,UA=v,Ce=9,he=5;else if(Ue==2){var At=E(G,AA,31)+257,An=E(G,AA+10,15)+4,en=At+E(G,AA+5,31)+1;AA+=14;for(var Te=new e(en),le=new e(19),TA=0;TA<An;++TA)le[a[TA]]=E(G,AA+TA*3,7);AA+=An*3;for(var tn=L(le),ft=(1<<tn)-1,xe=m(le,tn,1),TA=0;TA<en;){var et=xe[E(G,AA,ft)];AA+=et&15;var RA=et>>4;if(RA<16)Te[TA++]=RA;else{var oe=0,tt=0;for(RA==16?(tt=3+E(G,AA,3),AA+=2,oe=Te[TA-1]):RA==17?(tt=3+E(G,AA,7),AA+=3):RA==18&&(tt=11+E(G,AA,127),AA+=7);tt--;)Te[TA++]=oe}}var nn=Te.subarray(0,At),ie=Te.subarray(At);Ce=L(nn),he=L(ie),_A=m(nn,Ce,1),UA=m(ie,he,1)}else V(1);else{var RA=O(AA)+4,mt=G[RA-4]|G[RA-3]<<8,St=RA+mt;if(St>aA){WA&&V(0);break}zA&&Ne(BA+mt),K.set(G.subarray(RA,St),BA),b.b=BA+=mt,b.p=AA=St*8,b.f=ae;continue}if(AA>$e){WA&&V(0);break}}zA&&Ne(BA+131072);for(var gs=(1<<Ce)-1,cs=(1<<he)-1,pt=AA;;pt=AA){var oe=_A[X(G,AA)&gs],ye=oe>>4;if(AA+=oe&15,AA>$e){WA&&V(0);break}if(oe||V(2),ye<256)K[BA++]=ye;else if(ye==256){pt=AA,_A=null;break}else{var sn=ye-254;if(ye>264){var TA=ye-257,re=n[TA];sn=E(G,AA,(1<<re)-1)+o[TA],AA+=re}var He=UA[X(G,AA)&cs],ke=He>>4;He||V(3),AA+=He&15;var ie=d[ke];if(ke>3){var re=s[ke];ie+=X(G,AA)&(1<<re)-1,AA+=re}if(AA>$e){WA&&V(0);break}zA&&Ne(BA+131072);var nt=BA+sn;if(BA<ie){var Ye=GA-ie,pA=Math.min(ie,nt);for(Ye+BA<0&&V(3);BA<pA;++BA)K[BA]=eA[Ye+BA]}for(;BA<nt;++BA)K[BA]=K[BA-ie]}}b.l=_A,b.p=pt,b.b=BA,b.f=ae,_A&&(ae=1,b.m=Ce,b.d=UA,b.n=he)}while(!ae);return BA!=K.length&&se?nA(K,0,BA):K.subarray(0,BA)},z=new e(0);function tA(G,b){return q(G,{i:2},b&&b.out,b&&b.dictionary)}var rA=typeof TextDecoder<"u"&&new TextDecoder,P=0;try{rA.decode(z,{stream:!0}),P=1}catch{}Ys=tA})();var Ps=Ys,Js=!1,qs=!0,qt=!1;function Ks(e,A,t){Js=e,qs=A,qt=t}function p(...e){Js&&console.info(...e)}function sA(...e){qs&&console.warn(...e)}function OA(...e){qt&&console.group(...e)}function bA(...e){qt&&console.groupCollapsed(...e)}function Z(){qt&&console.groupEnd()}var Ee={consoleColors:c,SpessaSynthInfo:p,SpessaSynthWarn:sA,SpessaSynthGroupCollapsed:bA,SpessaSynthGroup:OA,SpessaSynthGroupEnd:Z,readBytesAsUintBigEndian:Qt,readLittleEndian:N,readBytesAsString:hA,readVariableLengthQuantity:uA,inflateSync:Ps};var ZA=class{ticks;statusByte;data;constructor(e,A,t){this.ticks=e,this.statusByte=A,this.data=t}};function Ka(e){let A=e&240,t=e&15,n=t;switch(A){case 128:case 144:case 160:case 176:case 192:case 208:case 224:break;case 240:switch(t){case 0:n=-3;break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:n=-1;break;case 15:n=-2;break}break;default:n=-1}return n}function As(e){let A=e&240,t=e&15,n=-1,s=e;return A>=128&&A<=224&&(n=t,s=A),{status:s,channel:n}}var Oa={8:2,9:2,10:2,11:2,12:1,13:1,14:2},M={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchWheel:224,systemExclusive:240,timecode:241,songPosition:242,songSelect:243,tuneRequest:246,clock:248,start:250,continue:251,stop:252,activeSensing:254,reset:255,sequenceNumber:0,text:1,copyright:2,trackName:3,instrumentName:4,lyric:5,marker:6,cuePoint:7,programName:8,midiChannelPrefix:32,midiPort:33,endOfTrack:47,setTempo:81,smpteOffset:84,timeSignature:88,keySignature:89,sequenceSpecific:127},S={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expressionController:11,effectControl1:12,effectControl2:13,undefinedCC14:14,undefinedCC15:15,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,undefinedCC20:20,undefinedCC21:21,undefinedCC22:22,undefinedCC23:23,undefinedCC24:24,undefinedCC25:25,undefinedCC26:26,undefinedCC27:27,undefinedCC28:28,undefinedCC29:29,undefinedCC30:30,undefinedCC31:31,bankSelectLSB:32,modulationWheelLSB:33,breathControllerLSB:34,undefinedCC3LSB:35,footControllerLSB:36,portamentoTimeLSB:37,dataEntryLSB:38,mainVolumeLSB:39,balanceLSB:40,undefinedCC9LSB:41,panLSB:42,expressionControllerLSB:43,effectControl1LSB:44,effectControl2LSB:45,undefinedCC14LSB:46,undefinedCC15LSB:47,undefinedCC16LSB:48,undefinedCC17LSB:49,undefinedCC18LSB:50,undefinedCC19LSB:51,undefinedCC20LSB:52,undefinedCC21LSB:53,undefinedCC22LSB:54,undefinedCC23LSB:55,undefinedCC24LSB:56,undefinedCC25LSB:57,undefinedCC26LSB:58,undefinedCC27LSB:59,undefinedCC28LSB:60,undefinedCC29LSB:61,undefinedCC30LSB:62,undefinedCC31LSB:63,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,undefinedCC85:85,undefinedCC86:86,undefinedCC87:87,undefinedCC88:88,undefinedCC89:89,undefinedCC90:90,reverbDepth:91,tremoloDepth:92,chorusDepth:93,detuneDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,nonRegisteredParameterLSB:98,nonRegisteredParameterMSB:99,registeredParameterLSB:100,registeredParameterMSB:101,undefinedCC102LSB:102,undefinedCC103LSB:103,undefinedCC104LSB:104,undefinedCC105LSB:105,undefinedCC106LSB:106,undefinedCC107LSB:107,undefinedCC108LSB:108,undefinedCC109LSB:109,undefinedCC110LSB:110,undefinedCC111LSB:111,undefinedCC112LSB:112,undefinedCC113LSB:113,undefinedCC114LSB:114,undefinedCC115LSB:115,undefinedCC116LSB:116,undefinedCC117LSB:117,undefinedCC118LSB:118,undefinedCC119LSB:119,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127};function Va(e){if(!e.tracks)throw new Error("MIDI has no tracks!");let A=[];for(let s of e.tracks){let a=[],i=0,I;for(let o of s.events){let g=Math.max(0,o.ticks-i);if(o.statusByte===M.endOfTrack){i+=g;continue}let B;o.statusByte<=M.sequenceSpecific?(B=[255,o.statusByte,...Cn(o.data.length),...o.data],I=void 0):o.statusByte===M.systemExclusive?(B=[240,...Cn(o.data.length),...o.data],I=void 0):(B=[],I!==o.statusByte&&(I=o.statusByte,B.push(o.statusByte)),B.push(...o.data)),a.push(...Cn(g)),a.push(...B),i+=g}a.push(0),a.push(255),a.push(M.endOfTrack),a.push(0),A.push(new Uint8Array(a))}let t=(s,a)=>{for(let i=0;i<s.length;i++)a.push(s.charCodeAt(i))},n=[];t("MThd",n),n.push(...Gt(6,4)),n.push(0,e.format),n.push(...Gt(e.tracks.length,2)),n.push(...Gt(e.timeDivision,2));for(let s of A)t("MTrk",n),n.push(...Gt(s.length,4)),n.push(...s);return new Uint8Array(n).buffer}var Xa=350,Se=9,Rn=16,Os="gs",Be=-1,Rt=`SPESSASYNTH_EMBEDDED_BANK_${Math.random()}_DO_NOT_DELETE`,Vs=32767,Za={time:0},za=.03,Wa=.07,_a=1,ja=64,ms=121,fA=class{static getDefaultBank(e){return e==="gm2"?ms:0}static getDrumBank(e){switch(e){default:throw new Error(`${e} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrums(e){return e===120||e===126||e===127}static isValidXGMSB(e){return this.isXGDrums(e)||e===ja||e===ms}static isSystemXG(e){return e==="gm2"||e==="xg"}static addBankOffset(e,A,t=!0){return this.isXGDrums(e)&&t?e:Math.min(e+A,127)}static subtrackBankOffset(e,A,t=!0){return this.isXGDrums(e)&&t?e:Math.max(0,e-A)}};function es(e){return e.data[0]===67&&e.data[2]===76&&e.data[5]===126&&e.data[6]===0}function Xs(e){return e.data[0]===65&&e.data[2]===66&&e.data[3]===18&&e.data[4]===64&&(e.data[5]&16)!==0&&e.data[6]===21}function Zs(e){return e.data[0]===65&&e.data[2]===66&&e.data[6]===127}function zs(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===1}function Ws(e){return e.data[0]===126&&e.data[2]===9&&e.data[3]===3}function _s(e){return new ZA(e,M.systemExclusive,new Y([65,16,66,18,64,0,127,0,65,247]))}var te=class js{static toMIDIString(A){return A.isGMGSDrum?`DRUM:${A.program}`:`${A.bankLSB}:${A.bankMSB}:${A.program}`}static fromMIDIString(A){let t=A.split(":");if(t.length>3||t.length<2)throw new Error("Invalid MIDI string:");return A.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:parseInt(t[1]),isGMGSDrum:!0}:{bankLSB:parseInt(t[0]),bankMSB:parseInt(t[1]),program:parseInt(t[2]),isGMGSDrum:!1}}static toNamedMIDIString(A){return`${js.toMIDIString(A)} ${A.name}`}static matches(A,t){return A.isGMGSDrum||t.isGMGSDrum?A.isGMGSDrum===t.isGMGSDrum&&A.program===t.program:A.program===t.program&&A.bankLSB===t.bankLSB&&A.bankMSB===t.bankMSB}static fromNamedMIDIString(A){let t=A.indexOf(" ");if(t<0)throw new Error(`Invalid named MIDI string: ${A}`);let n=this.fromMIDIString(A.substring(0,t)),s=A.substring(t+1);return{...n,name:s}}static sorter(A,t){return A.program!==t.program?A.program-t.program:A.isGMGSDrum&&!t.isGMGSDrum?1:!A.isGMGSDrum&&t.isGMGSDrum?-1:A.bankMSB!==t.bankMSB?A.bankMSB-t.bankMSB:A.bankLSB-t.bankLSB}},$a="Created using SpessaSynth";function Ao(e,A,t){let n="gm",s=[],a=Array(e.tracks.length).fill(0),i=e.tracks.length,I=()=>{let d=0,h=1/0;return e.tracks.forEach((C,Q)=>{a[Q]>=C.events.length||C.events[a[Q]].ticks<h&&(d=Q,h=C.events[a[Q]].ticks)}),d},o=Array(e.tracks.length).fill(0),g=16+Math.max(...e.portChannelOffsetMap),B=[];for(let d=0;d<g;d++)B.push({program:0,drums:d%16===Se,lastBank:void 0,lastBankLSB:void 0,hasBankSelect:!1});for(;i>0;){let d=I(),h=e.tracks[d];if(a[d]>=h.events.length){i--;continue}let C=h.events[a[d]];a[d]++;let Q=e.portChannelOffsetMap[o[d]];if(C.statusByte===M.midiPort){o[d]=C.data[0];continue}let m=C.statusByte&240;if(m!==M.controllerChange&&m!==M.programChange&&m!==M.systemExclusive)continue;if(m===M.systemExclusive){if(!Xs(C)){es(C)?n="xg":Zs(C)?n="gs":zs(C)?(n="gm",s.push({tNum:d,e:C})):Ws(C)&&(n="gm2");continue}let D=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][C.data[5]&15]+Q;B[D].drums=!!(C.data[7]>0&&C.data[5]>>4);continue}let y=(C.statusByte&15)+Q,F=B[y];if(m===M.programChange){let v={program:C.data[0],bankLSB:F.lastBankLSB?.data?.[1]??0,bankMSB:fA.subtrackBankOffset(F.lastBank?.data?.[1]??0,e.bankOffset),isGMGSDrum:F.drums},L=t.getPreset(v,n);if(p(`%cInput patch: %c${te.toMIDIString(v)}%c. Channel %c${y}%c. Changing patch to ${L.toString()}.`,c.info,c.unrecognized,c.info,c.recognized,c.info),C.data[0]=L.program,L.isGMGSDrum&&fA.isSystemXG(n)||F.lastBank===void 0||(F.lastBank.data[1]=fA.addBankOffset(L.bankMSB,A,L.isXGDrums),F.lastBankLSB===void 0))continue;F.lastBankLSB.data[1]=L.bankLSB;continue}let k=C.data[0]===S.bankSelectLSB;C.data[0]!==S.bankSelect&&!k||(F.hasBankSelect=!0,k?F.lastBankLSB=C:F.lastBank=C)}if(B.forEach((d,h)=>{if(d.hasBankSelect)return;let C=h%16,Q=M.programChange|C,m=Math.floor(h/16)*16,y=e.portChannelOffsetMap.indexOf(m),F=e.tracks.find(E=>E.port===y&&E.channels.has(C));if(F===void 0)return;let k=F.events.findIndex(E=>E.statusByte===Q);if(k===-1){let E=F.events.findIndex(nA=>nA.statusByte>128&&nA.statusByte<240&&(nA.statusByte&15)===C);if(E===-1)return;let X=F.events[E].ticks,O=t.getPreset({bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1},n).program;F.addEvent(new ZA(X,M.programChange|C,new Y([O])),E),k=E}p(`%cAdding bank select for %c${h}`,c.info,c.recognized);let D=F.events[k].ticks,v=t.getPreset({bankLSB:0,bankMSB:0,program:d.program,isGMGSDrum:d.drums},n),L=fA.addBankOffset(v.bankMSB,A,v.isXGDrums);F.addEvent(new ZA(D,M.controllerChange|C,new Y([S.bankSelect,L])),k)}),n!=="gs"&&!fA.isSystemXG(n)){for(let h of s){let C=e.tracks[h.tNum];C.deleteEvent(C.events.indexOf(h.e))}let d=0;e.tracks[0].events[0].statusByte===M.trackName&&d++,e.tracks[0].addEvent(_s(0),d)}}var Ss={bankOffset:0,metadata:{},correctBankOffset:!0,soundBank:void 0};function eo(e,A,t){let n=t.metadata;if(OA("%cWriting the RMIDI File...",c.info),p("metadata",n),p("Initial bank offset",e.bankOffset),t.correctBankOffset){if(!t.soundBank)throw new Error("Sound bank must be provided if correcting bank offset.");Ao(e,t.bankOffset,t.soundBank)}let s=new Y(e.writeMIDI());n.name??=e.getName(),n.creationDate??=new Date,n.copyright??=$a,n.software??="SpessaSynth",Object.entries(n).forEach(I=>{let o=I;o[1]&&e.setRMIDInfo(o[0],o[1])});let a=[];Object.entries(e.rmidiInfo).forEach(I=>{let o=I[0],g=I[1],B=d=>{a.push(cA(d,g))};switch(o){case"album":B("IALB"),B("IPRD");break;case"software":B("ISFT");break;case"infoEncoding":B("IENC");break;case"creationDate":B("ICRD");break;case"picture":B("IPIC");break;case"name":B("INAM");break;case"artist":B("IART");break;case"genre":B("IGNR");break;case"copyright":B("ICOP");break;case"comment":B("ICMT");break;case"engineer":B("IENG");break;case"subject":B("ISBJ");break;case"midiEncoding":B("MENC");break}});let i=new Y(2);return ht(i,t.bankOffset,2),a.push(cA("DBNK",i)),p("%cFinished!",c.info),Z(),vA("RIFF",[ne("RMID"),cA("data",s),vA("INFO",a,!0),new Y(A)]).buffer}function to(e,A){bA("%cSearching for all used programs and keys...",c.info);let t=16+Math.max(...e.portChannelOffsetMap),n=[],s="gs";for(let B=0;B<t;B++){let d=B%16===Se;n.push({preset:A.getPreset({bankLSB:0,bankMSB:0,isGMGSDrum:d,program:0},s),bankMSB:0,bankLSB:0,isDrum:d})}let a=new Map,i=Array(e.tracks.length).fill(0),I=e.tracks.length;function o(){let B=0,d=1/0;return e.tracks.forEach(({events:h},C)=>{i[C]>=h.length||h[i[C]].ticks<d&&(B=C,d=h[i[C]].ticks)}),B}let g=e.tracks.map(B=>B.port);for(;I>0;){let B=o(),d=e.tracks[B].events;if(i[B]>=d.length){I--;continue}let h=d[i[B]];if(i[B]++,h.statusByte===M.midiPort){g[B]=h.data[0];continue}let C=h.statusByte&240;if(C!==M.noteOn&&C!==M.controllerChange&&C!==M.programChange&&C!==M.systemExclusive)continue;let Q=(h.statusByte&15)+e.portChannelOffsetMap[g[B]]||0,m=n[Q];switch(C){case M.programChange:m.preset=A.getPreset({bankMSB:m.bankMSB,bankLSB:m.bankLSB,program:h.data[0],isGMGSDrum:m.isDrum},s);break;case M.controllerChange:switch(h.data[0]){default:continue;case S.bankSelectLSB:m.bankLSB=h.data[1];break;case S.bankSelect:m.bankMSB=h.data[1]}break;case M.noteOn:if(h.data[1]===0)continue;let y=a.get(m.preset);y||(y=new Set,a.set(m.preset,y)),y.add(`${h.data[0]}-${h.data[1]}`);break;case M.systemExclusive:{if(!Xs(h)){es(h)&&(s="xg",p("%cXG on detected!",c.recognized));continue}let F=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][h.data[5]&15]+e.portChannelOffsetMap[g[B]],k=!!(h.data[7]>0&&h.data[5]>>4);m=n[F],m.isDrum=k}break}}return a.forEach((B,d)=>{B.size===0&&(p(`%cDetected change but no keys for %c${d.name}`,c.info,c.value),a.delete(d))}),Z(),a}function no(e,A=0){let t=h=>(h.data=new Y(h.data.buffer),6e7/Qt(h.data,3)),n=[],a=e.tracks.map(h=>h.events).flat();a.sort((h,C)=>h.ticks-C.ticks);for(let h=0;h<16;h++)n.push([]);let i=0,I=60/(120*e.timeDivision),o=0,g=0,B=[];for(let h=0;h<16;h++)B.push([]);let d=(h,C)=>{let Q=B[C].findIndex(y=>y.midiNote===h),m=B[C][Q];if(m){let y=i-m.start;m.length=y,C===Se&&(m.length=y<A?A:y),B[C].splice(Q,1)}g--};for(;o<a.length;){let h=a[o],C=h.statusByte>>4,Q=h.statusByte&15;if(C===8)d(h.data[0],Q);else if(C===9)if(h.data[1]===0)d(h.data[0],Q);else{d(h.data[0],Q);let m={midiNote:h.data[0],start:i,length:-1,velocity:h.data[1]/127};n[Q].push(m),B[Q].push(m),g++}else h.statusByte===81&&(I=60/(t(h)*e.timeDivision));if(++o>=a.length)break;i+=I*(a[o].ticks-h.ticks)}return g>0&&B.forEach((h,C)=>{h.forEach(Q=>{let m=i-Q.start;Q.length=m,C===Se&&(Q.length=m<A?A:m)})}),n}var vt={linear:0,nearestNeighbor:1,hermite:2},hn={soundCanvasText:0,yamahaXGText:1,soundCanvasDotMatrix:2},YA={Idle:0,RPCoarse:1,RPFine:2,NRPCoarse:3,NRPFine:4,DataCoarse:5,DataFine:6},IA={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6};function qe(e,A,t,n){return new ZA(n,M.controllerChange|e%16,new Y([A,t]))}function so(e,A){let t=16|[1,2,3,4,5,6,7,8,0,9,10,11,12,13,14,15][e%16],n=[65,16,66,18,64,t,21,1],a=128-(64+t+21+1)%128;return new ZA(A,M.systemExclusive,new Y([...n,a,247]))}function ao(e,A=[],t=[],n=[],s=[]){bA("%cApplying changes to the MIDI file...",c.info),p("Desired program changes:",A),p("Desired CC changes:",t),p("Desired channels to clear:",n),p("Desired channels to transpose:",s);let a=new Set;A.forEach(D=>{a.add(D.channel)});let i="gs",I=!1,o=Array(e.tracks.length).fill(0),g=e.tracks.length;function B(){let D=0,v=1/0;return e.tracks.forEach((L,E)=>{o[E]>=L.events.length||L.events[o[E]].ticks<v&&(D=E,v=L.events[o[E]].ticks)}),D}let d=e.tracks.map(D=>D.port),h={},C=0,Q=(D,v)=>{e.tracks[D].channels.size!==0&&(C===0&&(C+=16,h[v]=0),h[v]===void 0&&(h[v]=C,C+=16),d[D]=v)};e.tracks.forEach((D,v)=>{Q(v,D.port)});let m=C,y=Array(m).fill(!0),F=Array(m).fill(0),k=Array(m).fill(0);for(s.forEach(D=>{let v=Math.trunc(D.keyShift),L=D.keyShift-v;F[D.channel]=v,k[D.channel]=L});g>0;){let D=B(),v=e.tracks[D];if(o[D]>=v.events.length){g--;continue}let L=o[D]++,E=v.events[L],X=()=>{v.deleteEvent(L),o[D]--},O=(z,tA=0)=>{v.addEvent(z,L+tA),o[D]++},nA=h[d[D]]||0;if(E.statusByte===M.midiPort){Q(D,E.data[0]);continue}if(E.statusByte<=M.sequenceSpecific&&E.statusByte>=M.sequenceNumber)continue;let $=E.statusByte&240,V=E.statusByte&15,q=V+nA;if(n.includes(q)){X();continue}switch($){case M.noteOn:if(y[q]){y[q]=!1,t.filter(tA=>tA.channel===q).forEach(tA=>{let rA=qe(V,tA.controllerNumber,tA.controllerValue,E.ticks);O(rA)});let z=k[q];if(z!==0){let tA=z*64+64,rA=qe(V,S.registeredParameterMSB,0,E.ticks),P=qe(V,S.registeredParameterLSB,1,E.ticks),G=qe(q,S.dataEntryMSB,tA,E.ticks),b=qe(V,S.dataEntryLSB,0,E.ticks);O(b),O(G),O(P),O(rA)}if(a.has(q)){let tA=A.find(eA=>eA.channel===q);if(!tA)continue;p(`%cSetting %c${tA.channel}%c to %c${te.toMIDIString(tA)}%c. Track num: %c${D}`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized);let rA=tA.bankMSB,P=tA.bankLSB,G=tA.program,b=new ZA(E.ticks,M.programChange|V,new Y([G]));O(b);let K=(eA,aA)=>{let GA=qe(V,eA?S.bankSelectLSB:S.bankSelect,aA,E.ticks);O(GA)};fA.isSystemXG(i)&&tA.isGMGSDrum&&(p(`%cAdding XG Drum change on track %c${D}`,c.recognized,c.value),rA=fA.getDrumBank(i),P=0),K(!1,rA),K(!0,P),tA.isGMGSDrum&&!fA.isSystemXG(i)&&V!==Se&&(p(`%cAdding GS Drum change on track %c${D}`,c.recognized,c.value),O(so(V,E.ticks)))}}E.data[0]+=F[q];break;case M.noteOff:E.data[0]+=F[q];break;case M.programChange:if(a.has(q)){X();continue}break;case M.controllerChange:{let z=E.data[0];if(t.find(rA=>rA.channel===q&&z===rA.controllerNumber)!==void 0){X();continue}(z===S.bankSelect||z===S.bankSelectLSB)&&a.has(q)&&X()}break;case M.systemExclusive:if(es(E))p("%cXG system on detected",c.info),i="xg",I=!0;else if(E.data[0]===67&&E.data[2]===76&&E.data[3]===8&&E.data[5]===3)a.has(E.data[4]+nA)&&X();else if(Ws(E))p("%cGM2 system on detected",c.info),i="gm2",I=!0;else if(Zs(E)){I=!0,p("%cGS on detected!",c.recognized);break}else zs(E)&&(p("%cGM on detected, removing!",c.info),X(),I=!1)}}if(!I&&A.length>0){let D=0;e.tracks[0].events[0].statusByte===M.trackName&&D++,e.tracks[0].addEvent(_s(0),D),p("%cGS on not detected. Adding it.",c.info)}e.flush(),Z()}function oo(e,A){let t=[],n=[],s=[],a=[];A.channelSnapshots.forEach((i,I)=>{if(i.isMuted){n.push(I);return}let o=i.channelTransposeKeyShift+i.customControllers[IA.channelTransposeFine]/100;o!==0&&t.push({channel:I,keyShift:o}),i.lockPreset&&s.push({channel:I,...i.patch}),i.lockedControllers.forEach((g,B)=>{if(!g||B>127||B===S.bankSelect)return;let d=i.midiControllers[B]>>7;a.push({channel:I,controllerNumber:B,controllerValue:d})})}),e.modify(s,a,n,t)}var ln={XMFFileType:0,nodeName:1,nodeIDNumber:2,resourceFormat:3,filenameOnDisk:4,filenameExtensionOnDisk:5,macOSFileTypeAndCreator:6,mimeType:7,title:8,copyrightNotice:9,comment:10,autoStart:11,preload:12,contentDescription:13,ID3Metadata:14},Ke={inLineResource:1,inFileResource:2,inFileNode:3,externalFile:4,externalXMF:5,XMFFileURIandNodeID:6},dn={StandardMIDIFile:0,StandardMIDIFileType1:1,DLS1:2,DLS2:3,DLS22:4,mobileDLS:5,unknown:-1,folder:-2},io={standard:0,MMA:1,registered:2,nonRegistered:3},Mt={none:0,MMAUnpacker:1,registered:2,nonRegistered:3},ro=class $s{length;itemCount;metadataLength;metadata={};nodeData;innerNodes=[];packedContent=!1;nodeUnpackers=[];resourceFormat="unknown";referenceTypeID;constructor(A){let t=A.currentIndex;this.length=uA(A),this.itemCount=uA(A);let n=uA(A),s=A.currentIndex-t,a=n-s,i=A.slice(A.currentIndex,A.currentIndex+a);A.currentIndex+=a,this.metadataLength=uA(i);let I=i.slice(i.currentIndex,i.currentIndex+this.metadataLength);i.currentIndex+=this.metadataLength;let o,g;for(;I.currentIndex<I.length;){if(I[I.currentIndex]===0)I.currentIndex++,o=uA(I),Object.values(ln).includes(o)?g=Object.keys(ln).find(m=>ln[m]===o)??"":(p(`Unknown field specifier: ${o}`),g=`unknown_${o}`);else{let m=uA(I);o=hA(I,m),g=o}let Q=uA(I);if(Q===0){let m=uA(I),y=I.slice(I.currentIndex,I.currentIndex+m);I.currentIndex+=m,uA(y)<4?this.metadata[g]=hA(y,m-1):this.metadata[g]=y.slice(y.currentIndex)}else p(`International content: ${Q}`),I.currentIndex+=uA(I)}let B=i.currentIndex,d=uA(i),h=i.slice(i.currentIndex,B+d);if(i.currentIndex=B+d,d>0)for(this.packedContent=!0;h.currentIndex<d;){let C={};switch(C.id=uA(h),C.id){case Mt.nonRegistered:case Mt.registered:throw Z(),new Error(`Unsupported unpacker ID: ${C.id}`);default:throw Z(),new Error(`Unknown unpacker ID: ${C.id}`);case Mt.none:C.standardID=uA(h);break;case Mt.MMAUnpacker:{let Q=h[h.currentIndex++];Q===0&&(Q<<=8,Q|=h[h.currentIndex++],Q<<=8,Q|=h[h.currentIndex++]);let m=uA(h);C.manufacturerID=Q,C.manufacturerInternalID=m}break}C.decodedSize=uA(h),this.nodeUnpackers.push(C)}switch(A.currentIndex=t+n,this.referenceTypeID=uA(A),this.nodeData=A.slice(A.currentIndex,t+this.length),A.currentIndex=t+this.length,this.referenceTypeID){case Ke.inLineResource:break;case Ke.externalXMF:case Ke.inFileNode:case Ke.XMFFileURIandNodeID:case Ke.externalFile:case Ke.inFileResource:throw Z(),new Error(`Unsupported reference type: ${this.referenceTypeID}`);default:throw Z(),new Error(`Unknown reference type: ${this.referenceTypeID}`)}if(this.isFile){if(this.packedContent){let Q=this.nodeData.slice(2,this.nodeData.length);p(`%cPacked content. Attempting to deflate. Target size: %c${this.nodeUnpackers[0].decodedSize}`,c.warn,c.value);try{this.nodeData=new Y(Ps(Q).buffer)}catch(m){if(Z(),m instanceof Error)throw new Error(`Error unpacking XMF file contents: ${m.message}.`)}}let C=this.metadata.resourceFormat;if(C===void 0)sA("No resource format for this file node!");else{C[0]!==io.standard&&(p(`Non-standard formatTypeID: ${C.toString()}`),this.resourceFormat=C.toString());let m=C[1];Object.values(dn).includes(m)?this.resourceFormat=Object.keys(dn).find(y=>dn[y]===m):p(`Unrecognized resource format: ${m}`)}}else for(this.resourceFormat="folder";this.nodeData.currentIndex<this.nodeData.length;){let C=this.nodeData.currentIndex,Q=uA(this.nodeData),m=this.nodeData.slice(C,C+Q);this.nodeData.currentIndex=C+Q,this.innerNodes.push(new $s(m))}}get isFile(){return this.itemCount===0}};function Io(e,A){e.bankOffset=0;let t=hA(A,4);if(t!=="XMF_")throw Z(),new SyntaxError(`Invalid XMF Header! Expected "_XMF", got "${t}"`);OA("%cParsing XMF file...",c.info);let n=hA(A,4);if(p(`%cXMF version: %c${n}`,c.info,c.recognized),n==="2.00"){let o=Xe(A,4),g=Xe(A,4);p(`%cFile Type ID: %c${o}%c, File Type Revision ID: %c${g}`,c.info,c.recognized,c.info,c.recognized)}uA(A);let s=uA(A);A.currentIndex+=s,A.currentIndex=uA(A);let a=new ro(A),i,I=o=>{let g=(B,d)=>{o.metadata[B]!==void 0&&typeof o.metadata[B]=="string"&&(e.rmidiInfo[d]=ne(o.metadata[B]))};if(g("nodeName","name"),g("title","name"),g("copyrightNotice","copyright"),g("comment","comment"),o.isFile)switch(o.resourceFormat){default:return;case"DLS1":case"DLS2":case"DLS22":case"mobileDLS":p("%cFound embedded DLS!",c.recognized),e.embeddedSoundBank=o.nodeData.buffer;break;case"StandardMIDIFile":case"StandardMIDIFileType1":p("%cFound embedded MIDI!",c.recognized),i=o.nodeData;break}else for(let B of o.innerNodes)I(B)};if(I(a),Z(),!i)throw new Error("No MIDI data in the XMF file!");return i}var Kt=class Aa{name="";port=0;channels=new Set;events=[];static copyFrom(A){let t=new Aa;return t.copyFrom(A),t}copyFrom(A){this.name=A.name,this.port=A.port,this.channels=new Set(A.channels),this.events=A.events.map(t=>new ZA(t.ticks,t.statusByte,new Y(t.data)))}addEvent(A,t){this.events.splice(t,0,A)}deleteEvent(A){this.events.splice(A,1)}pushEvent(A){this.events.push(A)}};function ps(e,A,t){bA("%cParsing MIDI File...",c.info),e.fileName=t;let n=new Y(A),s=n,a=g=>{let B=hA(g,4),d=Xe(g,4),h=new Y(d),C={type:B,size:d,data:h},Q=g.slice(g.currentIndex,g.currentIndex+C.size);return C.data.set(Q,0),g.currentIndex+=C.size,C},i=ee(n,4);if(i==="RIFF"){n.currentIndex+=8;let g=hA(n,4);if(g!=="RMID")throw Z(),new SyntaxError(`Invalid RMIDI Header! Expected "RMID", got "${g}"`);let B=iA(n);if(B.header!=="data")throw Z(),new SyntaxError(`Invalid RMIDI Chunk header! Expected "data", got "${g}"`);s=B.data;let d=!1,h=!1;for(;n.currentIndex<=n.length;){let C=n.currentIndex,Q=iA(n,!0);if(Q.header==="RIFF"){let m=hA(Q.data,4).toLowerCase();m==="sfbk"||m==="sfpk"||m==="dls "?(p("%cFound embedded soundbank!",c.recognized),e.embeddedSoundBank=n.slice(C,C+Q.size).buffer):sA(`Unknown RIFF chunk: "${m}"`),m==="dls "?e.isDLSRMIDI=!0:d=!0}else if(Q.header==="LIST"&&hA(Q.data,4)==="INFO")for(p("%cFound RMIDI INFO chunk!",c.recognized);Q.data.currentIndex<=Q.size;){let y=iA(Q.data,!0),F=y.header,k=y.data;switch(F){default:sA(`Unknown RMIDI Info: ${F}`);break;case"INAM":e.rmidiInfo.name=k;break;case"IALB":case"IPRD":e.rmidiInfo.album=k;break;case"ICRT":case"ICRD":e.rmidiInfo.creationDate=k;break;case"IART":e.rmidiInfo.artist=k;break;case"IGNR":e.rmidiInfo.genre=k;break;case"IPIC":e.rmidiInfo.picture=k;break;case"ICOP":e.rmidiInfo.copyright=k;break;case"ICMT":e.rmidiInfo.comment=k;break;case"IENG":e.rmidiInfo.engineer=k;break;case"ISFT":e.rmidiInfo.software=k;break;case"ISBJ":e.rmidiInfo.subject=k;break;case"IENC":e.rmidiInfo.infoEncoding=k;break;case"MENC":e.rmidiInfo.midiEncoding=k;break;case"DBNK":e.bankOffset=xs(k,2),h=!0;break}}}d&&!h&&(e.bankOffset=1),e.isDLSRMIDI&&(e.bankOffset=0),e.embeddedSoundBank===void 0&&(e.bankOffset=0)}else i==="XMF_"?s=Io(e,n):s=n;let I=a(s);if(I.type!=="MThd")throw Z(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${I.type}"`);if(I.size!==6)throw Z(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${I.size}`);e.format=Xe(I.data,2);let o=Xe(I.data,2);e.timeDivision=Xe(I.data,2);for(let g=0;g<o;g++){let B=new Kt,d=a(s);if(d.type!=="MTrk")throw Z(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${d.type}"`);let h,C=0;for(e.format===2&&g>0&&(C+=e.tracks[g-1].events[e.tracks[g-1].events.length-1].ticks);d.data.currentIndex<d.size;){C+=uA(d.data);let Q=d.data[d.data.currentIndex],m;if(h!==void 0&&Q<128)m=h;else{if(Q<128)throw Z(),new SyntaxError(`Unexpected byte with no running byte. (${Q})`);m=d.data[d.data.currentIndex++]}let y=Ka(m),F;switch(y){case-1:F=0;break;case-2:m=d.data[d.data.currentIndex++],F=uA(d.data);break;case-3:F=uA(d.data);break;default:F=Oa[m>>4],h=m;break}let k=new Y(F);k.set(d.data.slice(d.data.currentIndex,d.data.currentIndex+F),0);let D=new ZA(C,m,k);B.pushEvent(D),d.data.currentIndex+=F}e.tracks.push(B),p(`%cParsed %c${e.tracks.length}%c / %c${e.tracks.length}`,c.info,c.value,c.info,c.value)}p("%cAll tracks parsed correctly!",c.recognized),e.flush(!1),Z(),p(`%cMIDI file parsed. Total tick time: %c${e.lastVoiceEventTick}%c, total seconds time: %c${e.duration}`,c.info,c.recognized,c.info,c.recognized)}var go=new Map([["domingo","Sunday"],["segunda-feira","Monday"],["ter\xE7a-feira","Tuesday"],["quarta-feira","Wednesday"],["quinta-feira","Thursday"],["sexta-feira","Friday"],["s\xE1bado","Saturday"],["janeiro","January"],["fevereiro","February"],["mar\xE7o","March"],["abril","April"],["maio","May"],["junho","June"],["julho","July"],["agosto","August"],["setembro","September"],["outubro","October"],["novembro","November"],["dezembro","December"]]),co=[go];function Eo(e){for(let A of co){let t=e;A.forEach((s,a)=>{let i=new RegExp(a,"gi");t=t.replace(i,s)});let n=new Date(t);if(!isNaN(n.getTime()))return n}}function Bo(e){let A=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(e);if(A){let t=parseInt(A[1]),n=parseInt(A[2])-1,s=parseInt(A[3]),a=new Date(s,n,t);if(!isNaN(a.getTime()))return a}}function Co(e){let A=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(e);if(A){let t=A[1],n=(parseInt(A[2])+1).toString(),s=A[3],a=new Date(`${n}/${t}/${s}`);if(!isNaN(a.getTime()))return a}}function ho(e){let t=/\b\d{4}\b/.exec(e);return t?new Date(t[0]):void 0}function ts(e){if(e=e.trim(),e.length<1)return new Date;let A=e.replace(/\b(\d+)(st|nd|rd|th)\b/g,"$1"),t=new Date(A);if(isNaN(t.getTime())){let n=Eo(e);if(n)return n;let s=Bo(e);if(s)return s;let a=Co(e);if(a)return a;let i=ho(e);return i||(sA(`Invalid date: "${e}". Replacing with the current date!`),new Date)}return t}var Le=class Lt{tracks=[];timeDivision=0;duration=0;tempoChanges=[{ticks:0,tempo:120}];extraMetadata=[];lyrics=[];firstNoteOn=0;keyRange={min:0,max:127};lastVoiceEventTick=0;portChannelOffsetMap=[0];loop={start:0,end:0};fileName;format=0;rmidiInfo={};bankOffset=0;isKaraokeFile=!1;isMultiPort=!1;isDLSRMIDI=!1;embeddedSoundBank;binaryName;get infoEncoding(){let A=this.rmidiInfo.infoEncoding;if(!A)return;let t=A.byteLength;return A[A.byteLength-1]===0&&t--,ee(A,t)}static fromArrayBuffer(A,t=""){let n=new Lt;return ps(n,A,t),n}static async fromFile(A){let t=new Lt;return ps(t,await A.arrayBuffer(),A.name),t}static copyFrom(A){let t=new Lt;return t.copyFrom(A),t}copyFrom(A){this.copyMetadataFrom(A),this.embeddedSoundBank=A?.embeddedSoundBank?.slice(0)??void 0,this.tracks=A.tracks.map(t=>Kt.copyFrom(t))}midiTicksToSeconds(A){let t=0;for(;A>0;){let n=this.tempoChanges.find(a=>a.ticks<A);if(!n)return t;let s=A-n.ticks;t+=s*60/(n.tempo*this.timeDivision),A-=s}return t}getUsedProgramsAndKeys(A){return to(this,A)}flush(A=!0){if(A)for(let t of this.tracks)t.events.sort((n,s)=>n.ticks-s.ticks);this.parseInternal()}getNoteTimes(A=0){return no(this,A)}writeMIDI(){return Va(this)}writeRMIDI(A,t=Ss){return eo(this,A,$n(t,Ss))}modify(A=[],t=[],n=[],s=[]){ao(this,A,t,n,s)}applySnapshot(A){oo(this,A)}getName(A="Shift_JIS"){let t="",n=this.getRMIDInfo("name");if(n)return n.trim();if(this.binaryName){A=this.getRMIDInfo("midiEncoding")??A;try{t=new TextDecoder(A).decode(this.binaryName).trim()}catch(s){sA(`Failed to decode MIDI name: ${s}`)}}return t||this.fileName}getExtraMetadata(A="Shift_JIS"){A=this.infoEncoding??A;let t=new TextDecoder(A);return this.extraMetadata.map(n=>t.decode(n.data).replace(/@T|@A/g,"").trim())}setRMIDInfo(A,t){if(this.rmidiInfo.infoEncoding=ne("utf-8",!0),A==="picture")this.rmidiInfo.picture=new Uint8Array(t);else if(A==="creationDate")this.rmidiInfo.creationDate=ne(t.toISOString(),!0);else{let n=new TextEncoder().encode(t);this.rmidiInfo[A]=new Uint8Array([...n,0])}}getRMIDInfo(A){if(!this.rmidiInfo[A])return;let t=this.infoEncoding??"UTF-8";if(A==="picture")return this.rmidiInfo[A].buffer;if(A==="creationDate")return ts(ee(this.rmidiInfo[A]));try{let n=new TextDecoder(t),s=this.rmidiInfo[A];return s[s.length-1]===0&&(s=s?.slice(0,s.length-1)),n.decode(s.buffer).trim()}catch(n){sA(`Failed to decode ${A} name: ${n}`);return}}copyMetadataFrom(A){this.fileName=A.fileName,this.timeDivision=A.timeDivision,this.duration=A.duration,this.firstNoteOn=A.firstNoteOn,this.lastVoiceEventTick=A.lastVoiceEventTick,this.format=A.format,this.bankOffset=A.bankOffset,this.isKaraokeFile=A.isKaraokeFile,this.isMultiPort=A.isMultiPort,this.isDLSRMIDI=A.isDLSRMIDI,this.isDLSRMIDI=A.isDLSRMIDI,this.tempoChanges=[...A.tempoChanges],this.extraMetadata=A.extraMetadata.map(t=>new ZA(t.ticks,t.statusByte,new Y(t.data))),this.lyrics=A.lyrics.map(t=>new ZA(t.ticks,t.statusByte,new Y(t.data))),this.portChannelOffsetMap=[...A.portChannelOffsetMap],this.binaryName=A?.binaryName?.slice(),this.loop={...A.loop},this.keyRange={...A.keyRange},this.rmidiInfo={},Object.entries(A.rmidiInfo).forEach(t=>{let n=t[0],s=t[1];this.rmidiInfo[n]=s.slice()})}parseInternal(){OA("%cInterpreting MIDI events...",c.info);let A=!1;this.keyRange={max:0,min:127},this.extraMetadata=[];let t=!1;typeof this.rmidiInfo.name<"u"&&(t=!0);let n=null,s=null;for(let o of this.tracks){let g=new Set,B=!1;for(let h=0;h<o.events.length;h++){let C=o.events[h];if(C.statusByte>=128&&C.statusByte<240){B=!0;for(let m=0;m<C.data.length;m++)C.data[m]=Math.min(127,C.data[m]);switch(C.ticks>this.lastVoiceEventTick&&(this.lastVoiceEventTick=C.ticks),C.statusByte&240){case M.controllerChange:switch(C.data[0]){case 2:case 116:n=C.ticks;break;case 4:case 117:s===null?s=C.ticks:s=0;break;case 0:this.isDLSRMIDI&&C.data[1]!==0&&C.data[1]!==127&&(p("%cDLS RMIDI with offset 1 detected!",c.recognized),this.bankOffset=1)}break;case M.noteOn:{g.add(C.statusByte&15);let m=C.data[0];this.keyRange.min=Math.min(this.keyRange.min,m),this.keyRange.max=Math.max(this.keyRange.max,m);break}}}let Q=ee(C.data);switch(C.statusByte){case M.endOfTrack:h!==o.events.length-1&&(h--,o.deleteEvent(h),sA("Unexpected EndOfTrack. Removing!"));break;case M.setTempo:this.tempoChanges.push({ticks:C.ticks,tempo:6e7/Qt(C.data,3)});break;case M.marker:switch(Q.trim().toLowerCase()){default:break;case"start":case"loopstart":n=C.ticks;break;case"loopend":s=C.ticks}break;case M.copyright:this.extraMetadata.push(C);break;case M.lyric:Q.trim().startsWith("@KMIDI KARAOKE FILE")&&(this.isKaraokeFile=!0,p("%cKaraoke MIDI detected!",c.recognized)),this.isKaraokeFile?C.statusByte=M.text:this.lyrics.push(C);case M.text:{let m=Q.trim();m.startsWith("@KMIDI KARAOKE FILE")?(this.isKaraokeFile=!0,p("%cKaraoke MIDI detected!",c.recognized)):this.isKaraokeFile&&(m.startsWith("@T")||m.startsWith("@A")?A?this.extraMetadata.push(C):(this.binaryName=C.data.slice(2),A=!0,t=!0):m.startsWith("@")||this.lyrics.push(C));break}}}o.channels=g,o.name="";let d=o.events.find(h=>h.statusByte===M.trackName);d&&this.tracks.indexOf(o)>0&&(o.name=ee(d.data),!B&&!o.name.toLowerCase().includes("setup")&&this.extraMetadata.push(d))}this.tempoChanges.reverse(),p("%cCorrecting loops, ports and detecting notes...",c.info);let a=[];for(let o of this.tracks){let g=o.events.find(B=>(B.statusByte&240)===M.noteOn);g&&a.push(g.ticks)}this.firstNoteOn=Math.min(...a),p(`%cFirst note-on detected at: %c${this.firstNoteOn}%c ticks!`,c.info,c.recognized,c.info),n!==null&&s===null?(n=this.firstNoteOn,s=this.lastVoiceEventTick):(n??=this.firstNoteOn,(s===null||s===0)&&(s=this.lastVoiceEventTick)),this.loop={start:n,end:s},p(`%cLoop points: start: %c${this.loop.start}%c end: %c${this.loop.end}`,c.info,c.recognized,c.info,c.recognized);let i=0;this.portChannelOffsetMap=[];for(let o of this.tracks)if(o.port=-1,o.channels.size!==0)for(let g of o.events){if(g.statusByte!==M.midiPort)continue;let B=g.data[0];o.port=B,this.portChannelOffsetMap[B]===void 0&&(this.portChannelOffsetMap[B]=i,i+=16)}this.portChannelOffsetMap=[...this.portChannelOffsetMap].map(o=>o??0);let I=1/0;for(let o of this.tracks)o.port!==-1&&I>o.port&&(I=o.port);I===1/0&&(I=0);for(let o of this.tracks)(o.port===-1||o.port===void 0)&&(o.port=I);if(this.portChannelOffsetMap.length===0&&(this.portChannelOffsetMap=[0]),this.portChannelOffsetMap.length<2?p("%cNo additional MIDI Ports detected.",c.info):(this.isMultiPort=!0,p("%cMIDI Ports detected!",c.recognized)),!t)if(this.tracks.length>1){if(this.tracks[0].events.find(o=>o.statusByte>=M.noteOn&&o.statusByte<M.polyPressure)===void 0){let o=this.tracks[0].events.find(g=>g.statusByte===M.trackName);o&&(this.binaryName=o.data)}}else{let o=this.tracks[0].events.find(g=>g.statusByte===M.trackName);o&&(this.binaryName=o.data)}if(this.extraMetadata=this.extraMetadata.filter(o=>o.data.length>0),this.lyrics.sort((o,g)=>o.ticks-g.ticks),!this.tracks.some(o=>o.events[0].ticks===0)){let o=this.tracks[0],g=this?.binaryName?.buffer;g||(g=new Uint8Array(0).buffer),o.events.unshift(new ZA(0,M.trackName,new Y(g)))}this.duration=this.midiTicksToSeconds(this.lastVoiceEventTick),this.binaryName&&this.binaryName.length<1&&(this.binaryName=void 0),p("%cSuccess!",c.recognized),Z()}};function lo(e,A){if(this.externalMIDIPlayback&&e.statusByte>=128){this.sendMIDIMessage([e.statusByte,...e.data]);return}let t=this._midiData.tracks[A],n=As(e.statusByte),s=this.midiPortChannelOffsets[this.currentMIDIPorts[A]]||0;switch(n.channel+=s,n.status){case M.noteOn:{let a=e.data[1];if(a>0)this.synth.noteOn(n.channel,e.data[0],a),this.playingNotes.push({midiNote:e.data[0],channel:n.channel,velocity:a});else{this.synth.noteOff(n.channel,e.data[0]);let i=this.playingNotes.findIndex(I=>I.midiNote===e.data[0]&&I.channel===n.channel);i!==-1&&this.playingNotes.splice(i,1)}break}case M.noteOff:{this.synth.noteOff(n.channel,e.data[0]);let a=this.playingNotes.findIndex(i=>i.midiNote===e.data[0]&&i.channel===n.channel);a!==-1&&this.playingNotes.splice(a,1);break}case M.pitchWheel:this.synth.pitchWheel(n.channel,e.data[1]<<7|e.data[0]);break;case M.controllerChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.controllerChange(n.channel,e.data[0],e.data[1]);break;case M.programChange:if(this._midiData.isMultiPort&&t.channels.size===0)return;this.synth.programChange(n.channel,e.data[0]);break;case M.polyPressure:this.synth.polyPressure(n.channel,e.data[0],e.data[1]);break;case M.channelPressure:this.synth.channelPressure(n.channel,e.data[0]);break;case M.systemExclusive:this.synth.systemExclusive(e.data,s);break;case M.setTempo:{let a=6e7/Qt(e.data,3);this.oneTickToSeconds=60/(a*this._midiData.timeDivision),this.oneTickToSeconds===0&&(this.oneTickToSeconds=60/(120*this._midiData.timeDivision),p("invalid tempo! falling back to 120 BPM"),a=120);break}case M.timeSignature:case M.endOfTrack:case M.midiChannelPrefix:case M.songPosition:case M.activeSensing:case M.keySignature:case M.sequenceNumber:case M.sequenceSpecific:case M.text:case M.lyric:case M.copyright:case M.trackName:case M.marker:case M.cuePoint:case M.instrumentName:case M.programName:break;case M.midiPort:this.assignMIDIPort(A,e.data[0]);break;case M.reset:this.synth.stopAllChannels(),this.synth.resetAllControllers();break;default:p(`%cUnrecognized Event: %c${e.statusByte}%c status byte: %c${Object.keys(M).find(a=>M[a]===n.status)}`,c.warn,c.unrecognized,c.warn,c.value);break}n.status>=0&&n.status<128&&this.callEvent("metaEvent",{event:e,trackIndex:A})}function Qo(){if(this.paused||!this._midiData)return;let e=this.currentTime;for(;this.playedTime<e;){let A=this.findFirstEventIndex(),n=this._midiData.tracks[A].events[this.eventIndexes[A]++];this.processEvent(n,A);let s=this.findFirstEventIndex(),a=this._midiData.tracks[s];if(this.loopCount>0&&this._midiData.loop.end<=n.ticks){this.loopCount!==1/0&&(this.loopCount--,this.callEvent("loopCountChange",{newCount:this.loopCount})),this.setTimeTicks(this._midiData.loop.start);return}if(a.events.length<=this.eventIndexes[s]){this.songIsFinished();return}let i=a.events[this.eventIndexes[s]];this.playedTime+=this.oneTickToSeconds*(i.ticks-n.ticks)}}function uo(e,A){this._midiData.tracks[e].channels.size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[A]=0),this.midiPortChannelOffsets[A]===void 0&&(this.synth.midiChannels.length<this.midiPortChannelOffset+15&&this.addNewMIDIPort(),this.midiPortChannelOffsets[A]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.currentMIDIPorts[e]=A)}function fo(e){if(!e.tracks)throw new Error("This MIDI has no tracks!");this.oneTickToSeconds=60/(120*e.timeDivision),this._midiData=e,this.synth.clearEmbeddedBank(),this._midiData.embeddedSoundBank!==void 0&&(p("%cEmbedded soundbank detected! Using it.",c.recognized),this.synth.setEmbeddedSoundBank(this._midiData.embeddedSoundBank,this._midiData.bankOffset)),bA("%cPreloading samples...",c.info),this._midiData.getUsedProgramsAndKeys(this.synth.soundBankManager).forEach((t,n)=>{p(`%cPreloading used samples on %c${n.name}%c...`,c.info,c.recognized,c.info);for(let s of t){let[a,i]=s.split("-").map(Number);this.synth.getVoicesForPreset(n,a,i,a)}}),Z(),this.currentMIDIPorts=this._midiData.tracks.map(t=>t.port),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={},this._midiData.tracks.forEach((t,n)=>{this.assignMIDIPort(n,t.port)}),this.firstNoteTime=this._midiData.midiTicksToSeconds(this._midiData.firstNoteOn),p(`%cTotal song time: ${fs(Math.ceil(this._midiData.duration)).time}`,c.recognized),this.callEvent("songChange",{songIndex:this._songIndex}),this._midiData.duration<=.2&&(sA(`%cVery short song: (${fs(Math.round(this._midiData.duration)).time}). Disabling loop!`,c.warn),this.loopCount=0),this.currentTime=0}var r={INVALID:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,unused1:14,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,unused2:18,unused3:19,unused4:20,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,reserved1:42,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,reserved2:49,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,reserved3:55,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,unused5:59,endOper:60,vibLfoToVolume:61,vibLfoToFilterFc:62},Mn=Object.keys(r).length,mo=Math.max(...Object.values(r)),x=[];x[r.startAddrsOffset]={min:0,max:32768,def:0,nrpn:1};x[r.endAddrOffset]={min:-32768,max:32768,def:0,nrpn:1};x[r.startloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};x[r.endloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1};x[r.startAddrsCoarseOffset]={min:0,max:32768,def:0,nrpn:1};x[r.modLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};x[r.vibLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};x[r.modEnvToPitch]={min:-12e3,max:12e3,def:0,nrpn:2};x[r.initialFilterFc]={min:1500,max:13500,def:13500,nrpn:2};x[r.initialFilterQ]={min:0,max:960,def:0,nrpn:1};x[r.modLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};x[r.vibLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};x[r.modEnvToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2};x[r.endAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};x[r.modLfoToVolume]={min:-960,max:960,def:0,nrpn:1};x[r.vibLfoToVolume]={min:-960,max:960,def:0,nrpn:1};x[r.chorusEffectsSend]={min:0,max:1e3,def:0,nrpn:1};x[r.reverbEffectsSend]={min:0,max:1e3,def:0,nrpn:1};x[r.pan]={min:-500,max:500,def:0,nrpn:1};x[r.delayModLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};x[r.freqModLFO]={min:-16e3,max:4500,def:0,nrpn:4};x[r.delayVibLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2};x[r.freqVibLFO]={min:-16e3,max:4500,def:0,nrpn:4};x[r.delayModEnv]={min:-32768,max:5e3,def:-32768,nrpn:2};x[r.attackModEnv]={min:-32768,max:8e3,def:-32768,nrpn:2};x[r.holdModEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};x[r.decayModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};x[r.sustainModEnv]={min:0,max:1e3,def:0,nrpn:1};x[r.releaseModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};x[r.keyNumToModEnvHold]={min:-1200,max:1200,def:0,nrpn:1};x[r.keyNumToModEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};x[r.delayVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};x[r.attackVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};x[r.holdVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2};x[r.decayVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};x[r.sustainVolEnv]={min:0,max:1440,def:0,nrpn:1};x[r.releaseVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2};x[r.keyNumToVolEnvHold]={min:-1200,max:1200,def:0,nrpn:1};x[r.keyNumToVolEnvDecay]={min:-1200,max:1200,def:0,nrpn:1};x[r.startloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};x[r.keyNum]={min:-1,max:127,def:-1,nrpn:1};x[r.velocity]={min:-1,max:127,def:-1,nrpn:1};x[r.initialAttenuation]={min:0,max:1440,def:0,nrpn:1};x[r.endloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1};x[r.coarseTune]={min:-120,max:120,def:0,nrpn:1};x[r.fineTune]={min:-12700,max:12700,def:0,nrpn:1};x[r.scaleTuning]={min:0,max:1200,def:100,nrpn:1};x[r.exclusiveClass]={min:0,max:99999,def:0,nrpn:0};x[r.overridingRootKey]={min:-1,max:127,def:-1,nrpn:0};x[r.sampleModes]={min:0,max:3,def:0,nrpn:0};var wA={monoSample:1,rightSample:2,leftSample:4,linkedSample:8,romMonoSample:32769,romRightSample:32770,romLeftSample:32772,romLinkedSample:32776},j={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},QA={linear:0,concave:1,convex:2,switch:3};var T={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},R={none:0,gain:1,reserved:2,pitch:3,pan:4,keyNum:5,chorusSend:128,reverbSend:129,modLfoFreq:260,modLfoDelay:261,vibLfoFreq:276,vibLfoDelay:277,volEnvAttack:518,volEnvDecay:519,reservedEG1:520,volEnvRelease:521,volEnvSustain:522,volEnvDelay:523,volEnvHold:524,modEnvAttack:778,modEnvDecay:779,reservedEG2:780,modEnvRelease:781,modEnvSustain:782,modEnvDelay:783,modEnvHold:784,filterCutoff:1280,filterQ:1281},ys={forward:0,loopAndRelease:1},mA=128,bn=147,We=new Int16Array(bn).fill(0),SA=(e,A)=>We[e]=A<<7;SA(S.mainVolume,100);SA(S.balance,64);SA(S.expressionController,127);SA(S.pan,64);SA(S.portamentoOnOff,127);SA(S.filterResonance,64);SA(S.releaseTime,64);SA(S.attackTime,64);SA(S.brightness,64);SA(S.decayTime,64);SA(S.vibratoRate,64);SA(S.vibratoDepth,64);SA(S.vibratoDelay,64);SA(S.generalPurposeController6,64);SA(S.generalPurposeController8,64);SA(S.registeredParameterLSB,127);SA(S.registeredParameterMSB,127);SA(S.nonRegisteredParameterLSB,127);SA(S.nonRegisteredParameterMSB,127);var ns=1;We[S.portamentoControl]=ns;SA(mA+j.pitchWheel,64);SA(mA+j.pitchWheelRange,2);var ea=Object.keys(IA).length,ta=new Float32Array(ea);ta[IA.modulationMultiplier]=1;function So(e=!0){if(e&&p("%cResetting all controllers!",c.info),this.privateProps.callEvent("allControllerReset",void 0),this.setMasterParameter("midiSystem",Os),!(!this.privateProps.drumPreset||!this.privateProps.defaultPreset)){for(let A=0;A<this.midiChannels.length;A++){let t=this.midiChannels[A];t.resetControllers(!1),t.resetPreset();for(let n=0;n<128;n++)this.midiChannels[A].lockedControllers[n]&&this.privateProps.callEvent("controllerChange",{channel:A,controllerNumber:n,controllerValue:this.midiChannels[A].midiControllers[n]>>7});if(!this.midiChannels[A].lockedControllers[mA+j.pitchWheel]){let n=this.midiChannels[A].midiControllers[mA+j.pitchWheel];this.privateProps.callEvent("pitchWheel",{channel:A,pitch:n})}if(!this.midiChannels[A].lockedControllers[mA+j.channelPressure]){let n=this.midiChannels[A].midiControllers[mA+j.channelPressure]>>7;this.privateProps.callEvent("channelPressure",{channel:A,pressure:n})}}this.privateProps.tunings.length=0,this.privateProps.tunings.length=0;for(let A=0;A<128;A++)this.privateProps.tunings.push([]);this.setMIDIVolume(1)}}function po(e=!0){this.channelOctaveTuning.fill(0);for(let t=0;t<We.length;t++){if(this.lockedControllers[t])continue;let n=We[t];this.midiControllers[t]!==n&&t<127?t===S.portamentoControl?this.midiControllers[t]=ns:t!==S.portamentoControl&&t!==S.dataEntryMSB&&t!==S.registeredParameterMSB&&t!==S.registeredParameterLSB&&t!==S.nonRegisteredParameterMSB&&t!==S.nonRegisteredParameterLSB&&this.controllerChange(t,n>>7,e):this.midiControllers[t]=n}this.channelVibrato={rate:0,depth:0,delay:0},this.randomPan=!1,this.sysExModulators.resetModulators();let A=this.customControllers[IA.channelTransposeFine];this.customControllers.set(ta),this.setCustomController(IA.channelTransposeFine,A),this.resetParameters()}function yo(){this.setBankMSB(fA.getDefaultBank(this.channelSystem)),this.setBankLSB(0),this.setGSDrums(!1),this.setDrums(this.channelNumber%16===Se),this.programChange(0)}var na=new Set([S.bankSelect,S.bankSelectLSB,S.mainVolume,S.mainVolumeLSB,S.pan,S.panLSB,S.reverbDepth,S.tremoloDepth,S.chorusDepth,S.detuneDepth,S.phaserDepth,S.soundVariation,S.filterResonance,S.releaseTime,S.attackTime,S.brightness,S.decayTime,S.vibratoRate,S.vibratoDepth,S.vibratoDelay,S.soundController10]);function ko(){this.channelOctaveTuning.fill(0),this.pitchWheel(8192),this.channelVibrato={rate:0,depth:0,delay:0};for(let e=0;e<128;e++){let A=We[e];!na.has(e)&&A!==this.midiControllers[e]&&(e===S.portamentoControl?this.midiControllers[e]=ns:this.controllerChange(e,A>>7))}this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}function Do(){this.dataEntryState=YA.Idle,this.midiControllers[S.nonRegisteredParameterLSB]=16256,this.midiControllers[S.nonRegisteredParameterMSB]=16256,this.midiControllers[S.registeredParameterLSB]=16256,this.midiControllers[S.registeredParameterMSB]=16256,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}var Ge=We.slice(0,128);function wo(e,A=void 0){if(!this._midiData)return!1;this.oneTickToSeconds=60/(120*this._midiData.timeDivision),this.externalMIDIPlayback?this.sendMIDIReset():(this.synth.resetAllControllers(),this.synth.stopAllChannels(!1)),this.playedTime=0,this.eventIndexes=Array(this._midiData.tracks.length).fill(0);let t=this.synth.midiChannels.length,n=Array(t).fill(8192),s=[];for(let o=0;o<t;o++)s.push({program:-1,bank:0,actualBank:0});let a=o=>o===S.dataDecrement||o===S.dataIncrement||o===S.dataEntryMSB||o===S.dataEntryLSB||o===S.registeredParameterLSB||o===S.registeredParameterMSB||o===S.nonRegisteredParameterLSB||o===S.nonRegisteredParameterMSB||o===S.bankSelect||o===S.bankSelectLSB||o===S.resetAllControllers,i=[];for(let o=0;o<t;o++)i.push(Array.from(Ge));function I(o){if(n[o]=8192,i?.[o]!==void 0)for(let g=0;g<Ge.length;g++)na.has(g)||(i[o][g]=Ge[g])}for(;;){let o=this.findFirstEventIndex(),g=this._midiData.tracks[o],B=g.events[this.eventIndexes[o]];if(A!==void 0){if(B.ticks>=A)break}else if(this.playedTime>=e)break;let d=As(B.statusByte),h=d.channel+(this.midiPortChannelOffsets[g.port]||0);switch(d.status){case M.noteOn:i[h]??=Array.from(Ge),i[h][S.portamentoControl]=B.data[0];break;case M.noteOff:break;case M.pitchWheel:n[h]=B.data[1]<<7|B.data[0];break;case M.programChange:{if(this._midiData.isMultiPort&&g.channels.size===0)break;let Q=s[h];Q.program=B.data[0],Q.actualBank=Q.bank;break}case M.controllerChange:{if(this._midiData.isMultiPort&&g.channels.size===0)break;let Q=B.data[0];if(a(Q)){let m=B.data[1];if(Q===S.bankSelect){s[h].bank=m;break}else Q===S.resetAllControllers&&I(h);this.externalMIDIPlayback?this.sendMIDICC(h,Q,m):this.synth.controllerChange(h,Q,m)}else i[h]??=Array.from(Ge),i[h][Q]=B.data[1];break}default:this.processEvent(B,o);break}this.eventIndexes[o]++,o=this.findFirstEventIndex();let C=this._midiData.tracks[o].events[this.eventIndexes[o]];if(C===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(C.ticks-B.ticks)}if(this.externalMIDIPlayback){for(let o=0;o<t;o++)if(n[o]!==void 0&&this.sendMIDIPitchWheel(o,n[o]>>7,n[o]&127),i[o]!==void 0&&i[o].forEach((g,B)=>{g!==Ge[B]&&!a(B)&&this.sendMIDICC(o,B,g)}),s[o].program>=0&&s[o].actualBank>=0){let g=s[o].actualBank;this.sendMIDICC(o,S.bankSelect,g),this.sendMIDIProgramChange(o,s[o].program)}}else for(let o=0;o<t;o++)if(n[o]!==void 0&&this.synth.pitchWheel(o,n[o]),i[o]!==void 0&&i[o].forEach((g,B)=>{g!==Ge[B]&&!a(B)&&this.synth.controllerChange(o,B,g)}),s[o].actualBank>=0){let g=s[o];g.program!==-1?(this.synth.controllerChange(o,S.bankSelect,g.actualBank),this.synth.programChange(o,g.program)):this.synth.controllerChange(o,S.bankSelect,g.bank)}return this.paused&&(this.pausedTime=this.playedTime),!0}var sa=class{songs=[];shuffledSongIndexes=[];synth;externalMIDIPlayback=!1;loopCount=0;skipToFirstNoteOn=!0;onEventCall;processTick=Qo.bind(this);firstNoteTime=0;oneTickToSeconds=0;eventIndexes=[];playedTime=0;pausedTime=-1;absoluteStartTime=0;playingNotes=[];currentMIDIPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};assignMIDIPort=uo.bind(this);loadNewSequence=fo.bind(this);processEvent=lo.bind(this);setTimeTo=wo.bind(this);constructor(e){this.synth=e,this.absoluteStartTime=this.synth.currentSynthTime}_midiData;get midiData(){return this._midiData}get duration(){return this._midiData?.duration??0}_songIndex=0;get songIndex(){return this._songIndex}set songIndex(e){this._songIndex=e,this._songIndex=Math.max(0,e%this.songs.length),this.loadCurrentSong()}_shuffleMode=!1;get shuffleMode(){return this._shuffleMode}set shuffleMode(e){this._shuffleMode=e,e?(this.shuffleSongIndexes(),this._songIndex=0,this.loadCurrentSong()):this._songIndex=this.shuffledSongIndexes[this._songIndex]}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(e){let A=this.currentTime;this._playbackRate=e,this.currentTime=A}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(this.synth.currentSynthTime-this.absoluteStartTime)*this._playbackRate}set currentTime(e){if(this._midiData)if(this.paused&&(this.pausedTime=e),e>this._midiData.duration||e<0)this.skipToFirstNoteOn?this.setTimeTicks(this._midiData.firstNoteOn-1):this.setTimeTicks(0);else if(this.skipToFirstNoteOn&&e<this.firstNoteTime){this.setTimeTicks(this._midiData.firstNoteOn-1);return}else{if(this.playingNotes=[],this.callEvent("timeChange",{newTime:e}),this._midiData.duration===0){sA("No duration!"),this.callEvent("pause",{isFinished:!0});return}this.setTimeTo(e),this.recalculateStartTime(e)}}get paused(){return this.pausedTime!==void 0}play(){if(!this._midiData)throw new Error("No songs loaded in the sequencer!");this.currentTime>=this._midiData.duration&&(this.currentTime=0),this.paused&&this.recalculateStartTime(this.pausedTime??0),this.externalMIDIPlayback||this.playingNotes.forEach(e=>{this.synth.noteOn(e.channel,e.midiNote,e.velocity)}),this.pausedTime=void 0}pause(){this.pauseInternal(!1)}loadNewSongList(e){this.songs=e,!(this.songs.length<1)&&(this._songIndex=0,this.shuffleSongIndexes(),this.callEvent("songListChange",{newSongList:[...this.songs]}),this.loadCurrentSong())}callEvent(e,A){this?.onEventCall?.({type:e,data:A})}pauseInternal(e){this.paused||(this.stop(),this.callEvent("pause",{isFinished:e}))}songIsFinished(){if(this.songs.length===1){this.pauseInternal(!0);return}this._songIndex++,this._songIndex%=this.songs.length,this.loadCurrentSong()}stop(){this.pausedTime=this.currentTime;for(let e=0;e<16;e++)this.synth.controllerChange(e,S.sustainPedal,0);if(this.synth.stopAllChannels(),this.externalMIDIPlayback){for(let e of this.playingNotes)this.sendMIDIMessage([M.noteOff|e.channel%16,e.midiNote]);for(let e=0;e<Rn;e++)this.sendMIDICC(e,S.allNotesOff,0)}}findFirstEventIndex(){let e=0,A=1/0;return this._midiData.tracks.forEach((t,n)=>{if(this.eventIndexes[n]>=t.events.length)return;let s=t.events[this.eventIndexes[n]];s.ticks<A&&(e=n,A=s.ticks)}),e}addNewMIDIPort(){for(let e=0;e<16;e++)this.synth.createMIDIChannel()}sendMIDIMessage(e){this.externalMIDIPlayback&&this.callEvent("midiMessage",{message:e})}sendMIDIReset(){this.sendMIDIMessage([M.reset]);for(let e=0;e<Rn;e++)this.sendMIDIMessage([M.controllerChange|e,S.allSoundOff,0]),this.sendMIDIMessage([M.controllerChange|e,S.resetAllControllers,0])}loadCurrentSong(){let e=this._songIndex;this._shuffleMode&&(e=this.shuffledSongIndexes[this._songIndex]),this.loadNewSequence(this.songs[e])}shuffleSongIndexes(){let e=this.songs.map((A,t)=>t);for(this.shuffledSongIndexes=[];e.length>0;){let A=e[Math.floor(Math.random()*e.length)];this.shuffledSongIndexes.push(A),e.splice(e.indexOf(A),1)}}sendMIDICC(e,A,t){e%=16,this.externalMIDIPlayback&&this.sendMIDIMessage([M.controllerChange|e,A,t])}sendMIDIProgramChange(e,A){e%=16,this.externalMIDIPlayback&&this.sendMIDIMessage([M.programChange|e,A])}sendMIDIPitchWheel(e,A,t){e%=16,this.externalMIDIPlayback&&this.sendMIDIMessage([M.pitchWheel|e,t,A])}setTimeTicks(e){if(!this._midiData)return;this.playingNotes=[];let A=this._midiData.midiTicksToSeconds(e);this.callEvent("timeChange",{newTime:A});let t=this.setTimeTo(0,e);this.recalculateStartTime(this.playedTime)}recalculateStartTime(e){this.absoluteStartTime=this.synth.currentSynthTime-e/this._playbackRate}},lt=lt!==void 0?lt:{},ks=!1,aa;lt.isInitialized=new Promise(e=>aa=e);var Fo=function(e){var A,t,n,s,a,i,I,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",g="",B=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do s=o.indexOf(e.charAt(B++)),a=o.indexOf(e.charAt(B++)),i=o.indexOf(e.charAt(B++)),I=o.indexOf(e.charAt(B++)),A=s<<2|a>>4,t=(15&a)<<4|i>>2,n=(3&i)<<6|I,g+=String.fromCharCode(A),i!==64&&(g+=String.fromCharCode(t)),I!==64&&(g+=String.fromCharCode(n));while(B<e.length);return g};(function(){var e,A,t,n,s,a,i,I,o,g,B,d,h,C,Q,m,y,F,k,D,v,L,E=E!==void 0?E:{};E.wasmBinary=Uint8Array.from(Fo("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/Rw0ACwsLIAVBADYCACAGKAIAIQAgACABawwFCwwBCwwBCyAAQdQHaiEEIAQoAgAhBCAERQRAIAJBADYCACAAQdQAaiECIAAQGSEDAkAgA0F/RwRAA0AgAigCACEDIAMNAiAAEBkhAyADQX9HDQALCwsgBUEANgIAIAYoAgAhACAAIAFrDAMLCyAAEBMgAiADNgIAIAVBADYCAEEBBSAAQQIQFUEACwshACALJAYgAAsJACAAIAE2AlgLpgoBDH8gAEGAC2ohCiAKKAIAIQYCQAJAAkAgBkEATA0AA0AgACAEQRRsakGQC2ohAyADQQA2AgAgBEEBaiEEIAQgBkgNAAsgBkEESA0ADAELIAJBBEgEQEEAIQIFIAJBfWohBkEAIQIDQAJAIAEgAmohBCAELAAAIQMgA0HPAEYEQCAEQcATQQQQZCEEIARFBEAgAkEaaiEJIAkgBk4NAiACQRtqIQcgASAJaiELIAssAAAhAyADQf8BcSEFIAcgBWohBCAEIAZODQIgBUEbaiEEIAMEQEEAIQMDQCADIAdqIQggASAIaiEIIAgtAAAhCCAIQf8BcSEIIAQgCGohBCADQQFqIQMgAyAFRw0ACyAEIQMFIAQhAwtBACEEQQAhBQNAIAUgAmohByABIAdqIQcgBywAACEHIAQgBxApIQQgBUEBaiEFIAVBFkcNAAtBFiEFA0AgBEEAECkhBCAFQQFqIQUgBUEaRw0ACyAKKAIAIQUgBUEBaiEHIAogBzYCACADQWZqIQMgACAFQRRsakGIC2ohCCAIIAM2AgAgACAFQRRsakGMC2ohAyADIAQ2AgAgAkEWaiEEIAEgBGohBCAELQAAIQQgBEH/AXEhBCACQRdqIQMgASADaiEDIAMtAAAhAyADQf8BcSEDIANBCHQhAyADIARyIQQgAkEYaiEDIAEgA2ohAyADLQAAIQMgA0H/AXEhAyADQRB0IQMgBCADciEEIAJBGWohAyABIANqIQMgAy0AACEDIANB/wFxIQMgA0EYdCEDIAQgA3IhBCAAQYQLaiAFQRRsaiEDIAMgBDYCACALLQAAIQQgBEH/AXEhBCAJIARqIQQgASAEaiEEIAQsAAAhBCAEQX9GBH9BfwUgAkEGaiEEIAEgBGohBCAELQAAIQQgBEH/AXEhBCACQQdqIQMgASADaiEDIAMtAAAhAyADQf8BcSEDIANBCHQhAyADIARyIQQgAkEIaiEDIAEgA2ohAyADLQAAIQMgA0H/AXEhAyADQRB0IQMgBCADciEEIAJBCWohAyABIANqIQMgAy0AACEDIANB/wFxIQMgA0EYdCEDIAQgA3ILIQQgACAFQRRsakGUC2ohAyADIAQ2AgAgACAFQRRsakGQC2ohBCAEIAk2AgAgB0EERgRAIAYhAgwDCwsLIAJBAWohAiACIAZIDQEgBiECCwsgCigCACEGIAZBAEoNAQsMAQsgAiEEIAYhAkEAIQYDQAJAIABBhAtqIAZBFGxqIQkgACAGQRRsakGQC2ohAyADKAIAIQsgACAGQRRsakGIC2ohDSANKAIAIQggBCALayEDIAggA0ohBSADIAggBRshByAAIAZBFGxqQYwLaiEOIA4oAgAhAyAHQQBKBEBBACEFA0AgBSALaiEMIAEgDGohDCAMLAAAIQwgAyAMECkhAyAFQQFqIQUgBSAHSA0ACwsgCCAHayEFIA0gBTYCACAOIAM2AgAgBQRAIAZBAWohBgUgCSgCACEFIAMgBUYNASACQX9qIQIgCiACNgIAIAkgAEGEC2ogAkEUbGoiAikCADcCACAJIAIpAgg3AgggCSACKAIQNgIQIAooAgAhAgsgBiACSA0BIAQhAgwCCwsgByALaiECIApBfzYCACAAQdQHaiEBIAFBADYCACAAQdgKaiEBIAFBfzYCACAAIAZBFGxqQZQLaiEBIAEoAgAhASAAQZgIaiEEIAQgATYCACABQX9HIQEgAEGcCGohACAAIAE2AgALIAILhgUBCH8gAEHYCmohAiACKAIAIQMgAEEUaiECIAIoAgAhAgJ/AkAgA0F/RgR/QQEhAwwBBSAAQdAIaiEEIAQoAgAhBQJAIAMgBUgEQANAIABB1AhqIANqIQQgBCwAACEGIAZB/wFxIQQgAiAEaiECIAZBf0cNAiADQQFqIQMgAyAFSA0ACwsLIAFBAEchBiAFQX9qIQQgAyAESCEEIAYgBHEEQCAAQRUQFUEADAMLIABBHGohBCAEKAIAIQQgAiAESwR/IABBARAVQQAFIAMgBUYhBCADQX9GIQMgBCADcgR/QQAhAwwDBUEBCwsLDAELIAAoAhwhCCAAQdQHaiEGIAFBAEchBCACIQECQAJAAkACQAJAAkACQAJAAkADQCABQRpqIQUgBSAITw0BIAFBwBNBBBBkIQIgAg0CIAFBBGohAiACLAAAIQIgAg0DIAMEQCAGKAIAIQIgAgRAIAFBBWohAiACLAAAIQIgAkEBcSECIAINBgsFIAFBBWohAiACLAAAIQIgAkEBcSECIAJFDQYLIAUsAAAhAiACQf8BcSEHIAFBG2ohCSAJIAdqIQEgASAISw0GAkAgAgRAQQAhAgNAIAkgAmohAyADLAAAIQUgBUH/AXEhAyABIANqIQEgBUF/Rw0CIAJBAWohAiACIAdJDQALBUEAIQILCyAHQX9qIQMgAiADSCEDIAQgA3ENByABIAhLDQhBASACIAdHDQoaQQAhAwwAAAsACyAAQQEQFUEADAgLIABBFRAVQQAMBwsgAEEVEBVBAAwGCyAAQRUQFUEADAULIABBFRAVQQAMBAsgAEEBEBVBAAwDCyAAQRUQFUEADAILIABBARAVC0EACyEAIAALewEFfyMGIQUjBkEQaiQGIAVBCGohBiAFQQRqIQQgBSEHIAAgAiAEIAMgBSAGECohBCAEBH8gBigCACEEIABBkANqIARBBmxqIQggAigCACEGIAMoAgAhBCAHKAIAIQMgACABIAggBiAEIAMgAhArBUEACyEAIAUkBiAACxsBAX8gABAuIQEgAEHoCmohACAAQQA2AgAgAQv5AwIMfwN9IABB1AdqIQkgCSgCACEGIAYEfyAAIAYQSCELIABBBGohBCAEKAIAIQogCkEASgRAIAZBAEohDCAGQX9qIQ0DQCAMBEAgAEGUBmogBUECdGooAgAhDiAAQZQHaiAFQQJ0aigCACEPQQAhBANAIAQgAmohByAOIAdBAnRqIQcgByoCACEQIAsgBEECdGohCCAIKgIAIREgECARlCEQIA8gBEECdGohCCAIKgIAIREgDSAEayEIIAsgCEECdGohCCAIKgIAIRIgESASlCERIBAgEZIhECAHIBA4AgAgBEEBaiEEIAQgBkcNAAsLIAVBAWohBSAFIApIDQALCyAJKAIABSAAQQRqIQQgBCgCACEKQQALIQsgASADayEHIAkgBzYCACAKQQBKBEAgASADSiEJQQAhBQNAIAkEQCAAQZQGaiAFQQJ0aigCACEMIABBlAdqIAVBAnRqKAIAIQ1BACEGIAMhBANAIAwgBEECdGohBCAEKAIAIQQgDSAGQQJ0aiEOIA4gBDYCACAGQQFqIQYgBiADaiEEIAYgB0cNAAsLIAVBAWohBSAFIApIDQALCyALRSEEIAEgA0ghBSABIAMgBRshASABIAJrIQEgAEH8CmohACAEBEBBACEBBSAAKAIAIQIgAiABaiECIAAgAjYCAAsgAQvRAQECfyMGIQYjBkHgC2okBiAGIQUgBSAEEBwgBUEUaiEEIAQgADYCACAAIAFqIQEgBUEcaiEEIAQgATYCACAFQSRqIQEgAUEBOgAAIAUQHSEBIAEEQCAFEB4hASABBEAgASAFQdwLEHkaIAFBFGohBCAEKAIAIQQgBCAAayEAIAIgADYCACADQQA2AgAFIAUQEUEAIQELBSAFQdQAaiEAIAAoAgAhACAARSEAIAVB2ABqIQEgASgCACEBIAMgAUEBIAAbNgIAQQAhAQsgBiQGIAELrQECAX8BfiAAQQBB3AsQehogAQRAIABBxABqIQIgASkCACEDIAIgAzcCACAAQcgAaiECIANCIIghAyADpyEBIAFBA2ohASABQXxxIQEgAiABNgIAIABB0ABqIQIgAiABNgIACyAAQdQAaiEBIAFBADYCACAAQdgAaiEBIAFBADYCACAAQRRqIQEgAUEANgIAIABB8ABqIQEgAUEANgIAIABBgAtqIQAgAEF/NgIAC9BNAiN/A30jBiEZIwZBgAhqJAYgGUHwB2ohAiAZIgxB7AdqIR0gDEHoB2ohHiAAEDEhAQJ/IAEEQCAAQdMKaiEBIAEtAAAhASABQf8BcSEBIAFBAnEhAyADRQRAIABBIhAVQQAMAgsgAUEEcSEDIAMEQCAAQSIQFUEADAILIAFBAXEhASABBEAgAEEiEBVBAAwCCyAAQdAIaiEBIAEoAgAhASABQQFHBEAgAEEiEBVBAAwCCyAAQdQIaiEBAkACQCABLAAAQR5rIgEEQCABQSJGBEAMAgUMAwsACyAAEDAhASABQf8BcUEBRwRAIABBIhAVQQAMBAsgACACQQYQIiEBIAFFBEAgAEEKEBVBAAwECyACEEkhASABRQRAIABBIhAVQQAMBAsgABAjIQEgAQRAIABBIhAVQQAMBAsgABAwIQEgAUH/AXEhAyAAQQRqIRMgEyADNgIAIAFB/wFxRQRAIABBIhAVQQAMBAsgAUH/AXFBEEoEQCAAQQUQFUEADAQLIAAQIyEBIAAgATYCACABRQRAIABBIhAVQQAMBAsgABAjGiAAECMaIAAQIxogABAwIQMgA0H/AXEhBCAEQQ9xIQEgBEEEdiEEQQEgAXQhBSAAQeQAaiEaIBogBTYCAEEBIAR0IQUgAEHoAGohFCAUIAU2AgAgAUF6aiEFIAVBB0sEQCAAQRQQFUEADAQLIANBoH9qQRh0QRh1IQMgA0EASARAIABBFBAVQQAMBAsgASAESwRAIABBFBAVQQAMBAsgABAwIQEgAUEBcSEBIAFFBEAgAEEiEBVBAAwECyAAEDEhAUEAIAFFDQMaIAAQSiEBQQAgAUUNAxogAEHUCmohAwNAIAAQLyEBIAAgARBLIANBADoAACABDQALIAAQSiEBQQAgAUUNAxogAEEkaiEBIAEsAAAhAQJAIAEEQCAAQQEQFyEBIAENASAAQdgAaiEAIAAoAgAhAUEAIAFBFUcNBRogAEEUNgIAQQAMBQsLEEwgABAZIQEgAUEFRwRAIABBFBAVQQAMBAtBACEBA0AgABAZIQMgA0H/AXEhAyACIAFqIQQgBCADOgAAIAFBAWohASABQQZHDQALIAIQSSEBIAFFBEAgAEEUEBVBAAwECyAAQQgQLCEBIAFBAWohASAAQewAaiENIA0gATYCACABQbAQbCEBIAAgARBNIQEgAEHwAGohFSAVIAE2AgAgAUUEQCAAQQMQFUEADAQLIA0oAgAhAiACQbAQbCECIAFBACACEHoaIA0oAgAhAQJAIAFBAEoEQCAAQRBqIRYDQAJAIBUoAgAhCiAKIAZBsBBsaiEJIABBCBAsIQEgAUH/AXEhASABQcIARwRAQT8hAQwBCyAAQQgQLCEBIAFB/wFxIQEgAUHDAEcEQEHBACEBDAELIABBCBAsIQEgAUH/AXEhASABQdYARwRAQcMAIQEMAQsgAEEIECwhASAAQQgQLCECIAJBCHQhAiABQf8BcSEBIAIgAXIhASAJIAE2AgAgAEEIECwhASAAQQgQLCECIABBCBAsIQMgA0EQdCEDIAJBCHQhAiACQYD+A3EhAiABQf8BcSEBIAIgAXIhASABIANyIQEgCiAGQbAQbGpBBGohDiAOIAE2AgAgAEEBECwhASABQQBHIgMEf0EABSAAQQEQLAshASABQf8BcSECIAogBkGwEGxqQRdqIREgESACOgAAIAkoAgAhBCAOKAIAIQEgBEUEQCABBH9ByAAhAQwCBUEACyEBCyACQf8BcQRAIAAgARA8IQIFIAAgARBNIQIgCiAGQbAQbGpBCGohASABIAI2AgALIAJFBEBBzQAhAQwBCwJAIAMEQCAAQQUQLCEDIA4oAgAhASABQQBMBEBBACEDDAILQQAhBANAIANBAWohBSABIARrIQEgARAtIQEgACABECwhASABIARqIQMgDigCACEPIAMgD0oEQEHTACEBDAQLIAIgBGohBCAFQf8BcSEPIAQgDyABEHoaIA4oAgAhASABIANKBH8gAyEEIAUhAwwBBUEACyEDCwUgDigCACEBIAFBAEwEQEEAIQMMAgtBACEDQQAhAQNAIBEsAAAhBAJAAkAgBEUNACAAQQEQLCEEIAQNACACIANqIQQgBEF/OgAADAELIABBBRAsIQQgBEEBaiEEIARB/wFxIQUgAiADaiEPIA8gBToAACABQQFqIQEgBEH/AXEhBCAEQSBGBEBB2gAhAQwFCwsgA0EBaiEDIA4oAgAhBCADIARIDQALIAEhAyAEIQELCyARLAAAIQQCfwJAIAQEfyABQQJ1IQQgAyAETgRAIBYoAgAhAyABIANKBEAgFiABNgIACyAAIAEQTSEBIAogBkGwEGxqQQhqIQMgAyABNgIAIAFFBEBB4QAhAQwFCyAOKAIAIQQgASACIAQQeRogDigCACEBIAAgAiABEE4gAygCACECIBFBADoAACAOKAIAIQQMAgsgCiAGQbAQbGpBrBBqIQQgBCADNgIAIAMEfyAAIAMQTSEBIAogBkGwEGxqQQhqIQMgAyABNgIAIAFFBEBB6wAhAQwFCyAEKAIAIQEgAUECdCEBIAAgARA8IQEgCiAGQbAQbGpBIGohAyADIAE2AgAgAUUEQEHtACEBDAULIAQoAgAhASABQQJ0IQEgACABEDwhBSAFRQRAQfAAIQEMBQsgDigCACEBIAQoAgAhDyAFIQcgBQVBACEPQQAhB0EACyEDIA9BA3QhBSAFIAFqIQUgFigCACEPIAUgD00EQCABIQUgBAwDCyAWIAU2AgAgASEFIAQFIAEhBAwBCwwBCyAEQQBKBEBBACEBQQAhAwNAIAIgA2ohBSAFLAAAIQUgBUH/AXFBCkohDyAFQX9HIQUgDyAFcSEFIAVBAXEhBSABIAVqIQEgA0EBaiEDIAMgBEgNAAsFQQAhAQsgCiAGQbAQbGpBrBBqIQ8gDyABNgIAIARBAnQhASAAIAEQTSEBIAogBkGwEGxqQSBqIQMgAyABNgIAIAFFBEBB6QAhAQwCC0EAIQMgDigCACEFQQAhByAPCyEBIAkgAiAFIAMQTyEEIARFBEBB9AAhAQwBCyABKAIAIQQgBARAIARBAnQhBCAEQQRqIQQgACAEEE0hBCAKIAZBsBBsakGkEGohBSAFIAQ2AgAgBEUEQEH5ACEBDAILIAEoAgAhBCAEQQJ0IQQgBEEEaiEEIAAgBBBNIQQgCiAGQbAQbGpBqBBqIQUgBSAENgIAIARFBEBB+wAhAQwCCyAEQQRqIQ8gBSAPNgIAIARBfzYCACAJIAIgAxBQCyARLAAAIQMgAwRAIAEoAgAhAyADQQJ0IQMgACAHIAMQTiAKIAZBsBBsakEgaiEDIAMoAgAhBCABKAIAIQUgBUECdCEFIAAgBCAFEE4gDigCACEEIAAgAiAEEE4gA0EANgIACyAJEFEgAEEEECwhAiACQf8BcSEDIAogBkGwEGxqQRVqIQUgBSADOgAAIAJB/wFxIQIgAkECSwRAQYABIQEMAQsgAgRAIABBIBAsIQIgAhBSISUgCiAGQbAQbGpBDGohDyAPICU4AgAgAEEgECwhAiACEFIhJSAKIAZBsBBsakEQaiEbIBsgJTgCACAAQQQQLCECIAJBAWohAiACQf8BcSECIAogBkGwEGxqQRRqIQQgBCACOgAAIABBARAsIQIgAkH/AXEhAiAKIAZBsBBsakEWaiEcIBwgAjoAACAFLAAAIQsgDigCACECIAkoAgAhAyALQQFGBH8gAiADEFMFIAMgAmwLIQIgCiAGQbAQbGpBGGohCyALIAI2AgAgAkUEQEGGASEBDAILIAJBAXQhAiAAIAIQPCEQIBBFBEBBiAEhAQwCCyALKAIAIQIgAkEASgRAQQAhAgNAIAQtAAAhAyADQf8BcSEDIAAgAxAsIQMgA0F/RgRAQYwBIQEMBAsgA0H//wNxIQMgECACQQF0aiEXIBcgAzsBACACQQFqIQIgCygCACEDIAIgA0gNAAsgAyECCyAFLAAAIQMCQCADQQFGBEAgESwAACEDIANBAEciFwRAIAEoAgAhAyADRQRAIAIhAQwDCwUgDigCACEDCyAKIAZBsBBsaiAAIANBAnQgCSgCAGwQTSIfNgIcIB9FBEBBkwEhAQwECyABIA4gFxshASABKAIAIQ4gDkEASgRAIAogBkGwEGxqQagQaiEgIAkoAgAiCkEASiEJQwAAAAAhJUEAIQEDQCAXBH8gICgCACECIAIgAUECdGohAiACKAIABSABCyEEIAkEQCALKAIAIRggHCwAAEUhISAKIAFsISJBACEDQQEhAgNAIAQgAm4hEiASIBhwIRIgECASQQF0aiESIBIvAQAhEiASQf//A3GyISQgGyoCACEmICYgJJQhJCAPKgIAISYgJCAmkiEkICUgJJIhJCAiIANqIRIgHyASQQJ0aiESIBIgJDgCACAlICQgIRshJSADQQFqIQMgAyAKSCISBEBBfyAYbiEjIAIgI0sEQEGeASEBDAkLIBggAmwhAgsgEg0ACwsgAUEBaiEBIAEgDkgNAAsLIAVBAjoAACALKAIAIQEFIAJBAnQhASAAIAEQTSECIAogBkGwEGxqQRxqIQEgASACNgIAIAsoAgAhCCACRQRAQaUBIQEMBAsgCEEATARAIAghAQwCCyAcLAAARSEDQwAAAAAhJUEAIQEDQCAQIAFBAXRqIQQgBC8BACEEIARB//8DcbIhJCAbKgIAISYgJiAklCEkIA8qAgAhJiAkICaSISQgJSAkkiEkIAIgAUECdGohBCAEICQ4AgAgJSAkIAMbISUgAUEBaiEBIAEgCEgNAAsgCCEBCwsgAUEBdCEBIAAgECABEE4LIAZBAWohBiANKAIAIQEgBiABSA0BDAMLCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUE/aw5nABYBFgIWFhYWAxYWFhYEFhYWFhYFFhYWFhYWBhYWFhYWFgcWFhYWFhYWCBYJFgoWFgsWFhYMFhYWFg0WDhYWFhYPFhYWFhYQFhEWFhYSFhYWFhYWExYWFhYWFhYWFhYUFhYWFhYWFRYLIABBFBAVQQAMGwsgAEEUEBVBAAwaCyAAQRQQFUEADBkLIABBFBAVQQAMGAsgAEEDEBVBAAwXCyAAQRQQFUEADBYLIABBFBAVQQAMFQsgAEEDEBVBAAwUCyAAQQMQFUEADBMLIABBAxAVQQAMEgsgAEEDEBVBAAwRCyAAQQMQFUEADBALIBEsAAAhASABBEAgACAHQQAQTgsgAEEUEBVBAAwPCyAAQQMQFUEADA4LIABBAxAVQQAMDQsgAEEUEBVBAAwMCyAAQRQQFUEADAsLIABBAxAVQQAMCgsgCygCACEBIAFBAXQhASAAIBAgARBOIABBFBAVQQAMCQsgCygCACEBIAFBAXQhASAAIBAgARBOIABBAxAVQQAMCAsgGEEBdCEBIAAgECABEE4gAEEUEBVBAAwHCyAIQQF0IQEgACAQIAEQTiAAQQMQFUEADAYLCwsgAEEGECwhASABQQFqIQEgAUH/AXEhAgJAIAIEQEEAIQEDQAJAIABBEBAsIQMgA0UhAyADRQ0AIAFBAWohASABIAJJDQEMAwsLIABBFBAVQQAMBQsLIABBBhAsIQEgAUEBaiEBIABB9ABqIQ8gDyABNgIAIAFBvAxsIQEgACABEE0hASAAQfgBaiEOIA4gATYCACABRQRAIABBAxAVQQAMBAsgDygCACEBAn8gAUEASgR/QQAhBEEAIQcCQAJAAkACQAJAAkADQCAAQRAQLCEBIAFB//8DcSECIABB+ABqIAdBAXRqIQMgAyACOwEAIAFB//8DcSEBIAFBAUsNASABRQ0CIA4oAgAhBSAAQQUQLCEBIAFB/wFxIQIgBSAHQbwMbGohCiAKIAI6AAAgAUH/AXEhASABBEBBfyEBQQAhAgNAIABBBBAsIQMgA0H/AXEhCCAFIAdBvAxsakEBaiACaiEGIAYgCDoAACADQf8BcSEDIAMgAUohCCADIAEgCBshAyACQQFqIQIgCi0AACEBIAFB/wFxIQEgAiABSQRAIAMhAQwBCwtBACEBA0AgAEEDECwhAiACQQFqIQIgAkH/AXEhAiAFIAdBvAxsakEhaiABaiEIIAggAjoAACAAQQIQLCECIAJB/wFxIQIgBSAHQbwMbGpBMWogAWohCCAIIAI6AAACQAJAIAJB/wFxRQ0AIABBCBAsIQIgAkH/AXEhBiAFIAdBvAxsakHBAGogAWohECAQIAY6AAAgAkH/AXEhAiANKAIAIQYgAiAGTg0HIAgsAAAhAiACQR9HDQAMAQtBACECA0AgAEEIECwhBiAGQf//A2ohBiAGQf//A3EhECAFIAdBvAxsakHSAGogAUEEdGogAkEBdGohCSAJIBA7AQAgBkEQdCEGIAZBEHUhBiANKAIAIRAgBiAQSCEGIAZFDQggAkEBaiECIAgtAAAhBiAGQf8BcSEGQQEgBnQhBiACIAZIDQALCyABQQFqIQIgASADSARAIAIhAQwBCwsLIABBAhAsIQEgAUEBaiEBIAFB/wFxIQEgBSAHQbwMbGpBtAxqIQIgAiABOgAAIABBBBAsIQEgAUH/AXEhAiAFIAdBvAxsakG1DGohECAQIAI6AAAgBSAHQbwMbGpB0gJqIQkgCUEAOwEAIAFB/wFxIQFBASABdCEBIAFB//8DcSEBIAUgB0G8DGxqQdQCaiECIAIgATsBACAFIAdBvAxsakG4DGohBiAGQQI2AgAgCiwAACEBAkACQCABBEBBACEIQQIhAwNAIAUgB0G8DGxqQQFqIAhqIQIgAi0AACECIAJB/wFxIQIgBSAHQbwMbGpBIWogAmohAiACLAAAIQsgCwRAQQAhAQNAIBAtAAAhAyADQf8BcSEDIAAgAxAsIQMgA0H//wNxIQsgBigCACEDIAUgB0G8DGxqQdICaiADQQF0aiERIBEgCzsBACADQQFqIQMgBiADNgIAIAFBAWohASACLQAAIQsgC0H/AXEhCyABIAtJDQALIAosAAAhAgUgASECCyADIQEgCEEBaiEIIAJB/wFxIQMgCCADSQRAIAEhAyACIQEMAQsLIAFBAEoNAQVBAiEBDAELDAELQQAhAgNAIAUgB0G8DGxqQdICaiACQQF0aiEDIAMuAQAhAyAMIAJBAnRqIQggCCADOwEAIAJB//8DcSEDIAwgAkECdGpBAmohCCAIIAM7AQAgAkEBaiECIAIgAUgNAAsLIAwgAUEEQQEQZiAGKAIAIQECQCABQQBKBEBBACEBA0AgDCABQQJ0akECaiECIAIuAQAhAiACQf8BcSECIAUgB0G8DGxqQcYGaiABaiEDIAMgAjoAACABQQFqIQEgBigCACECIAEgAkgNAAsgAkECTARAIAIhAQwCC0ECIQEDQCAJIAEgHSAeEFUgHSgCACECIAJB/wFxIQIgBSAHQbwMbGpBwAhqIAFBAXRqIQMgAyACOgAAIB4oAgAhAiACQf8BcSECIAUgB0G8DGxqIAFBAXRqQcEIaiEDIAMgAjoAACABQQFqIQEgBigCACECIAEgAkgNAAsgAiEBCwsgASAESiECIAEgBCACGyEEIAdBAWohByAPKAIAIQEgByABSA0ADAUACwALIABBFBAVQQAMCgsgDigCACEBIABBCBAsIQIgAkH/AXEhAiABIAdBvAxsaiEDIAMgAjoAACAAQRAQLCECIAJB//8DcSECIAEgB0G8DGxqQQJqIQMgAyACOwEAIABBEBAsIQIgAkH//wNxIQIgASAHQbwMbGpBBGohAyADIAI7AQAgAEEGECwhAiACQf8BcSECIAEgB0G8DGxqQQZqIQMgAyACOgAAIABBCBAsIQIgAkH/AXEhAiABIAdBvAxsakEHaiEDIAMgAjoAACAAQQQQLCECIAJBAWohAiACQf8BcSEEIAEgB0G8DGxqQQhqIQMgAyAEOgAAIAJB/wFxIQIgAgRAIAEgB0G8DGxqQQlqIQJBACEBA0AgAEEIECwhByAHQf8BcSEHIAIgAWohBCAEIAc6AAAgAUEBaiEBIAMtAAAhByAHQf8BcSEHIAEgB0kNAAsLIABBBBAVQQAMCQsgAEEUEBUMAgsgAEEUEBUMAQsgBEEBdAwCC0EADAUFQQALCyEQIABBBhAsIQEgAUEBaiEBIABB/AFqIQUgBSABNgIAIAFBGGwhASAAIAEQTSEBIABBgANqIQ4gDiABNgIAIAFFBEAgAEEDEBVBAAwECyAFKAIAIQIgAkEYbCECIAFBACACEHoaIAUoAgAhAQJAIAFBAEoEQEEAIQcCQAJAAkACQAJAAkACQAJAA0AgDigCACEEIABBEBAsIQEgAUH//wNxIQIgAEGAAmogB0EBdGohAyADIAI7AQAgAUH//wNxIQEgAUECSw0BIABBGBAsIQIgBCAHQRhsaiEBIAEgAjYCACAAQRgQLCECIAQgB0EYbGpBBGohAyADIAI2AgAgASgCACEBIAIgAUkNAiAAQRgQLCEBIAFBAWohASAEIAdBGGxqQQhqIQIgAiABNgIAIABBBhAsIQEgAUEBaiEBIAFB/wFxIQEgBCAHQRhsakEMaiEIIAggAToAACAAQQgQLCEBIAFB/wFxIQIgBCAHQRhsakENaiEGIAYgAjoAACABQf8BcSEBIA0oAgAhAiABIAJODQMgCCwAACEBIAEEf0EAIQEDQCAAQQMQLCEDIABBARAsIQIgAgR/IABBBRAsBUEACyECIAJBA3QhAiACIANqIQIgAkH/AXEhAiAMIAFqIQMgAyACOgAAIAFBAWohASAILQAAIQIgAkH/AXEhAyABIANJDQALIAJB/wFxBUEACyEBIAFBBHQhASAAIAEQTSEBIAQgB0EYbGpBFGohCiAKIAE2AgAgAUUNBCAILAAAIQIgAgRAQQAhAgNAIAwgAmotAAAhC0EAIQMDQEEBIAN0IQkgCSALcSEJIAkEQCAAQQgQLCEJIAlB//8DcSERIAooAgAhASABIAJBBHRqIANBAXRqIRYgFiAROwEAIAlBEHQhCSAJQRB1IQkgDSgCACERIBEgCUwNCQUgASACQQR0aiADQQF0aiEJIAlBfzsBAAsgA0EBaiEDIANBCEkNAAsgAkEBaiECIAgtAAAhAyADQf8BcSEDIAIgA0kNAAsLIBUoAgAhASAGLQAAIQIgAkH/AXEhAiABIAJBsBBsakEEaiEBIAEoAgAhASABQQJ0IQEgACABEE0hASAEIAdBGGxqQRBqIQogCiABNgIAIAFFDQYgFSgCACECIAYtAAAhAyADQf8BcSEDIAIgA0GwEGxqQQRqIQIgAigCACECIAJBAnQhAiABQQAgAhB6GiAVKAIAIQIgBi0AACEBIAFB/wFxIQMgAiADQbAQbGpBBGohASABKAIAIQEgAUEASgRAQQAhAQNAIAIgA0GwEGxqIQIgAigCACEDIAAgAxBNIQIgCigCACEEIAQgAUECdGohBCAEIAI2AgAgCigCACECIAIgAUECdGohAiACKAIAIQQgBEUNCQJAIANBAEoEQCAILQAAIQkgA0F/aiECIAlB/wFxIQkgASAJcCEJIAlB/wFxIQkgBCACaiEEIAQgCToAACADQQFGDQEgASEDA0AgCC0AACEJIAlB/wFxIQQgAyAEbSEDIAooAgAgAUECdGohBCAEKAIAIQsgAkF/aiEEIAlB/wFxIQkgAyAJbyEJIAlB/wFxIQkgCyAEaiELIAsgCToAACACQQFKBEAgBCECDAELCwsLIAFBAWohASAVKAIAIQIgBi0AACEDIANB/wFxIQMgAiADQbAQbGpBBGohBCAEKAIAIQQgASAESA0ACwsgB0EBaiEHIAUoAgAhASAHIAFIDQAMCgALAAsgAEEUEBUMBgsgAEEUEBUMBQsgAEEUEBUMBAsgAEEDEBUMAwsgAEEUEBUMAgsgAEEDEBUMAQsgAEEDEBULQQAMBQsLIABBBhAsIQEgAUEBaiEBIABBhANqIQcgByABNgIAIAFBKGwhASAAIAEQTSEBIABBiANqIQogCiABNgIAIAFFBEAgAEEDEBVBAAwECyAHKAIAIQIgAkEobCECIAFBACACEHoaIAcoAgAhAQJAIAFBAEoEQEEAIQECQAJAAkACQAJAAkACQAJAAkACQANAIAooAgAhBCAEIAFBKGxqIQwgAEEQECwhAiACDQEgEygCACECIAJBA2whAiAAIAIQTSECIAQgAUEobGpBBGohCCAIIAI2AgAgAkUNAiAAQQEQLCECIAIEfyAAQQQQLCECIAJBAWohAiACQf8BcQVBAQshAiAEIAFBKGxqQQhqIQYgBiACOgAAIABBARAsIQICQCACBEAgAEEIECwhAiACQQFqIQIgAkH//wNxIQMgDCADOwEAIAJB//8DcSECIAJFDQFBACECIBMoAgAhAwNAIANBf2ohAyADEC0hAyAAIAMQLCEDIANB/wFxIQMgCCgCACENIA0gAkEDbGohDSANIAM6AAAgEygCACEDIANBf2ohAyADEC0hAyAAIAMQLCENIA1B/wFxIQkgCCgCACEDIAMgAkEDbGpBAWohCyALIAk6AAAgAyACQQNsaiEDIAMsAAAhCyALQf8BcSERIBMoAgAhAyADIBFMDQYgDUH/AXEhDSADIA1MDQcgCyAJQRh0QRh1RiENIA0NCCACQQFqIQIgDC8BACENIA1B//8DcSENIAIgDUkNAAsFIAxBADsBAAsLIABBAhAsIQIgAg0GIAYsAAAhAyATKAIAIgxBAEohAgJAAkAgA0H/AXFBAUoEQCACRQ0BQQAhAgNAIABBBBAsIQMgA0H/AXEhAyAIKAIAIQwgDCACQQNsakECaiEMIAwgAzoAACAGLQAAIQwgDEH/AXEgA0ohAyADRQ0LIAJBAWohAiATKAIAIQMgAiADSA0ACwwBBSACBEAgCCgCACEIQQAhAgNAIAggAkEDbGpBAmohDSANQQA6AAAgAkEBaiECIAIgDEgNAAsLIAMNAQsMAQtBACECA0AgAEEIECwaIABBCBAsIQMgA0H/AXEhCCAEIAFBKGxqQQlqIAJqIQMgAyAIOgAAIABBCBAsIQggCEH/AXEhDCAEIAFBKGxqQRhqIAJqIQ0gDSAMOgAAIAMtAAAhAyADQf8BcSEDIA8oAgAhDCAMIANMDQogCEH/AXEhAyAFKAIAIQggAyAISCEDIANFDQsgAkEBaiECIAYtAAAhAyADQf8BcSEDIAIgA0kNAAsLIAFBAWohASAHKAIAIQIgASACSA0ADAwACwALIABBFBAVQQAMDgsgAEEDEBVBAAwNCyAAQRQQFUEADAwLIABBFBAVQQAMCwsgAEEUEBVBAAwKCyAAQRQQFUEADAkLIABBFBAVQQAMCAsgAEEUEBVBAAwHCyAAQRQQFUEADAYACwALCyAAQQYQLCEBIAFBAWohASAAQYwDaiECIAIgATYCAAJAIAFBAEoEQEEAIQECQAJAAkACQANAIABBARAsIQMgA0H/AXEhAyAAQZADaiABQQZsaiEEIAQgAzoAACAAQRAQLCEDIANB//8DcSEEIAAgAUEGbGpBkgNqIQMgAyAEOwEAIABBEBAsIQQgBEH//wNxIQggACABQQZsakGUA2ohBCAEIAg7AQAgAEEIECwhCCAIQf8BcSEGIAAgAUEGbGpBkQNqIQwgDCAGOgAAIAMuAQAhAyADDQEgBC4BACEDIAMNAiAIQf8BcSEDIAcoAgAhBCADIARIIQMgA0UNAyABQQFqIQEgAigCACEDIAEgA0gNAAwGAAsACyAAQRQQFUEADAgLIABBFBAVQQAMBwsgAEEUEBVBAAwGAAsACwsgABAhIABB1AdqIQEgAUEANgIAIBMoAgAhAQJAIAFBAEoEQEEAIQEDQAJAIBQoAgAhAiACQQJ0IQIgACACEE0hAyAAQZQGaiABQQJ0aiECIAIgAzYCACAUKAIAIQMgA0EBdCEDIANB/v///wdxIQMgACADEE0hByAAQZQHaiABQQJ0aiEDIAMgBzYCACAAIBAQTSEHIABB2AdqIAFBAnRqIQQgBCAHNgIAIAIoAgAhAiACRQ0AIAMoAgAhAyADRSEDIAdFIQcgByADcg0AIBQoAgAhAyADQQJ0IQMgAkEAIAMQehogAUEBaiEBIBMoAgAhAiABIAJIDQEMAwsLIABBAxAVQQAMBQsLIBooAgAhASAAQQAgARBWIQFBACABRQ0DGiAUKAIAIQEgAEEBIAEQViEBQQAgAUUNAxogGigCACEBIABB3ABqIQIgAiABNgIAIBQoAgAhASAAQeAAaiECIAIgATYCACABQQF0IQIgAkH+////B3EhBCAFKAIAIQggCEEASgR/IA4oAgAhByABQQJtIQNBACECQQAhAQNAIAcgAUEYbGohBSAFKAIAIQUgBSADSSEGIAUgAyAGGyEGIAcgAUEYbGpBBGohBSAFKAIAIQUgBSADSSEMIAUgAyAMGyEFIAUgBmshBSAHIAFBGGxqQQhqIQYgBigCACEGIAUgBm4hBSAFIAJKIQYgBSACIAYbIQIgAUEBaiEBIAEgCEgNAAsgAkECdCEBIAFBBGoFQQQLIQEgEygCACECIAIgAWwhASAAQQxqIQIgBCABSyEDIAIgBCABIAMbIgI2AgAgAEHVCmohASABQQE6AAAgAEHEAGohASABKAIAIQECQCABBEAgAEHQAGohASABKAIAIQEgAEHIAGohAyADKAIAIQMgASADRwRAQcwWQcQTQaAgQYQXEAQLIABBzABqIQMgAygCACEDIAJB3AtqIQIgAiADaiECIAIgAU0NASAAQQMQFUEADAULCyAAEB8hASAAQShqIQAgACABNgIAQQEMAwsgACACQQYQIiEBIAFBAEchASACLAAAIQMgA0HmAEYhAyABIANxBEAgAkEBaiEBIAEsAAAhASABQekARgRAIAJBAmohASABLAAAIQEgAUHzAEYEQCACQQNqIQEgASwAACEBIAFB6ABGBEAgAkEEaiEBIAEsAAAhASABQeUARgRAIAJBBWohASABLAAAIQEgAUHhAEYEQCAAEDAhASABQf8BcUHkAEYEQCAAEDAhASABQf8BcUUEQCAAQSYQFUEADAoLCwsLCwsLCwsgAEEiEBULQQALIQAgGSQGIAALDwEBfyAAQdwLEE0hASABCz8BAX8gAEEkaiEBIAEsAAAhASABBH9BAAUgAEEUaiEBIAEoAgAhASAAQRhqIQAgACgCACEAIAEgAGsLIQAgAAuBAgECfyAAQdgKaiEBIAEoAgAhAQJ/AkAgAUF/Rw0AIAAQMCEBIABB1ABqIQIgAigCACECIAIEf0EABSABQf8BcUHPAEcEQCAAQR4QFUEADAMLIAAQMCEBIAFB/wFxQecARwRAIABBHhAVQQAMAwsgABAwIQEgAUH/AXFB5wBHBEAgAEEeEBVBAAwDCyAAEDAhASABQf8BcUHTAEcEQCAAQR4QFUEADAMLIAAQMyEBIAEEQCAAQdMKaiEBIAEsAAAhASABQQFxIQEgAUUNAiAAQdwKaiEBIAFBADYCACAAQdQKaiEBIAFBADoAACAAQSAQFQtBAAsMAQsgABBKCyEAIAALFAEBfwNAIAAQLiEBIAFBf0cNAAsLZQEEfyAAQRRqIQMgAygCACEFIAUgAmohBiAAQRxqIQQgBCgCACEEIAYgBEsEfyAAQdQAaiEAIABBATYCAEEABSABIAUgAhB5GiADKAIAIQAgACACaiEAIAMgADYCAEEBCyEAIAALaAECfyAAEDAhAiACQf8BcSECIAAQMCEBIAFB/wFxIQEgAUEIdCEBIAEgAnIhAiAAEDAhASABQf8BcSEBIAFBEHQhASACIAFyIQIgABAwIQAgAEH/AXEhACAAQRh0IQAgAiAAciEAIAALEwEBf0EEEF4hACAAQQA2AgAgAAsTAQF/IAAoAgAhASABEBAgABBfCyEAIAAoAgAhACAABH8gAEEEaiEAIAAoAgAFQQALIQAgAAsaACAAKAIAIQAgAAR/IAAoAgAFQQALIQAgAAvbBwISfwF9IwYhECMGQRBqJAYgEEEEaiELIBAhDCAEQQA2AgAgACgCACEGAkACQCAGDQBBICEFA0ACQCALQQA2AgAgDEEANgIAIAUgAkohBiACIAUgBhshBiABIAYgCyAMQQAQGyEKIAAgCjYCAAJAAkACQAJAIAwoAgAOAgEAAgsgAiAFTCEHIAdBAXMhBSAFQQFxIQUgBiAFdCEFQQFBAiAHGyEGIAYhCUEAIAggBxshCCAFIQYMAgsgCygCACEHIAQoAgAhBSAFIAdqIQUgBCAFNgIAIAEgB2ohAUEAIQkgAiAHayECDAELQQEhCUF/IQgLAkACQAJAIAlBA3EOAwABAAELDAELDAELIAoEQCAKIQYMAwUgBiEFDAILAAsLIAkEfyAIBSAKIQYMAQshEgwBCyAGQQRqIQogCigCACEIIAhBAnQhCCAIEF4hDSANRQRAEAYLIAooAgAhCCAIQQBKBEAgCEECdCEIIA1BACAIEHoaC0EAIQVBACEKIAEhCCAGIQECQAJAAkADQCALQQA2AgAgDEEANgIAIAJBIEghBiACQSAgBhshCSABIAggCUEAIAsgDBAUIQEgAUUEQEEgIQYgCSEBA0AgAiAGSiEGIAZFDQQgAUEBdCEGIAYgAkohASACIAYgARshASAAKAIAIQkgCSAIIAFBACALIAwQFCEJIAlFDQALIAkhAQsgBCgCACEGIAYgAWohBiAEIAY2AgAgCCABaiEIIAIgAWshBiAMKAIAIREgESAKaiEJAkACQCAFIAlIBEAgBUUhAiAFQQF0IQFBgCAgASACGyECIAAoAgAhASABQQRqIQUgBSgCACEFIAVBAEoEQCACQQJ0IQ5BACEBA0AgDSABQQJ0aiEHIAcoAgAhBSAFIA4QYCEFIAVFDQYgByAFNgIAIAFBAWohASAAKAIAIQcgB0EEaiEFIAUoAgAhBSABIAVIDQALIAUhDiAHIQEMAgsFIAAoAgAiAUEEaiEHIAUhAiAHKAIAIQ4MAQsMAQsgDkEASgRAIBFBAEohEyALKAIAIRRBACEHA0AgEwRAIBQgB0ECdGooAgAhFSANIAdBAnRqKAIAIRZBACEFA0AgFSAFQQJ0aiEPIA8qAgAhFyAXQwAAgD9eBEBDAACAPyEXBSAXQwAAgL9dBEBDAACAvyEXCwsgBSAKaiEPIBYgD0ECdGohDyAPIBc4AgAgBUEBaiEFIAUgEUcNAAsLIAdBAWohBSAFIA5IBEAgBSEHDAELCwsLIAIhBSAJIQogBiECDAAACwALEAYMAQsgAyANNgIAIAohEgsLIBAkBiASCzwBAX8gAEEIdCECIAFB/wFxIQEgAEEYdiEAIAAgAXMhACAAQQJ0QdAZaiEAIAAoAgAhACAAIAJzIQAgAAvvBAEFfyAAQdgLaiEGIAZBADYCACAAQdQLaiEGIAZBADYCACAAQdQAaiEIIAgoAgAhBgJ/IAYEf0EABSAAQSRqIQcCQAJAA0ACQCAAECAhBkEAIAZFDQUaIABBARAsIQYgBkUNACAHLAAAIQYgBg0CA0AgABAZIQYgBkF/Rw0ACyAIKAIAIQYgBkUNAUEADAULCwwBCyAAQSMQFUEADAILIABBxABqIQYgBigCACEGIAYEQCAAQcgAaiEGIAYoAgAhByAAQdAAaiEGIAYoAgAhBiAHIAZHBEBB0xNBxBNBuhhBixQQBAsLIABBjANqIQcgBygCACEGIAZBf2ohBiAGEC0hBiAAIAYQLCEIIAhBf0YEf0EABSAHKAIAIQYgCCAGSAR/IAUgCDYCACAAQZADaiAIQQZsaiEHIAcsAAAhBQJAAkAgBQR/IABB6ABqIQUgBSgCACEFIABBARAsIQYgAEEBECwhCCAGQQBHIQkgBywAACEGIAZFIQcgBUEBdSEGIAkgB3IEfwwCBSAAQeQAaiEKIAooAgAhCSAFIAlrIQkgCUECdSEJIAEgCTYCACAKKAIAIQEgASAFaiEJIAYhASAJQQJ1CwUgAEHkAGohBSAFKAIAIQZBACEIIAYhBSAGQQF1IQZBASEHDAELIQYMAQsgAUEANgIAIAYhAQsgAiAGNgIAIAhBAEchAiACIAdyBEAgAyABNgIABSAFQQNsIQIgAEHkAGohASABKAIAIQAgAiAAayEAIABBAnUhACADIAA2AgAgASgCACEAIAAgAmohACAAQQJ1IQULIAQgBTYCAEEBBUEACwsLCyEAIAALjB0CJ38DfSMGIRwjBkGAFGokBiAcQYAMaiEdIBxBgARqISQgHEGAAmohFCAcISAgAi0AACEHIAdB/wFxIQcgAEHcAGogB0ECdGohByAHKAIAIR4gAEGIA2ohByAHKAIAIRYgAkEBaiEHIActAAAhByAHQf8BcSEXIBYgF0EobGohIiAeQQF1IR9BACAfayEpIABBBGohGiAaKAIAIQcCfwJAIAdBAEoEfyAWIBdBKGxqQQRqISogAEH4AWohKyAAQfAAaiElIABB6ApqIRggAEHkCmohISAUQQFqISwDQAJAICooAgAhByAHIA1BA2xqQQJqIQcgBy0AACEHIAdB/wFxIQcgHSANQQJ0aiEVIBVBADYCACAWIBdBKGxqQQlqIAdqIQcgBy0AACEHIAdB/wFxIQ8gAEH4AGogD0EBdGohByAHLgEAIQcgB0UNACArKAIAIRAgAEEBECwhBwJAAkAgB0UNACAQIA9BvAxsakG0DGohByAHLQAAIQcgB0H/AXEhByAHQX9qIQcgB0ECdEGQCGohByAHKAIAISMgAEHYB2ogDUECdGohByAHKAIAIRkgIxAtIQcgB0F/aiEHIAAgBxAsIQggCEH//wNxIQggGSAIOwEAIAAgBxAsIQcgB0H//wNxIQcgGUECaiEIIAggBzsBACAQIA9BvAxsaiEmICYsAAAhByAHBEBBACETQQIhBwNAIBAgD0G8DGxqQQFqIBNqIQggCC0AACEIIAhB/wFxIRsgECAPQbwMbGpBIWogG2ohCCAILAAAIQwgDEH/AXEhJyAQIA9BvAxsakExaiAbaiEIIAgsAAAhCCAIQf8BcSEoQQEgKHQhCSAJQX9qIS0gCARAICUoAgAhCyAQIA9BvAxsakHBAGogG2ohCCAILQAAIQggCEH/AXEhCiALIApBsBBsaiEOIBgoAgAhCCAIQQpIBEAgABA0CyAhKAIAIQkgCUH/B3EhCCALIApBsBBsakEkaiAIQQF0aiEIIAguAQAhCCAIQX9KBEAgCyAKQbAQbGpBCGohDiAOKAIAIQ4gDiAIaiEOIA4tAAAhDiAOQf8BcSEOIAkgDnYhCSAhIAk2AgAgGCgCACEJIAkgDmshCSAJQQBIIQ5BACAJIA4bIRFBfyAIIA4bIQkgGCARNgIABSAAIA4QNSEJCyALIApBsBBsakEXaiEIIAgsAAAhCCAIBEAgCyAKQbAQbGpBqBBqIQggCCgCACEIIAggCUECdGohCCAIKAIAIQkLBUEAIQkLIAwEQEEAIQsgByEIA0AgCSAtcSEKIBAgD0G8DGxqQdIAaiAbQQR0aiAKQQF0aiEKIAouAQAhDCAJICh1IQogDEF/SgR/ICUoAgAhDiAOIAxBsBBsaiESIBgoAgAhCSAJQQpIBEAgABA0CyAhKAIAIREgEUH/B3EhCSAOIAxBsBBsakEkaiAJQQF0aiEJIAkuAQAhCSAJQX9KBEAgDiAMQbAQbGpBCGohEiASKAIAIRIgEiAJaiESIBItAAAhEiASQf8BcSESIBEgEnYhESAhIBE2AgAgGCgCACERIBEgEmshESARQQBIIRJBACARIBIbIRFBfyAJIBIbIQkgGCARNgIABSAAIBIQNSEJCyAOIAxBsBBsakEXaiERIBEsAAAhESARBEAgDiAMQbAQbGpBqBBqIQwgDCgCACEMIAwgCUECdGohCSAJKAIAIQkLIAlB//8DcQVBAAshCSAZIAhBAXRqIAk7AQAgCEEBaiEIIAtBAWohCyALICdHBEAgCiEJDAELCyAHICdqIQcLIBNBAWohEyAmLQAAIQggCEH/AXEhCCATIAhJDQALCyAYKAIAIQcgB0F/Rg0AICxBAToAACAUQQE6AAAgECAPQbwMbGpBuAxqIQcgBygCACETIBNBAkoEQCAjQf//A2ohG0ECIQcDQCAQIA9BvAxsakHACGogB0EBdGohCCAILQAAIQggCEH/AXEhCyAQIA9BvAxsaiAHQQF0akHBCGohCCAILQAAIQggCEH/AXEhCiAQIA9BvAxsakHSAmogB0EBdGohCCAILwEAIQggCEH//wNxIQggECAPQbwMbGpB0gJqIAtBAXRqIQkgCS8BACEJIAlB//8DcSEJIBAgD0G8DGxqQdICaiAKQQF0aiEMIAwvAQAhDCAMQf//A3EhDCAZIAtBAXRqIQ4gDi4BACEOIBkgCkEBdGohFSAVLgEAIRUgCCAJIAwgDiAVEDYhCCAZIAdBAXRqIQ4gDi4BACEJICMgCGshDAJAAkAgCQRAIAwgCEghFSAMIAggFRtBAXQhFSAUIApqIQogCkEBOgAAIBQgC2ohCyALQQE6AAAgFCAHaiELIAtBAToAACAVIAlMBEAgDCAISg0DIBsgCWshCAwCCyAJQQFxIQsgCwR/IAlBAWohCSAJQQF2IQkgCCAJawUgCUEBdSEJIAkgCGoLIQgFIBQgB2ohCSAJQQA6AAALCyAOIAg7AQALIAdBAWohByAHIBNIDQALCyATQQBKBEBBACEHA0AgFCAHaiEIIAgsAAAhCCAIRQRAIBkgB0EBdGohCCAIQX87AQALIAdBAWohByAHIBNHDQALCwwBCyAVQQE2AgALIA1BAWohDSAaKAIAIQcgDSAHSA0BDAMLCyAAQRUQFUEABQwBCwwBCyAAQcQAaiETIBMoAgAhCSAJBEAgAEHIAGohCCAIKAIAIQggAEHQAGohDSANKAIAIQ0gCCANRwRAQdMTQcQTQc8ZQecUEAQLCyAHQQJ0IQggJCAdIAgQeRogIi4BACEIIAgEQCAWIBdBKGxqKAIEIQ0gCEH//wNxIQxBACEIA0AgDSAIQQNsaiELIAstAAAhCyALQf8BcSELIB0gC0ECdGohCyALKAIAIQ8gHSANIAhBA2xqLQABQQJ0aiEKAkACQCAPRQ0AIAooAgAhDyAPRQ0ADAELIApBADYCACALQQA2AgALIAhBAWohCCAIIAxJDQALCyAWIBdBKGxqQQhqIQsgCywAACEIIAgEQCAWIBdBKGxqQQRqIQxBACEJIAchDQNAAkAgDUEASgRAIAwoAgAhD0EAIQdBACEIA0AgDyAIQQNsakECaiEKIAotAAAhCiAKQf8BcSEKIAkgCkYEQCAdIAhBAnRqIQogCigCACEQICAgB2ohCiAQBEAgCkEBOgAAIBQgB0ECdGohCiAKQQA2AgAFIApBADoAACAAQZQGaiAIQQJ0aiEKIAooAgAhCiAUIAdBAnRqIRAgECAKNgIACyAHQQFqIQcLIAhBAWohCCAIIA1IDQALBUEAIQcLIBYgF0EobGpBGGogCWohCCAILQAAIQggCEH/AXEhCCAAIBQgByAfIAggIBA3IAlBAWohCSALLQAAIQcgB0H/AXEhByAJIAdPDQAgGigCACENDAELCyATKAIAIQkLIAkEQCAAQcgAaiEHIAcoAgAhByAAQdAAaiEIIAgoAgAhCCAHIAhHBEBB0xNBxBNB8BlB5xQQBAsLICIuAQAhByAHBEAgFiAXQShsaigCBCENIB5BAUohDCAHQf//A3EhCANAIAhBf2ohCSANIAlBA2xqIQcgBy0AACEHIAdB/wFxIQcgAEGUBmogB0ECdGohByAHKAIAISAgDSAJQQNsakEBaiEHIActAAAhByAHQf8BcSEHIABBlAZqIAdBAnRqIQcgBygCACEPIAwEQEEAIQcDQCAgIAdBAnRqIQsgCyoCACEuIA8gB0ECdGoiECoCACIvQwAAAABeIQogLkMAAAAAXgRAIAoEQCAuITAgLiAvkyEuBSAuIC+SITALBSAKBEAgLiEwIC4gL5IhLgUgLiAvkyEwCwsgCyAwOAIAIBAgLjgCACAHQQFqIQcgByAfSA0ACwsgCEEBSgRAIAkhCAwBCwsLIBooAgAhByAHQQBKBEAgH0ECdCEJQQAhBwNAICQgB0ECdGohCCAIKAIAIQ0gAEGUBmogB0ECdGohCCANBEAgCCgCACEIIAhBACAJEHoaBSAIKAIAIQggAEHYB2ogB0ECdGohDSANKAIAIQ0gACAiIAcgHiAIIA0QOAsgB0EBaiEHIBooAgAhCCAHIAhIDQALIAhBAEoEQEEAIQcDQCAAQZQGaiAHQQJ0aiEIIAgoAgAhCCACLQAAIQkgCUH/AXEhCSAIIB4gACAJEDkgB0EBaiEHIBooAgAhCCAHIAhIDQALCwsgABAhIABB1QpqIQIgAiwAACEHIAcEQCAAQZgIaiEGIAYgKTYCACAeIAVrIQYgAEH4CmohByAHIAY2AgAgAEGcCGohBiAGQQE2AgAgAkEAOgAABSAAQfgKaiEHIAcoAgAhAiACBEAgBCADayEIIAIgCEgEQCACIANqIQMgBiADNgIAIAdBADYCAAUgAiAIayECIAcgAjYCACAGIAQ2AgAgBCEDCwsLIABB4ApqIQIgAigCACECIABB8ApqIQYgBigCACEHIABBnAhqIggoAgAhBgJAAkAgAiAHRgRAIAYEQCAAQdMKaiECIAIsAAAhAiACQQRxIQIgAgRAIABB9ApqIQIgAigCACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOi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mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(l){return l.charCodeAt(0)});var E=E!==void 0?E:{},X={};for(e in E)E.hasOwnProperty(e)&&(X[e]=E[e]);E.arguments=[],E.thisProgram="./this.program",E.quit=function(l,u){throw u},E.preRun=[],E.postRun=[];var O=!1,nA=!1,$=!1,V=!1;O=typeof window=="object",nA=typeof importScripts=="function",$=typeof process=="object"&&typeof Ja=="function"&&!O&&!nA,V=!O&&!$&&!nA;var q="";function z(l){return E.locateFile?E.locateFile(l,q):q+l}$?(q="/",E.read=function(u,f){var w;return A||(A=void 0),t||(t=void 0),u=t.normalize(u),w=A.readFileSync(u),f?w:w.toString()},E.readBinary=function(u){var f=E.read(u,!0);return f.buffer||(f=new Uint8Array(f)),UA(f.buffer),f},process.argv.length>1&&(E.thisProgram=process.argv[1].replace(/\\/g,"/")),E.arguments=process.argv.slice(2),typeof module<"u",process.on("uncaughtException",function(l){if(!(l instanceof ot))throw l}),process.on("unhandledRejection",function(l,u){process.exit(1)}),E.quit=function(l){process.exit(l)},E.inspect=function(){return"[Emscripten Module object]"}):V?(typeof read<"u"&&(E.read=function(u){return read(u)}),E.readBinary=function(u){var f;return typeof readbuffer=="function"?new Uint8Array(readbuffer(u)):(UA(typeof(f=read(u,"binary"))=="object"),f)},typeof scriptArgs<"u"?E.arguments=scriptArgs:typeof arguments<"u"&&(E.arguments=arguments),typeof quit=="function"&&(E.quit=function(l){quit(l)})):(O||nA)&&(O?document.currentScript&&(q=document.currentScript.src):q=self.location.href,q=q.indexOf("blob:")!==0?q.split("/").slice(0,-1).join("/")+"/":"",E.read=function(u){var f=new XMLHttpRequest;return f.open("GET",u,!1),f.send(null),f.responseText},nA&&(E.readBinary=function(u){var f=new XMLHttpRequest;return f.open("GET",u,!1),f.responseType="arraybuffer",f.send(null),new Uint8Array(f.response)}),E.readAsync=function(u,f,w){var U=new XMLHttpRequest;U.open("GET",u,!0),U.responseType="arraybuffer",U.onload=function(){if(U.status==200||U.status==0&&U.response){f(U.response);return}w()},U.onerror=w,U.send(null)},E.setWindowTitle=function(l){document.title=l});var tA=E.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),rA=E.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||tA);for(e in X)X.hasOwnProperty(e)&&(E[e]=X[e]);function P(l){var u=C;return C=C+l+15&-16,u}function G(l){var u=o[D>>2],f=u+l+15&-16;return o[D>>2]=f,f>=pA&&!nt()?(o[D>>2]=u,0):u}function b(l,u){return u||(u=16),l=Math.ceil(l/u)*u}function K(l){switch(l){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if(l[l.length-1]==="*")return 4;if(l[0]!=="i")return 0;var u=parseInt(l.substr(1));return UA(u%8==0),u/8}}function eA(l){eA.shown||(eA.shown={}),eA.shown[l]||(eA.shown[l]=1,rA(l))}X=void 0;var aA={"f64-rem":function(l,u){return l%u},debugger:function(){}},GA=[];function se(l,u){for(var f=0,w=f;w<f+0;w++)if(!GA[w])return GA[w]=l,1+w;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function zA(l){GA[l-1]=null}var WA={};function Ne(l,u){if(l){UA(u),WA[u]||(WA[u]={});var f=WA[u];return f[l]||(u.length===1?f[l]=function(){return AA(u,l)}:u.length===2?f[l]=function(U){return AA(u,l,[U])}:f[l]=function(){return AA(u,l,Array.prototype.slice.call(arguments))}),f[l]}}function ae(l,u,f){return f?+(l>>>0)+4294967296*+(u>>>0):+(l>>>0)+4294967296*+(0|u)}function AA(l,u,f){return f&&f.length?E["dynCall_"+l].apply(null,[u].concat(f)):E["dynCall_"+l].call(null,u)}var BA=0,_A=0;function UA(l,u){l||Ie("Assertion failed: "+u)}function Ce(l){var u=E["_"+l];return UA(u,"Cannot call unknown function "+l+", make sure it is exported"),u}var he={stackSave:function(){gn()},stackRestore:function(){In()},arrayToC:function(l){var u,f,w=wt(l.length);return u=l,f=w,s.set(u,f),w},stringToC:function(l){var u=0;if(l!=null&&l!==0){var f=(l.length<<2)+1;u=wt(f),et(l,u,f)}return u}},$e={string:he.stringToC,array:he.arrayToC};function Ue(l,u,f,w,U){var _=Ce(l),oA=[],H=0;if(w)for(var DA=0;DA<w.length;DA++){var lA=$e[f[DA]];lA?(H===0&&(H=gn()),oA[DA]=lA(w[DA])):oA[DA]=w[DA]}var dA,CA=_.apply(null,oA);return CA=(dA=CA,u==="string"?le(dA):u==="boolean"?!!dA:dA),H!==0&&In(H),CA}function At(l,u,f,w){switch((f=f||"i8").charAt(f.length-1)==="*"&&(f="i32"),f){case"i1":case"i8":s[l>>0]=u;break;case"i16":i[l>>1]=u;break;case"i32":o[l>>2]=u;break;case"i64":tempI64=[u>>>0,+Ta(tempDouble=u)>=1?tempDouble>0?(0|Ha(+hs(tempDouble/4294967296),4294967295))>>>0:~~+xa((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],o[l>>2]=tempI64[0],o[l+4>>2]=tempI64[1];break;case"float":B[l>>2]=u;break;case"double":d[l>>3]=u;break;default:Ie("invalid type for setValue: "+f)}}function An(l,u,f){switch((u=u||"i8").charAt(u.length-1)==="*"&&(u="i32"),u){case"i1":case"i8":return s[l>>0];case"i16":return i[l>>1];case"i32":case"i64":return o[l>>2];case"float":return B[l>>2];case"double":return d[l>>3];default:Ie("invalid type for getValue: "+u)}return null}function en(l,u,f,w){typeof l=="number"?(_=!0,oA=l):(_=!1,oA=l.length);var U=typeof u=="string"?u:null;if(H=f==4?w:[typeof Dt=="function"?Dt:P,wt,P,G][f===void 0?2:f](Math.max(oA,U?1:u.length)),_){for(w=H,UA((3&H)==0),DA=H+(-4&oA);w<DA;w+=4)o[w>>2]=0;for(DA=H+oA;w<DA;)s[w++>>0]=0;return H}if(U==="i8")return l.subarray||l.slice?a.set(l,H):a.set(new Uint8Array(l),H),H;for(var _,oA,H,DA,lA,dA,CA,W=0;W<oA;){var LA=l[W];if((lA=U||u[W])===0){W++;continue}lA=="i64"&&(lA="i32"),At(H+W,LA,lA),CA!==lA&&(dA=K(lA),CA=lA),W+=dA}return H}function Te(l){return Q?on?Dt(l):G(l):P(l)}function le(l,u){if(u===0||!l)return"";for(var f,w,U,_=0,oA=0;_|=w=a[l+oA>>0],(w!=0||u)&&(oA++,!u||oA!=u););u||(u=oA);var H="";if(_<128){for(;u>0;)U=String.fromCharCode.apply(String,a.subarray(l,l+Math.min(u,1024))),H=H?H+U:U,l+=1024,u-=1024;return H}return f=l,(function(lA,dA){for(var CA=dA;lA[CA];)++CA;if(CA-dA>16&&lA.subarray&&ft)return ft.decode(lA.subarray(dA,CA));for(var W,LA,PA,JA,qA,we,KA="";;){if(!(W=lA[dA++]))return KA;if(!(128&W)){KA+=String.fromCharCode(W);continue}if(LA=63&lA[dA++],(224&W)==192){KA+=String.fromCharCode((31&W)<<6|LA);continue}if(PA=63&lA[dA++],(240&W)==224?W=(15&W)<<12|LA<<6|PA:(JA=63&lA[dA++],(248&W)==240?W=(7&W)<<18|LA<<12|PA<<6|JA:(qA=63&lA[dA++],W=(252&W)==248?(3&W)<<24|LA<<18|PA<<12|JA<<6|qA:(1&W)<<30|LA<<24|PA<<18|JA<<12|qA<<6|(we=63&lA[dA++]))),W<65536)KA+=String.fromCharCode(W);else{var it=W-65536;KA+=String.fromCharCode(55296|it>>10,56320|1023&it)}}})(a,f)}function TA(l){for(var u="";;){var f=s[l++>>0];if(!f)return u;u+=String.fromCharCode(f)}}function tn(l,u){return(function(w,U,_){for(var oA=0;oA<w.length;++oA)s[U++>>0]=w.charCodeAt(oA);_||(s[U>>0]=0)})(l,u,!1)}var ft=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function xe(l,u,f,w){if(!(w>0))return 0;for(var U=f,_=f+w-1,oA=0;oA<l.length;++oA){var H=l.charCodeAt(oA);if(H>=55296&&H<=57343&&(H=65536+((1023&H)<<10)|1023&l.charCodeAt(++oA)),H<=127){if(f>=_)break;u[f++]=H}else if(H<=2047){if(f+1>=_)break;u[f++]=192|H>>6,u[f++]=128|63&H}else if(H<=65535){if(f+2>=_)break;u[f++]=224|H>>12,u[f++]=128|H>>6&63,u[f++]=128|63&H}else if(H<=2097151){if(f+3>=_)break;u[f++]=240|H>>18,u[f++]=128|H>>12&63,u[f++]=128|H>>6&63,u[f++]=128|63&H}else if(H<=67108863){if(f+4>=_)break;u[f++]=248|H>>24,u[f++]=128|H>>18&63,u[f++]=128|H>>12&63,u[f++]=128|H>>6&63,u[f++]=128|63&H}else{if(f+5>=_)break;u[f++]=252|H>>30,u[f++]=128|H>>24&63,u[f++]=128|H>>18&63,u[f++]=128|H>>12&63,u[f++]=128|H>>6&63,u[f++]=128|63&H}}return u[f]=0,f-U}function et(l,u,f){return xe(l,a,u,f)}function RA(l){for(var u=0,f=0;f<l.length;++f){var w=l.charCodeAt(f);w>=55296&&w<=57343&&(w=65536+((1023&w)<<10)|1023&l.charCodeAt(++f)),w<=127?++u:w<=2047?u+=2:w<=65535?u+=3:w<=2097151?u+=4:w<=67108863?u+=5:u+=6}return u}var oe=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function tt(l){for(var u=l,f=u>>1;i[f];)++f;if((u=f<<1)-l>32&&oe)return oe.decode(a.subarray(l,u));for(var w=0,U="";;){var _=i[l+2*w>>1];if(_==0)return U;++w,U+=String.fromCharCode(_)}}function nn(l,u,f){if(f===void 0&&(f=2147483647),f<2)return 0;for(var w=u,U=(f-=2)<2*l.length?f/2:l.length,_=0;_<U;++_){var oA=l.charCodeAt(_);i[u>>1]=oA,u+=2}return i[u>>1]=0,u-w}function ie(l){return 2*l.length}function mt(l){for(var u=0,f="";;){var w=o[l+4*u>>2];if(w==0)return f;if(++u,w>=65536){var U=w-65536;f+=String.fromCharCode(55296|U>>10,56320|1023&U)}else f+=String.fromCharCode(w)}}function St(l,u,f){if(f===void 0&&(f=2147483647),f<4)return 0;for(var w=u,U=w+f-4,_=0;_<l.length;++_){var oA=l.charCodeAt(_);if(oA>=55296&&oA<=57343&&(oA=65536+((1023&oA)<<10)|1023&l.charCodeAt(++_)),o[u>>2]=oA,(u+=4)+4>U)break}return o[u>>2]=0,u-w}function gs(l){for(var u=0,f=0;f<l.length;++f){var w=l.charCodeAt(f);w>=55296&&w<=57343&&++f,u+=4}return u}function cs(l){var u=RA(l)+1,f=Dt(u);return f&&xe(l,s,f,u),f}function pt(l){var u=RA(l)+1,f=wt(u);return xe(l,s,f,u),f}function ye(l){return l}function sn(){var l,u=(function(){var w=Error();if(!w.stack){try{throw Error(0)}catch(U){w=U}if(!w.stack)return"(no stack trace available)"}return w.stack.toString()})();return E.extraStackTrace&&(u+=`
2
+ `+E.extraStackTrace()),(l=u).replace(/__Z[\w\d_]+/g,function(f){var w,U=w=f;return f===U?f:f+" ["+U+"]"})}function re(l,u){return l%u>0&&(l+=u-l%u),l}function He(l){E.buffer=n=l}function ke(){E.HEAP8=s=new Int8Array(n),E.HEAP16=i=new Int16Array(n),E.HEAP32=o=new Int32Array(n),E.HEAPU8=a=new Uint8Array(n),E.HEAPU16=I=new Uint16Array(n),E.HEAPU32=g=new Uint32Array(n),E.HEAPF32=B=new Float32Array(n),E.HEAPF64=d=new Float64Array(n)}function nt(){var l=E.usingWasm?65536:16777216,u=2147483648-l;if(o[D>>2]>u)return!1;var f=pA;for(pA=Math.max(pA,16777216);pA<o[D>>2];)pA=pA<=536870912?re(2*pA,l):Math.min(re((3*pA+2147483648)/4,l),u);var w=E.reallocBuffer(pA);return w&&w.byteLength==pA?(He(w),ke(),!0):(pA=f,!1)}h=C=m=y=F=k=D=0,Q=!1,E.reallocBuffer||(E.reallocBuffer=function(l){try{if(ArrayBuffer.transfer)u=ArrayBuffer.transfer(n,l);else{var u,f=s;u=new ArrayBuffer(l),new Int8Array(u).set(f)}}catch{return!1}return!!Ya(u)&&u});try{(v=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{v=function(u){return u.byteLength}}var Ye=E.TOTAL_STACK||5242880,pA=E.TOTAL_MEMORY||16777216;function yt(){return pA}function de(l){for(;l.length>0;){var u=l.shift();if(typeof u=="function"){u();continue}var f=u.func;typeof f=="number"?u.arg===void 0?E.dynCall_v(f):E.dynCall_vi(f,u.arg):f(u.arg===void 0?null:u.arg)}}pA<Ye&&rA("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+pA+"! (TOTAL_STACK="+Ye+")"),E.buffer?n=E.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(E.wasmMemory=new WebAssembly.Memory({initial:pA/65536}),n=E.wasmMemory.buffer):n=new ArrayBuffer(pA),E.buffer=n),ke();var st=[],an=[],Es=[],Bs=[],Cs=[],on=!1,La=!1;function Na(l){st.unshift(l)}function Yi(l){an.unshift(l)}function Pi(l){Es.unshift(l)}function Ji(l){Bs.unshift(l)}function Ua(l){Cs.unshift(l)}function qi(l,u,f){var w,U;eA("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),f&&(w=s[U=u+RA(l)]),et(l,u,1/0),f&&(s[U]=w)}function Ki(l,u,f){return l>=0?l:u<=32?2*Math.abs(1<<u-1)+l:Math.pow(2,u)+l}function Oi(l,u,f){if(l<=0)return l;var w=u<=32?Math.abs(1<<u-1):Math.pow(2,u-1);return l>=w&&(u<=32||l>w)&&(l=-2*w+l),l}var Ta=Math.abs,xa=Math.ceil,hs=Math.floor,Ha=Math.min,De=0,rn=null,at=null;function Vi(l){return l}E.preloadedImages={},E.preloadedAudios={};var ls="data:application/octet-stream;base64,";function kt(l){return String.prototype.startsWith?l.startsWith(ls):l.indexOf(ls)===0}(function(){var u="main.wast",f="main.wasm",w="main.temp.asm";kt(u)||(u=z(u)),kt(f)||(f=z(f)),kt(w)||(w=z(w));var U={global:null,env:null,asm2wasm:aA,parent:E},_=null;function oA(CA){return CA}function H(){try{if(E.wasmBinary)return new Uint8Array(E.wasmBinary);if(E.readBinary)return E.readBinary(f);throw"both async and sync fetching of the wasm failed"}catch(CA){Ie(CA)}}E.asmPreload=E.asm;var DA=E.reallocBuffer,lA=function(CA){CA=re(CA,E.usingWasm?65536:16777216);var W=E.buffer.byteLength;if(E.usingWasm)try{var LA=E.wasmMemory.grow((CA-W)/65536);return LA!==-1?E.buffer=E.wasmMemory.buffer:null}catch{return null}};E.reallocBuffer=function(CA){return dA==="asmjs"?DA(CA):lA(CA)};var dA="";E.asm=function(CA,W,LA){var PA;if(!(W=PA=W).table){var JA,qA=E.wasmTableSize;qA===void 0&&(qA=1024);var we=E.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?we!==void 0?W.table=new WebAssembly.Table({initial:qA,maximum:we,element:"anyfunc"}):W.table=new WebAssembly.Table({initial:qA,element:"anyfunc"}):W.table=Array(qA),E.wasmTable=W.table}return W.memoryBase||(W.memoryBase=E.STATIC_BASE),W.tableBase||(W.tableBase=0),JA=(function(it,Pe,En){if(typeof WebAssembly!="object")return rA("no native wasm support detected"),!1;if(!(E.wasmMemory instanceof WebAssembly.Memory))return rA("no native wasm Memory in use"),!1;function Ft(jA,$A){if((_=jA.exports).memory){var rt,Bn,us;rt=_.memory,Bn=E.buffer,rt.byteLength<Bn.byteLength&&rA("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),us=new Int8Array(Bn),new Int8Array(rt).set(us),He(rt),ke()}E.asm=_,E.usingWasm=!0,(function($i){if(De--,E.monitorRunDependencies&&E.monitorRunDependencies(De),De==0&&(rn!==null&&(clearInterval(rn),rn=null),at)){var Pa=at;at=null,Pa()}})("wasm-instantiate")}if(Pe.memory=E.wasmMemory,U.global={NaN:NaN,Infinity:1/0},U["global.Math"]=Math,U.env=Pe,De++,E.monitorRunDependencies&&E.monitorRunDependencies(De),E.instantiateWasm)try{return E.instantiateWasm(U,Ft)}catch(jA){return rA("Module.instantiateWasm callback failed with error: "+jA),!1}function Je(jA){Ft(jA.instance,jA.module)}function Qs(jA){(!E.wasmBinary&&(O||nA)&&typeof fetch=="function"?fetch(f,{credentials:"same-origin"}).then(function($A){if(!$A.ok)throw"failed to load wasm binary file at '"+f+"'";return $A.arrayBuffer()}).catch(function(){return H()}):new Promise(function($A,rt){$A(H())})).then(function($A){return WebAssembly.instantiate($A,U)}).then(jA).catch(function($A){rA("failed to asynchronously prepare wasm: "+$A),Ie($A)})}return E.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||kt(f)||typeof fetch!="function"?Qs(Je):WebAssembly.instantiateStreaming(fetch(f,{credentials:"same-origin"}),U).then(Je).catch(function(jA){rA("wasm streaming compile failed: "+jA),rA("falling back to ArrayBuffer instantiation"),Qs(Je)}),{}})(CA,W,LA),UA(JA,"no binaryen method succeeded."),JA},E.asm})(),C=(h=1024)+4816,an.push(),E.STATIC_BASE=h,E.STATIC_BUMP=4816;var xA=C;function Xi(l){s[xA]=s[l],s[xA+1]=s[l+1],s[xA+2]=s[l+2],s[xA+3]=s[l+3]}function Zi(l){s[xA]=s[l],s[xA+1]=s[l+1],s[xA+2]=s[l+2],s[xA+3]=s[l+3],s[xA+4]=s[l+4],s[xA+5]=s[l+5],s[xA+6]=s[l+6],s[xA+7]=s[l+7]}function zi(l,u,f){var w=f>0?f:RA(l)+1,U=Array(w),_=xe(l,U,0,U.length);return u&&(U.length=_),U}function Wi(l){for(var u=[],f=0;f<l.length;f++){var w=l[f];w>255&&(w&=255),u.push(String.fromCharCode(w))}return u.join("")}C+=16,D=P(4),F=(m=y=b(C))+Ye,k=b(F),o[D>>2]=k,Q=!0,E.wasmTableSize=4,E.wasmMaxTableSize=4,E.asmGlobalArg={},E.asmLibraryArg={abort:Ie,assert:UA,enlargeMemory:nt,getTotalMemory:yt,abortOnCannotGrowMemory:function(){Ie("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+pA+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_iii:function(u,f,w){var U=gn();try{return E.dynCall_iii(u,f,w)}catch(_){if(In(U),typeof _!="number"&&_!=="longjmp")throw _;E.setThrew(1,0)}},___assert_fail:function(u,f,w,U){Ie("Assertion failed: "+le(u)+", at: "+[f?le(f):"unknown filename",w,U?le(U):"unknown function"])},___setErrNo:function(u){return E.___errno_location&&(o[E.___errno_location()>>2]=u),u},_abort:function(){E.abort()},_emscripten_memcpy_big:function(u,f,w){return a.set(a.subarray(f,f+w),u),u},_llvm_floor_f64:hs,DYNAMICTOP_PTR:D,tempDoublePtr:xA,ABORT:BA,STACKTOP:y,STACK_MAX:F};var ds=E.asm(E.asmGlobalArg,E.asmLibraryArg,n);E.asm=ds,E.___errno_location=function(){return E.asm.___errno_location.apply(null,arguments)};var Ya=E._emscripten_replace_memory=function(){return E.asm._emscripten_replace_memory.apply(null,arguments)};E._free=function(){return E.asm._free.apply(null,arguments)};var Dt=E._malloc=function(){return E.asm._malloc.apply(null,arguments)};E._memcpy=function(){return E.asm._memcpy.apply(null,arguments)},E._memset=function(){return E.asm._memset.apply(null,arguments)},E._sbrk=function(){return E.asm._sbrk.apply(null,arguments)},E._stb_vorbis_js_channels=function(){return E.asm._stb_vorbis_js_channels.apply(null,arguments)},E._stb_vorbis_js_close=function(){return E.asm._stb_vorbis_js_close.apply(null,arguments)},E._stb_vorbis_js_decode=function(){return E.asm._stb_vorbis_js_decode.apply(null,arguments)},E._stb_vorbis_js_open=function(){return E.asm._stb_vorbis_js_open.apply(null,arguments)},E._stb_vorbis_js_sample_rate=function(){return E.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},E.establishStackSpace=function(){return E.asm.establishStackSpace.apply(null,arguments)},E.getTempRet0=function(){return E.asm.getTempRet0.apply(null,arguments)},E.runPostSets=function(){return E.asm.runPostSets.apply(null,arguments)},E.setTempRet0=function(){return E.asm.setTempRet0.apply(null,arguments)},E.setThrew=function(){return E.asm.setThrew.apply(null,arguments)};var wt=E.stackAlloc=function(){return E.asm.stackAlloc.apply(null,arguments)},In=E.stackRestore=function(){return E.asm.stackRestore.apply(null,arguments)},gn=E.stackSave=function(){return E.asm.stackSave.apply(null,arguments)};function ot(l){this.name="ExitStatus",this.message="Program terminated with exit("+l+")",this.status=l}function cn(l){l=l||E.arguments,!(De>0)&&((function(){if(E.preRun)for(typeof E.preRun=="function"&&(E.preRun=[E.preRun]);E.preRun.length;)Na(E.preRun.shift());de(st)})(),!(De>0)&&(E.calledRun||(E.setStatus?(E.setStatus("Running..."),setTimeout(function(){setTimeout(function(){E.setStatus("")},1),u()},1)):u())));function u(){!E.calledRun&&(E.calledRun=!0,BA||(on||(on=!0,de(an)),de(Es),E.onRuntimeInitialized&&E.onRuntimeInitialized(),(function(){if(E.postRun)for(typeof E.postRun=="function"&&(E.postRun=[E.postRun]);E.postRun.length;)Ua(E.postRun.shift());de(Cs)})()))}}function _i(l,u){(!u||!E.noExitRuntime||l!==0)&&(E.noExitRuntime||(BA=!0,_A=l,y=L,de(Bs),La=!0,E.onExit&&E.onExit(l)),E.quit(l,new ot(l)))}function Ie(l){throw E.onAbort&&E.onAbort(l),l!==void 0?(tA(l),rA(l),l=JSON.stringify(l)):l="",BA=!0,_A=1,"abort("+l+"). Build with -s ASSERTIONS=1 for more info."}if(E.dynCall_iii=function(){return E.asm.dynCall_iii.apply(null,arguments)},E.asm=ds,E.ccall=Ue,E.cwrap=function(u,f,w,U){var _=(w=w||[]).every(function(oA){return oA==="number"});return f!=="string"&&_&&!U?Ce(u):function(){return Ue(u,f,w,arguments,U)}},ot.prototype=Error(),ot.prototype.constructor=ot,at=function l(){E.calledRun||cn(),E.calledRun||(at=l)},E.run=cn,E.abort=Ie,E.preInit)for(typeof E.preInit=="function"&&(E.preInit=[E.preInit]);E.preInit.length>0;)E.preInit.pop()();E.noExitRuntime=!0,cn(),E.onRuntimeInitialized=()=>{ks=!0,aa()},lt.decode=function(l){return(function(f){if(!ks)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var w={};function U(Pe){return new Int32Array(E.HEAPU8.buffer,Pe,1)[0]}function _(Pe,En){var Ft=new ArrayBuffer(En*Float32Array.BYTES_PER_ELEMENT),Je=new Float32Array(Ft);return Je.set(new Float32Array(E.HEAPU8.buffer,Pe,En)),Je}w.open=E.cwrap("stb_vorbis_js_open","number",[]),w.close=E.cwrap("stb_vorbis_js_close","void",["number"]),w.channels=E.cwrap("stb_vorbis_js_channels","number",["number"]),w.sampleRate=E.cwrap("stb_vorbis_js_sample_rate","number",["number"]),w.decode=E.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var oA,H,DA,lA,dA=w.open(),CA=(oA=f,H=f.byteLength,DA=E._malloc(H),(lA=new Uint8Array(E.HEAPU8.buffer,DA,H)).set(new Uint8Array(oA,0,H)),lA),W=E._malloc(4),LA=E._malloc(4),PA=w.decode(dA,CA.byteOffset,CA.byteLength,W,LA);if(E._free(CA.byteOffset),PA<0)throw w.close(dA),E._free(W),Error("stbvorbis decode failed: "+PA);for(var JA=w.channels(dA),qA=Array(JA),we=new Int32Array(E.HEAPU32.buffer,U(W),JA),KA=0;KA<JA;KA++)qA[KA]=_(we[KA],PA),E._free(we[KA]);var it=w.sampleRate(dA);return w.close(dA),E._free(U(W)),E._free(W),{data:qA,sampleRate:it,eof:!0,error:null}})(l)}})();var Ot=lt,ss=-15e3,Go=15e3,vn=new Float32Array(Go-ss+1);for(let e=0;e<vn.length;e++){let A=ss+e;vn[e]=Math.pow(2,A/1200)}function Qe(e){return e<=-32767?0:vn[e-ss]}var Yt=-2e4,oa=16500,Ln=new Float32Array(oa-Yt+1);for(let e=0;e<Ln.length;e++){let A=Yt+e;Ln[e]=440*Math.pow(2,(A-6900)/1200)}function Nn(e){return e<Yt||e>oa?440*Math.pow(2,(e-6900)/1200):Ln[~~e-Yt]}var as=-1660,Ro=1600,Un=new Float32Array((Ro-as)*100+1);for(let e=0;e<Un.length;e++){let A=(as*100+e)/100;Un[e]=Math.pow(10,-A/20)}function Ae(e){return Un[Math.floor((e-as)*100)]}var Mo=.01,HA=100,Qn=90,bo=15e-6,be=class ia{sampleRate;currentAttenuationDb=HA;state=0;attenuation=0;attenuationTargetGain=0;currentSampleTime=0;releaseStartDb=HA;releaseStartTimeSamples=0;currentReleaseGain=1;attackDuration=0;decayDuration=0;releaseDuration=0;attenuationTarget=0;sustainDbRelative=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;canEndOnSilentSustain;constructor(A,t){this.sampleRate=A,this.canEndOnSilentSustain=t/10>=Qn}static startRelease(A){A.volumeEnvelope.releaseStartTimeSamples=A.volumeEnvelope.currentSampleTime,A.volumeEnvelope.currentReleaseGain=Ae(A.volumeEnvelope.currentAttenuationDb),ia.recalculate(A)}static recalculate(A){let t=A.volumeEnvelope,n=g=>Math.max(0,Math.floor(Qe(g)*t.sampleRate));t.attenuationTarget=Math.max(0,Math.min(A.modulatedGenerators[r.initialAttenuation],1440))/10,t.attenuationTargetGain=Ae(t.attenuationTarget),t.sustainDbRelative=Math.min(HA,A.modulatedGenerators[r.sustainVolEnv]/10);let s=Math.min(HA,t.sustainDbRelative);t.attackDuration=n(A.modulatedGenerators[r.attackVolEnv]);let a=A.modulatedGenerators[r.decayVolEnv],i=(60-A.targetKey)*A.modulatedGenerators[r.keyNumToVolEnvDecay],I=s/HA;t.decayDuration=n(a+i)*I,t.releaseDuration=n(Math.max(-7200,A.modulatedGenerators[r.releaseVolEnv])),t.delayEnd=n(A.modulatedGenerators[r.delayVolEnv]),t.attackEnd=t.attackDuration+t.delayEnd;let o=(60-A.targetKey)*A.modulatedGenerators[r.keyNumToVolEnvHold];if(t.holdEnd=n(A.modulatedGenerators[r.holdVolEnv]+o)+t.attackEnd,t.decayEnd=t.decayDuration+t.holdEnd,t.state===0&&t.attackEnd===0&&(t.state=2),A.isInRelease){let g=Math.max(0,Math.min(HA,t.sustainDbRelative)),B=g/HA;switch(t.decayDuration=n(a+i)*B,t.state){case 0:t.releaseStartDb=HA;break;case 1:{let h=1-(t.attackEnd-t.releaseStartTimeSamples)/t.attackDuration;t.releaseStartDb=20*Math.log10(h)*-1;break}case 2:t.releaseStartDb=0;break;case 3:t.releaseStartDb=(1-(t.decayEnd-t.releaseStartTimeSamples)/t.decayDuration)*g;break;case 4:t.releaseStartDb=g;break}t.releaseStartDb=Math.max(0,Math.min(t.releaseStartDb,HA)),t.releaseStartDb>=Qn&&(A.finished=!0),t.currentReleaseGain=Ae(t.releaseStartDb);let d=(HA-t.releaseStartDb)/HA;t.releaseDuration*=d}}static apply(A,t,n,s){let a=A.volumeEnvelope,i=n/10,I=s;if(A.isInRelease){let g=a.currentSampleTime-a.releaseStartTimeSamples;if(g>=a.releaseDuration){for(let d=0;d<t.length;d++)t[d]=0;A.finished=!0;return}let B=HA-a.releaseStartDb;for(let d=0;d<t.length;d++){a.attenuation+=(a.attenuationTargetGain-a.attenuation)*I;let h=g/a.releaseDuration*B+a.releaseStartDb;a.currentReleaseGain=a.attenuation*Ae(h+i),t[d]*=a.currentReleaseGain,a.currentSampleTime++,g++}a.currentReleaseGain<=bo&&(A.finished=!0);return}let o=0;switch(a.state){case 0:for(;a.currentSampleTime<a.delayEnd;)if(a.currentAttenuationDb=HA,t[o]=0,a.currentSampleTime++,++o>=t.length)return;a.state++;case 1:for(;a.currentSampleTime<a.attackEnd;){a.attenuation+=(a.attenuationTargetGain-a.attenuation)*I;let g=1-(a.attackEnd-a.currentSampleTime)/a.attackDuration;if(t[o]*=g*a.attenuation*Ae(i),a.currentAttenuationDb=0,a.currentSampleTime++,++o>=t.length)return}a.state++;case 2:for(;a.currentSampleTime<a.holdEnd;)if(a.attenuation+=(a.attenuationTargetGain-a.attenuation)*I,t[o]*=a.attenuation*Ae(i),a.currentAttenuationDb=0,a.currentSampleTime++,++o>=t.length)return;a.state++;case 3:for(;a.currentSampleTime<a.decayEnd;)if(a.attenuation+=(a.attenuationTargetGain-a.attenuation)*I,a.currentAttenuationDb=(1-(a.decayEnd-a.currentSampleTime)/a.decayDuration)*a.sustainDbRelative,t[o]*=a.attenuation*Ae(a.currentAttenuationDb+i),a.currentSampleTime++,++o>=t.length)return;a.state++;case 4:for(a.canEndOnSilentSustain&&a.sustainDbRelative>=Qn&&(A.finished=!0);;)if(a.attenuation+=(a.attenuationTargetGain-a.attenuation)*I,t[o]*=a.attenuation*Ae(a.sustainDbRelative+i),a.currentAttenuationDb=a.sustainDbRelative,a.currentSampleTime++,++o>=t.length)return}}};function vo(e,A){switch(this.privateProps.masterParameters[e]=A,e){case"masterPan":{let t=A;t=t/2+.5,this.privateProps.panLeft=1-t,this.privateProps.panRight=t;break}case"masterGain":break;case"voiceCap":break;case"interpolationType":break;case"midiSystem":break;case"monophonicRetriggerMode":break;case"transposition":{let t=A;this.privateProps.masterParameters.transposition=0;for(let n of this.midiChannels)n.transposeChannel(t);this.privateProps.masterParameters.transposition=t}}this.callEvent("masterParameterChange",{parameter:e,value:A})}function Lo(e){return this.privateProps.masterParameters[e]}function No(){return{...this.privateProps.masterParameters}}function Me(e,A){return(e>>A&1)>0}function un(e){return e?1:0}var NA=16384,Pt=Object.keys(QA).length,ra=4,ce=new Float32Array(NA+1),ve=new Float32Array(NA+1);ce[0]=0;ce[ce.length-1]=1;ve[0]=0;ve[ve.length-1]=1;for(let e=1;e<NA-1;e++){let A=-.4166666666666667*Math.log(e/(ce.length-1))/Math.LN10;ve[e]=1-A,ce[ce.length-1-e]=A}function Ia(e,A,t){let n=!!(e&2);switch(!!(e&1)&&(t=1-t),A){case QA.linear:return n?t*2-1:t;case QA.switch:return t=t>.5?1:0,n?t*2-1:t;case QA.concave:return n?(t=t*2-1,t<0?-ce[~~(t*-NA)]:ce[~~(t*NA)]):ce[~~(t*NA)];case QA.convex:return n?(t=t*2-1,t<0?-ve[~~(t*-NA)]:ve[~~(t*NA)]):ve[~~(t*NA)]}}var XA=class Tn{isBipolar;isNegative;index;isCC;curveType;constructor(A=j.noController,t=QA.linear,n=!1,s=!1,a=!1){this.isBipolar=s,this.isNegative=a,this.index=A,this.isCC=n,this.curveType=t}get sourceName(){return this.isCC?Object.keys(S).find(A=>S[A]===this.index)??this.index.toString():Object.keys(j).find(A=>j[A]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(QA).find(A=>QA[A]===this.curveType)??this.curveType.toString()}static fromSourceEnum(A){let t=Me(A,9),n=Me(A,8),s=Me(A,7),a=A&127,i=A>>10&3;return new Tn(a,i,s,t,n)}static copyFrom(A){return new Tn(A.index,A.curveType,A.isCC,A.isBipolar,A.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|un(this.isBipolar)<<9|un(this.isNegative)<<8|un(this.isCC)<<7|this.index}isIdentical(A){return this.index===A.index&&this.isNegative===A.isNegative&&this.isCC===A.isCC&&this.isBipolar===A.isBipolar&&this.curveType===A.curveType}getValue(A,t){let n;if(this.isCC)n=A[this.index];else switch(this.index){case j.noController:n=16383;break;case j.noteOnKeyNum:n=t.midiNote<<7;break;case j.noteOnVelocity:n=t.velocity<<7;break;case j.polyPressure:n=t.pressure<<7;break;default:n=A[this.index+mA];break}let s=(this.isBipolar?2:0)|(this.isNegative?1:0);return ga[NA*(this.curveType*Pt+s)+n]}},ga=new Float32Array(NA*ra*Pt);for(let e=0;e<Pt;e++)for(let A=0;A<ra;A++){let t=NA*(e*Pt+A);for(let n=0;n<NA;n++)ga[t+n]=Ia(A,e,n/NA)}var me=10;function ge(e,A,t,n,s){return new XA(s,e,n,A,t).toSourceEnum()}var ca=ge(QA.linear,!0,!1,!0,S.filterResonance),EA=class xn{currentValue=0;destination=r.initialAttenuation;transformAmount=0;transformType=0;isEffectModulator=!1;isDefaultResonantModulator=!1;primarySource;secondarySource;constructor(A=new XA,t=new XA,n=r.INVALID,s=0,a=0,i=!1,I=!1){this.primarySource=A,this.secondarySource=t,this.destination=n,this.transformAmount=s,this.transformType=a,this.isEffectModulator=i,this.isDefaultResonantModulator=I}get destinationName(){return Object.keys(r).find(A=>r[A]===this.destination)}static isIdentical(A,t,n=!1){return A.primarySource.isIdentical(t.primarySource)&&A.secondarySource.isIdentical(t.secondarySource)&&A.destination===t.destination&&A.transformType===t.transformType&&(!n||A.transformAmount===t.transformAmount)}static copyFrom(A){return new xn(XA.copyFrom(A.primarySource),XA.copyFrom(A.secondarySource),A.destination,A.transformAmount,A.transformType,A.isEffectModulator,A.isDefaultResonantModulator)}toString(){return`Source: ${this.primarySource.toString()}
3
3
  Secondary source: ${this.secondarySource.toString()}
4
4
  to: ${this.destinationName}
5
- amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(A,t){J(A,this.primarySource.toSourceEnum()),J(A,this.destination),J(A,this.transformAmount),J(A,this.secondarySource.toSourceEnum()),J(A,this.transformType),t&&t.mod++}sumTransform(A){let t=xn.copyFrom(this);return t.transformAmount+=A.transformAmount,t}},pA=class extends cA{constructor(e,A,t,n,s){let a=(e===219||e===221)&&A===0&&(t===r.reverbEffectsSend||t===r.chorusEffectsSend),i=e===ca&&A===0&&t===r.initialFilterQ;super(XA.fromSourceEnum(e),XA.fromSourceEnum(A),t,n,s,a,i),this.destination>mo&&(this.destination=r.INVALID)}},fn=960,mn=QA.concave,Uo=[new pA(ge(mn,!1,!0,!1,_.noteOnVelocity),0,r.initialAttenuation,fn,0),new pA(129,0,r.vibLfoToPitch,50,0),new pA(ge(mn,!1,!0,!0,S.mainVolume),0,r.initialAttenuation,fn,0),new pA(13,0,r.vibLfoToPitch,50,0),new pA(526,16,r.fineTune,12700,0),new pA(650,0,r.pan,500,0),new pA(ge(mn,!1,!0,!0,S.expressionController),0,r.initialAttenuation,fn,0),new pA(219,0,r.reverbEffectsSend,200,0),new pA(221,0,r.chorusEffectsSend,200,0)],To=[new pA(ge(QA.linear,!1,!1,!1,_.polyPressure),0,r.vibLfoToPitch,50,0),new pA(ge(QA.linear,!1,!1,!0,S.tremoloDepth),0,r.modLfoToVolume,24,0),new pA(ge(QA.convex,!0,!1,!0,S.attackTime),0,r.attackVolEnv,6e3,0),new pA(ge(QA.linear,!0,!1,!0,S.releaseTime),0,r.releaseVolEnv,3600,0),new pA(ge(QA.linear,!0,!1,!0,S.brightness),0,r.initialFilterFc,6e3,0),new pA(ca,0,r.initialFilterQ,250,0)],Ea=Uo.concat(To),Ct=4,wA=class{generatorType;generatorValue=0;constructor(e,A,t=!0){if(this.generatorType=e,A===void 0)throw new Error("No value provided.");if(this.generatorValue=Math.round(A),t){let n=H[e];n!==void 0&&(this.generatorValue=Math.max(n.min,Math.min(n.max,this.generatorValue)))}}write(e,A){J(e,this.generatorType),J(e,this.generatorValue),A.gen++}toString(){return`${Object.keys(r).find(e=>r[e]===this.generatorType)}: ${this.generatorValue}`}};function xo(e,A,t){let n=H[e]||{min:0,max:32768,def:0},s=A.find(o=>o.generatorType===e),a=0;s&&(a=s.generatorValue);let i=t.find(o=>o.generatorType===e),I=n.def;return i&&(I=i.generatorValue),Math.max(-32767,Math.min(32767,I+a))}var Jt=4,Vt=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}get fineTuning(){let e=this.getGenerator(r.coarseTune,0),A=this.getGenerator(r.fineTune,0);return e*100+A}set fineTuning(e){let A=Math.trunc(e/100),t=e%100;this.setGenerator(r.coarseTune,A),this.setGenerator(r.fineTune,t)}addToGenerator(e,A,t=!0){let n=this.getGenerator(e,H[e].def);this.setGenerator(e,A+n,t)}setGenerator(e,A,t=!0){switch(e){case r.sampleID:throw new Error("Use setSample()");case r.instrument:throw new Error("Use setInstrument()");case r.velRange:case r.keyRange:throw new Error("Set the range manually")}if(A===void 0){this.generators=this.generators.filter(s=>s.generatorType!==e);return}let n=this.generators.findIndex(s=>s.generatorType===e);n>0?this.generators[n]=new wA(e,A,t):this.addGenerators(new wA(e,A,t))}addGenerators(...e){e.forEach(A=>{switch(A.generatorType){default:this.generators.push(A);break;case r.sampleID:case r.instrument:break;case r.velRange:this.velRange.min=A.generatorValue&127,this.velRange.max=A.generatorValue>>8&127;break;case r.keyRange:this.keyRange.min=A.generatorValue&127,this.keyRange.max=A.generatorValue>>8&127}})}addModulators(...e){this.modulators.push(...e)}getGenerator(e,A){return this.generators.find(t=>t.generatorType===e)?.generatorValue??A}copyFrom(e){this.generators=e.generators.map(A=>new wA(A.generatorType,A.generatorValue,!1)),this.modulators=e.modulators.map(cA.copyFrom.bind(cA)),this.velRange={...e.velRange},this.keyRange={...e.keyRange}}getGenCount(){let e=this.generators.filter(A=>A.generatorType!==r.sampleID&&A.generatorType!==r.instrument&&A.generatorType!==r.keyRange&&A.generatorType!==r.velRange).length;return this.hasVelRange&&e++,this.hasKeyRange&&e++,e}write(e,A,t,n,s){let a=n.gen,i=n.mod;J(t.pdta,a&65535),J(t.pdta,i&65535),J(t.xdta,a>>16),J(t.xdta,i>>16),n.bag++,this.getWriteGenerators(s).forEach(o=>o.write(e,n)),this.modulators.forEach(o=>o.write(A,n))}getWriteGenerators(e){let A=this.generators.filter(t=>t.generatorType!==r.sampleID&&t.generatorType!==r.instrument&&t.generatorType!==r.keyRange&&t.generatorType!==r.velRange);if(!e)throw new Error("No bank provided! ");return this.hasVelRange&&A.unshift(new wA(r.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&A.unshift(new wA(r.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),A}},Ba=class extends Vt{},Ca=class extends Vt{parentPreset;constructor(e,A){super(),this.parentPreset=e,this._instrument=A,this._instrument.linkTo(this.parentPreset)}_instrument;get instrument(){return this._instrument}set instrument(e){this._instrument&&this._instrument.unlinkFrom(this.parentPreset),this._instrument=e,this._instrument.linkTo(this.parentPreset)}getGenCount(){return super.getGenCount()+1}getWriteGenerators(e){let A=super.getWriteGenerators(e);if(!e)throw new Error("Instrument ID cannot be determined without the sound bank itself.");return A.push(new wA(r.instrument,e.instruments.indexOf(this.instrument),!1)),A}},ha=class extends Vt{parentInstrument;useCount;constructor(e,A){super(),this.parentInstrument=e,this._sample=A,A.linkTo(this.parentInstrument),this.useCount=e.useCount}_sample;get sample(){return this._sample}set sample(e){this._sample&&this._sample.unlinkFrom(this.parentInstrument),this._sample=e,e.linkTo(this.parentInstrument)}getGenCount(){return super.getGenCount()+1}getWriteGenerators(e){let A=super.getWriteGenerators(e);return A.push(new wA(r.sampleID,e.samples.indexOf(this.sample),!1)),A}},la=22,Ho=new Set([r.velRange,r.keyRange,r.instrument,r.sampleID,r.exclusiveClass,r.endOper,r.sampleModes,r.startloopAddrsOffset,r.startloopAddrsCoarseOffset,r.endloopAddrsOffset,r.endloopAddrsCoarseOffset,r.startAddrsOffset,r.startAddrsCoarseOffset,r.endAddrOffset,r.endAddrsCoarseOffset,r.initialAttenuation,r.fineTune,r.coarseTune,r.keyNumToVolEnvHold,r.keyNumToVolEnvDecay,r.keyNumToModEnvHold,r.keyNumToModEnvDecay]),dt=class{name="";zones=[];globalZone=new Ba;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(e){let A=new ha(this,e);return this.zones.push(A),A}linkTo(e){this.linkedTo.push(e),this.zones.forEach(A=>A.useCount++)}unlinkFrom(e){let A=this.linkedTo.indexOf(e);if(A<0){sA(`Cannot unlink ${e.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(A,1),this.zones.forEach(t=>t.useCount--)}deleteUnusedZones(){this.zones=this.zones.filter(e=>{let A=e.useCount>0;return A||e.sample.unlinkFrom(this),A})}delete(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that is used by: ${this.linkedTo.map(e=>e.name).toString()}.`);this.zones.forEach(e=>e.sample.unlinkFrom(this))}deleteZone(e,A=!1){let t=this.zones[e];return t.useCount-=1,t.useCount<1||A?(t.sample.unlinkFrom(this),this.zones.splice(e,1),!0):!1}globalize(){let e=this.globalZone;for(let n=0;n<58;n++){if(Ho.has(n))continue;n=n;let s={},a=H[n]?.def||0;s[a]=0;for(let i of this.zones){let I=i.getGenerator(n,void 0);I!==void 0?s[I]===void 0?s[I]=1:s[I]++:s[a]++;let o;switch(n){default:continue;case r.decayVolEnv:o=r.keyNumToVolEnvDecay;break;case r.holdVolEnv:o=r.keyNumToVolEnvHold;break;case r.decayModEnv:o=r.keyNumToModEnvDecay;break;case r.holdModEnv:o=r.keyNumToModEnvHold}if(i.getGenerator(o,void 0)!==void 0){s={};break}}if(Object.keys(s).length>0){let I=Object.entries(s).reduce((g,B)=>g[1]<B[1]?B:g,["0",0]),o=parseInt(I[0]);o!==a&&e.setGenerator(n,o,!1),this.zones.forEach(g=>{let B=g.getGenerator(n,void 0);B!==void 0?B===o&&g.setGenerator(n,void 0):o!==a&&g.setGenerator(n,a)})}}let t=this.zones[0].modulators.map(n=>cA.copyFrom(n));for(let n of t){let s=!0;for(let a of this.zones){if(!s)continue;a.modulators.find(I=>cA.isIdentical(I,n))||(s=!1)}if(s){e.addModulators(cA.copyFrom(n));for(let a of this.zones){let i=a.modulators.find(I=>cA.isIdentical(I,n));i&&i.transformAmount===n.transformAmount&&a.modulators.splice(a.modulators.indexOf(i),1)}}}}getSize(){let e=this.zones.reduce((t,n)=>n.modulators.length+t,0)+this.globalZone.modulators.length,A=this.zones.reduce((t,n)=>n.getGenCount()+t,0)+this.globalZone.getGenCount();return{mod:e*me,bag:(this.zones.length+1)*Jt,gen:A*Ct,hdr:la}}write(e,A,t,n,s,a){p(`%cWriting ${this.name}...`,c.info),yA(n.pdta,this.name.substring(0,20),20),yA(n.xdta,this.name.substring(20),20),J(n.pdta,s.hdr&65535),J(n.xdta,s.hdr>>>16),s.hdr+=this.zones.length+1,this.globalZone.write(e,A,t,s,a),this.zones.forEach(i=>i.write(e,A,t,s,a))}},da=38,pe=class{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(e,A=new Ba){this.parentSoundBank=e,this.globalZone=A}get isXGDrums(){return this.parentSoundBank.isXGBank&&dA.isXGDrums(this.bankMSB)}get isAnyDrums(){let e=this.parentSoundBank.isXGBank;return this.isGMGSDrum||e&&dA.isXGDrums(this.bankMSB)&&this.bankMSB!==126}delete(){this.zones.forEach(e=>e.instrument?.unlinkFrom(this))}deleteZone(e){this.zones[e]?.instrument?.unlinkFrom(this),this.zones.splice(e,1)}createZone(e){let A=new Ca(this,e);return this.zones.push(A),A}preload(e,A){for(let t=e;t<A+1;t++)for(let n=0;n<128;n++)this.getSynthesisData(t,n).forEach(s=>{s.sample.getAudioData()})}matches(e){return te.matches(this,e)}getSize(){let e=this.zones.reduce((t,n)=>n.modulators.length+t,0)+this.globalZone.modulators.length,A=this.zones.reduce((t,n)=>n.getGenCount()+t,0)+this.globalZone.getGenCount();return{mod:e*me,bag:(this.zones.length+1)*Jt,gen:A*Ct,hdr:da}}getSynthesisData(e,A){if(this.zones.length<1)return[];function t(d,C){return C>=d.min&&C<=d.max}function n(d,C){d.push(...C.filter(h=>!d.find(u=>u.generatorType===h.generatorType)))}function s(d,C){d.push(...C.filter(h=>!d.find(u=>cA.isIdentical(h,u))))}let a=[],i=[...this.globalZone.generators],I=[...this.globalZone.modulators],o=this.globalZone.keyRange,g=this.globalZone.velRange;return this.zones.filter(d=>t(d.hasKeyRange?d.keyRange:o,e)&&t(d.hasVelRange?d.velRange:g,A)).forEach(d=>{let C=d.instrument;if(!C||C.zones.length<1)return;let h=d.generators,u=d.modulators,m=[...C.globalZone.generators],y=[...C.globalZone.modulators],F=C.globalZone.keyRange,k=C.globalZone.velRange;C.zones.filter(v=>t(v.hasKeyRange?v.keyRange:F,e)&&t(v.hasVelRange?v.velRange:k,A)).forEach(v=>{let L=[...v.generators],E=[...v.modulators];n(h,i),n(L,m),s(u,I),s(E,y),s(E,this.parentSoundBank.defaultModulators);let V=[...E];for(let K of u){let nA=V.findIndex(j=>cA.isIdentical(K,j));nA!==-1?V[nA]=V[nA].sumTransform(K):V.push(K)}v.sample&&a.push({instrumentGenerators:L,presetGenerators:h,modulators:V,sample:v.sample})})}),a}toMIDIString(){return te.toMIDIString(this)}toString(){return te.toNamedMIDIString(this)}toFlattenedInstrument(){let e=(g,B)=>{g.push(...B.filter(d=>!g.find(C=>C.generatorType===d.generatorType)))},A=(g,B)=>({min:Math.max(g.min,B.min),max:Math.min(g.max,B.max)}),t=(g,B)=>{g.push(...B.filter(d=>!g.find(C=>cA.isIdentical(d,C))))},n=new dt;n.name=this.name;let s=[],a=[],i=this.globalZone;s.push(...i.generators),a.push(...i.modulators);let I=i.keyRange,o=i.velRange;for(let g of this.zones){if(!g.instrument)throw new Error("No instrument in a preset zone.");let B=g.keyRange;g.hasKeyRange||(B=I);let d=g.velRange;g.hasVelRange||(d=o);let C=g.generators.map(L=>new wA(L.generatorType,L.generatorValue));e(C,s);let h=[...g.modulators];t(h,a);let u=g.instrument,m=u.zones,y=[],F=[],k=u.globalZone;y.push(...k.generators),F.push(...k.modulators);let D=k.keyRange,v=k.velRange;for(let L of m){if(!L.sample)throw new Error("No sample in an instrument zone.");let E=L.keyRange;L.hasKeyRange||(E=D);let V=L.velRange;if(L.hasVelRange||(V=v),E=A(E,B),V=A(V,d),E.max<E.min||V.max<V.min)continue;let K=L.generators.map(Z=>new wA(Z.generatorType,Z.generatorValue));e(K,y);let nA=[...L.modulators];t(nA,F);let j=[...nA];for(let Z of h){let eA=j.findIndex(iA=>cA.isIdentical(Z,iA));eA!==-1?j[eA]=j[eA].sumTransform(Z):j.push(Z)}let O=K.map(Z=>new wA(Z.generatorType,Z.generatorValue));for(let Z of C){if(Z.generatorType===r.velRange||Z.generatorType===r.keyRange||Z.generatorType===r.instrument||Z.generatorType===r.endOper||Z.generatorType===r.sampleModes)continue;let eA=K.findIndex(iA=>iA.generatorType===Z.generatorType);if(eA!==-1){let iA=O[eA].generatorValue+Z.generatorValue;O[eA]=new wA(Z.generatorType,iA)}else{let iA=H[Z.generatorType].def+Z.generatorValue;O.push(new wA(Z.generatorType,iA))}}O=O.filter(Z=>Z.generatorType!==r.sampleID&&Z.generatorType!==r.keyRange&&Z.generatorType!==r.velRange&&Z.generatorType!==r.endOper&&Z.generatorType!==r.instrument&&Z.generatorValue!==H[Z.generatorType].def);let q=n.createZone(L.sample);q.keyRange=E,q.velRange=V,q.keyRange.min===0&&q.keyRange.max===127&&(q.keyRange.min=-1),q.velRange.min===0&&q.velRange.max===127&&(q.velRange.min=-1),q.addGenerators(...O),q.addModulators(...j)}}return n}write(e,A,t,n,s,a){p(`%cWriting ${this.name}...`,c.info),yA(n.pdta,this.name.substring(0,20),20),yA(n.xdta,this.name.substring(20),20),J(n.pdta,this.program);let i=this.bankMSB;this.isGMGSDrum?i=128:this.bankMSB===0&&(i=this.bankLSB),J(n.pdta,i),n.xdta.currentIndex+=4,J(n.pdta,s.hdr&65535),J(n.xdta,s.hdr>>16),IA(n.pdta,this.library),IA(n.pdta,this.genre),IA(n.pdta,this.morphology),n.xdta.currentIndex+=12,s.hdr+=this.zones.length+1,this.globalZone.write(e,A,t,s,a),this.zones.forEach(I=>I.write(e,A,t,s,a))}};function Ds(e,A){let t;return A?t=e.find(n=>n.isXGDrums):t=e.find(n=>n.isGMGSDrum),t||(e.find(n=>n.isAnyDrums)??e[0])}function Qa(e,A,t){if(e.length<1)throw new Error("No presets!");A.isGMGSDrum&&dA.isSystemXG(t)&&(A={...A,isGMGSDrum:!1,bankLSB:0,bankMSB:dA.getDrumBank(t)});let{isGMGSDrum:n,bankLSB:s,bankMSB:a,program:i}=A,I=dA.isSystemXG(t),o=dA.isXGDrums(a)&&I,g=e.find(C=>C.matches(A));if(g&&(!o||o&&g.isXGDrums))return g;let B=C=>{p(`%cPreset %c${te.toMIDIString(A)}%c not found. (${t}) Replaced with %c${C.toString()}`,c.warn,c.unrecognized,c.warn,c.value)};if(n){let C=e.find(h=>h.isGMGSDrum&&h.program===i);return C||(C=e.find(h=>h.isAnyDrums&&h.program===i),C)?(B(C),C):(C=Ds(e,!1),B(C),C)}if(o){let C=e.find(h=>h.program===i&&h.isXGDrums);return C||(C=e.find(h=>h.isAnyDrums&&h.program===i),C)?(B(C),C):(C=Ds(e,!0),B(C),C)}let d=e.filter(C=>C.program===i&&!C.isAnyDrums);return d.length<1?(B(e[0]),e[0]):(I?g=d.find(C=>C.bankLSB===s):g=d.find(C=>C.bankMSB===a),g||(g=d.find(C=>C.bankLSB===s||C.bankMSB===a),g)?(B(g),g):(B(d[0]),d[0]))}var Yo=class extends pe{constructor(e,A){super(e.parentSoundBank,e.globalZone),this.bankMSB=dA.addBankOffset(e.bankMSB,A,e.isXGDrums),this.name=e.name,this.bankLSB=e.bankLSB,this.isGMGSDrum=e.isGMGSDrum,this.program=e.program,this.genre=e.genre,this.morphology=e.morphology,this.library=e.library,this.zones=e.zones}},Po=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(e){this.presetListChangeCallback=e}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(e=>e.id)}set priorityOrder(e){this.soundBankList.sort((A,t)=>e.indexOf(A.id)-e.indexOf(t.id)),this.generatePresetList()}deleteSoundBank(e){if(this.soundBankList.length===0){sA("1 soundbank left. Aborting!");return}let A=this.soundBankList.findIndex(t=>t.id===e);if(A===-1)throw new Error(`No sound bank with id "${e}"`);this.soundBankList.splice(A,1),this.generatePresetList()}addSoundBank(e,A,t=0){let n=this.soundBankList.find(s=>s.id===A);n!==void 0?(n.soundBank=e,n.bankOffset=t):this.soundBankList.push({id:A,soundBank:e,bankOffset:t}),this.generatePresetList()}getPreset(e,A){if(this.soundBankList.length<1)throw new Error("No sound banks! Did you forget to add one?");return Qa(this.selectablePresetList,e,A)}destroy(){this.soundBankList.forEach(e=>{e.soundBank.destroySoundBank()}),this.soundBankList=[]}generatePresetList(){let e=new Array,A=new Set;this.soundBankList.forEach(t=>{let n=t.soundBank,s=t.bankOffset;n.presets.forEach(a=>{let i=new Yo(a,s);A.has(i.toMIDIString())||(A.add(i.toMIDIString()),e.push(i))})}),e.sort(te.sorter.bind(te)),this.selectablePresetList=e,this._presetList=e.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isAnyDrums:t.isAnyDrums})),this.presetListChangeCallback()}},Jo=.05,qo=3070,Ko=2e3,ws=Math.PI/2,Nt=-500,ua=500,os=ua-Nt,fa=new Float32Array(os+1),ma=new Float32Array(os+1);for(let e=Nt;e<=ua;e++){let A=(e-Nt)/os,t=e-Nt;fa[t]=Math.cos(ws*A),ma[t]=Math.sin(ws*A)}function Oo(e,A,t,n,s,a,i,I,o){if(isNaN(A[0]))return;let g;e.overridePan?g=e.overridePan:(e.currentPan+=(e.modulatedGenerators[r.pan]-e.currentPan)*this.synthProps.panSmoothingFactor,g=e.currentPan);let B=this.synthProps.masterParameters.masterGain*this.synthProps.midiVolume*e.gain,d=~~(g+500),C=fa[d]*B*this.synthProps.panLeft,h=ma[d]*B*this.synthProps.panRight;if(this.synth.enableEffects){let u=e.modulatedGenerators[r.reverbEffectsSend];if(u>0){let y=this.synthProps.masterParameters.reverbGain*this.synthProps.reverbSend*B*(u/qo);for(let F=0;F<A.length;F++){let k=F+o;s[k]+=y*A[F],a[k]+=y*A[F]}}let m=e.modulatedGenerators[r.chorusEffectsSend];if(m>0){let y=this.synthProps.masterParameters.chorusGain*this.synthProps.chorusSend*(m/Ko),F=C*y,k=h*y;for(let D=0;D<A.length;D++){let v=D+o;i[v]+=F*A[D],I[v]+=k*A[D]}}}if(C>0)for(let u=0;u<A.length;u++)t[u+o]+=C*A[u];if(h>0)for(let u=0;u<A.length;u++)n[u+o]+=h*A[u]}var Vo=.1,Xt=class Et{static cachedCoefficients=[];resonanceCb=0;currentInitialFc=13500;a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;lastTargetCutoff=1/0;initialized=!1;sampleRate;maxCutoff;constructor(A){this.sampleRate=A,this.maxCutoff=A*.45}static apply(A,t,n,s){let a=A.modulatedGenerators[r.initialFilterFc],i=A.filter;i.initialized?i.currentInitialFc+=(a-i.currentInitialFc)*s:(i.initialized=!0,i.currentInitialFc=a);let I=i.currentInitialFc+n,o=A.modulatedGenerators[r.initialFilterQ];if(i.currentInitialFc>13499&&I>13499&&o===0){i.currentInitialFc=13500;return}(Math.abs(i.lastTargetCutoff-I)>1||i.resonanceCb!==o)&&(i.lastTargetCutoff=I,i.resonanceCb=o,Et.calculateCoefficients(i,I));for(let g=0;g<t.length;g++){let B=t[g],d=i.a0*B+i.a1*i.x1+i.a2*i.x2-i.a3*i.y1-i.a4*i.y2;i.x2=i.x1,i.x1=B,i.y2=i.y1,i.y1=d,t[g]=d}}static calculateCoefficients(A,t){t=~~t;let n=A.resonanceCb,s=Et.cachedCoefficients?.[n]?.[t];if(s!==void 0){A.a0=s.a0,A.a1=s.a1,A.a2=s.a2,A.a3=s.a3,A.a4=s.a4;return}let a=Nn(t);a=Math.min(a,A.maxCutoff);let i=n/10,I=Ae(-(i-3.01)),o=1/Math.sqrt(Ae(-i)),g=2*Math.PI*a/A.sampleRate,B=Math.cos(g),d=Math.sin(g)/(2*I),C=(1-B)*o,h=C/2,u=h,m=1+d,y=-2*B,F=1-d,k={a0:h/m,a1:C/m,a2:u/m,a3:y/m,a4:F/m};A.a0=k.a0,A.a1=k.a1,A.a2=k.a2,A.a3=k.a3,A.a4=k.a4,Et.cachedCoefficients[n]??=[],Et.cachedCoefficients[n][t]=k}},Hn=new Xt(44100);Hn.resonanceCb=0;for(let e=1500;e<13500;e++)Hn.currentInitialFc=e,Xt.calculateCoefficients(Hn,e);var Fs={enableEventSystem:!0,initialTime:0,enableEffects:!0};function Xo(e,A){let t=0;return e.drumChannel&&(t+=5),A.isInRelease&&(t-=5),t+=A.velocity/25,t-=A.volumeEnvelope.state,A.isInRelease&&(t-=5),t-=A.volumeEnvelope.currentAttenuationDb/50,t}function Zo(e){let A=[];for(let n of this.midiChannels)for(let s of n.voices)if(!s.finished){let a=Xo(n,s);A.push({channel:n,voice:s,priority:a})}A.sort((n,s)=>n.priority-s.priority);let t=A.slice(0,e);for(let{channel:n,voice:s}of t){let a=n.voices.indexOf(s);a>-1&&n.voices.splice(a,1)}}var Sn=1,Yn=new Float32Array(1e3);for(let e=0;e<Yn.length;e++)Yn[e]=Ia(0,QA.convex,e/1e3);var _e=class Pn{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;releaseStartLevel=0;currentValue=0;static startRelease(A){Pn.recalculate(A)}static recalculate(A){let t=A.modulationEnvelope;A.isInRelease&&(t.releaseStartLevel=Pn.getValue(A,A.releaseStartTime,!0)),t.sustainLevel=1-A.modulatedGenerators[r.sustainModEnv]/1e3,t.attackDuration=Qe(A.modulatedGenerators[r.attackModEnv]);let n=(60-A.midiNote)*A.modulatedGenerators[r.keyNumToModEnvDecay],s=Qe(A.modulatedGenerators[r.decayModEnv]+n);t.decayDuration=s*(1-t.sustainLevel);let a=(60-A.midiNote)*A.modulatedGenerators[r.keyNumToModEnvHold];t.holdDuration=Qe(a+A.modulatedGenerators[r.holdModEnv]);let i=Qe(Math.max(A.modulatedGenerators[r.releaseModEnv],-7200));t.releaseDuration=i*t.releaseStartLevel,t.delayEnd=A.startTime+Qe(A.modulatedGenerators[r.delayModEnv]),t.attackEnd=t.delayEnd+t.attackDuration,t.holdEnd=t.attackEnd+t.holdDuration,t.decayEnd=t.holdEnd+t.decayDuration}static getValue(A,t,n=!1){let s=A.modulationEnvelope;return A.isInRelease&&!n?s.releaseStartLevel===0?0:Math.max(0,(1-(t-A.releaseStartTime)/s.releaseDuration)*s.releaseStartLevel):(t<s.delayEnd?s.currentValue=0:t<s.attackEnd?s.currentValue=Yn[~~((1-(s.attackEnd-t)/s.attackDuration)*1e3)]:t<s.holdEnd?s.currentValue=Sn:t<s.decayEnd?s.currentValue=(1-(s.decayEnd-t)/s.decayDuration)*(s.sustainLevel-Sn)+Sn:s.currentValue=s.sustainLevel,s.currentValue)}},Sa=class{sampleData;playbackStep=0;cursor=0;rootKey=0;loopStart=0;loopEnd=0;end=0;loopingMode=0;isLooping=!1;constructor(e,A,t,n,s,a,i,I){this.sampleData=e,this.playbackStep=A,this.cursor=t,this.rootKey=n,this.loopStart=s,this.loopEnd=a,this.end=i,this.loopingMode=I,this.isLooping=this.loopingMode===1||this.loopingMode===3}},zo=-2320,Wo=-1130,Jn=class pa{sample;filter;gain=1;generators;modulators=[];resonanceOffset=0;modulatedGenerators;finished=!1;isInRelease=!1;velocity=0;midiNote=0;pressure=0;targetKey=0;modulationEnvelope=new _e;volumeEnvelope;startTime=0;releaseStartTime=1/0;currentTuningCents=0;currentTuningCalculated=1;currentPan=0;realKey;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;exclusiveClass=0;constructor(A,t,n,s,a,i,I,o,g){this.sample=t,this.generators=o,this.exclusiveClass=this.generators[r.exclusiveClass],this.modulatedGenerators=new Int16Array(o),this.modulators=g,this.filter=new Xt(A),this.velocity=s,this.midiNote=n,this.startTime=a,this.targetKey=i,this.realKey=I,this.volumeEnvelope=new be(A,o[r.sustainVolEnv])}static copyFrom(A,t,n){let s=A.sample,a=new Sa(s.sampleData,s.playbackStep,s.cursor,s.rootKey,s.loopStart,s.loopEnd,s.end,s.loopingMode);return new pa(A.volumeEnvelope.sampleRate,a,A.midiNote,A.velocity,t,A.targetKey,n,new Int16Array(A.generators),A.modulators.map(cA.copyFrom.bind(cA)))}exclusiveRelease(A){this.release(A,Wa),this.modulatedGenerators[r.releaseVolEnv]=zo,this.modulatedGenerators[r.releaseModEnv]=Wo,be.recalculate(this),_e.recalculate(this)}release(A,t=za){this.releaseStartTime=A,this.releaseStartTime-this.startTime<t&&(this.releaseStartTime=this.startTime+t)}};function _o(e,A,t,n){let s=e.getSynthesisData(A,t).reduce((a,i)=>{if(i.sample.getAudioData()===void 0)return sA(`Discarding invalid sample: ${i.sample.name}`),a;let I=new Int16Array(Mn);for(let m=0;m<60;m++)I[m]=xo(m,i.presetGenerators,i.instrumentGenerators);I[r.initialAttenuation]=Math.floor(I[r.initialAttenuation]*.4);let o=i.sample.originalKey;I[r.overridingRootKey]>-1&&(o=I[r.overridingRootKey]);let g=A;I[r.keyNum]>-1&&(g=I[r.keyNum]);let B=i.sample.loopStart,d=i.sample.loopEnd,C=I[r.sampleModes],h=i.sample.getAudioData(),u=new Sa(h,i.sample.sampleRate/this.sampleRate*Math.pow(2,i.sample.pitchCorrection/1200),0,o,B,d,Math.floor(h.length)-1,C);return I[r.velocity]>-1&&(t=I[r.velocity]),a.push(new Jn(this.sampleRate,u,A,t,this.currentSynthTime,g,n,I,i.modulators.map(cA.copyFrom.bind(cA)))),a},[]);return this.setCachedVoice(e,A,t,s),s.map(a=>Jn.copyFrom(a,this.currentSynthTime,n))}function jo(e,A,t,n){let s=this.midiChannels[e],a=this.keyModifierManager.hasOverridePatch(e,A),i=s.preset;if(!i)return sA(`No preset for channel ${e}!`),[];let I={...i};a&&(I=this.keyModifierManager.getPatch(e,A));let o=this.getCachedVoice(I,A,t);return o!==void 0?o.map(g=>Jn.copyFrom(g,this.currentSynthTime,n)):(a&&(i=this.soundBankManager.getPreset(I,this.privateProps.masterParameters.midiSystem)),this.getVoicesForPreset(i,A,t,n))}function Gs(e,A,t){let n=e,s=A<<7|t;return e===127&&A===127&&t===127?{midiNote:-1,centTuning:null}:{midiNote:n,centTuning:s*.0061}}function $o(e,A=0){let t=e[0];if(this.privateProps.masterParameters.deviceID!==Be&&e[1]!==127&&this.privateProps.masterParameters.deviceID!==e[1])return;function n(a,i,I,o){p(`%cChannel %c${a}%c ${I}. %c${i} ${o}%c, with %c${RA(e)}`,c.info,c.recognized,c.info,c.value,c.info,c.value)}function s(){p(`%cUnrecognized Roland %cGS %cSysEx: %c${RA(e)}`,c.warn,c.recognized,c.warn,c.unrecognized)}switch(t){default:p(`%cUnrecognized SysEx: %c${RA(e)}`,c.warn,c.unrecognized);break;case 126:case 127:switch(e[2]){case 4:{let a;switch(e[3]){case 1:{let i=e[5]<<7|e[4];this.setMIDIVolume(i/16384),p(`%cMaster Volume. Volume: %c${i}`,c.info,c.value);break}case 2:{let I=((e[5]<<7|e[4])-8192)/8192;this.setMasterParameter("masterPan",I),p(`%cMaster Pan. Pan: %c${I}`,c.info,c.value);break}case 3:{let i=(e[5]<<7|e[6])-8192;a=Math.floor(i/81.92),this.setMasterTuning(a),p(`%cMaster Fine Tuning. Cents: %c${a}`,c.info,c.value);break}case 4:{a=(e[5]-64)*100,this.setMasterTuning(a),p(`%cMaster Coarse Tuning. Cents: %c${a}`,c.info,c.value);break}default:p(`%cUnrecognized MIDI Device Control Real-time message: %c${RA(e)}`,c.warn,c.unrecognized)}break}case 9:e[3]===1?(p("%cGM1 system on",c.info),this.setMasterParameter("midiSystem","gm")):e[3]===3?(p("%cGM2 system on",c.info),this.setMasterParameter("midiSystem","gm2")):(p("%cGM system off, defaulting to GS",c.info),this.setMasterParameter("midiSystem","gs"));break;case 8:{let a=4;switch(e[3]){case 1:{let i=e[a++],I=ee(e,16,a);if(a+=16,e.length<384){sA(`The Bulk Tuning Dump is too short! (${e.length} bytes, at least 384 are expected)`);return}for(let o=0;o<128;o++)this.privateProps.tunings[i][o]=Gs(e[a++],e[a++],e[a++]);p(`%cBulk Tuning Dump %c${I}%c Program: %c${i}`,c.info,c.value,c.info,c.recognized);break}case 2:case 7:{e[3]===7&&a++;let i=e[a++],I=e[a++];for(let o=0;o<I;o++)this.privateProps.tunings[i][e[a++]]=Gs(e[a++],e[a++],e[a++]);p(`%cSingle Note Tuning. Program: %c${i}%c Keys affected: %c${I}`,c.info,c.recognized,c.info,c.recognized);break}case 9:case 8:{let i=new Int8Array(12);if(e[3]===8)for(let I=0;I<12;I++)i[I]=e[7+I]-64;else for(let I=0;I<24;I+=2){let o=(e[7+I]<<7|e[8+I])-8192;i[I/2]=Math.floor(o/81.92)}(e[4]&1)===1&&this.midiChannels[14+A].setOctaveTuning(i),(e[4]>>1&1)===1&&this.midiChannels[15+A].setOctaveTuning(i);for(let I=0;I<7;I++)(e[5]>>I&1)===1&&this.midiChannels[7+I+A].setOctaveTuning(i);for(let I=0;I<7;I++)(e[6]>>I&1)===1&&this.midiChannels[I+A].setOctaveTuning(i);p(`%cMIDI Octave Scale ${e[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${i.join(" ")}`,c.info,c.value);break}default:p(`%cUnrecognized MIDI Tuning standard message: %c${RA(e)}`,c.warn,c.unrecognized);break}break}default:p(`%cUnrecognized MIDI Realtime/non realtime message: %c${RA(e)}`,c.warn,c.unrecognized)}break;case 65:if(e[2]===66&&e[3]===18){let a=e[7];if(e[4]===64||e[4]===0&&e[6]===127){if((e[5]&16)>0){let i=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,I=this.midiChannels[i];switch(e[6]){default:s();break;case 21:{let o=a>0&&e[5]>>4>0;I.setGSDrums(o),p(`%cChannel %c${i}%c ${o?"is now a drum channel":"now isn't a drum channel"}%c via: %c${RA(e)}`,c.info,c.value,c.recognized,c.info,c.value);return}case 22:{let o=a-64;I.setCustomController(rA.channelKeyShift,o),n(i,o,"key shift","keys");return}case 28:{let o=a;o===0?(I.randomPan=!0,p(`%cRandom pan is set to %cON%c for %c${i}`,c.info,c.recognized,c.info,c.value)):(I.randomPan=!1,I.controllerChange(S.pan,o));break}case 33:I.controllerChange(S.chorusDepth,a);break;case 34:I.controllerChange(S.reverbDepth,a);break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:{let o=e.length-9,g=new Int8Array(12);for(let d=0;d<o;d++)g[d]=e[d+7]-64;I.setOctaveTuning(g);let B=a-64;n(i,g.join(" "),"octave scale tuning","cents"),I.setTuning(B);break}}return}else if((e[5]&32)>0){let i=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,I=this.midiChannels[i],o=a-64,g=o/64,B=a/128,d=(C,h,u=!1)=>{switch(e[6]&15){case 0:C===fA+_.pitchWheel?(I.controllerChange(S.registeredParameterMSB,0),I.controllerChange(S.registeredParameterLSB,0),I.controllerChange(S.dataEntryMSB,Math.floor(o))):(I.sysExModulators.setModulator(C,r.fineTune,o*100,u),n(i,o,`${h} pitch control`,"semitones"));break;case 1:I.sysExModulators.setModulator(C,r.initialFilterFc,g*9600,u),n(i,g*9600,`${h} pitch control`,"cents");break;case 2:I.sysExModulators.setModulator(C,r.initialAttenuation,g*960,u),n(i,g*960,`${h} amplitude`,"cB");break;case 4:I.sysExModulators.setModulator(C,r.vibLfoToPitch,B*600,u),n(i,B*600,`${h} LFO1 pitch depth`,"cents");break;case 5:I.sysExModulators.setModulator(C,r.vibLfoToFilterFc,B*2400,u),n(i,B*2400,`${h} LFO1 filter depth`,"cents");break;case 6:I.sysExModulators.setModulator(C,r.vibLfoToVolume,g*960,u),n(i,g*960,`${h} LFO1 amplitude depth`,"cB");break;case 8:I.sysExModulators.setModulator(C,r.modLfoToPitch,B*600,u),n(i,B*600,`${h} LFO2 pitch depth`,"cents");break;case 9:I.sysExModulators.setModulator(C,r.modLfoToFilterFc,B*2400,u),n(i,B*2400,`${h} LFO2 filter depth`,"cents");break;case 10:I.sysExModulators.setModulator(C,r.modLfoToVolume,g*960,u),n(i,g*960,`${h} LFO2 amplitude depth`,"cB");break}};switch(e[6]&240){default:s();break;case 0:d(S.modulationWheel,"mod wheel");break;case 16:d(fA+_.pitchWheel,"pitch wheel",!0);break;case 32:d(fA+_.channelPressure,"channel pressure");break;case 48:d(fA+_.polyPressure,"poly pressure");break}return}else if(e[5]===0){switch(e[6]){default:s();break;case 127:a===0?(p("%cGS Reset received!",c.info),this.resetAllControllers(!1),this.setMasterParameter("midiSystem","gs")):a===127&&(p("%cGS system off, switching to GM2",c.info),this.resetAllControllers(!1),this.setMasterParameter("midiSystem","gm2"));break;case 6:p(`%cRoland GS Master Pan set to: %c${a}%c with: %c${RA(e)}`,c.info,c.value,c.info,c.value),this.setMasterParameter("masterPan",(a-64)/64);break;case 4:p(`%cRoland GS Master Volume set to: %c${a}%c with: %c${RA(e)}`,c.info,c.value,c.info,c.value),this.setMIDIVolume(a/127);break;case 5:{let i=a-64;p(`%cRoland GS Master Key-Shift set to: %c${i}%c with: %c${RA(e)}`,c.info,c.value,c.info,c.value),this.setMasterTuning(i*100);break}}return}else if(e[5]===1)switch(e[6]){default:s();break;case 0:{let i=ee(e,16,7);p(`%cGS Patch name: %c${i}`,c.info,c.value);break}case 51:p(`%cGS Reverb level: %c${a}`,c.info,c.value),this.privateProps.reverbSend=a/64;break;case 48:case 49:case 50:case 52:case 53:case 55:p(`%cUnsupported GS Reverb Parameter: %c${e[6].toString(16)}`,c.warn,c.unrecognized);break;case 58:p(`%cGS Chorus level: %c${a}`,c.info,c.value),this.privateProps.chorusSend=a/64;break;case 56:case 57:case 59:case 60:case 61:case 62:case 63:case 64:p(`%cUnsupported GS Chorus Parameter: %c${e[6].toString(16)}`,c.warn,c.unrecognized);break}}else s();return}else if(e[2]===69&&e[3]===18){if(e[4]===16&&e[6]===0)if(e[5]===0){let a=new Uint8Array(e.slice(7,e.length-2));this.privateProps.callEvent("synthDisplay",{displayData:a,displayType:hn.soundCanvasText})}else if(e[5]===1){let a=new Uint8Array(e.slice(7,e.length-3));this.privateProps.callEvent("synthDisplay",{displayData:a,displayType:hn.soundCanvasDotMatrix}),p(`%cRoland SC Display Dot Matrix via: %c${RA(e)}`,c.info,c.value)}else s()}else if(e[2]===22&&e[3]===18&&e[4]===16){this.setMIDIVolume(e[7]/100),p(`%cRoland Master Volume control set to: %c${e[7]}%c via: %c${RA(e)}`,c.info,c.value,c.info,c.value);return}else{p(`%cUnrecognized Roland SysEx: %c${RA(e)}`,c.warn,c.unrecognized);return}break;case 67:if(e[2]===76)if(e[3]===0&&e[4]===0)switch(e[5]){case 4:{let a=e[6];this.setMIDIVolume(a/127),p(`%cXG master volume. Volume: %c${a}`,c.info,c.recognized);break}case 6:{let a=e[6]-64;this.setMasterParameter("transposition",a),p(`%cXG master transpose. Volume: %c${a}`,c.info,c.recognized);break}case 126:p("%cXG system on",c.info),this.resetAllControllers(!1),this.setMasterParameter("midiSystem","xg");break}else if(e[3]===8){if(!dA.isSystemXG(this.privateProps.masterParameters.midiSystem))return;let a=e[4]+A;if(a>=this.midiChannels.length)return;let i=this.midiChannels[a],I=e[6];switch(e[5]){case 1:i.controllerChange(S.bankSelect,I);break;case 2:i.controllerChange(S.bankSelectLSB,I);break;case 3:i.programChange(I);break;case 8:{if(i.drumChannel)return;i.channelTransposeKeyShift=I-64;break}case 11:i.controllerChange(S.mainVolume,I);break;case 14:{let o=I;o===0?(i.randomPan=!0,p(`%cRandom pan is set to %cON%c for %c${a}`,c.info,c.recognized,c.info,c.value)):i.controllerChange(S.pan,o);break}case 19:i.controllerChange(S.reverbDepth,I);break;case 18:i.controllerChange(S.chorusDepth,I);break;default:p(`%cUnrecognized Yamaha XG Part Setup: %c${e[5].toString(16).toUpperCase()}`,c.warn,c.unrecognized)}}else if(e[3]===6&&e[4]===0){let a=new Uint8Array(e.slice(5,e.length-1));this.privateProps.callEvent("synthDisplay",{displayData:a,displayType:hn.yamahaXGText})}else dA.isSystemXG(this.privateProps.masterParameters.midiSystem)&&p(`%cUnrecognized Yamaha XG SysEx: %c${RA(e)}`,c.warn,c.unrecognized);else dA.isSystemXG(this.privateProps.masterParameters.midiSystem)&&p(`%cUnrecognized Yamaha SysEx: %c${RA(e)}`,c.warn,c.unrecognized);break}}var Rs=class qn{patch;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;lockVibrato;channelVibrato;channelTransposeKeyShift;channelOctaveTuning;isMuted;drumChannel;channelNumber;constructor(A,t,n,s,a,i,I,o,g,B,d,C,h){this.patch=A,this.lockPreset=t,this.lockedSystem=n,this.midiControllers=s,this.lockedControllers=a,this.customControllers=i,this.lockVibrato=I,this.channelVibrato=o,this.channelTransposeKeyShift=g,this.channelOctaveTuning=B,this.isMuted=d,this.drumChannel=C,this.channelNumber=h}static copyFrom(A){return new qn({...A.patch},A.lockPreset,A.lockedSystem,A.midiControllers.slice(),[...A.lockedControllers],A.customControllers.slice(),A.lockVibrato,{...A.channelVibrato},A.channelTransposeKeyShift,A.channelOctaveTuning,A.isMuted,A.drumChannel,A.channelNumber)}static create(A,t){let n=A.midiChannels[t];return new qn({...n.patch,name:n?.preset?.name??"undefined"},n.lockPreset,n.lockedSystem,n.midiControllers.slice(),[...n.lockedControllers],n.customControllers.slice(),n.lockGSNRPNParams,{...n.channelVibrato},n.channelTransposeKeyShift,n.channelOctaveTuning.slice(),n.isMuted,n.drumChannel,t)}apply(A){let t=A.midiChannels[this.channelNumber];t.muteChannel(this.isMuted),t.setDrums(this.drumChannel),t.midiControllers.set(this.midiControllers),t.lockedControllers=this.lockedControllers,t.customControllers.set(this.customControllers),t.updateChannelTuning(),t.channelVibrato=this.channelVibrato,t.lockGSNRPNParams=this.lockVibrato,t.channelTransposeKeyShift=this.channelTransposeKeyShift,t.channelOctaveTuning=this.channelOctaveTuning,t.setPresetLock(!1),t.setPatch(this.patch),t.setPresetLock(this.lockPreset),t.lockedSystem=this.lockedSystem}};var Ai=class{keyMappings=[];addMapping(e,A,t){this.keyMappings[e]??=[],this.keyMappings[e][A]=t}deleteMapping(e,A){this.keyMappings[e]?.[A]!==void 0&&(this.keyMappings[e][A]=void 0)}clearMappings(){this.keyMappings=[]}setMappings(e){this.keyMappings=e}getMappings(){return this.keyMappings}getVelocity(e,A){return this.keyMappings[e]?.[A]?.velocity??-1}getGain(e,A){return this.keyMappings[e]?.[A]?.gain??1}hasOverridePatch(e,A){let t=this.keyMappings[e]?.[A]?.patch?.bankMSB;return t!==void 0&&t>=0}getPatch(e,A){let t=this.keyMappings[e]?.[A];if(t)return t.patch;throw new Error("No modifier.")}},is=class Kn{channelSnapshots;keyMappings;masterParameters;constructor(A,t,n){this.channelSnapshots=A,this.masterParameters=t,this.keyMappings=n}static create(A){let t=A.midiChannels.map((n,s)=>Rs.create(A,s));return new Kn(t,A.getAllMasterParameters(),A.keyModifierManager.getMappings())}static copyFrom(A){return new Kn(A.channelSnapshots.map(t=>Rs.copyFrom(t)),{...A.masterParameters},[...A.keyMappings])}apply(A){for(Object.entries(this.masterParameters).forEach(([n,s])=>{A.setMasterParameter(n,s)}),A.keyModifierManager.setMappings(this.keyMappings);A.midiChannels.length<this.channelSnapshots.length;)A.createMIDIChannel();this.channelSnapshots.forEach(n=>{n.apply(A)})}},ei={masterGain:_a,masterPan:0,voiceCap:Xa,interpolationType:vt.hermite,midiSystem:Os,monophonicRetriggerMode:!1,reverbGain:1,chorusGain:1,blackMIDIMode:!1,transposition:0,deviceID:Be},ti=class{tunings=[];masterParameters=ei;midiVolume=1;reverbSend=1;chorusSend=1;panLeft=.5;panRight=.5;defaultPreset;drumPreset;volumeEnvelopeSmoothingFactor;panSmoothingFactor;filterSmoothingFactor;eventCallbackHandler;getVoices;voiceKilling;cachedVoices=[];constructor(e,A,t,n,s,a){this.eventCallbackHandler=e,this.getVoices=A,this.voiceKilling=t,this.volumeEnvelopeSmoothingFactor=n,this.panSmoothingFactor=s,this.filterSmoothingFactor=a;for(let i=0;i<128;i++)this.tunings.push([])}callEvent(e,A){this.eventCallbackHandler(e,A)}};function pn(e,A,t){if(t<e)return 0;let n=(t-e)/(1/A)+.25;return Math.abs(n-~~(n+.5))*4-1}var ni=class On{static getSample(A,t,n){let s=A.currentTuningCalculated*A.sample.playbackStep;if(s===1){On.getSampleNearest(A,t,s);return}switch(n){case vt.hermite:this.getSampleHermite(A,t,s);return;case vt.linear:default:this.getSampleLinear(A,t,s);return;case vt.nearestNeighbor:On.getSampleNearest(A,t,s);return}}static getSampleLinear(A,t,n){let s=A.sample,a=s.cursor,i=s.sampleData;if(s.isLooping){let I=s.loopEnd-s.loopStart;for(let o=0;o<t.length;o++){for(;a>=s.loopEnd;)a-=I;let g=~~a,B=g+1;for(;B>=s.loopEnd;)B-=I;let d=a-g,C=i[B],h=i[g];t[o]=h+(C-h)*d,a+=n}}else for(let I=0;I<t.length;I++){let o=~~a,g=o+1;if(g>=s.end){A.finished=!0;return}let B=a-o,d=i[g],C=i[o];t[I]=C+(d-C)*B,a+=n}A.sample.cursor=a}static getSampleNearest(A,t,n){let s=A.sample,a=s.cursor,i=s.sampleData;if(s.isLooping){let I=s.loopEnd-s.loopStart;for(let o=0;o<t.length;o++){for(;a>=s.loopEnd;)a-=I;let g=~~a+1;for(;g>=s.loopEnd;)g-=I;t[o]=i[g],a+=n}}else for(let I=0;I<t.length;I++){let o=~~a+1;if(o>=s.end){A.finished=!0;return}t[I]=i[o],a+=n}s.cursor=a}static getSampleHermite(A,t,n){let s=A.sample,a=s.cursor,i=s.sampleData;if(s.isLooping){let I=s.loopEnd-s.loopStart;for(let o=0;o<t.length;o++){for(;a>=s.loopEnd;)a-=I;let g=~~a,B=g+1,d=g+2,C=g+3,h=a-g;B>=s.loopEnd&&(B-=I),d>=s.loopEnd&&(d-=I),C>=s.loopEnd&&(C-=I);let u=i[g],m=i[B],y=i[d],F=i[C],k=(y-u)*.5,D=m-y,v=k+D,L=v+D+(F-m)*.5,E=v+L;t[o]=((L*h-E)*h+k)*h+m,a+=n}}else for(let I=0;I<t.length;I++){let o=~~a,g=o+1,B=o+2,d=o+3,C=a-o;if(g>=s.end||B>=s.end||d>=s.end){A.finished=!0;return}let h=i[o],u=i[g],m=i[B],y=i[d],F=(m-h)*.5,k=u-m,D=F+k,v=D+k+(y-u)*.5,L=D+v;t[I]=((v*C-L)*C+F)*C+u,a+=n}A.sample.cursor=a}};function si(e,A,t,n,s,a,i,I,o,g){if(e.isInRelease||A>=e.releaseStartTime&&(e.isInRelease=!0,be.startRelease(e),_e.startRelease(e),e.sample.loopingMode===3&&(e.sample.isLooping=!1)),e.modulatedGenerators[r.initialAttenuation]>2500)return e.isInRelease&&(e.finished=!0),e.finished;let B=e.targetKey,d=e.modulatedGenerators[r.fineTune]+this.channelOctaveTuning[e.midiNote]+this.channelTuningCents,C=e.modulatedGenerators[r.coarseTune],h=this.synthProps.tunings[this.preset?.program??0]?.[e.realKey];if(h?.centTuning&&(B=h.midiNote,d+=h.centTuning),e.portamentoFromKey>-1){let j=Math.min((A-e.startTime)/e.portamentoDuration,1),O=B-e.portamentoFromKey;C-=O*(1-j)}d+=(B-e.sample.rootKey)*e.modulatedGenerators[r.scaleTuning];let u=0,m=0,y=e.modulatedGenerators[r.vibLfoToPitch],F=e.modulatedGenerators[r.vibLfoToVolume],k=e.modulatedGenerators[r.vibLfoToFilterFc];if(y!==0||F!==0||k!==0){let j=e.startTime+Qe(e.modulatedGenerators[r.delayVibLFO]),O=Nn(e.modulatedGenerators[r.freqVibLFO]),q=pn(j,O,A);d+=q*(y*this.customControllers[rA.modulationMultiplier]),m+=-q*F,u+=q*k}let D=e.modulatedGenerators[r.modLfoToPitch],v=e.modulatedGenerators[r.modLfoToVolume],L=e.modulatedGenerators[r.modLfoToFilterFc];if(D!==0||L!==0||v!==0){let j=e.startTime+Qe(e.modulatedGenerators[r.delayModLFO]),O=Nn(e.modulatedGenerators[r.freqModLFO]),q=pn(j,O,A);d+=q*(D*this.customControllers[rA.modulationMultiplier]),m+=-q*v,u+=q*L}if(this.channelVibrato.depth>0){let j=pn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,A);j&&(d+=j*this.channelVibrato.depth)}let E=e.modulatedGenerators[r.modEnvToPitch],V=e.modulatedGenerators[r.modEnvToFilterFc];if(V!==0||E!==0){let j=_e.getValue(e,A);u+=j*V,d+=j*E}m-=e.resonanceOffset;let K=~~(d+C*100);K!==e.currentTuningCents&&(e.currentTuningCents=K,e.currentTuningCalculated=Math.pow(2,K/1200));let nA=new Float32Array(g);return e.sample.loopingMode===2&&!e.isInRelease?(be.apply(e,nA,m,this.synthProps.volumeEnvelopeSmoothingFactor),e.finished):(ni.getSample(e,nA,this.synthProps.masterParameters.interpolationType),Xt.apply(e,nA,u,this.synthProps.filterSmoothingFactor),be.apply(e,nA,m,this.synthProps.volumeEnvelopeSmoothingFactor),this.panAndMixVoice(e,nA,t,n,s,a,i,I,o),e.finished)}var ue={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Ze={partParameter:1,awe32:127,SF2:120},Oe={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGReleaseTime:102};function ai(e){this.midiControllers[S.dataEntryMSB]=e<<7;let A=()=>{this.channelVibrato.delay===0&&this.channelVibrato.rate===0&&this.channelVibrato.depth===0&&(this.channelVibrato.depth=50,this.channelVibrato.rate=8,this.channelVibrato.delay=.6)},t=(n,s,a)=>{a.length>0&&(a=" "+a),p(`%c${n} for %c${this.channelNumber}%c is now set to %c${s}%c${a}.`,c.info,c.recognized,c.info,c.value,c.info)};switch(this.dataEntryState){default:case HA.Idle:break;case HA.NRPFine:{if(this.lockGSNRPNParams)return;let n=this.midiControllers[S.nonRegisteredParameterMSB]>>7,s=this.midiControllers[S.nonRegisteredParameterLSB]>>7,a=this.midiControllers[S.dataEntryLSB]>>7;switch(n){default:if(e===64)return;p(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${s.toString(16).toUpperCase()} 0x${s.toString(16).toUpperCase()})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case Ze.partParameter:switch(s){default:if(e===64)return;p(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)} 0x${s.toString(16)})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case Oe.vibratoRate:if(e===64)return;A(),this.channelVibrato.rate=e/64*8,t("Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break;case Oe.vibratoDepth:if(e===64)return;A(),this.channelVibrato.depth=e/2,t("Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break;case Oe.vibratoDelay:if(e===64)return;A(),this.channelVibrato.delay=e/64/3,t("Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break;case Oe.TVFFilterCutoff:this.controllerChange(S.brightness,e),t("Filter cutoff",e.toString(),"");break;case Oe.EGAttackTime:this.controllerChange(S.attackTime,e),t("EG attack time",e.toString(),"");break;case Oe.EGReleaseTime:this.controllerChange(S.releaseTime,e),t("EG release time",e.toString(),"");break}break;case Ze.awe32:break;case Ze.SF2:{if(s>100)break;let i=this.customControllers[rA.sf2NPRNGeneratorLSB],I=(e<<7|a)-8192;this.setGeneratorOffset(i,I);break}}break}case HA.RPCoarse:case HA.RPFine:{let n=this.midiControllers[S.registeredParameterMSB]|this.midiControllers[S.registeredParameterLSB]>>7;switch(n){default:p(`%cUnrecognized RPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case ue.pitchWheelRange:this.midiControllers[fA+_.pitchWheelRange]=e<<7,t("Pitch wheel range",e.toString(),"semitones");break;case ue.coarseTuning:{let s=e-64;this.setCustomController(rA.channelTuningSemitones,s),t("Coarse tuning",s.toString(),"semitones");break}case ue.fineTuning:this.setTuning(e-64,!1);break;case ue.modulationDepth:this.setModulationDepth(e*100);break;case ue.resetParameters:this.resetParameters();break}}}}var oi=[r.delayModLFO,r.freqModLFO,r.delayVibLFO,r.freqVibLFO,r.delayModEnv,r.attackModEnv,r.holdModEnv,r.decayModEnv,r.sustainModEnv,r.releaseModEnv,r.delayVolEnv,r.attackVolEnv,r.holdVolEnv,r.decayVolEnv,r.sustainVolEnv,r.releaseVolEnv,r.fineTune,r.modLfoToPitch,r.vibLfoToPitch,r.modEnvToPitch,r.modLfoToVolume,r.initialFilterFc,r.initialFilterQ,r.modLfoToFilterFc,r.modEnvToFilterFc,r.chorusEffectsSend,r.reverbEffectsSend];function ii(e,A,t){let n=(C,h,u)=>Math.max(h,Math.min(u,C)),s=C=>Math.max(-32768,1200*Math.log2(C/1e3)),a=C=>6900+1200*Math.log2(C/440),i=t<<7|A;i-=8192;let I=oi[e];I||sA(`Invalid AWE32 LSB: %c${e}`,c.unrecognized);let o,g,B,d;switch(I){default:break;case r.delayModLFO:case r.delayVibLFO:case r.delayVolEnv:case r.delayModEnv:o=4*n(i,0,5900),this.setGeneratorOverride(I,s(o));break;case r.attackVolEnv:case r.attackModEnv:o=n(i,0,5940),this.setGeneratorOverride(I,s(o));break;case r.holdVolEnv:case r.holdModEnv:o=n(i,0,8191),this.setGeneratorOverride(I,s(o));break;case r.decayModEnv:case r.decayVolEnv:case r.releaseVolEnv:case r.releaseModEnv:o=4*n(i,0,5940),this.setGeneratorOverride(I,s(o));break;case r.freqVibLFO:case r.freqModLFO:g=.084*A,this.setGeneratorOverride(I,a(g),!0);break;case r.sustainVolEnv:case r.sustainModEnv:B=A*7.5,this.setGeneratorOverride(I,B);break;case r.fineTune:this.setGeneratorOverride(I,i,!0);break;case r.modLfoToPitch:case r.vibLfoToPitch:d=n(i,-127,127)*9.375,this.setGeneratorOverride(I,d,!0);break;case r.modEnvToPitch:d=n(i,-127,127)*9.375,this.setGeneratorOverride(I,d);break;case r.modLfoToVolume:B=1.875*A,this.setGeneratorOverride(I,B,!0);break;case r.initialFilterFc:{let C=4335+59*A;this.setGeneratorOverride(I,C,!0);break}case r.initialFilterQ:B=215*(A/127),this.setGeneratorOverride(I,B,!0);break;case r.modLfoToFilterFc:d=n(i,-64,63)*56.25,this.setGeneratorOverride(I,d,!0);break;case r.modEnvToFilterFc:d=n(i,-64,63)*56.25,this.setGeneratorOverride(I,d);break;case r.chorusEffectsSend:case r.reverbEffectsSend:this.setGeneratorOverride(I,n(i,0,255)*(1e3/255));break}}function ri(e){switch(this.midiControllers[S.dataEntryLSB]=e<<7,this.dataEntryState){default:break;case HA.RPCoarse:case HA.RPFine:{switch(this.midiControllers[S.registeredParameterMSB]|this.midiControllers[S.registeredParameterLSB]>>7){default:break;case ue.pitchWheelRange:{if(e===0)break;this.midiControllers[fA+_.pitchWheelRange]|=e;let t=(this.midiControllers[fA+_.pitchWheelRange]>>7)+e/128;p(`%cChannel ${this.channelNumber} pitch wheel range. Semitones: %c${t}`,c.info,c.value);break}case ue.fineTuning:{let n=this.customControllers[rA.channelTuning]<<7|e;this.setTuning(n*.01220703125);break}case ue.modulationDepth:{let n=this.customControllers[rA.modulationMultiplier]*50+e/128*100;this.setModulationDepth(n);break}case 16383:this.resetParameters();break}break}case HA.NRPFine:{let A=this.midiControllers[S.nonRegisteredParameterMSB]>>7,t=this.midiControllers[S.nonRegisteredParameterLSB]>>7;if(A===Ze.SF2)return;switch(A){default:p(`%cUnrecognized NRPN LSB for %c${this.channelNumber}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case Ze.awe32:ii.call(this,t,e,this.midiControllers[S.dataEntryMSB]>>7);break}}}}function Ii(e,A,t=!0){if(e>127)throw new Error("Invalid MIDI Controller.");if(e>=S.modulationWheelLSB&&e<=S.effectControl2LSB&&e!==S.dataEntryLSB){let n=e-32;if(this.lockedControllers[n])return;this.midiControllers[n]=this.midiControllers[n]&16256|A&127,this.voices.forEach(s=>this.computeModulators(s,1,n))}if(!this.lockedControllers[e]){switch(this.midiControllers[e]=A<<7,e){case S.allNotesOff:this.stopAllNotes();break;case S.allSoundOff:this.stopAllNotes(!0);break;case S.bankSelect:this.setBankMSB(A),this.channelNumber%16===Se&&dA.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break;case S.bankSelectLSB:this.setBankLSB(A);break;case S.registeredParameterLSB:this.dataEntryState=HA.RPFine;break;case S.registeredParameterMSB:this.dataEntryState=HA.RPCoarse;break;case S.nonRegisteredParameterMSB:this.customControllers[rA.sf2NPRNGeneratorLSB]=0,this.dataEntryState=HA.NRPCoarse;break;case S.nonRegisteredParameterLSB:this.midiControllers[S.nonRegisteredParameterMSB]>>7===Ze.SF2&&(this.customControllers[rA.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[rA.sf2NPRNGeneratorLSB]=0),A===100?this.customControllers[rA.sf2NPRNGeneratorLSB]+=100:A===101?this.customControllers[rA.sf2NPRNGeneratorLSB]+=1e3:A===102?this.customControllers[rA.sf2NPRNGeneratorLSB]+=1e4:A<100&&(this.customControllers[rA.sf2NPRNGeneratorLSB]+=A)),this.dataEntryState=HA.NRPFine;break;case S.dataEntryMSB:this.dataEntryCoarse(A);break;case S.dataEntryLSB:this.dataEntryFine(A);break;case S.resetAllControllers:this.resetControllersRP15Compliant();break;case S.sustainPedal:A<64&&(this.sustainedVoices.forEach(n=>{n.release(this.synth.currentSynthTime)}),this.sustainedVoices=[]);break;default:this.voices.forEach(n=>this.computeModulators(n,1,e));break}t&&this.synthProps.callEvent("controllerChange",{channel:this.channelNumber,controllerNumber:e,controllerValue:A})}}var It={0:0,1:.006,2:.023,4:.05,8:.11,16:.25,32:.5,64:2.06,80:4.2,96:8.4,112:19.5,116:26.7,120:40,124:80,127:480};function gi(e){if(It[e]!==void 0)return It[e];let A=null,t=null;for(let n of Object.keys(It)){let s=parseInt(n);s<e&&(A===null||s>A)&&(A=s),s>e&&(t===null||s<t)&&(t=s)}if(A!==null&&t!==null){let n=It[A],s=It[t];return n+(e-A)*(s-n)/(t-A)}return 0}function ci(e,A){return gi(e)*(A/30)}function Ei(e,A){if(A<1){this.noteOff(e);return}if(A=Math.min(127,A),this.synthProps.masterParameters.blackMIDIMode&&this.synth.totalVoicesAmount>200&&A<40||this.synthProps.masterParameters.blackMIDIMode&&A<10||this._isMuted)return;if(!this.preset){sA(`No preset for channel ${this.channelNumber}!`);return}let t=e+this.channelTransposeKeyShift+this.customControllers[rA.channelKeyShift],n=t;if(t>127||t<0)return;let s=this.preset?.program,a=this.synthProps.tunings[s]?.[t]?.midiNote;a>=0&&(n=a),this.synthProps.masterParameters.monophonicRetriggerMode&&this.killNote(e,-7200);let i=this.synth.keyModifierManager.getVelocity(this.channelNumber,t);i>-1&&(A=i);let I=this.synth.keyModifierManager.getGain(this.channelNumber,t),o=-1,g=0,B=this.midiControllers[S.portamentoTime]>>7,d=this.midiControllers[S.portamentoControl],C=d>>7;if(!this.drumChannel&&C!==n&&this.midiControllers[S.portamentoOnOff]>=8192&&B>0){if(d!==1){let y=Math.abs(n-C);g=ci(B,y),o=C}this.controllerChange(S.portamentoControl,n)}let h=this.synthProps.getVoices(this.channelNumber,n,A,t),u=0;this.randomPan&&(u=Math.round(Math.random()*1e3-500));let m=this.voices;h.forEach(y=>{y.portamentoFromKey=o,y.portamentoDuration=g,y.overridePan=u,y.gain=I,this.sysExModulators.modulatorList.forEach(K=>{let nA=K.mod,j=y.modulators.findIndex(O=>cA.isIdentical(O,nA));j!==-1?y.modulators[j]=cA.copyFrom(nA):y.modulators.push(cA.copyFrom(nA))}),this.generatorOverridesEnabled&&this.generatorOverrides.forEach((K,nA)=>{K!==Vs&&(y.generators[nA]=K)});let F=y.exclusiveClass;F!==0&&m.forEach(K=>{K.exclusiveClass===F&&K.exclusiveRelease(this.synth.currentSynthTime)}),this.computeModulators(y);let k=y.modulatedGenerators[r.startAddrsOffset]+y.modulatedGenerators[r.startAddrsCoarseOffset]*32768,D=y.modulatedGenerators[r.endAddrOffset]+y.modulatedGenerators[r.endAddrsCoarseOffset]*32768,v=y.modulatedGenerators[r.startloopAddrsOffset]+y.modulatedGenerators[r.startloopAddrsCoarseOffset]*32768,L=y.modulatedGenerators[r.endloopAddrsOffset]+y.modulatedGenerators[r.endloopAddrsCoarseOffset]*32768,E=y.sample,V=K=>Math.max(0,Math.min(E.sampleData.length-1,K));if(E.cursor=V(E.cursor+k),E.end=V(E.end+D),E.loopStart=V(E.loopStart+v),E.loopEnd=V(E.loopEnd+L),E.loopEnd<E.loopStart){let K=E.loopStart;E.loopStart=E.loopEnd,E.loopEnd=K}E.loopEnd-E.loopStart<1&&(E.loopingMode===1||E.loopingMode===3)&&(E.loopingMode=0,E.isLooping=!1),y.volumeEnvelope.attenuation=y.volumeEnvelope.attenuationTargetGain,y.currentPan=Math.max(-500,Math.min(500,y.modulatedGenerators[r.pan]))}),this.synth.totalVoicesAmount+=h.length,this.synth.totalVoicesAmount>this.synthProps.masterParameters.voiceCap&&this.synthProps.voiceKilling(h.length),m.push(...h),this.sendChannelProperty(),this.synthProps.callEvent("noteOn",{midiNote:e,channel:this.channelNumber,velocity:A})}function Bi(e){if(e>127||e<0){sA("Received a noteOn for note",e,"Ignoring.");return}let A=e+this.channelTransposeKeyShift+this.customControllers[rA.channelKeyShift];if(this.synthProps.masterParameters.blackMIDIMode&&!this.drumChannel){this.killNote(A,-6950),this.synthProps.callEvent("noteOff",{midiNote:e,channel:this.channelNumber});return}this.voices.forEach(n=>{n.realKey!==A||n.isInRelease||(this.holdPedal?this.sustainedVoices.push(n):n.release(this.synth.currentSynthTime))}),this.synthProps.callEvent("noteOff",{midiNote:e,channel:this.channelNumber})}function Ci(e){if(this.lockPreset)return;this.patch.program=e;let A=this.synth.soundBankManager.getPreset(this.patch,this.channelSystem);A||(sA("No presets! Using empty fallback."),A=new pe(this.synth.soundBankManager.soundBankList[0].soundBank),A.name="SPESSA EMPTY FALLBACK PRESET"),this.preset=A,A.isAnyDrums!==this.drumChannel&&this.setDrumFlag(A.isAnyDrums),this.synthProps.callEvent("programChange",{channel:this.channelNumber,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,isGMGSDrum:this.preset.isGMGSDrum}),this.sendChannelProperty()}var hi=class{modulatorList=[];resetModulators(){this.modulatorList=[]}setModulator(e,A,t,n=!1,s=!1){let a=this.getModulatorID(e,A,n,s);t===0&&this.deleteModulator(a);let i=this.modulatorList.find(I=>I.id===a);if(i)i.mod.transformAmount=t;else{let I,o;e>=fA?(I=e-fA,o=!1):(I=e,o=!0);let g=new cA(new XA(I,QA.linear,o,n),new XA,A,t,0);this.modulatorList.push({mod:g,id:a})}}getModulatorID(e,A,t,n){return`${e}-${A}-${t}-${n}`}deleteModulator(e){this.modulatorList=this.modulatorList.filter(A=>A.id!==e)}},li=1e3/200;function Ms(e,A,t){if(A.transformAmount===0)return A.currentValue=0,0;let n=A.primarySource.getValue(e,t),s=A.secondarySource.getValue(e,t),a=A.transformAmount;A.isEffectModulator&&a<=1e3&&(a*=li,a=Math.min(a,1e3));let i=n*s*a;return A.transformType===2&&(i=Math.abs(i)),A.isDefaultResonantModulator&&(t.resonanceOffset=Math.max(0,i/2)),A.currentValue=i,i}function di(e,A=-1,t=0){let n=e.modulators,s=e.generators;if(this.generatorOffsetsEnabled){s=new Int16Array(s);for(let g=0;g<s.length;g++)s[g]+=this.generatorOffsets[g]}let a=e.modulatedGenerators;if(A===-1){a.set(s),n.forEach(g=>{a[g.destination]+=Ms(this.midiControllers,g,e)});for(let g=0;g<a.length;g++){let B=H[g];B&&(a[g]=Math.min(B.max,Math.max(B.min,a[g])))}be.recalculate(e),_e.recalculate(e);return}let i=new Set([r.initialAttenuation,r.delayVolEnv,r.attackVolEnv,r.holdVolEnv,r.decayVolEnv,r.sustainVolEnv,r.releaseVolEnv,r.keyNumToVolEnvHold,r.keyNumToVolEnvDecay]),I=new Set,o=!!A;n.forEach(g=>{if(g.primarySource.isCC===o&&g.primarySource.index===t||g.secondarySource.isCC===o&&g.secondarySource.index===t){let B=g.destination;if(!I.has(B)){a[B]=s[B],Ms(this.midiControllers,g,e),n.forEach(C=>{C.destination===B&&(a[B]+=C.currentValue)});let d=H[B];a[B]=Math.max(d.min,Math.min(a[B],d.max)),I.add(B)}}}),[...I].some(g=>i.has(g))&&be.recalculate(e),_e.recalculate(e)}var Qi=class{midiControllers=new Int16Array(bn);lockedControllers=Array(bn).fill(!1);customControllers=new Float32Array(ea);channelTransposeKeyShift=0;channelOctaveTuning=new Int8Array(128);sysExModulators=new hi;drumChannel=!1;randomPan=!1;dataEntryState=HA.Idle;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockPreset=!1;lockedSystem="gs";lockGSNRPNParams=!1;channelVibrato={delay:0,depth:0,rate:0};voices=[];sustainedVoices=[];channelNumber;synth;synthProps;noteOn=Ei.bind(this);noteOff=Bi.bind(this);programChange=Ci.bind(this);controllerChange=Ii.bind(this);resetControllers=po.bind(this);resetPreset=yo.bind(this);resetControllersRP15Compliant=ko.bind(this);resetParameters=Do.bind(this);dataEntryFine=ri.bind(this);dataEntryCoarse=ai.bind(this);channelTuningCents=0;generatorOffsets=new Int16Array(Mn);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(Mn);generatorOverridesEnabled=!1;renderVoice=si.bind(this);panAndMixVoice=Oo.bind(this);computeModulators=di.bind(this);constructor(e,A,t,n){this.synth=e,this.synthProps=A,this.preset=t,this.channelNumber=n,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}_isMuted=!1;get isMuted(){return this._isMuted}get holdPedal(){return this.midiControllers[S.sustainPedal]>=8192}get channelSystem(){return this.lockPreset?this.lockedSystem:this.synthProps.masterParameters.midiSystem}transposeChannel(e,A=!1){this.drumChannel||(e+=this.synthProps.masterParameters.transposition);let t=Math.trunc(e),n=this.channelTransposeKeyShift+this.customControllers[rA.channelTransposeFine]/100;this.drumChannel&&!A||e===n||(t!==this.channelTransposeKeyShift&&this.stopAllNotes(),this.channelTransposeKeyShift=t,this.setCustomController(rA.channelTransposeFine,(e-t)*100),this.sendChannelProperty())}setOctaveTuning(e){if(e.length!==12)throw new Error("Tuning is not the length of 12.");this.channelOctaveTuning=new Int8Array(128);for(let A=0;A<128;A++)this.channelOctaveTuning[A]=e[A%12]}setModulationDepth(e){e=Math.round(e),p(`%cChannel ${this.channelNumber} modulation depth. Cents: %c${e}`,c.info,c.value),this.setCustomController(rA.modulationMultiplier,e/50)}setTuning(e,A=!0){e=Math.round(e),this.setCustomController(rA.channelTuning,e),A&&p(`%cFine tuning for %c${this.channelNumber}%c is now set to %c${e}%c cents.`,c.info,c.recognized,c.info,c.value,c.info)}pitchWheel(e){this.lockedControllers[fA+_.pitchWheel]||(this.synthProps.callEvent("pitchWheel",{channel:this.channelNumber,pitch:e}),this.midiControllers[fA+_.pitchWheel]=e,this.voices.forEach(A=>this.computeModulators(A,0,_.pitchWheel)),this.sendChannelProperty())}channelPressure(e){this.midiControllers[fA+_.channelPressure]=e<<7,this.updateChannelTuning(),this.voices.forEach(A=>this.computeModulators(A,0,_.channelPressure)),this.synthProps.callEvent("channelPressure",{channel:this.channelNumber,pressure:e})}polyPressure(e,A){this.voices.forEach(t=>{t.midiNote===e&&(t.pressure=A,this.computeModulators(t,0,_.polyPressure))}),this.synthProps.callEvent("polyPressure",{channel:this.channelNumber,midiNote:e,pressure:A})}setCustomController(e,A){this.customControllers[e]=A,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[rA.channelTuning]+this.customControllers[rA.channelTransposeFine]+this.customControllers[rA.masterTuning]+this.customControllers[rA.channelTuningSemitones]*100}renderAudio(e,A,t,n,s,a,i,I){this.voices=this.voices.filter(o=>!this.renderVoice(o,this.synth.currentSynthTime,e,A,t,n,s,a,i,I))}setPresetLock(e){this.lockPreset!==e&&(this.lockPreset=e,e&&(this.lockedSystem=this.synthProps.masterParameters.midiSystem))}setDrums(e){if(dA.isSystemXG(this.channelSystem))if(e)this.setBankMSB(dA.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channelNumber%16===Se)throw new Error(`Cannot disable drums on channel ${this.channelNumber} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(e);this.setDrumFlag(e),this.programChange(this.patch.program)}setPatch(e){this.setBankMSB(e.bankMSB),this.setBankLSB(e.bankLSB),this.setGSDrums(e.isGMGSDrum),this.programChange(e.program)}setGSDrums(e){e!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=e)}setVibrato(e,A,t){this.lockGSNRPNParams||(this.channelVibrato.rate=A,this.channelVibrato.delay=t,this.channelVibrato.depth=e)}disableAndLockGSNRPN(){this.lockGSNRPNParams=!0,this.channelVibrato.rate=0,this.channelVibrato.delay=0,this.channelVibrato.depth=0}resetGeneratorOverrides(){this.generatorOverrides.fill(Vs),this.generatorOverridesEnabled=!1}setGeneratorOverride(e,A,t=!1){this.generatorOverrides[e]=A,this.generatorOverridesEnabled=!0,t&&this.voices.forEach(n=>{n.generators[e]=A,this.computeModulators(n)})}resetGeneratorOffsets(){this.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(e,A){this.generatorOffsets[e]=A*H[e].nrpn,this.generatorOffsetsEnabled=!0,this.voices.forEach(t=>{this.computeModulators(t)})}killNote(e,A=-12e3){e+=this.customControllers[rA.channelKeyShift],this.voices.forEach(t=>{t.realKey===e&&(t.modulatedGenerators[r.releaseVolEnv]=A,t.release(this.synth.currentSynthTime))})}stopAllNotes(e=!1){e?(this.voices.length=0,this.sustainedVoices.length=0,this.sendChannelProperty()):(this.voices.forEach(A=>{A.isInRelease||A.release(this.synth.currentSynthTime)}),this.sustainedVoices.forEach(A=>{A.release(this.synth.currentSynthTime)})),this.synthProps.callEvent("stopAll",{channel:this.channelNumber,force:e})}muteChannel(e){e&&this.stopAllNotes(!0),this._isMuted=e,this.sendChannelProperty(),this.synthProps.callEvent("muteChannel",{channel:this.channelNumber,isMuted:e})}sendChannelProperty(){if(!this.synth.enableEventSystem)return;let e={voicesAmount:this.voices.length,pitchWheel:this.midiControllers[fA+_.pitchWheel],pitchWheelRange:this.midiControllers[fA+_.pitchWheelRange]/128,isMuted:this.isMuted,transposition:this.channelTransposeKeyShift+this.customControllers[rA.channelTransposeFine]/100,isDrum:this.drumChannel};this.synthProps.callEvent("channelPropertyChange",{channel:this.channelNumber,property:e})}setBankMSB(e){this.lockPreset||(this.patch.bankMSB=e)}setBankLSB(e){this.lockPreset||(this.patch.bankLSB=e)}setDrumFlag(e){this.lockPreset||!this.preset||this.drumChannel!==e&&(e?(this.channelTransposeKeyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.synthProps.callEvent("drumChange",{channel:this.channelNumber,isDrumChannel:this.drumChannel}))}},yn=20;async function ui(e,A,t,n,s,a,i){let I=0,o=0,g=[];for(let C of e.samples){n&&a&&await C.compressSample(a),s&&C.setAudioData(C.getAudioData(),C.sampleRate);let h=C.getRawData(!0);I++,await i?.(C.name,I,e.samples.length),p(`%cEncoded sample %c${I}. ${C.name}%c of %c${e.samples.length}%c. Compressed: %c${C.isCompressed}%c.`,c.info,c.recognized,c.info,c.recognized,c.info,C.isCompressed?c.recognized:c.unrecognized,c.info),o+=h.length+(C.isCompressed?0:92),g.push(h)}o%2!==0&&o++;let B=new P(o+yn);yA(B,"LIST"),ht(B,o+yn-8,4),yA(B,"sdta"),yA(B,"smpl"),ht(B,o,4);let d=0;return e.samples.forEach((C,h)=>{let u=g[h];B.set(u,d+yn);let m,y;C.isCompressed?(m=d,y=m+u.length):(m=d/2,y=m+u.length/2,d+=92),d+=u.length,A.push(m),t.push(y)}),B}var fi=48e3,Zt=class{name;sampleRate;originalKey;pitchCorrection;linkedSample;sampleType;loopStart;loopEnd;linkedTo=[];dataOverridden=!0;compressedData;audioData;constructor(e,A,t,n,s,a,i){this.name=e,this.sampleRate=A,this.originalKey=t,this.pitchCorrection=n,this.loopStart=a,this.loopEnd=i,this.sampleType=s}get isCompressed(){return this.compressedData!==void 0}get isLinked(){return this.sampleType===DA.rightSample||this.sampleType===DA.leftSample||this.sampleType===DA.linkedSample}get useCount(){return this.linkedTo.length}getRawData(e){return this.compressedData&&e&&!this.dataOverridden?this.compressedData:this.encodeS16LE()}resampleData(e){let A=this.getAudioData(),t=e/this.sampleRate,n=new Float32Array(Math.floor(A.length*t));for(let s=0;s<n.length;s++)n[s]=A[Math.floor(s*(1/t))];A=n,this.sampleRate=e,this.loopStart=Math.floor(this.loopStart*t),this.loopEnd=Math.floor(this.loopEnd*t),this.audioData=A}async compressSample(e){if(!this.isCompressed)try{let A=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(fi),A=this.getAudioData());let t=await e(A,this.sampleRate);this.setCompressedData(t)}catch(A){sA(`Failed to compress ${this.name}. Leaving as uncompressed!`,A),this.compressedData=void 0}}setSampleType(e){if(this.sampleType=e,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=e),this.linkedSample=void 0),(e&32768)>0)throw new Error("ROM samples are not supported.")}unlinkSample(){this.setSampleType(DA.monoSample)}setLinkedSample(e,A){if(e.linkedSample)throw new Error(`${e.name} is linked tp ${e.linkedSample.name}. Unlink it first.`);if(this.linkedSample=e,e.linkedSample=this,A===DA.leftSample)this.setSampleType(DA.leftSample),e.setSampleType(DA.rightSample);else if(A===DA.rightSample)this.setSampleType(DA.rightSample),e.setSampleType(DA.leftSample);else if(A===DA.linkedSample)this.setSampleType(DA.linkedSample),e.setSampleType(DA.linkedSample);else throw new Error("Invalid sample type: "+A)}linkTo(e){this.linkedTo.push(e)}unlinkFrom(e){let A=this.linkedTo.indexOf(e);if(A<0){sA(`Cannot unlink ${e.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(A,1)}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return this.audioData=this.decodeVorbis(),this.audioData;throw new Error("Sample data is undefined for a BasicSample instance.")}setAudioData(e,A){this.audioData=e,this.sampleRate=A,this.dataOverridden=!0,this.compressedData=void 0}setCompressedData(e){this.audioData=void 0,this.compressedData=e,this.dataOverridden=!1}encodeS16LE(){let e=this.getAudioData(),A=new Int16Array(e.length),t=e.length;for(let n=0;n<t;n++){let s=e[n]*32768;s>32767?s=32767:s<-32768&&(s=-32768),A[n]=s}return new P(A.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let A=Ot.decode(this.compressedData).data[0];if(A===void 0)return sA(`Error decoding sample ${this.name}: Vorbis decode returned undefined.`),new Float32Array(0);for(let t=0;t<A.length;t++)A[t]=Math.max(-1,Math.min(A[t],.999969482421875));return A}catch(e){return sA(`Error decoding sample ${this.name}: ${e}`),new Float32Array(this.loopEnd+1)}}},mi=class extends Zt{constructor(){super("",44100,60,0,DA.monoSample,0,0)}},Vn=16,Si=class extends Zt{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(e,A,t,n,s,a,i,I,o,g,B,d){let C=(g&Vn)>0;g&=~Vn,super(e,a,i,I,g,n-A/2,s-A/2),this.dataOverridden=!1,this.name=e,this.startByteOffset=A,this.endByteOffset=t,this.sampleID=d;let h=B instanceof P?B.currentIndex:0;B instanceof P?C?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(B.slice(this.startByteOffset/2+h,this.endByteOffset/2+h))):this.s16leData=B.slice(h+this.startByteOffset,h+this.endByteOffset):this.setAudioData(B.slice(this.startByteOffset/2,this.endByteOffset/2),a),this.linkedSampleIndex=o}getLinkedSample(e){if(this.linkedSample||!this.isLinked)return;let A=e[this.linkedSampleIndex];A?A.linkedSample?(p(`%cInvalid linked sample for ${this.name}: Already linked to ${A.linkedSample.name}`,c.warn),this.unlinkSample()):this.setLinkedSample(A,this.sampleType):(p(`%cInvalid linked sample for ${this.name}. Setting to mono.`,c.warn),this.unlinkSample())}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return super.getAudioData();if(!this.s16leData)throw console.error(this),new Error("Unexpected lack of audio data.");let e=this.endByteOffset-this.startByteOffset;if(e<1)return sA(`Invalid sample ${this.name}! Invalid length: ${e}`),new Float32Array(1);let A=new Float32Array(e/2),t=new Int16Array(this.s16leData.buffer);for(let n=0;n<t.length;n++)A[n]=t[n]/32768;return this.audioData=A,A}getRawData(e){return this.dataOverridden||this.compressedData?super.getRawData(e):this.s16leData??new Uint8Array(0)}};function bs(e,A,t=!0){let n=[],s=0;for(;e.data.length>e.data.currentIndex;){let a=pi(s,e.data,A);n.push(a),s++}return n.pop(),t&&n.forEach(a=>a.getLinkedSample(n)),n}function pi(e,A,t){let n=CA(A,20),s=N(A,4)*2,a=N(A,4)*2,i=N(A,4),I=N(A,4),o=N(A,4),g=A[A.currentIndex++];g>127&&(g=60);let B=qa(A[A.currentIndex++]),d=N(A,2),C=N(A,2);return new Si(n,s,a,i,I,o,g,B,d,C,t,e)}function yi(e,A,t){let s=46*(e.samples.length+1),a=new P(s),i=new P(s),I=0;e.samples.forEach((B,d)=>{yA(a,B.name.substring(0,20),20),yA(i,B.name.substring(20),20);let C=A[d];IA(a,C),i.currentIndex+=4;let h=t[d];IA(a,h),i.currentIndex+=4;let u=B.loopStart+C,m=B.loopEnd+C;B.isCompressed&&(u-=C,m-=C),IA(a,u),IA(a,m),IA(a,B.sampleRate),a[a.currentIndex++]=B.originalKey,a[a.currentIndex++]=B.pitchCorrection,i.currentIndex+=14;let y=B.linkedSample?e.samples.indexOf(B.linkedSample):0;J(a,Math.max(0,y)&65535),J(i,Math.max(0,y)>>16),I=Math.max(I,y);let F=B.sampleType;B.isCompressed&&(F|=Vn),J(a,F),i.currentIndex+=2}),yA(a,"EOS",46),yA(i,"EOS",46);let o=gA("shdr",a),g=gA("shdr",i);return{pdta:o,xdta:g}}function vs(e,A=!1){let t=A?e.presets:e.instruments,n=A?"pgen":"igen",s=A?"pmod":"imod",a=A?"pbag":"ibag",i=A?"phdr":"inst",I=A?da:la,o=t.map(k=>(k instanceof pe,k.getSize())),g=o.reduce((k,D)=>k+D.gen,0)+Ct,B=new P(g),d=o.reduce((k,D)=>k+D.mod,0)+me,C=new P(d),h=o.reduce((k,D)=>k+D.bag,0)+Jt,u={pdta:new P(h),xdta:new P(h)},m=o.reduce((k,D)=>D.hdr+k,0)+I,y={pdta:new P(m),xdta:new P(m)},F={gen:0,bag:0,mod:0,hdr:0};return t.forEach(k=>{k instanceof pe,k.write(B,C,u,y,F,e)}),A?(yA(y.pdta,"EOP",20),y.pdta.currentIndex+=4,J(y.pdta,F.hdr&65535),y.pdta.currentIndex+=12,yA(y.xdta,"",20),y.xdta.currentIndex+=4,J(y.xdta,F.hdr>>16),y.xdta.currentIndex+=12):(yA(y.pdta,"EOI",20),yA(y.xdta,"",20),J(y.pdta,F.hdr&65535),J(y.xdta,F.hdr>>16)),J(u.pdta,F.gen&65535),J(u.xdta,F.gen>>16),J(u.pdta,F.mod&65535),J(u.xdta,F.mod>>16),{writeXdta:Math.max(g/Ct,d/me,h/Jt,m/I)>65535,gen:{pdta:gA(n,B),xdta:gA(s,new P(Ct))},mod:{pdta:gA(s,C),xdta:gA(s,new P(me))},bag:{pdta:gA(a,u.pdta),xdta:gA(a,u.xdta)},hdr:{pdta:gA(i,y.pdta),xdta:gA(i,y.xdta)}}}var Xn={compress:!1,compressionFunction:void 0,progressFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0,decompress:!1};async function ki(e,A=Xn){let t=$n(A,Xn);if(t?.compress){if(typeof t?.compressionFunction!="function")throw new Error("No compression function supplied but compression enabled.");if(t?.decompress)throw new Error("Decompressed and compressed at the same time.")}MA("%cSaving soundbank...",c.info),p(`%cCompression: %c${t?.compress||"false"}%c`,c.info,c.recognized,c.info,c.recognized),OA("%cWriting INFO...",c.info);let n=[];e.soundBankInfo.software="SpessaSynth",(t?.compress||e.samples.some(D=>D.isCompressed))&&(e.soundBankInfo.version.major=3,e.soundBankInfo.version.minor=0),t?.decompress&&(e.soundBankInfo.version.major=2,e.soundBankInfo.version.minor=4);let s=(D,v)=>{n.push(gA(D,ne(v,!0,!0)))},a=new P(4);if(J(a,e.soundBankInfo.version.major),J(a,e.soundBankInfo.version.minor),n.push(gA("ifil",a)),e.soundBankInfo.romVersion){let D=new P(4);J(D,e.soundBankInfo.romVersion.major),J(D,e.soundBankInfo.romVersion.minor),n.push(gA("iver",D))}let i=(e.soundBankInfo?.comment??"")+(e.soundBankInfo.subject?`
6
- ${e.soundBankInfo.subject}`:"");for(let[D,v]of Object.entries(e.soundBankInfo)){let L=D,E=v;if(E)switch(L){case"name":s("INAM",E);break;case"comment":s("ICMT",i);break;case"copyright":s("ICOP",E);break;case"creationDate":s("ICRD",E.toISOString());break;case"engineer":s("IENG",E);break;case"product":s("IPRD",E);break;case"romInfo":s("irom",E);break;case"software":s("ISFT",E);break;case"soundEngine":s("isng",E);break;case"subject":break}}if(e.defaultModulators.some(D=>Ea.findIndex(v=>cA.isIdentical(v,D,!0))===-1)&&t?.writeDefaultModulators){let D=e.defaultModulators;p(`%cWriting %c${D.length}%c default modulators...`,c.info,c.recognized,c.info);let v=me+D.length*me,L=new P(v);for(let E of D)E.write(L);ht(L,0,me),n.push(gA("DMOD",L))}X(),p("%cWriting SDTA...",c.info);let o=[],g=[],B=await ui(e,o,g,t.compress,t.decompress,t?.compressionFunction,t?.progressFunction);p("%cWriting PDTA...",c.info),p("%cWriting SHDR...",c.info);let d=yi(e,o,g);OA("%cWriting instruments...",c.info);let C=vs(e,!1);X(),OA("%cWriting presets...",c.info);let h=vs(e,!0);X();let u=[h.hdr,h.bag,h.mod,h.gen,C.hdr,C.bag,C.mod,C.gen,d],m=bA("pdta",u.map(D=>D.pdta),!0);if(t.writeExtendedLimits&&(C.writeXdta||h.writeXdta||e.presets.some(D=>D.name.length>20)||e.instruments.some(D=>D.name.length>20)||e.samples.some(D=>D.name.length>20))){p("%cWriting the xdta chunk as writeExendedLimits is enabled and at least one condition was met.",c.info,c.value);let D=bA("xdta",u.map(v=>v.xdta),!0);n.push(D)}let F=bA("INFO",n,!0);p("%cWriting the output file...",c.info);let k=bA("RIFF",[ne("sfbk"),F,B,m]);return p(`%cSaved succesfully! Final file size: %c${k.length}`,c.info,c.recognized),X(),k.buffer}var je=class{static verifyHeader(e,...A){for(let t of A)if(e.header.toLowerCase()===t.toLowerCase())return;this.parsingError(`Invalid DLS chunk header! Expected "${A.join(", or ")}" got "${e.header.toLowerCase()}"`)}static verifyText(e,...A){for(let t of A)if(e.toLowerCase()===t.toLowerCase())return;this.parsingError(`FourCC error: Expected "${A.join(", or ")}" got "${e.toLowerCase()}"`)}static parsingError(e){throw X(),new Error(`DLS parse error: ${e} The file may be corrupted.`)}static verifyAndReadList(e,...A){this.verifyHeader(e,"LIST"),e.data.currentIndex=0,this.verifyText(CA(e.data,4),...A);let t=[];for(;e.data.length>e.data.currentIndex;)t.push(oA(e.data));return t}},gt=20,kn=16,ze=class Bt extends je{gain=0;unityNote=60;fineTune=0;loops=new Array;fulOptions=2;static copyFrom(A){let t=new Bt;return t.unityNote=A.unityNote,t.gain=A.gain,t.fineTune=A.fineTune,t.loops=A.loops.map(n=>({...n})),t.fulOptions=A.fulOptions,t}static read(A){this.verifyHeader(A,"wsmp");let t=new Bt,n=N(A.data,4);if(n!==gt&&sA(`Wsmp cbSize mismatch: got ${n}, expected ${gt}.`),t.unityNote=N(A.data,2),t.fineTune=jn(A.data[A.data.currentIndex++],A.data[A.data.currentIndex++]),t.gain=N(A.data,4)|0,t.fulOptions=N(A.data,4),N(A.data,4)!==0){let a=N(A.data,4);a!==kn&&sA(`CbSize for loop in wsmp mismatch. Expected ${gt}, got ${a}.`);let i=N(A.data,4),I=N(A.data,4),o=N(A.data,4);t.loops.push({loopStart:I,loopLength:o,loopType:i})}return t}static fromSFSample(A){let t=new Bt;return t.unityNote=A.originalKey,t.fineTune=A.pitchCorrection,(A.loopEnd!==0||A.loopStart!==0)&&t.loops.push({loopStart:A.loopStart,loopLength:A.loopEnd-A.loopStart,loopType:ys.forward}),t}static fromSFZone(A){let t=new Bt;t.unityNote=A.getGenerator(r.overridingRootKey,A.sample.originalKey),A.getGenerator(r.scaleTuning,100)===0&&A.keyRange.max-A.keyRange.min===0&&(t.unityNote=A.keyRange.min),t.fineTune=A.fineTuning+A.sample.pitchCorrection;let n=A.getGenerator(r.initialAttenuation,0)*.4;t.gain=-n<<16;let s=A.getGenerator(r.sampleModes,0);if(s!==0){let a=A.sample.loopStart+A.getGenerator(r.startloopAddrsOffset,0)+A.getGenerator(r.startloopAddrsCoarseOffset,0)*32768,i=A.sample.loopEnd+A.getGenerator(r.endloopAddrsOffset,0)+A.getGenerator(r.endloopAddrsCoarseOffset,0)*32768,I;switch(s){case 1:default:I=0;break;case 3:I=1}t.loops.push({loopType:I,loopStart:a,loopLength:i-a})}return t}toSFZone(A,t){let n=0,s=this.loops[0];s&&(n=s.loopType===ys.loopAndRelease?3:1),n!==0&&A.setGenerator(r.sampleModes,n);let I=-(this.gain>>16)/.4;if(I!==0&&A.setGenerator(r.initialAttenuation,I),A.fineTuning=this.fineTune-t.pitchCorrection,this.unityNote!==t.originalKey&&A.setGenerator(r.overridingRootKey,this.unityNote),s){let o=s.loopStart-t.loopStart,B=s.loopStart+s.loopLength-t.loopEnd;if(o!==0){let d=o%32768;A.setGenerator(r.startloopAddrsOffset,d);let C=Math.trunc(o/32768);C!==0&&A.setGenerator(r.startloopAddrsCoarseOffset,C)}if(B!==0){let d=B%32768;A.setGenerator(r.endloopAddrsOffset,d);let C=Math.trunc(B/32768);C!==0&&A.setGenerator(r.endloopAddrsCoarseOffset,C)}}}write(){let A=new P(gt+this.loops.length*kn);return IA(A,gt),J(A,this.unityNote),J(A,this.fineTune),IA(A,this.gain),IA(A,this.fulOptions),IA(A,this.loops.length),this.loops.forEach(t=>{IA(A,kn),IA(A,t.loopType),IA(A,t.loopStart),IA(A,t.loopLength)}),gA("wsmp",A)}},Dn={PCM:1,ALAW:6};function Di(e,A){let t=Math.pow(2,A*8-1),n=Math.pow(2,A*8),s,a=!1;A===1?(s=255,a=!0):s=t;let i=e.length/A,I=new Float32Array(i);if(A===2){let o=new Int16Array(e.buffer);for(let g=0;g<o.length;g++)I[g]=o[g]/32768}else for(let o=0;o<I.length;o++){let g=N(e,A);a?I[o]=g/s-.5:(g>=t&&(g-=n),I[o]=g/s)}return I}function wi(e,A){let t=e.length/A,n=new Float32Array(t);for(let s=0;s<n.length;s++){let a=N(e,A),i=a^85;i&=127;let I=i>>4,o=i&15;I>0&&(o+=16),o=(o<<4)+8,I>1&&(o=o<<I-1);let g=a>127?o:-o;n[s]=g/32678}return n}var Fi=class extends Zt{wFormatTag;bytesPerSample;rawData;constructor(e,A,t,n,s,a,i,I,o){super(e,A,t,n,DA.monoSample,s,a),this.dataOverridden=!1,this.rawData=i.data,this.wFormatTag=I,this.bytesPerSample=o}getAudioData(){if(!this.rawData)return new Float32Array(0);if(!this.audioData){let e;switch(this.wFormatTag){default:sA(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),e=new Float32Array(this.rawData.length/this.bytesPerSample);break;case Dn.PCM:e=Di(this.rawData,this.bytesPerSample);break;case Dn.ALAW:e=wi(this.rawData,this.bytesPerSample);break}this.setAudioData(e,this.sampleRate)}return this.audioData??new Float32Array(0)}getRawData(e){return this.dataOverridden||this.isCompressed?super.getRawData(e):this.wFormatTag===Dn.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Ls=class Zn extends je{waveSample=new ze;wFormatTag;bytesPerSample;sampleRate;dataChunk;name="Unnamed sample";constructor(A,t,n,s){super(),this.wFormatTag=A,this.bytesPerSample=t,this.sampleRate=n,this.dataChunk=s}static read(A){let t=this.verifyAndReadList(A,"wave"),n=t.find(h=>h.header==="fmt ");if(!n)throw new Error("No fmt chunk in the wave file!");let s=N(n.data,2),a=N(n.data,2);if(a!==1)throw new Error(`Only mono samples are supported. Fmt reports ${a} channels.`);let i=N(n.data,4);N(n.data,4),N(n.data,2);let o=N(n.data,2)/8,g=t.find(h=>h.header==="data");if(!g)throw new Error("No data chunk in the WAVE chunk!");let B=new Zn(s,o,i,g),d=fe(t,"INFO");if(d){let h=oA(d.data);for(;h.header!=="INAM"&&d.data.currentIndex<d.data.length;)h=oA(d.data);h.header==="INAM"&&(B.name=CA(h.data,h.size).trim())}let C=t.find(h=>h.header==="wsmp");return C&&(B.waveSample=ze.read(C)),B}static fromSFSample(A){let t=A.getRawData(!1),n=new Zn(1,2,A.sampleRate,new Hs("data",t.length,new P(t.buffer)));return n.name=A.name,n.waveSample=ze.fromSFSample(A),n}toSFSample(A){let t=this.waveSample.unityNote,n=this.waveSample.fineTune,s=Math.trunc(n/100);t+=s,n-=s*100;let a=0,i=0,I=this.waveSample.loops?.[0];I&&(a=I.loopStart,i=I.loopStart+I.loopLength);let o=new Fi(this.name,this.sampleRate,t,n,a,i,this.dataChunk,this.wFormatTag,this.bytesPerSample);A.addSamples(o)}write(){let A=this.writeFmt(),t=this.waveSample.write(),n=gA("data",this.dataChunk.data),s=gA("INAM",ne(this.name,!0)),a=gA("INFO",s,!1,!0);return p(`%cSaved %c${this.name}%c successfully!`,c.recognized,c.value,c.recognized),bA("wave",[A,t,n,a],!0)}writeFmt(){let A=new P(18);return J(A,this.wFormatTag),J(A,1),IA(A,this.sampleRate),IA(A,this.sampleRate*2),J(A,2),J(A,this.bytesPerSample*8),gA("fmt ",A)}},ya=new pA(219,0,r.reverbEffectsSend,1e3,0),ka=new pA(221,0,r.chorusEffectsSend,1e3,0),Gi=new pA(129,0,r.vibLfoToPitch,0,0),Ri=new pA(13,0,r.vibLfoToPitch,0,0),VA=class zn{source;transform;bipolar;invert;constructor(A=T.none,t=QA.linear,n=!1,s=!1){this.source=A,this.transform=t,this.bipolar=n,this.invert=s}get sourceName(){return Object.keys(T).find(A=>T[A]===this.source)??this.source.toString()}get transformName(){return Object.keys(QA).find(A=>QA[A]===this.transform)??this.transform.toString()}static copyFrom(A){return new zn(A.source,A.transform,A.bipolar,A.invert)}static fromSFSource(A){let t;if(A.isCC)switch(A.index){case S.modulationWheel:t=T.modulationWheel;break;case S.mainVolume:t=T.volume;break;case S.pan:t=T.pan;break;case S.expressionController:t=T.expression;break;case S.chorusDepth:t=T.chorus;break;case S.reverbDepth:t=T.reverb;break}else switch(A.index){case _.noController:t=T.none;break;case _.noteOnKeyNum:t=T.keyNum;break;case _.noteOnVelocity:t=T.velocity;break;case _.pitchWheel:t=T.pitchWheel;break;case _.pitchWheelRange:t=T.pitchWheelRange;break;case _.polyPressure:t=T.polyPressure;break;case _.channelPressure:t=T.channelPressure}if(t!==void 0)return new zn(t,A.curveType,A.isBipolar,A.isNegative)}toString(){return`${this.sourceName} ${this.transformName} ${this.bipolar?"bipolar":"unipolar"} ${this.invert?"inverted":"positive"}`}toTransformFlag(){return this.transform|(this.bipolar?1:0)<<4|(this.invert?1:0)<<5}toSFSource(){let A,t=!1;switch(this.source){default:case T.modLfo:case T.vibratoLfo:case T.coarseTune:case T.fineTune:case T.modEnv:return;case T.keyNum:A=_.noteOnKeyNum;break;case T.none:A=_.noController;break;case T.modulationWheel:A=S.modulationWheel,t=!0;break;case T.pan:A=S.pan,t=!0;break;case T.reverb:A=S.reverbDepth,t=!0;break;case T.chorus:A=S.chorusDepth,t=!0;break;case T.expression:A=S.expressionController,t=!0;break;case T.volume:A=S.mainVolume,t=!0;break;case T.velocity:A=_.noteOnVelocity;break;case T.polyPressure:A=_.polyPressure;break;case T.channelPressure:A=_.channelPressure;break;case T.pitchWheel:A=_.pitchWheel;break;case T.pitchWheelRange:A=_.pitchWheelRange;break}if(A!==void 0)return new XA(A,this.transform,t,this.bipolar,this.invert)}},Mi=new Set([r.sampleModes,r.initialAttenuation,r.keyRange,r.velRange,r.sampleID,r.fineTune,r.coarseTune,r.startAddrsOffset,r.startAddrsCoarseOffset,r.endAddrOffset,r.endAddrsCoarseOffset,r.startloopAddrsOffset,r.startloopAddrsCoarseOffset,r.endloopAddrsOffset,r.endloopAddrsCoarseOffset,r.overridingRootKey,r.exclusiveClass]),ct=class Re{source;control;destination;scale;transform;constructor(A=new VA,t=new VA,n,s,a){this.source=A,this.control=t,this.destination=n,this.transform=s,this.scale=a}get isStaticParameter(){return this.source.source===T.none&&this.control.source===T.none}get shortScale(){return this.scale>>16}get transformName(){return Object.keys(QA).find(A=>QA[A]===this.transform)??this.transform.toString()}get destinationName(){return Object.keys(R).find(A=>R[A]===this.destination)??this.destination.toString()}static read(A){let t=N(A,2),n=N(A,2),s=N(A,2),a=N(A,2),i=N(A,4)|0,I=a&15,o=a>>4&15,g=Me(a,8),B=Me(a,9),d=new VA(n,o,g,B),C=a>>10&15,h=Me(a,14),u=Me(a,15),m=new VA(t,C,h,u);return new Re(m,d,s,I,i)}static fromSFModulator(A,t){let n=B=>{sA(`Failed converting SF modulator into DLS:
5
+ amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(A,t){J(A,this.primarySource.toSourceEnum()),J(A,this.destination),J(A,this.transformAmount),J(A,this.secondarySource.toSourceEnum()),J(A,this.transformType),t&&t.mod++}sumTransform(A){let t=xn.copyFrom(this);return t.transformAmount+=A.transformAmount,t}},yA=class extends EA{constructor(e,A,t,n,s){let a=(e===219||e===221)&&A===0&&(t===r.reverbEffectsSend||t===r.chorusEffectsSend),i=e===ca&&A===0&&t===r.initialFilterQ;super(XA.fromSourceEnum(e),XA.fromSourceEnum(A),t,n,s,a,i),this.destination>mo&&(this.destination=r.INVALID)}},fn=960,mn=QA.concave,Uo=[new yA(ge(mn,!1,!0,!1,j.noteOnVelocity),0,r.initialAttenuation,fn,0),new yA(129,0,r.vibLfoToPitch,50,0),new yA(ge(mn,!1,!0,!0,S.mainVolume),0,r.initialAttenuation,fn,0),new yA(13,0,r.vibLfoToPitch,50,0),new yA(526,16,r.fineTune,12700,0),new yA(650,0,r.pan,500,0),new yA(ge(mn,!1,!0,!0,S.expressionController),0,r.initialAttenuation,fn,0),new yA(219,0,r.reverbEffectsSend,200,0),new yA(221,0,r.chorusEffectsSend,200,0)],To=[new yA(ge(QA.linear,!1,!1,!1,j.polyPressure),0,r.vibLfoToPitch,50,0),new yA(ge(QA.linear,!1,!1,!0,S.tremoloDepth),0,r.modLfoToVolume,24,0),new yA(ge(QA.convex,!0,!1,!0,S.attackTime),0,r.attackVolEnv,6e3,0),new yA(ge(QA.linear,!0,!1,!0,S.releaseTime),0,r.releaseVolEnv,3600,0),new yA(ge(QA.linear,!0,!1,!0,S.brightness),0,r.initialFilterFc,6e3,0),new yA(ca,0,r.initialFilterQ,250,0)],Ea=Uo.concat(To),Ct=4,FA=class{generatorType;generatorValue=0;constructor(e,A,t=!0){if(this.generatorType=e,A===void 0)throw new Error("No value provided.");if(this.generatorValue=Math.round(A),t){let n=x[e];n!==void 0&&(this.generatorValue=Math.max(n.min,Math.min(n.max,this.generatorValue)))}}write(e,A){J(e,this.generatorType),J(e,this.generatorValue),A.gen++}toString(){return`${Object.keys(r).find(e=>r[e]===this.generatorType)}: ${this.generatorValue}`}};function xo(e,A,t){let n=x[e]||{min:0,max:32768,def:0},s=A.find(o=>o.generatorType===e),a=0;s&&(a=s.generatorValue);let i=t.find(o=>o.generatorType===e),I=n.def;return i&&(I=i.generatorValue),Math.max(-32767,Math.min(32767,I+a))}var Jt=4,Vt=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}get fineTuning(){let e=this.getGenerator(r.coarseTune,0),A=this.getGenerator(r.fineTune,0);return e*100+A}set fineTuning(e){let A=Math.trunc(e/100),t=e%100;this.setGenerator(r.coarseTune,A),this.setGenerator(r.fineTune,t)}addToGenerator(e,A,t=!0){let n=this.getGenerator(e,x[e].def);this.setGenerator(e,A+n,t)}setGenerator(e,A,t=!0){switch(e){case r.sampleID:throw new Error("Use setSample()");case r.instrument:throw new Error("Use setInstrument()");case r.velRange:case r.keyRange:throw new Error("Set the range manually")}if(A===void 0){this.generators=this.generators.filter(s=>s.generatorType!==e);return}let n=this.generators.findIndex(s=>s.generatorType===e);n>0?this.generators[n]=new FA(e,A,t):this.addGenerators(new FA(e,A,t))}addGenerators(...e){e.forEach(A=>{switch(A.generatorType){default:this.generators.push(A);break;case r.sampleID:case r.instrument:break;case r.velRange:this.velRange.min=A.generatorValue&127,this.velRange.max=A.generatorValue>>8&127;break;case r.keyRange:this.keyRange.min=A.generatorValue&127,this.keyRange.max=A.generatorValue>>8&127}})}addModulators(...e){this.modulators.push(...e)}getGenerator(e,A){return this.generators.find(t=>t.generatorType===e)?.generatorValue??A}copyFrom(e){this.generators=e.generators.map(A=>new FA(A.generatorType,A.generatorValue,!1)),this.modulators=e.modulators.map(EA.copyFrom.bind(EA)),this.velRange={...e.velRange},this.keyRange={...e.keyRange}}getGenCount(){let e=this.generators.filter(A=>A.generatorType!==r.sampleID&&A.generatorType!==r.instrument&&A.generatorType!==r.keyRange&&A.generatorType!==r.velRange).length;return this.hasVelRange&&e++,this.hasKeyRange&&e++,e}write(e,A,t,n,s){let a=n.gen,i=n.mod;J(t.pdta,a&65535),J(t.pdta,i&65535),J(t.xdta,a>>16),J(t.xdta,i>>16),n.bag++,this.getWriteGenerators(s).forEach(o=>o.write(e,n)),this.modulators.forEach(o=>o.write(A,n))}getWriteGenerators(e){let A=this.generators.filter(t=>t.generatorType!==r.sampleID&&t.generatorType!==r.instrument&&t.generatorType!==r.keyRange&&t.generatorType!==r.velRange);if(!e)throw new Error("No bank provided! ");return this.hasVelRange&&A.unshift(new FA(r.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&A.unshift(new FA(r.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),A}},Ba=class extends Vt{},Ca=class extends Vt{parentPreset;constructor(e,A){super(),this.parentPreset=e,this._instrument=A,this._instrument.linkTo(this.parentPreset)}_instrument;get instrument(){return this._instrument}set instrument(e){this._instrument&&this._instrument.unlinkFrom(this.parentPreset),this._instrument=e,this._instrument.linkTo(this.parentPreset)}getGenCount(){return super.getGenCount()+1}getWriteGenerators(e){let A=super.getWriteGenerators(e);if(!e)throw new Error("Instrument ID cannot be determined without the sound bank itself.");return A.push(new FA(r.instrument,e.instruments.indexOf(this.instrument),!1)),A}},ha=class extends Vt{parentInstrument;useCount;constructor(e,A){super(),this.parentInstrument=e,this._sample=A,A.linkTo(this.parentInstrument),this.useCount=e.useCount}_sample;get sample(){return this._sample}set sample(e){this._sample&&this._sample.unlinkFrom(this.parentInstrument),this._sample=e,e.linkTo(this.parentInstrument)}getGenCount(){return super.getGenCount()+1}getWriteGenerators(e){let A=super.getWriteGenerators(e);return A.push(new FA(r.sampleID,e.samples.indexOf(this.sample),!1)),A}},la=22,Ho=new Set([r.velRange,r.keyRange,r.instrument,r.sampleID,r.exclusiveClass,r.endOper,r.sampleModes,r.startloopAddrsOffset,r.startloopAddrsCoarseOffset,r.endloopAddrsOffset,r.endloopAddrsCoarseOffset,r.startAddrsOffset,r.startAddrsCoarseOffset,r.endAddrOffset,r.endAddrsCoarseOffset,r.initialAttenuation,r.fineTune,r.coarseTune,r.keyNumToVolEnvHold,r.keyNumToVolEnvDecay,r.keyNumToModEnvHold,r.keyNumToModEnvDecay]),dt=class{name="";zones=[];globalZone=new Ba;linkedTo=[];get useCount(){return this.linkedTo.length}createZone(e){let A=new ha(this,e);return this.zones.push(A),A}linkTo(e){this.linkedTo.push(e),this.zones.forEach(A=>A.useCount++)}unlinkFrom(e){let A=this.linkedTo.indexOf(e);if(A<0){sA(`Cannot unlink ${e.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(A,1),this.zones.forEach(t=>t.useCount--)}deleteUnusedZones(){this.zones=this.zones.filter(e=>{let A=e.useCount>0;return A||e.sample.unlinkFrom(this),A})}delete(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that is used by: ${this.linkedTo.map(e=>e.name).toString()}.`);this.zones.forEach(e=>e.sample.unlinkFrom(this))}deleteZone(e,A=!1){let t=this.zones[e];return t.useCount-=1,t.useCount<1||A?(t.sample.unlinkFrom(this),this.zones.splice(e,1),!0):!1}globalize(){let e=this.globalZone;for(let n=0;n<58;n++){if(Ho.has(n))continue;n=n;let s={},a=x[n]?.def||0;s[a]=0;for(let i of this.zones){let I=i.getGenerator(n,void 0);I!==void 0?s[I]===void 0?s[I]=1:s[I]++:s[a]++;let o;switch(n){default:continue;case r.decayVolEnv:o=r.keyNumToVolEnvDecay;break;case r.holdVolEnv:o=r.keyNumToVolEnvHold;break;case r.decayModEnv:o=r.keyNumToModEnvDecay;break;case r.holdModEnv:o=r.keyNumToModEnvHold}if(i.getGenerator(o,void 0)!==void 0){s={};break}}if(Object.keys(s).length>0){let I=Object.entries(s).reduce((g,B)=>g[1]<B[1]?B:g,["0",0]),o=parseInt(I[0]);o!==a&&e.setGenerator(n,o,!1),this.zones.forEach(g=>{let B=g.getGenerator(n,void 0);B!==void 0?B===o&&g.setGenerator(n,void 0):o!==a&&g.setGenerator(n,a)})}}let t=this.zones[0].modulators.map(n=>EA.copyFrom(n));for(let n of t){let s=!0;for(let a of this.zones){if(!s)continue;a.modulators.find(I=>EA.isIdentical(I,n))||(s=!1)}if(s){e.addModulators(EA.copyFrom(n));for(let a of this.zones){let i=a.modulators.find(I=>EA.isIdentical(I,n));i&&i.transformAmount===n.transformAmount&&a.modulators.splice(a.modulators.indexOf(i),1)}}}}getSize(){let e=this.zones.reduce((t,n)=>n.modulators.length+t,0)+this.globalZone.modulators.length,A=this.zones.reduce((t,n)=>n.getGenCount()+t,0)+this.globalZone.getGenCount();return{mod:e*me,bag:(this.zones.length+1)*Jt,gen:A*Ct,hdr:la}}write(e,A,t,n,s,a){p(`%cWriting ${this.name}...`,c.info),kA(n.pdta,this.name.substring(0,20),20),kA(n.xdta,this.name.substring(20),20),J(n.pdta,s.hdr&65535),J(n.xdta,s.hdr>>>16),s.hdr+=this.zones.length+1,this.globalZone.write(e,A,t,s,a),this.zones.forEach(i=>i.write(e,A,t,s,a))}},da=38,pe=class{parentSoundBank;name="";program=0;bankMSB=0;bankLSB=0;isGMGSDrum=!1;zones=[];globalZone;library=0;genre=0;morphology=0;constructor(e,A=new Ba){this.parentSoundBank=e,this.globalZone=A}get isXGDrums(){return this.parentSoundBank.isXGBank&&fA.isXGDrums(this.bankMSB)}get isAnyDrums(){let e=this.parentSoundBank.isXGBank;return this.isGMGSDrum||e&&fA.isXGDrums(this.bankMSB)&&this.bankMSB!==126}delete(){this.zones.forEach(e=>e.instrument?.unlinkFrom(this))}deleteZone(e){this.zones[e]?.instrument?.unlinkFrom(this),this.zones.splice(e,1)}createZone(e){let A=new Ca(this,e);return this.zones.push(A),A}preload(e,A){for(let t=e;t<A+1;t++)for(let n=0;n<128;n++)this.getSynthesisData(t,n).forEach(s=>{s.sample.getAudioData()})}matches(e){return te.matches(this,e)}getSize(){let e=this.zones.reduce((t,n)=>n.modulators.length+t,0)+this.globalZone.modulators.length,A=this.zones.reduce((t,n)=>n.getGenCount()+t,0)+this.globalZone.getGenCount();return{mod:e*me,bag:(this.zones.length+1)*Jt,gen:A*Ct,hdr:da}}getSynthesisData(e,A){if(this.zones.length<1)return[];function t(d,h){return h>=d.min&&h<=d.max}function n(d,h){d.push(...h.filter(C=>!d.find(Q=>Q.generatorType===C.generatorType)))}function s(d,h){d.push(...h.filter(C=>!d.find(Q=>EA.isIdentical(C,Q))))}let a=[],i=[...this.globalZone.generators],I=[...this.globalZone.modulators],o=this.globalZone.keyRange,g=this.globalZone.velRange;return this.zones.filter(d=>t(d.hasKeyRange?d.keyRange:o,e)&&t(d.hasVelRange?d.velRange:g,A)).forEach(d=>{let h=d.instrument;if(!h||h.zones.length<1)return;let C=d.generators,Q=d.modulators,m=[...h.globalZone.generators],y=[...h.globalZone.modulators],F=h.globalZone.keyRange,k=h.globalZone.velRange;h.zones.filter(v=>t(v.hasKeyRange?v.keyRange:F,e)&&t(v.hasVelRange?v.velRange:k,A)).forEach(v=>{let L=[...v.generators],E=[...v.modulators];n(C,i),n(L,m),s(Q,I),s(E,y),s(E,this.parentSoundBank.defaultModulators);let X=[...E];for(let O of Q){let nA=X.findIndex($=>EA.isIdentical(O,$));nA!==-1?X[nA]=X[nA].sumTransform(O):X.push(O)}v.sample&&a.push({instrumentGenerators:L,presetGenerators:C,modulators:X,sample:v.sample})})}),a}toMIDIString(){return te.toMIDIString(this)}toString(){return te.toNamedMIDIString(this)}toFlattenedInstrument(){let e=(g,B)=>{g.push(...B.filter(d=>!g.find(h=>h.generatorType===d.generatorType)))},A=(g,B)=>({min:Math.max(g.min,B.min),max:Math.min(g.max,B.max)}),t=(g,B)=>{g.push(...B.filter(d=>!g.find(h=>EA.isIdentical(d,h))))},n=new dt;n.name=this.name;let s=[],a=[],i=this.globalZone;s.push(...i.generators),a.push(...i.modulators);let I=i.keyRange,o=i.velRange;for(let g of this.zones){if(!g.instrument)throw new Error("No instrument in a preset zone.");let B=g.keyRange;g.hasKeyRange||(B=I);let d=g.velRange;g.hasVelRange||(d=o);let h=g.generators.map(L=>new FA(L.generatorType,L.generatorValue));e(h,s);let C=[...g.modulators];t(C,a);let Q=g.instrument,m=Q.zones,y=[],F=[],k=Q.globalZone;y.push(...k.generators),F.push(...k.modulators);let D=k.keyRange,v=k.velRange;for(let L of m){if(!L.sample)throw new Error("No sample in an instrument zone.");let E=L.keyRange;L.hasKeyRange||(E=D);let X=L.velRange;if(L.hasVelRange||(X=v),E=A(E,B),X=A(X,d),E.max<E.min||X.max<X.min)continue;let O=L.generators.map(z=>new FA(z.generatorType,z.generatorValue));e(O,y);let nA=[...L.modulators];t(nA,F);let $=[...nA];for(let z of C){let tA=$.findIndex(rA=>EA.isIdentical(z,rA));tA!==-1?$[tA]=$[tA].sumTransform(z):$.push(z)}let V=O.map(z=>new FA(z.generatorType,z.generatorValue));for(let z of h){if(z.generatorType===r.velRange||z.generatorType===r.keyRange||z.generatorType===r.instrument||z.generatorType===r.endOper||z.generatorType===r.sampleModes)continue;let tA=O.findIndex(rA=>rA.generatorType===z.generatorType);if(tA!==-1){let rA=V[tA].generatorValue+z.generatorValue;V[tA]=new FA(z.generatorType,rA)}else{let rA=x[z.generatorType].def+z.generatorValue;V.push(new FA(z.generatorType,rA))}}V=V.filter(z=>z.generatorType!==r.sampleID&&z.generatorType!==r.keyRange&&z.generatorType!==r.velRange&&z.generatorType!==r.endOper&&z.generatorType!==r.instrument&&z.generatorValue!==x[z.generatorType].def);let q=n.createZone(L.sample);q.keyRange=E,q.velRange=X,q.keyRange.min===0&&q.keyRange.max===127&&(q.keyRange.min=-1),q.velRange.min===0&&q.velRange.max===127&&(q.velRange.min=-1),q.addGenerators(...V),q.addModulators(...$)}}return n}write(e,A,t,n,s,a){p(`%cWriting ${this.name}...`,c.info),kA(n.pdta,this.name.substring(0,20),20),kA(n.xdta,this.name.substring(20),20),J(n.pdta,this.program);let i=this.bankMSB;this.isGMGSDrum?i=128:this.bankMSB===0&&(i=this.bankLSB),J(n.pdta,i),n.xdta.currentIndex+=4,J(n.pdta,s.hdr&65535),J(n.xdta,s.hdr>>16),gA(n.pdta,this.library),gA(n.pdta,this.genre),gA(n.pdta,this.morphology),n.xdta.currentIndex+=12,s.hdr+=this.zones.length+1,this.globalZone.write(e,A,t,s,a),this.zones.forEach(I=>I.write(e,A,t,s,a))}};function Ds(e,A){let t;return A?t=e.find(n=>n.isXGDrums):t=e.find(n=>n.isGMGSDrum),t||(e.find(n=>n.isAnyDrums)??e[0])}function Qa(e,A,t){if(e.length<1)throw new Error("No presets!");A.isGMGSDrum&&fA.isSystemXG(t)&&(A={...A,isGMGSDrum:!1,bankLSB:0,bankMSB:fA.getDrumBank(t)});let{isGMGSDrum:n,bankLSB:s,bankMSB:a,program:i}=A,I=fA.isSystemXG(t),o=fA.isXGDrums(a)&&I,g=e.find(C=>C.matches(A));if(g&&(!o||o&&g.isXGDrums))return g;let B=C=>{p(`%cPreset %c${te.toMIDIString(A)}%c not found. (${t}) Replaced with %c${C.toString()}`,c.warn,c.unrecognized,c.warn,c.value)};if(n){let C=e.find(Q=>Q.isGMGSDrum&&Q.program===i);return C||(C=e.find(Q=>Q.isAnyDrums&&Q.program===i),C)?(B(C),C):(C=Ds(e,!1),B(C),C)}if(o){let C=e.find(Q=>Q.program===i&&Q.isXGDrums);return C||(C=e.find(Q=>Q.isAnyDrums&&Q.program===i),C)?(B(C),C):(C=Ds(e,!0),B(C),C)}let d=e.filter(C=>C.program===i&&!C.isAnyDrums);if(d.length<1)return B(e[0]),e[0];if(I?g=d.find(C=>C.bankLSB===s):g=d.find(C=>C.bankMSB===a),g)return B(g),g;let h=Math.max(a,s);return g=d.find(C=>C.bankLSB===h||C.bankMSB===h),g?(B(g),g):(B(d[0]),d[0])}var Yo=class extends pe{constructor(e,A){super(e.parentSoundBank,e.globalZone),this.bankMSB=fA.addBankOffset(e.bankMSB,A,e.isXGDrums),this.name=e.name,this.bankLSB=e.bankLSB,this.isGMGSDrum=e.isGMGSDrum,this.program=e.program,this.genre=e.genre,this.morphology=e.morphology,this.library=e.library,this.zones=e.zones}},Po=class{soundBankList=[];presetListChangeCallback;selectablePresetList=[];constructor(e){this.presetListChangeCallback=e}_presetList=[];get presetList(){return[...this._presetList]}get priorityOrder(){return this.soundBankList.map(e=>e.id)}set priorityOrder(e){this.soundBankList.sort((A,t)=>e.indexOf(A.id)-e.indexOf(t.id)),this.generatePresetList()}deleteSoundBank(e){if(this.soundBankList.length===0){sA("1 soundbank left. Aborting!");return}let A=this.soundBankList.findIndex(t=>t.id===e);if(A===-1)throw new Error(`No sound bank with id "${e}"`);this.soundBankList.splice(A,1),this.generatePresetList()}addSoundBank(e,A,t=0){let n=this.soundBankList.find(s=>s.id===A);n!==void 0?(n.soundBank=e,n.bankOffset=t):this.soundBankList.push({id:A,soundBank:e,bankOffset:t}),this.generatePresetList()}getPreset(e,A){if(this.soundBankList.length<1)throw new Error("No sound banks! Did you forget to add one?");return Qa(this.selectablePresetList,e,A)}destroy(){this.soundBankList.forEach(e=>{e.soundBank.destroySoundBank()}),this.soundBankList=[]}generatePresetList(){let e=new Array,A=new Set;this.soundBankList.forEach(t=>{let n=t.soundBank,s=t.bankOffset;n.presets.forEach(a=>{let i=new Yo(a,s);A.has(i.toMIDIString())||(A.add(i.toMIDIString()),e.push(i))})}),e.sort(te.sorter.bind(te)),this.selectablePresetList=e,this._presetList=e.map(t=>({bankMSB:t.bankMSB,bankLSB:t.bankLSB,program:t.program,isGMGSDrum:t.isGMGSDrum,name:t.name,isAnyDrums:t.isAnyDrums})),this.presetListChangeCallback()}},Jo=.05,qo=3070,Ko=2e3,ws=Math.PI/2,Nt=-500,ua=500,os=ua-Nt,fa=new Float32Array(os+1),ma=new Float32Array(os+1);for(let e=Nt;e<=ua;e++){let A=(e-Nt)/os,t=e-Nt;fa[t]=Math.cos(ws*A),ma[t]=Math.sin(ws*A)}function Oo(e,A,t,n,s,a,i,I,o){if(isNaN(A[0]))return;let g;e.overridePan?g=e.overridePan:(e.currentPan+=(e.modulatedGenerators[r.pan]-e.currentPan)*this.synthProps.panSmoothingFactor,g=e.currentPan);let B=this.synthProps.masterParameters.masterGain*this.synthProps.midiVolume*e.gain,d=~~(g+500),h=fa[d]*B*this.synthProps.panLeft,C=ma[d]*B*this.synthProps.panRight;if(this.synth.enableEffects){let Q=e.modulatedGenerators[r.reverbEffectsSend];if(Q>0){let y=this.synthProps.masterParameters.reverbGain*this.synthProps.reverbSend*B*(Q/qo);for(let F=0;F<A.length;F++){let k=F+o;s[k]+=y*A[F],a[k]+=y*A[F]}}let m=e.modulatedGenerators[r.chorusEffectsSend];if(m>0){let y=this.synthProps.masterParameters.chorusGain*this.synthProps.chorusSend*(m/Ko),F=h*y,k=C*y;for(let D=0;D<A.length;D++){let v=D+o;i[v]+=F*A[D],I[v]+=k*A[D]}}}if(h>0)for(let Q=0;Q<A.length;Q++)t[Q+o]+=h*A[Q];if(C>0)for(let Q=0;Q<A.length;Q++)n[Q+o]+=C*A[Q]}var Vo=.1,Xt=class Et{static cachedCoefficients=[];resonanceCb=0;currentInitialFc=13500;a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;lastTargetCutoff=1/0;initialized=!1;sampleRate;maxCutoff;constructor(A){this.sampleRate=A,this.maxCutoff=A*.45}static apply(A,t,n,s){let a=A.modulatedGenerators[r.initialFilterFc],i=A.filter;i.initialized?i.currentInitialFc+=(a-i.currentInitialFc)*s:(i.initialized=!0,i.currentInitialFc=a);let I=i.currentInitialFc+n,o=A.modulatedGenerators[r.initialFilterQ];if(i.currentInitialFc>13499&&I>13499&&o===0){i.currentInitialFc=13500;return}(Math.abs(i.lastTargetCutoff-I)>1||i.resonanceCb!==o)&&(i.lastTargetCutoff=I,i.resonanceCb=o,Et.calculateCoefficients(i,I));for(let g=0;g<t.length;g++){let B=t[g],d=i.a0*B+i.a1*i.x1+i.a2*i.x2-i.a3*i.y1-i.a4*i.y2;i.x2=i.x1,i.x1=B,i.y2=i.y1,i.y1=d,t[g]=d}}static calculateCoefficients(A,t){t=~~t;let n=A.resonanceCb,s=Et.cachedCoefficients?.[n]?.[t];if(s!==void 0){A.a0=s.a0,A.a1=s.a1,A.a2=s.a2,A.a3=s.a3,A.a4=s.a4;return}let a=Nn(t);a=Math.min(a,A.maxCutoff);let i=n/10,I=Ae(-(i-3.01)),o=1/Math.sqrt(Ae(-i)),g=2*Math.PI*a/A.sampleRate,B=Math.cos(g),d=Math.sin(g)/(2*I),h=(1-B)*o,C=h/2,Q=C,m=1+d,y=-2*B,F=1-d,k={a0:C/m,a1:h/m,a2:Q/m,a3:y/m,a4:F/m};A.a0=k.a0,A.a1=k.a1,A.a2=k.a2,A.a3=k.a3,A.a4=k.a4,Et.cachedCoefficients[n]??=[],Et.cachedCoefficients[n][t]=k}},Hn=new Xt(44100);Hn.resonanceCb=0;for(let e=1500;e<13500;e++)Hn.currentInitialFc=e,Xt.calculateCoefficients(Hn,e);var Fs={enableEventSystem:!0,initialTime:0,enableEffects:!0};function Xo(e,A){let t=0;return e.drumChannel&&(t+=5),A.isInRelease&&(t-=5),t+=A.velocity/25,t-=A.volumeEnvelope.state,A.isInRelease&&(t-=5),t-=A.volumeEnvelope.currentAttenuationDb/50,t}function Zo(e){let A=[];for(let n of this.midiChannels)for(let s of n.voices)if(!s.finished){let a=Xo(n,s);A.push({channel:n,voice:s,priority:a})}A.sort((n,s)=>n.priority-s.priority);let t=A.slice(0,e);for(let{channel:n,voice:s}of t){let a=n.voices.indexOf(s);a>-1&&n.voices.splice(a,1)}}var Sn=1,Yn=new Float32Array(1e3);for(let e=0;e<Yn.length;e++)Yn[e]=Ia(0,QA.convex,e/1e3);var _e=class Pn{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;releaseStartLevel=0;currentValue=0;static startRelease(A){Pn.recalculate(A)}static recalculate(A){let t=A.modulationEnvelope;A.isInRelease&&(t.releaseStartLevel=Pn.getValue(A,A.releaseStartTime,!0)),t.sustainLevel=1-A.modulatedGenerators[r.sustainModEnv]/1e3,t.attackDuration=Qe(A.modulatedGenerators[r.attackModEnv]);let n=(60-A.midiNote)*A.modulatedGenerators[r.keyNumToModEnvDecay],s=Qe(A.modulatedGenerators[r.decayModEnv]+n);t.decayDuration=s*(1-t.sustainLevel);let a=(60-A.midiNote)*A.modulatedGenerators[r.keyNumToModEnvHold];t.holdDuration=Qe(a+A.modulatedGenerators[r.holdModEnv]);let i=Qe(Math.max(A.modulatedGenerators[r.releaseModEnv],-7200));t.releaseDuration=i*t.releaseStartLevel,t.delayEnd=A.startTime+Qe(A.modulatedGenerators[r.delayModEnv]),t.attackEnd=t.delayEnd+t.attackDuration,t.holdEnd=t.attackEnd+t.holdDuration,t.decayEnd=t.holdEnd+t.decayDuration}static getValue(A,t,n=!1){let s=A.modulationEnvelope;return A.isInRelease&&!n?s.releaseStartLevel===0?0:Math.max(0,(1-(t-A.releaseStartTime)/s.releaseDuration)*s.releaseStartLevel):(t<s.delayEnd?s.currentValue=0:t<s.attackEnd?s.currentValue=Yn[~~((1-(s.attackEnd-t)/s.attackDuration)*1e3)]:t<s.holdEnd?s.currentValue=Sn:t<s.decayEnd?s.currentValue=(1-(s.decayEnd-t)/s.decayDuration)*(s.sustainLevel-Sn)+Sn:s.currentValue=s.sustainLevel,s.currentValue)}},Sa=class{sampleData;playbackStep=0;cursor=0;rootKey=0;loopStart=0;loopEnd=0;end=0;loopingMode=0;isLooping=!1;constructor(e,A,t,n,s,a,i,I){this.sampleData=e,this.playbackStep=A,this.cursor=t,this.rootKey=n,this.loopStart=s,this.loopEnd=a,this.end=i,this.loopingMode=I,this.isLooping=this.loopingMode===1||this.loopingMode===3}},zo=-2320,Wo=-1130,Jn=class pa{sample;filter;gain=1;generators;modulators=[];resonanceOffset=0;modulatedGenerators;finished=!1;isInRelease=!1;velocity=0;midiNote=0;pressure=0;targetKey=0;modulationEnvelope=new _e;volumeEnvelope;startTime=0;releaseStartTime=1/0;currentTuningCents=0;currentTuningCalculated=1;currentPan=0;realKey;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;exclusiveClass=0;constructor(A,t,n,s,a,i,I,o,g){this.sample=t,this.generators=o,this.exclusiveClass=this.generators[r.exclusiveClass],this.modulatedGenerators=new Int16Array(o),this.modulators=g,this.filter=new Xt(A),this.velocity=s,this.midiNote=n,this.startTime=a,this.targetKey=i,this.realKey=I,this.volumeEnvelope=new be(A,o[r.sustainVolEnv])}static copyFrom(A,t,n){let s=A.sample,a=new Sa(s.sampleData,s.playbackStep,s.cursor,s.rootKey,s.loopStart,s.loopEnd,s.end,s.loopingMode);return new pa(A.volumeEnvelope.sampleRate,a,A.midiNote,A.velocity,t,A.targetKey,n,new Int16Array(A.generators),A.modulators.map(EA.copyFrom.bind(EA)))}exclusiveRelease(A){this.release(A,Wa),this.modulatedGenerators[r.releaseVolEnv]=zo,this.modulatedGenerators[r.releaseModEnv]=Wo,be.recalculate(this),_e.recalculate(this)}release(A,t=za){this.releaseStartTime=A,this.releaseStartTime-this.startTime<t&&(this.releaseStartTime=this.startTime+t)}};function _o(e,A,t,n){let s=e.getSynthesisData(A,t).reduce((a,i)=>{if(i.sample.getAudioData()===void 0)return sA(`Discarding invalid sample: ${i.sample.name}`),a;let I=new Int16Array(Mn);for(let m=0;m<60;m++)I[m]=xo(m,i.presetGenerators,i.instrumentGenerators);I[r.initialAttenuation]=Math.floor(I[r.initialAttenuation]*.4);let o=i.sample.originalKey;I[r.overridingRootKey]>-1&&(o=I[r.overridingRootKey]);let g=A;I[r.keyNum]>-1&&(g=I[r.keyNum]);let B=i.sample.loopStart,d=i.sample.loopEnd,h=I[r.sampleModes],C=i.sample.getAudioData(),Q=new Sa(C,i.sample.sampleRate/this.sampleRate*Math.pow(2,i.sample.pitchCorrection/1200),0,o,B,d,Math.floor(C.length)-1,h);return I[r.velocity]>-1&&(t=I[r.velocity]),a.push(new Jn(this.sampleRate,Q,A,t,this.currentSynthTime,g,n,I,i.modulators.map(EA.copyFrom.bind(EA)))),a},[]);return this.setCachedVoice(e,A,t,s),s.map(a=>Jn.copyFrom(a,this.currentSynthTime,n))}function jo(e,A,t,n){let s=this.midiChannels[e],a=this.keyModifierManager.hasOverridePatch(e,A),i=s.preset;if(!i)return sA(`No preset for channel ${e}!`),[];let I={...i};a&&(I=this.keyModifierManager.getPatch(e,A));let o=this.getCachedVoice(I,A,t);return o!==void 0?o.map(g=>Jn.copyFrom(g,this.currentSynthTime,n)):(a&&(i=this.soundBankManager.getPreset(I,this.privateProps.masterParameters.midiSystem)),this.getVoicesForPreset(i,A,t,n))}function Gs(e,A,t){let n=e,s=A<<7|t;return e===127&&A===127&&t===127?{midiNote:-1,centTuning:null}:{midiNote:n,centTuning:s*.0061}}function $o(e,A=0){let t=e[0];if(this.privateProps.masterParameters.deviceID!==Be&&e[1]!==127&&this.privateProps.masterParameters.deviceID!==e[1])return;function n(a,i,I,o){p(`%cChannel %c${a}%c ${I}. %c${i} ${o}%c, with %c${MA(e)}`,c.info,c.recognized,c.info,c.value,c.info,c.value)}function s(){p(`%cUnrecognized Roland %cGS %cSysEx: %c${MA(e)}`,c.warn,c.recognized,c.warn,c.unrecognized)}switch(t){default:p(`%cUnrecognized SysEx: %c${MA(e)}`,c.warn,c.unrecognized);break;case 126:case 127:switch(e[2]){case 4:{let a;switch(e[3]){case 1:{let i=e[5]<<7|e[4];this.setMIDIVolume(i/16384),p(`%cMaster Volume. Volume: %c${i}`,c.info,c.value);break}case 2:{let I=((e[5]<<7|e[4])-8192)/8192;this.setMasterParameter("masterPan",I),p(`%cMaster Pan. Pan: %c${I}`,c.info,c.value);break}case 3:{let i=(e[5]<<7|e[6])-8192;a=Math.floor(i/81.92),this.setMasterTuning(a),p(`%cMaster Fine Tuning. Cents: %c${a}`,c.info,c.value);break}case 4:{a=(e[5]-64)*100,this.setMasterTuning(a),p(`%cMaster Coarse Tuning. Cents: %c${a}`,c.info,c.value);break}default:p(`%cUnrecognized MIDI Device Control Real-time message: %c${MA(e)}`,c.warn,c.unrecognized)}break}case 9:e[3]===1?(p("%cGM1 system on",c.info),this.setMasterParameter("midiSystem","gm")):e[3]===3?(p("%cGM2 system on",c.info),this.setMasterParameter("midiSystem","gm2")):(p("%cGM system off, defaulting to GS",c.info),this.setMasterParameter("midiSystem","gs"));break;case 8:{let a=4;switch(e[3]){case 1:{let i=e[a++],I=ee(e,16,a);if(a+=16,e.length<384){sA(`The Bulk Tuning Dump is too short! (${e.length} bytes, at least 384 are expected)`);return}for(let o=0;o<128;o++)this.privateProps.tunings[i][o]=Gs(e[a++],e[a++],e[a++]);p(`%cBulk Tuning Dump %c${I}%c Program: %c${i}`,c.info,c.value,c.info,c.recognized);break}case 2:case 7:{e[3]===7&&a++;let i=e[a++],I=e[a++];for(let o=0;o<I;o++)this.privateProps.tunings[i][e[a++]]=Gs(e[a++],e[a++],e[a++]);p(`%cSingle Note Tuning. Program: %c${i}%c Keys affected: %c${I}`,c.info,c.recognized,c.info,c.recognized);break}case 9:case 8:{let i=new Int8Array(12);if(e[3]===8)for(let I=0;I<12;I++)i[I]=e[7+I]-64;else for(let I=0;I<24;I+=2){let o=(e[7+I]<<7|e[8+I])-8192;i[I/2]=Math.floor(o/81.92)}(e[4]&1)===1&&this.midiChannels[14+A].setOctaveTuning(i),(e[4]>>1&1)===1&&this.midiChannels[15+A].setOctaveTuning(i);for(let I=0;I<7;I++)(e[5]>>I&1)===1&&this.midiChannels[7+I+A].setOctaveTuning(i);for(let I=0;I<7;I++)(e[6]>>I&1)===1&&this.midiChannels[I+A].setOctaveTuning(i);p(`%cMIDI Octave Scale ${e[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${i.join(" ")}`,c.info,c.value);break}default:p(`%cUnrecognized MIDI Tuning standard message: %c${MA(e)}`,c.warn,c.unrecognized);break}break}default:p(`%cUnrecognized MIDI Realtime/non realtime message: %c${MA(e)}`,c.warn,c.unrecognized)}break;case 65:if(e[2]===66&&e[3]===18){let a=e[7];if(e[4]===64||e[4]===0&&e[6]===127){if((e[5]&16)>0){let i=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,I=this.midiChannels[i];switch(e[6]){default:s();break;case 21:{let o=a>0&&e[5]>>4>0;I.setGSDrums(o),p(`%cChannel %c${i}%c ${o?"is now a drum channel":"now isn't a drum channel"}%c via: %c${MA(e)}`,c.info,c.value,c.recognized,c.info,c.value);return}case 22:{let o=a-64;I.setCustomController(IA.channelKeyShift,o),n(i,o,"key shift","keys");return}case 28:{let o=a;o===0?(I.randomPan=!0,p(`%cRandom pan is set to %cON%c for %c${i}`,c.info,c.recognized,c.info,c.value)):(I.randomPan=!1,I.controllerChange(S.pan,o));break}case 33:I.controllerChange(S.chorusDepth,a);break;case 34:I.controllerChange(S.reverbDepth,a);break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:{let o=e.length-9,g=new Int8Array(12);for(let d=0;d<o;d++)g[d]=e[d+7]-64;I.setOctaveTuning(g);let B=a-64;n(i,g.join(" "),"octave scale tuning","cents"),I.setTuning(B);break}}return}else if((e[5]&32)>0){let i=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,I=this.midiChannels[i],o=a-64,g=o/64,B=a/128,d=(h,C,Q=!1)=>{switch(e[6]&15){case 0:h===mA+j.pitchWheel?(I.controllerChange(S.registeredParameterMSB,0),I.controllerChange(S.registeredParameterLSB,0),I.controllerChange(S.dataEntryMSB,Math.floor(o))):(I.sysExModulators.setModulator(h,r.fineTune,o*100,Q),n(i,o,`${C} pitch control`,"semitones"));break;case 1:I.sysExModulators.setModulator(h,r.initialFilterFc,g*9600,Q),n(i,g*9600,`${C} pitch control`,"cents");break;case 2:I.sysExModulators.setModulator(h,r.initialAttenuation,g*960,Q),n(i,g*960,`${C} amplitude`,"cB");break;case 4:I.sysExModulators.setModulator(h,r.vibLfoToPitch,B*600,Q),n(i,B*600,`${C} LFO1 pitch depth`,"cents");break;case 5:I.sysExModulators.setModulator(h,r.vibLfoToFilterFc,B*2400,Q),n(i,B*2400,`${C} LFO1 filter depth`,"cents");break;case 6:I.sysExModulators.setModulator(h,r.vibLfoToVolume,g*960,Q),n(i,g*960,`${C} LFO1 amplitude depth`,"cB");break;case 8:I.sysExModulators.setModulator(h,r.modLfoToPitch,B*600,Q),n(i,B*600,`${C} LFO2 pitch depth`,"cents");break;case 9:I.sysExModulators.setModulator(h,r.modLfoToFilterFc,B*2400,Q),n(i,B*2400,`${C} LFO2 filter depth`,"cents");break;case 10:I.sysExModulators.setModulator(h,r.modLfoToVolume,g*960,Q),n(i,g*960,`${C} LFO2 amplitude depth`,"cB");break}};switch(e[6]&240){default:s();break;case 0:d(S.modulationWheel,"mod wheel");break;case 16:d(mA+j.pitchWheel,"pitch wheel",!0);break;case 32:d(mA+j.channelPressure,"channel pressure");break;case 48:d(mA+j.polyPressure,"poly pressure");break}return}else if(e[5]===0){switch(e[6]){default:s();break;case 127:a===0?(p("%cGS Reset received!",c.info),this.resetAllControllers(!1),this.setMasterParameter("midiSystem","gs")):a===127&&(p("%cGS system off, switching to GM2",c.info),this.resetAllControllers(!1),this.setMasterParameter("midiSystem","gm2"));break;case 6:p(`%cRoland GS Master Pan set to: %c${a}%c with: %c${MA(e)}`,c.info,c.value,c.info,c.value),this.setMasterParameter("masterPan",(a-64)/64);break;case 4:p(`%cRoland GS Master Volume set to: %c${a}%c with: %c${MA(e)}`,c.info,c.value,c.info,c.value),this.setMIDIVolume(a/127);break;case 5:{let i=a-64;p(`%cRoland GS Master Key-Shift set to: %c${i}%c with: %c${MA(e)}`,c.info,c.value,c.info,c.value),this.setMasterTuning(i*100);break}}return}else if(e[5]===1)switch(e[6]){default:s();break;case 0:{let i=ee(e,16,7);p(`%cGS Patch name: %c${i}`,c.info,c.value);break}case 51:p(`%cGS Reverb level: %c${a}`,c.info,c.value),this.privateProps.reverbSend=a/64;break;case 48:case 49:case 50:case 52:case 53:case 55:p(`%cUnsupported GS Reverb Parameter: %c${e[6].toString(16)}`,c.warn,c.unrecognized);break;case 58:p(`%cGS Chorus level: %c${a}`,c.info,c.value),this.privateProps.chorusSend=a/64;break;case 56:case 57:case 59:case 60:case 61:case 62:case 63:case 64:p(`%cUnsupported GS Chorus Parameter: %c${e[6].toString(16)}`,c.warn,c.unrecognized);break}}else s();return}else if(e[2]===69&&e[3]===18){if(e[4]===16&&e[6]===0)if(e[5]===0){let a=new Uint8Array(e.slice(7,e.length-2));this.privateProps.callEvent("synthDisplay",{displayData:a,displayType:hn.soundCanvasText})}else if(e[5]===1){let a=new Uint8Array(e.slice(7,e.length-3));this.privateProps.callEvent("synthDisplay",{displayData:a,displayType:hn.soundCanvasDotMatrix}),p(`%cRoland SC Display Dot Matrix via: %c${MA(e)}`,c.info,c.value)}else s()}else if(e[2]===22&&e[3]===18&&e[4]===16){this.setMIDIVolume(e[7]/100),p(`%cRoland Master Volume control set to: %c${e[7]}%c via: %c${MA(e)}`,c.info,c.value,c.info,c.value);return}else{p(`%cUnrecognized Roland SysEx: %c${MA(e)}`,c.warn,c.unrecognized);return}break;case 67:if(e[2]===76)if(e[3]===0&&e[4]===0)switch(e[5]){case 4:{let a=e[6];this.setMIDIVolume(a/127),p(`%cXG master volume. Volume: %c${a}`,c.info,c.recognized);break}case 6:{let a=e[6]-64;this.setMasterParameter("transposition",a),p(`%cXG master transpose. Volume: %c${a}`,c.info,c.recognized);break}case 126:p("%cXG system on",c.info),this.resetAllControllers(!1),this.setMasterParameter("midiSystem","xg");break}else if(e[3]===8){if(!fA.isSystemXG(this.privateProps.masterParameters.midiSystem))return;let a=e[4]+A;if(a>=this.midiChannels.length)return;let i=this.midiChannels[a],I=e[6];switch(e[5]){case 1:i.controllerChange(S.bankSelect,I);break;case 2:i.controllerChange(S.bankSelectLSB,I);break;case 3:i.programChange(I);break;case 8:{if(i.drumChannel)return;i.channelTransposeKeyShift=I-64;break}case 11:i.controllerChange(S.mainVolume,I);break;case 14:{let o=I;o===0?(i.randomPan=!0,p(`%cRandom pan is set to %cON%c for %c${a}`,c.info,c.recognized,c.info,c.value)):i.controllerChange(S.pan,o);break}case 19:i.controllerChange(S.reverbDepth,I);break;case 18:i.controllerChange(S.chorusDepth,I);break;default:p(`%cUnrecognized Yamaha XG Part Setup: %c${e[5].toString(16).toUpperCase()}`,c.warn,c.unrecognized)}}else if(e[3]===6&&e[4]===0){let a=new Uint8Array(e.slice(5,e.length-1));this.privateProps.callEvent("synthDisplay",{displayData:a,displayType:hn.yamahaXGText})}else fA.isSystemXG(this.privateProps.masterParameters.midiSystem)&&p(`%cUnrecognized Yamaha XG SysEx: %c${MA(e)}`,c.warn,c.unrecognized);else fA.isSystemXG(this.privateProps.masterParameters.midiSystem)&&p(`%cUnrecognized Yamaha SysEx: %c${MA(e)}`,c.warn,c.unrecognized);break}}var Rs=class qn{patch;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;lockVibrato;channelVibrato;channelTransposeKeyShift;channelOctaveTuning;isMuted;drumChannel;channelNumber;constructor(A,t,n,s,a,i,I,o,g,B,d,h,C){this.patch=A,this.lockPreset=t,this.lockedSystem=n,this.midiControllers=s,this.lockedControllers=a,this.customControllers=i,this.lockVibrato=I,this.channelVibrato=o,this.channelTransposeKeyShift=g,this.channelOctaveTuning=B,this.isMuted=d,this.drumChannel=h,this.channelNumber=C}static copyFrom(A){return new qn({...A.patch},A.lockPreset,A.lockedSystem,A.midiControllers.slice(),[...A.lockedControllers],A.customControllers.slice(),A.lockVibrato,{...A.channelVibrato},A.channelTransposeKeyShift,A.channelOctaveTuning,A.isMuted,A.drumChannel,A.channelNumber)}static create(A,t){let n=A.midiChannels[t];return new qn({...n.patch,name:n?.preset?.name??"undefined"},n.lockPreset,n.lockedSystem,n.midiControllers.slice(),[...n.lockedControllers],n.customControllers.slice(),n.lockGSNRPNParams,{...n.channelVibrato},n.channelTransposeKeyShift,n.channelOctaveTuning.slice(),n.isMuted,n.drumChannel,t)}apply(A){let t=A.midiChannels[this.channelNumber];t.muteChannel(this.isMuted),t.setDrums(this.drumChannel),t.midiControllers.set(this.midiControllers),t.lockedControllers=this.lockedControllers,t.customControllers.set(this.customControllers),t.updateChannelTuning(),t.channelVibrato=this.channelVibrato,t.lockGSNRPNParams=this.lockVibrato,t.channelTransposeKeyShift=this.channelTransposeKeyShift,t.channelOctaveTuning=this.channelOctaveTuning,t.setPresetLock(!1),t.setPatch(this.patch),t.setPresetLock(this.lockPreset),t.lockedSystem=this.lockedSystem}};var Ai=class{keyMappings=[];addMapping(e,A,t){this.keyMappings[e]??=[],this.keyMappings[e][A]=t}deleteMapping(e,A){this.keyMappings[e]?.[A]!==void 0&&(this.keyMappings[e][A]=void 0)}clearMappings(){this.keyMappings=[]}setMappings(e){this.keyMappings=e}getMappings(){return this.keyMappings}getVelocity(e,A){return this.keyMappings[e]?.[A]?.velocity??-1}getGain(e,A){return this.keyMappings[e]?.[A]?.gain??1}hasOverridePatch(e,A){let t=this.keyMappings[e]?.[A]?.patch?.bankMSB;return t!==void 0&&t>=0}getPatch(e,A){let t=this.keyMappings[e]?.[A];if(t)return t.patch;throw new Error("No modifier.")}},is=class Kn{channelSnapshots;keyMappings;masterParameters;constructor(A,t,n){this.channelSnapshots=A,this.masterParameters=t,this.keyMappings=n}static create(A){let t=A.midiChannels.map((n,s)=>Rs.create(A,s));return new Kn(t,A.getAllMasterParameters(),A.keyModifierManager.getMappings())}static copyFrom(A){return new Kn(A.channelSnapshots.map(t=>Rs.copyFrom(t)),{...A.masterParameters},[...A.keyMappings])}apply(A){for(Object.entries(this.masterParameters).forEach(([n,s])=>{A.setMasterParameter(n,s)}),A.keyModifierManager.setMappings(this.keyMappings);A.midiChannels.length<this.channelSnapshots.length;)A.createMIDIChannel();this.channelSnapshots.forEach(n=>{n.apply(A)})}},ei={masterGain:_a,masterPan:0,voiceCap:Xa,interpolationType:vt.hermite,midiSystem:Os,monophonicRetriggerMode:!1,reverbGain:1,chorusGain:1,blackMIDIMode:!1,transposition:0,deviceID:Be},ti=class{tunings=[];masterParameters=ei;midiVolume=1;reverbSend=1;chorusSend=1;panLeft=.5;panRight=.5;defaultPreset;drumPreset;volumeEnvelopeSmoothingFactor;panSmoothingFactor;filterSmoothingFactor;eventCallbackHandler;getVoices;voiceKilling;cachedVoices=[];constructor(e,A,t,n,s,a){this.eventCallbackHandler=e,this.getVoices=A,this.voiceKilling=t,this.volumeEnvelopeSmoothingFactor=n,this.panSmoothingFactor=s,this.filterSmoothingFactor=a;for(let i=0;i<128;i++)this.tunings.push([])}callEvent(e,A){this.eventCallbackHandler(e,A)}};function pn(e,A,t){if(t<e)return 0;let n=(t-e)/(1/A)+.25;return Math.abs(n-~~(n+.5))*4-1}var ni=class On{static getSample(A,t,n){let s=A.currentTuningCalculated*A.sample.playbackStep;if(s===1){On.getSampleNearest(A,t,s);return}switch(n){case vt.hermite:this.getSampleHermite(A,t,s);return;case vt.linear:default:this.getSampleLinear(A,t,s);return;case vt.nearestNeighbor:On.getSampleNearest(A,t,s);return}}static getSampleLinear(A,t,n){let s=A.sample,a=s.cursor,i=s.sampleData;if(s.isLooping){let I=s.loopEnd-s.loopStart;for(let o=0;o<t.length;o++){for(;a>=s.loopEnd;)a-=I;let g=~~a,B=g+1;for(;B>=s.loopEnd;)B-=I;let d=a-g,h=i[B],C=i[g];t[o]=C+(h-C)*d,a+=n}}else for(let I=0;I<t.length;I++){let o=~~a,g=o+1;if(g>=s.end){A.finished=!0;return}let B=a-o,d=i[g],h=i[o];t[I]=h+(d-h)*B,a+=n}A.sample.cursor=a}static getSampleNearest(A,t,n){let s=A.sample,a=s.cursor,i=s.sampleData;if(s.isLooping){let I=s.loopEnd-s.loopStart;for(let o=0;o<t.length;o++){for(;a>=s.loopEnd;)a-=I;let g=~~a+1;for(;g>=s.loopEnd;)g-=I;t[o]=i[g],a+=n}}else for(let I=0;I<t.length;I++){let o=~~a+1;if(o>=s.end){A.finished=!0;return}t[I]=i[o],a+=n}s.cursor=a}static getSampleHermite(A,t,n){let s=A.sample,a=s.cursor,i=s.sampleData;if(s.isLooping){let I=s.loopEnd-s.loopStart;for(let o=0;o<t.length;o++){for(;a>=s.loopEnd;)a-=I;let g=~~a,B=g+1,d=g+2,h=g+3,C=a-g;B>=s.loopEnd&&(B-=I),d>=s.loopEnd&&(d-=I),h>=s.loopEnd&&(h-=I);let Q=i[g],m=i[B],y=i[d],F=i[h],k=(y-Q)*.5,D=m-y,v=k+D,L=v+D+(F-m)*.5,E=v+L;t[o]=((L*C-E)*C+k)*C+m,a+=n}}else for(let I=0;I<t.length;I++){let o=~~a,g=o+1,B=o+2,d=o+3,h=a-o;if(g>=s.end||B>=s.end||d>=s.end){A.finished=!0;return}let C=i[o],Q=i[g],m=i[B],y=i[d],F=(m-C)*.5,k=Q-m,D=F+k,v=D+k+(y-Q)*.5,L=D+v;t[I]=((v*h-L)*h+F)*h+Q,a+=n}A.sample.cursor=a}};function si(e,A,t,n,s,a,i,I,o,g){if(e.isInRelease||A>=e.releaseStartTime&&(e.isInRelease=!0,be.startRelease(e),_e.startRelease(e),e.sample.loopingMode===3&&(e.sample.isLooping=!1)),e.modulatedGenerators[r.initialAttenuation]>2500)return e.isInRelease&&(e.finished=!0),e.finished;let B=e.targetKey,d=e.modulatedGenerators[r.fineTune]+this.channelOctaveTuning[e.midiNote]+this.channelTuningCents,h=e.modulatedGenerators[r.coarseTune],C=this.synthProps.tunings[this.preset?.program??0]?.[e.realKey];if(C?.centTuning&&(B=C.midiNote,d+=C.centTuning),e.portamentoFromKey>-1){let $=Math.min((A-e.startTime)/e.portamentoDuration,1),V=B-e.portamentoFromKey;h-=V*(1-$)}d+=(B-e.sample.rootKey)*e.modulatedGenerators[r.scaleTuning];let Q=0,m=0,y=e.modulatedGenerators[r.vibLfoToPitch],F=e.modulatedGenerators[r.vibLfoToVolume],k=e.modulatedGenerators[r.vibLfoToFilterFc];if(y!==0||F!==0||k!==0){let $=e.startTime+Qe(e.modulatedGenerators[r.delayVibLFO]),V=Nn(e.modulatedGenerators[r.freqVibLFO]),q=pn($,V,A);d+=q*(y*this.customControllers[IA.modulationMultiplier]),m+=-q*F,Q+=q*k}let D=e.modulatedGenerators[r.modLfoToPitch],v=e.modulatedGenerators[r.modLfoToVolume],L=e.modulatedGenerators[r.modLfoToFilterFc];if(D!==0||L!==0||v!==0){let $=e.startTime+Qe(e.modulatedGenerators[r.delayModLFO]),V=Nn(e.modulatedGenerators[r.freqModLFO]),q=pn($,V,A);d+=q*(D*this.customControllers[IA.modulationMultiplier]),m+=-q*v,Q+=q*L}if(this.channelVibrato.depth>0){let $=pn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,A);$&&(d+=$*this.channelVibrato.depth)}let E=e.modulatedGenerators[r.modEnvToPitch],X=e.modulatedGenerators[r.modEnvToFilterFc];if(X!==0||E!==0){let $=_e.getValue(e,A);Q+=$*X,d+=$*E}m-=e.resonanceOffset;let O=~~(d+h*100);O!==e.currentTuningCents&&(e.currentTuningCents=O,e.currentTuningCalculated=Math.pow(2,O/1200));let nA=new Float32Array(g);return e.sample.loopingMode===2&&!e.isInRelease?(be.apply(e,nA,m,this.synthProps.volumeEnvelopeSmoothingFactor),e.finished):(ni.getSample(e,nA,this.synthProps.masterParameters.interpolationType),Xt.apply(e,nA,Q,this.synthProps.filterSmoothingFactor),be.apply(e,nA,m,this.synthProps.volumeEnvelopeSmoothingFactor),this.panAndMixVoice(e,nA,t,n,s,a,i,I,o),e.finished)}var ue={pitchWheelRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},Ze={partParameter:1,awe32:127,SF2:120},Oe={vibratoRate:8,vibratoDepth:9,vibratoDelay:10,TVFFilterCutoff:32,TVFFilterResonance:33,EGAttackTime:99,EGReleaseTime:102};function ai(e){this.midiControllers[S.dataEntryMSB]=e<<7;let A=()=>{this.channelVibrato.delay===0&&this.channelVibrato.rate===0&&this.channelVibrato.depth===0&&(this.channelVibrato.depth=50,this.channelVibrato.rate=8,this.channelVibrato.delay=.6)},t=(n,s,a)=>{a.length>0&&(a=" "+a),p(`%c${n} for %c${this.channelNumber}%c is now set to %c${s}%c${a}.`,c.info,c.recognized,c.info,c.value,c.info)};switch(this.dataEntryState){default:case YA.Idle:break;case YA.NRPFine:{if(this.lockGSNRPNParams)return;let n=this.midiControllers[S.nonRegisteredParameterMSB]>>7,s=this.midiControllers[S.nonRegisteredParameterLSB]>>7,a=this.midiControllers[S.dataEntryLSB]>>7;switch(n){default:if(e===64)return;p(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${s.toString(16).toUpperCase()} 0x${s.toString(16).toUpperCase()})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case Ze.partParameter:switch(s){default:if(e===64)return;p(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)} 0x${s.toString(16)})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case Oe.vibratoRate:if(e===64)return;A(),this.channelVibrato.rate=e/64*8,t("Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break;case Oe.vibratoDepth:if(e===64)return;A(),this.channelVibrato.depth=e/2,t("Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break;case Oe.vibratoDelay:if(e===64)return;A(),this.channelVibrato.delay=e/64/3,t("Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break;case Oe.TVFFilterCutoff:this.controllerChange(S.brightness,e),t("Filter cutoff",e.toString(),"");break;case Oe.EGAttackTime:this.controllerChange(S.attackTime,e),t("EG attack time",e.toString(),"");break;case Oe.EGReleaseTime:this.controllerChange(S.releaseTime,e),t("EG release time",e.toString(),"");break}break;case Ze.awe32:break;case Ze.SF2:{if(s>100)break;let i=this.customControllers[IA.sf2NPRNGeneratorLSB],I=(e<<7|a)-8192;this.setGeneratorOffset(i,I);break}}break}case YA.RPCoarse:case YA.RPFine:{let n=this.midiControllers[S.registeredParameterMSB]|this.midiControllers[S.registeredParameterLSB]>>7;switch(n){default:p(`%cUnrecognized RPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case ue.pitchWheelRange:this.midiControllers[mA+j.pitchWheelRange]=e<<7,t("Pitch wheel range",e.toString(),"semitones");break;case ue.coarseTuning:{let s=e-64;this.setCustomController(IA.channelTuningSemitones,s),t("Coarse tuning",s.toString(),"semitones");break}case ue.fineTuning:this.setTuning(e-64,!1);break;case ue.modulationDepth:this.setModulationDepth(e*100);break;case ue.resetParameters:this.resetParameters();break}}}}var oi=[r.delayModLFO,r.freqModLFO,r.delayVibLFO,r.freqVibLFO,r.delayModEnv,r.attackModEnv,r.holdModEnv,r.decayModEnv,r.sustainModEnv,r.releaseModEnv,r.delayVolEnv,r.attackVolEnv,r.holdVolEnv,r.decayVolEnv,r.sustainVolEnv,r.releaseVolEnv,r.fineTune,r.modLfoToPitch,r.vibLfoToPitch,r.modEnvToPitch,r.modLfoToVolume,r.initialFilterFc,r.initialFilterQ,r.modLfoToFilterFc,r.modEnvToFilterFc,r.chorusEffectsSend,r.reverbEffectsSend];function ii(e,A,t){let n=(h,C,Q)=>Math.max(C,Math.min(Q,h)),s=h=>Math.max(-32768,1200*Math.log2(h/1e3)),a=h=>6900+1200*Math.log2(h/440),i=t<<7|A;i-=8192;let I=oi[e];I||sA(`Invalid AWE32 LSB: %c${e}`,c.unrecognized);let o,g,B,d;switch(I){default:break;case r.delayModLFO:case r.delayVibLFO:case r.delayVolEnv:case r.delayModEnv:o=4*n(i,0,5900),this.setGeneratorOverride(I,s(o));break;case r.attackVolEnv:case r.attackModEnv:o=n(i,0,5940),this.setGeneratorOverride(I,s(o));break;case r.holdVolEnv:case r.holdModEnv:o=n(i,0,8191),this.setGeneratorOverride(I,s(o));break;case r.decayModEnv:case r.decayVolEnv:case r.releaseVolEnv:case r.releaseModEnv:o=4*n(i,0,5940),this.setGeneratorOverride(I,s(o));break;case r.freqVibLFO:case r.freqModLFO:g=.084*A,this.setGeneratorOverride(I,a(g),!0);break;case r.sustainVolEnv:case r.sustainModEnv:B=A*7.5,this.setGeneratorOverride(I,B);break;case r.fineTune:this.setGeneratorOverride(I,i,!0);break;case r.modLfoToPitch:case r.vibLfoToPitch:d=n(i,-127,127)*9.375,this.setGeneratorOverride(I,d,!0);break;case r.modEnvToPitch:d=n(i,-127,127)*9.375,this.setGeneratorOverride(I,d);break;case r.modLfoToVolume:B=1.875*A,this.setGeneratorOverride(I,B,!0);break;case r.initialFilterFc:{let h=4335+59*A;this.setGeneratorOverride(I,h,!0);break}case r.initialFilterQ:B=215*(A/127),this.setGeneratorOverride(I,B,!0);break;case r.modLfoToFilterFc:d=n(i,-64,63)*56.25,this.setGeneratorOverride(I,d,!0);break;case r.modEnvToFilterFc:d=n(i,-64,63)*56.25,this.setGeneratorOverride(I,d);break;case r.chorusEffectsSend:case r.reverbEffectsSend:this.setGeneratorOverride(I,n(i,0,255)*(1e3/255));break}}function ri(e){switch(this.midiControllers[S.dataEntryLSB]=e<<7,this.dataEntryState){default:break;case YA.RPCoarse:case YA.RPFine:{switch(this.midiControllers[S.registeredParameterMSB]|this.midiControllers[S.registeredParameterLSB]>>7){default:break;case ue.pitchWheelRange:{if(e===0)break;this.midiControllers[mA+j.pitchWheelRange]|=e;let t=(this.midiControllers[mA+j.pitchWheelRange]>>7)+e/128;p(`%cChannel ${this.channelNumber} pitch wheel range. Semitones: %c${t}`,c.info,c.value);break}case ue.fineTuning:{let n=this.customControllers[IA.channelTuning]<<7|e;this.setTuning(n*.01220703125);break}case ue.modulationDepth:{let n=this.customControllers[IA.modulationMultiplier]*50+e/128*100;this.setModulationDepth(n);break}case 16383:this.resetParameters();break}break}case YA.NRPFine:{let A=this.midiControllers[S.nonRegisteredParameterMSB]>>7,t=this.midiControllers[S.nonRegisteredParameterLSB]>>7;if(A===Ze.SF2)return;switch(A){default:p(`%cUnrecognized NRPN LSB for %c${this.channelNumber}%c: %c(0x${t.toString(16).toUpperCase()} 0x${t.toString(16).toUpperCase()})%c data value: %c${e}`,c.warn,c.recognized,c.warn,c.unrecognized,c.warn,c.value);break;case Ze.awe32:ii.call(this,t,e,this.midiControllers[S.dataEntryMSB]>>7);break}}}}function Ii(e,A,t=!0){if(e>127)throw new Error("Invalid MIDI Controller.");if(e>=S.modulationWheelLSB&&e<=S.effectControl2LSB&&e!==S.dataEntryLSB){let n=e-32;if(this.lockedControllers[n])return;this.midiControllers[n]=this.midiControllers[n]&16256|A&127,this.voices.forEach(s=>this.computeModulators(s,1,n))}if(!this.lockedControllers[e]){switch(this.midiControllers[e]=A<<7,e){case S.allNotesOff:this.stopAllNotes();break;case S.allSoundOff:this.stopAllNotes(!0);break;case S.bankSelect:this.setBankMSB(A),this.channelNumber%16===Se&&fA.isSystemXG(this.channelSystem)&&this.setBankMSB(127);break;case S.bankSelectLSB:this.setBankLSB(A);break;case S.registeredParameterLSB:this.dataEntryState=YA.RPFine;break;case S.registeredParameterMSB:this.dataEntryState=YA.RPCoarse;break;case S.nonRegisteredParameterMSB:this.customControllers[IA.sf2NPRNGeneratorLSB]=0,this.dataEntryState=YA.NRPCoarse;break;case S.nonRegisteredParameterLSB:this.midiControllers[S.nonRegisteredParameterMSB]>>7===Ze.SF2&&(this.customControllers[IA.sf2NPRNGeneratorLSB]%100!==0&&(this.customControllers[IA.sf2NPRNGeneratorLSB]=0),A===100?this.customControllers[IA.sf2NPRNGeneratorLSB]+=100:A===101?this.customControllers[IA.sf2NPRNGeneratorLSB]+=1e3:A===102?this.customControllers[IA.sf2NPRNGeneratorLSB]+=1e4:A<100&&(this.customControllers[IA.sf2NPRNGeneratorLSB]+=A)),this.dataEntryState=YA.NRPFine;break;case S.dataEntryMSB:this.dataEntryCoarse(A);break;case S.dataEntryLSB:this.dataEntryFine(A);break;case S.resetAllControllers:this.resetControllersRP15Compliant();break;case S.sustainPedal:A<64&&(this.sustainedVoices.forEach(n=>{n.release(this.synth.currentSynthTime)}),this.sustainedVoices=[]);break;default:this.voices.forEach(n=>this.computeModulators(n,1,e));break}t&&this.synthProps.callEvent("controllerChange",{channel:this.channelNumber,controllerNumber:e,controllerValue:A})}}var It={0:0,1:.006,2:.023,4:.05,8:.11,16:.25,32:.5,64:2.06,80:4.2,96:8.4,112:19.5,116:26.7,120:40,124:80,127:480};function gi(e){if(It[e]!==void 0)return It[e];let A=null,t=null;for(let n of Object.keys(It)){let s=parseInt(n);s<e&&(A===null||s>A)&&(A=s),s>e&&(t===null||s<t)&&(t=s)}if(A!==null&&t!==null){let n=It[A],s=It[t];return n+(e-A)*(s-n)/(t-A)}return 0}function ci(e,A){return gi(e)*(A/30)}function Ei(e,A){if(A<1){this.noteOff(e);return}if(A=Math.min(127,A),this.synthProps.masterParameters.blackMIDIMode&&this.synth.totalVoicesAmount>200&&A<40||this.synthProps.masterParameters.blackMIDIMode&&A<10||this._isMuted)return;if(!this.preset){sA(`No preset for channel ${this.channelNumber}!`);return}let t=e+this.channelTransposeKeyShift+this.customControllers[IA.channelKeyShift],n=t;if(t>127||t<0)return;let s=this.preset?.program,a=this.synthProps.tunings[s]?.[t]?.midiNote;a>=0&&(n=a),this.synthProps.masterParameters.monophonicRetriggerMode&&this.killNote(e,-7200);let i=this.synth.keyModifierManager.getVelocity(this.channelNumber,t);i>-1&&(A=i);let I=this.synth.keyModifierManager.getGain(this.channelNumber,t),o=-1,g=0,B=this.midiControllers[S.portamentoTime]>>7,d=this.midiControllers[S.portamentoControl],h=d>>7;if(!this.drumChannel&&h!==n&&this.midiControllers[S.portamentoOnOff]>=8192&&B>0){if(d!==1){let y=Math.abs(n-h);g=ci(B,y),o=h}this.controllerChange(S.portamentoControl,n)}let C=this.synthProps.getVoices(this.channelNumber,n,A,t),Q=0;this.randomPan&&(Q=Math.round(Math.random()*1e3-500));let m=this.voices;C.forEach(y=>{y.portamentoFromKey=o,y.portamentoDuration=g,y.overridePan=Q,y.gain=I,this.sysExModulators.modulatorList.forEach(O=>{let nA=O.mod,$=y.modulators.findIndex(V=>EA.isIdentical(V,nA));$!==-1?y.modulators[$]=EA.copyFrom(nA):y.modulators.push(EA.copyFrom(nA))}),this.generatorOverridesEnabled&&this.generatorOverrides.forEach((O,nA)=>{O!==Vs&&(y.generators[nA]=O)});let F=y.exclusiveClass;F!==0&&m.forEach(O=>{O.exclusiveClass===F&&O.exclusiveRelease(this.synth.currentSynthTime)}),this.computeModulators(y);let k=y.modulatedGenerators[r.startAddrsOffset]+y.modulatedGenerators[r.startAddrsCoarseOffset]*32768,D=y.modulatedGenerators[r.endAddrOffset]+y.modulatedGenerators[r.endAddrsCoarseOffset]*32768,v=y.modulatedGenerators[r.startloopAddrsOffset]+y.modulatedGenerators[r.startloopAddrsCoarseOffset]*32768,L=y.modulatedGenerators[r.endloopAddrsOffset]+y.modulatedGenerators[r.endloopAddrsCoarseOffset]*32768,E=y.sample,X=O=>Math.max(0,Math.min(E.sampleData.length-1,O));if(E.cursor=X(E.cursor+k),E.end=X(E.end+D),E.loopStart=X(E.loopStart+v),E.loopEnd=X(E.loopEnd+L),E.loopEnd<E.loopStart){let O=E.loopStart;E.loopStart=E.loopEnd,E.loopEnd=O}E.loopEnd-E.loopStart<1&&(E.loopingMode===1||E.loopingMode===3)&&(E.loopingMode=0,E.isLooping=!1),y.volumeEnvelope.attenuation=y.volumeEnvelope.attenuationTargetGain,y.currentPan=Math.max(-500,Math.min(500,y.modulatedGenerators[r.pan]))}),this.synth.totalVoicesAmount+=C.length,this.synth.totalVoicesAmount>this.synthProps.masterParameters.voiceCap&&this.synthProps.voiceKilling(C.length),m.push(...C),this.sendChannelProperty(),this.synthProps.callEvent("noteOn",{midiNote:e,channel:this.channelNumber,velocity:A})}function Bi(e){if(e>127||e<0){sA("Received a noteOn for note",e,"Ignoring.");return}let A=e+this.channelTransposeKeyShift+this.customControllers[IA.channelKeyShift];if(this.synthProps.masterParameters.blackMIDIMode&&!this.drumChannel){this.killNote(A,-6950),this.synthProps.callEvent("noteOff",{midiNote:e,channel:this.channelNumber});return}this.voices.forEach(n=>{n.realKey!==A||n.isInRelease||(this.holdPedal?this.sustainedVoices.push(n):n.release(this.synth.currentSynthTime))}),this.synthProps.callEvent("noteOff",{midiNote:e,channel:this.channelNumber})}function Ci(e){if(this.lockPreset)return;this.patch.program=e;let A=this.synth.soundBankManager.getPreset(this.patch,this.channelSystem);A||(sA("No presets! Using empty fallback."),A=new pe(this.synth.soundBankManager.soundBankList[0].soundBank),A.name="SPESSA EMPTY FALLBACK PRESET"),this.preset=A,A.isAnyDrums!==this.drumChannel&&this.setDrumFlag(A.isAnyDrums),this.synthProps.callEvent("programChange",{channel:this.channelNumber,bankLSB:this.preset.bankLSB,bankMSB:this.preset.bankMSB,program:this.preset.program,isGMGSDrum:this.preset.isGMGSDrum}),this.sendChannelProperty()}var hi=class{modulatorList=[];resetModulators(){this.modulatorList=[]}setModulator(e,A,t,n=!1,s=!1){let a=this.getModulatorID(e,A,n,s);t===0&&this.deleteModulator(a);let i=this.modulatorList.find(I=>I.id===a);if(i)i.mod.transformAmount=t;else{let I,o;e>=mA?(I=e-mA,o=!1):(I=e,o=!0);let g=new EA(new XA(I,QA.linear,o,n),new XA,A,t,0);this.modulatorList.push({mod:g,id:a})}}getModulatorID(e,A,t,n){return`${e}-${A}-${t}-${n}`}deleteModulator(e){this.modulatorList=this.modulatorList.filter(A=>A.id!==e)}},li=1e3/200;function Ms(e,A,t){if(A.transformAmount===0)return A.currentValue=0,0;let n=A.primarySource.getValue(e,t),s=A.secondarySource.getValue(e,t),a=A.transformAmount;A.isEffectModulator&&a<=1e3&&(a*=li,a=Math.min(a,1e3));let i=n*s*a;return A.transformType===2&&(i=Math.abs(i)),A.isDefaultResonantModulator&&(t.resonanceOffset=Math.max(0,i/2)),A.currentValue=i,i}function di(e,A=-1,t=0){let n=e.modulators,s=e.generators;if(this.generatorOffsetsEnabled){s=new Int16Array(s);for(let g=0;g<s.length;g++)s[g]+=this.generatorOffsets[g]}let a=e.modulatedGenerators;if(A===-1){a.set(s),n.forEach(g=>{a[g.destination]+=Ms(this.midiControllers,g,e)});for(let g=0;g<a.length;g++){let B=x[g];B&&(a[g]=Math.min(B.max,Math.max(B.min,a[g])))}be.recalculate(e),_e.recalculate(e);return}let i=new Set([r.initialAttenuation,r.delayVolEnv,r.attackVolEnv,r.holdVolEnv,r.decayVolEnv,r.sustainVolEnv,r.releaseVolEnv,r.keyNumToVolEnvHold,r.keyNumToVolEnvDecay]),I=new Set,o=!!A;n.forEach(g=>{if(g.primarySource.isCC===o&&g.primarySource.index===t||g.secondarySource.isCC===o&&g.secondarySource.index===t){let B=g.destination;if(!I.has(B)){a[B]=s[B],Ms(this.midiControllers,g,e),n.forEach(h=>{h.destination===B&&(a[B]+=h.currentValue)});let d=x[B];a[B]=Math.max(d.min,Math.min(a[B],d.max)),I.add(B)}}}),[...I].some(g=>i.has(g))&&be.recalculate(e),_e.recalculate(e)}var Qi=class{midiControllers=new Int16Array(bn);lockedControllers=Array(bn).fill(!1);customControllers=new Float32Array(ea);channelTransposeKeyShift=0;channelOctaveTuning=new Int8Array(128);sysExModulators=new hi;drumChannel=!1;randomPan=!1;dataEntryState=YA.Idle;patch={bankMSB:0,bankLSB:0,program:0,isGMGSDrum:!1};preset;lockPreset=!1;lockedSystem="gs";lockGSNRPNParams=!1;channelVibrato={delay:0,depth:0,rate:0};voices=[];sustainedVoices=[];channelNumber;synth;synthProps;noteOn=Ei.bind(this);noteOff=Bi.bind(this);programChange=Ci.bind(this);controllerChange=Ii.bind(this);resetControllers=po.bind(this);resetPreset=yo.bind(this);resetControllersRP15Compliant=ko.bind(this);resetParameters=Do.bind(this);dataEntryFine=ri.bind(this);dataEntryCoarse=ai.bind(this);channelTuningCents=0;generatorOffsets=new Int16Array(Mn);generatorOffsetsEnabled=!1;generatorOverrides=new Int16Array(Mn);generatorOverridesEnabled=!1;renderVoice=si.bind(this);panAndMixVoice=Oo.bind(this);computeModulators=di.bind(this);constructor(e,A,t,n){this.synth=e,this.synthProps=A,this.preset=t,this.channelNumber=n,this.resetGeneratorOverrides(),this.resetGeneratorOffsets()}_isMuted=!1;get isMuted(){return this._isMuted}get holdPedal(){return this.midiControllers[S.sustainPedal]>=8192}get channelSystem(){return this.lockPreset?this.lockedSystem:this.synthProps.masterParameters.midiSystem}transposeChannel(e,A=!1){this.drumChannel||(e+=this.synthProps.masterParameters.transposition);let t=Math.trunc(e),n=this.channelTransposeKeyShift+this.customControllers[IA.channelTransposeFine]/100;this.drumChannel&&!A||e===n||(t!==this.channelTransposeKeyShift&&this.stopAllNotes(),this.channelTransposeKeyShift=t,this.setCustomController(IA.channelTransposeFine,(e-t)*100),this.sendChannelProperty())}setOctaveTuning(e){if(e.length!==12)throw new Error("Tuning is not the length of 12.");this.channelOctaveTuning=new Int8Array(128);for(let A=0;A<128;A++)this.channelOctaveTuning[A]=e[A%12]}setModulationDepth(e){e=Math.round(e),p(`%cChannel ${this.channelNumber} modulation depth. Cents: %c${e}`,c.info,c.value),this.setCustomController(IA.modulationMultiplier,e/50)}setTuning(e,A=!0){e=Math.round(e),this.setCustomController(IA.channelTuning,e),A&&p(`%cFine tuning for %c${this.channelNumber}%c is now set to %c${e}%c cents.`,c.info,c.recognized,c.info,c.value,c.info)}pitchWheel(e){this.lockedControllers[mA+j.pitchWheel]||(this.synthProps.callEvent("pitchWheel",{channel:this.channelNumber,pitch:e}),this.midiControllers[mA+j.pitchWheel]=e,this.voices.forEach(A=>this.computeModulators(A,0,j.pitchWheel)),this.sendChannelProperty())}channelPressure(e){this.midiControllers[mA+j.channelPressure]=e<<7,this.updateChannelTuning(),this.voices.forEach(A=>this.computeModulators(A,0,j.channelPressure)),this.synthProps.callEvent("channelPressure",{channel:this.channelNumber,pressure:e})}polyPressure(e,A){this.voices.forEach(t=>{t.midiNote===e&&(t.pressure=A,this.computeModulators(t,0,j.polyPressure))}),this.synthProps.callEvent("polyPressure",{channel:this.channelNumber,midiNote:e,pressure:A})}setCustomController(e,A){this.customControllers[e]=A,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[IA.channelTuning]+this.customControllers[IA.channelTransposeFine]+this.customControllers[IA.masterTuning]+this.customControllers[IA.channelTuningSemitones]*100}renderAudio(e,A,t,n,s,a,i,I){this.voices=this.voices.filter(o=>!this.renderVoice(o,this.synth.currentSynthTime,e,A,t,n,s,a,i,I))}setPresetLock(e){this.lockPreset!==e&&(this.lockPreset=e,e&&(this.lockedSystem=this.synthProps.masterParameters.midiSystem))}setDrums(e){if(fA.isSystemXG(this.channelSystem))if(e)this.setBankMSB(fA.getDrumBank(this.channelSystem)),this.setBankLSB(0);else{if(this.channelNumber%16===Se)throw new Error(`Cannot disable drums on channel ${this.channelNumber} for XG.`);this.setBankMSB(0),this.setBankLSB(0)}else this.setGSDrums(e);this.setDrumFlag(e),this.programChange(this.patch.program)}setPatch(e){this.setBankMSB(e.bankMSB),this.setBankLSB(e.bankLSB),this.setGSDrums(e.isGMGSDrum),this.programChange(e.program)}setGSDrums(e){e!==this.patch.isGMGSDrum&&(this.setBankLSB(0),this.setBankMSB(0),this.patch.isGMGSDrum=e)}setVibrato(e,A,t){this.lockGSNRPNParams||(this.channelVibrato.rate=A,this.channelVibrato.delay=t,this.channelVibrato.depth=e)}disableAndLockGSNRPN(){this.lockGSNRPNParams=!0,this.channelVibrato.rate=0,this.channelVibrato.delay=0,this.channelVibrato.depth=0}resetGeneratorOverrides(){this.generatorOverrides.fill(Vs),this.generatorOverridesEnabled=!1}setGeneratorOverride(e,A,t=!1){this.generatorOverrides[e]=A,this.generatorOverridesEnabled=!0,t&&this.voices.forEach(n=>{n.generators[e]=A,this.computeModulators(n)})}resetGeneratorOffsets(){this.generatorOffsets.fill(0),this.generatorOffsetsEnabled=!1}setGeneratorOffset(e,A){this.generatorOffsets[e]=A*x[e].nrpn,this.generatorOffsetsEnabled=!0,this.voices.forEach(t=>{this.computeModulators(t)})}killNote(e,A=-12e3){e+=this.customControllers[IA.channelKeyShift],this.voices.forEach(t=>{t.realKey===e&&(t.modulatedGenerators[r.releaseVolEnv]=A,t.release(this.synth.currentSynthTime))})}stopAllNotes(e=!1){e?(this.voices.length=0,this.sustainedVoices.length=0,this.sendChannelProperty()):(this.voices.forEach(A=>{A.isInRelease||A.release(this.synth.currentSynthTime)}),this.sustainedVoices.forEach(A=>{A.release(this.synth.currentSynthTime)})),this.synthProps.callEvent("stopAll",{channel:this.channelNumber,force:e})}muteChannel(e){e&&this.stopAllNotes(!0),this._isMuted=e,this.sendChannelProperty(),this.synthProps.callEvent("muteChannel",{channel:this.channelNumber,isMuted:e})}sendChannelProperty(){if(!this.synth.enableEventSystem)return;let e={voicesAmount:this.voices.length,pitchWheel:this.midiControllers[mA+j.pitchWheel],pitchWheelRange:this.midiControllers[mA+j.pitchWheelRange]/128,isMuted:this.isMuted,transposition:this.channelTransposeKeyShift+this.customControllers[IA.channelTransposeFine]/100,isDrum:this.drumChannel};this.synthProps.callEvent("channelPropertyChange",{channel:this.channelNumber,property:e})}setBankMSB(e){this.lockPreset||(this.patch.bankMSB=e)}setBankLSB(e){this.lockPreset||(this.patch.bankLSB=e)}setDrumFlag(e){this.lockPreset||!this.preset||this.drumChannel!==e&&(e?(this.channelTransposeKeyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.synthProps.callEvent("drumChange",{channel:this.channelNumber,isDrumChannel:this.drumChannel}))}},yn=20;async function ui(e,A,t,n,s,a,i){let I=0,o=0,g=[];for(let h of e.samples){n&&a&&await h.compressSample(a),s&&h.setAudioData(h.getAudioData(),h.sampleRate);let C=h.getRawData(!0);I++,await i?.(h.name,I,e.samples.length),p(`%cEncoded sample %c${I}. ${h.name}%c of %c${e.samples.length}%c. Compressed: %c${h.isCompressed}%c.`,c.info,c.recognized,c.info,c.recognized,c.info,h.isCompressed?c.recognized:c.unrecognized,c.info),o+=C.length+(h.isCompressed?0:92),g.push(C)}o%2!==0&&o++;let B=new Y(o+yn);kA(B,"LIST"),ht(B,o+yn-8,4),kA(B,"sdta"),kA(B,"smpl"),ht(B,o,4);let d=0;return e.samples.forEach((h,C)=>{let Q=g[C];B.set(Q,d+yn);let m,y;h.isCompressed?(m=d,y=m+Q.length):(m=d/2,y=m+Q.length/2,d+=92),d+=Q.length,A.push(m),t.push(y)}),B}var fi=48e3,Zt=class{name;sampleRate;originalKey;pitchCorrection;linkedSample;sampleType;loopStart;loopEnd;linkedTo=[];dataOverridden=!0;compressedData;audioData;constructor(e,A,t,n,s,a,i){this.name=e,this.sampleRate=A,this.originalKey=t,this.pitchCorrection=n,this.loopStart=a,this.loopEnd=i,this.sampleType=s}get isCompressed(){return this.compressedData!==void 0}get isLinked(){return this.sampleType===wA.rightSample||this.sampleType===wA.leftSample||this.sampleType===wA.linkedSample}get useCount(){return this.linkedTo.length}getRawData(e){return this.compressedData&&e&&!this.dataOverridden?this.compressedData:this.encodeS16LE()}resampleData(e){let A=this.getAudioData(),t=e/this.sampleRate,n=new Float32Array(Math.floor(A.length*t));for(let s=0;s<n.length;s++)n[s]=A[Math.floor(s*(1/t))];A=n,this.sampleRate=e,this.loopStart=Math.floor(this.loopStart*t),this.loopEnd=Math.floor(this.loopEnd*t),this.audioData=A}async compressSample(e){if(!this.isCompressed)try{let A=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(fi),A=this.getAudioData());let t=await e(A,this.sampleRate);this.setCompressedData(t)}catch(A){sA(`Failed to compress ${this.name}. Leaving as uncompressed!`,A),this.compressedData=void 0}}setSampleType(e){if(this.sampleType=e,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=e),this.linkedSample=void 0),(e&32768)>0)throw new Error("ROM samples are not supported.")}unlinkSample(){this.setSampleType(wA.monoSample)}setLinkedSample(e,A){if(e.linkedSample)throw new Error(`${e.name} is linked tp ${e.linkedSample.name}. Unlink it first.`);if(this.linkedSample=e,e.linkedSample=this,A===wA.leftSample)this.setSampleType(wA.leftSample),e.setSampleType(wA.rightSample);else if(A===wA.rightSample)this.setSampleType(wA.rightSample),e.setSampleType(wA.leftSample);else if(A===wA.linkedSample)this.setSampleType(wA.linkedSample),e.setSampleType(wA.linkedSample);else throw new Error("Invalid sample type: "+A)}linkTo(e){this.linkedTo.push(e)}unlinkFrom(e){let A=this.linkedTo.indexOf(e);if(A<0){sA(`Cannot unlink ${e.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(A,1)}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return this.audioData=this.decodeVorbis(),this.audioData;throw new Error("Sample data is undefined for a BasicSample instance.")}setAudioData(e,A){this.audioData=e,this.sampleRate=A,this.dataOverridden=!0,this.compressedData=void 0}setCompressedData(e){this.audioData=void 0,this.compressedData=e,this.dataOverridden=!1}encodeS16LE(){let e=this.getAudioData(),A=new Int16Array(e.length),t=e.length;for(let n=0;n<t;n++){let s=e[n]*32768;s>32767?s=32767:s<-32768&&(s=-32768),A[n]=s}return new Y(A.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{let A=Ot.decode(this.compressedData).data[0];if(A===void 0)return sA(`Error decoding sample ${this.name}: Vorbis decode returned undefined.`),new Float32Array(0);for(let t=0;t<A.length;t++)A[t]=Math.max(-1,Math.min(A[t],.999969482421875));return A}catch(e){return sA(`Error decoding sample ${this.name}: ${e}`),new Float32Array(this.loopEnd+1)}}},mi=class extends Zt{constructor(){super("",44100,60,0,wA.monoSample,0,0)}},Vn=16,Si=class extends Zt{linkedSampleIndex;s16leData;startByteOffset;endByteOffset;sampleID;constructor(e,A,t,n,s,a,i,I,o,g,B,d){let h=(g&Vn)>0;g&=~Vn,super(e,a,i,I,g,n-A/2,s-A/2),this.dataOverridden=!1,this.name=e,this.startByteOffset=A,this.endByteOffset=t,this.sampleID=d;let C=B instanceof Y?B.currentIndex:0;B instanceof Y?h?(this.loopStart+=this.startByteOffset/2,this.loopEnd+=this.startByteOffset/2,this.setCompressedData(B.slice(this.startByteOffset/2+C,this.endByteOffset/2+C))):this.s16leData=B.slice(C+this.startByteOffset,C+this.endByteOffset):this.setAudioData(B.slice(this.startByteOffset/2,this.endByteOffset/2),a),this.linkedSampleIndex=o}getLinkedSample(e){if(this.linkedSample||!this.isLinked)return;let A=e[this.linkedSampleIndex];A?A.linkedSample?(p(`%cInvalid linked sample for ${this.name}: Already linked to ${A.linkedSample.name}`,c.warn),this.unlinkSample()):this.setLinkedSample(A,this.sampleType):(p(`%cInvalid linked sample for ${this.name}. Setting to mono.`,c.warn),this.unlinkSample())}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return super.getAudioData();if(!this.s16leData)throw console.error(this),new Error("Unexpected lack of audio data.");let e=this.endByteOffset-this.startByteOffset;if(e<1)return sA(`Invalid sample ${this.name}! Invalid length: ${e}`),new Float32Array(1);let A=new Float32Array(e/2),t=new Int16Array(this.s16leData.buffer);for(let n=0;n<t.length;n++)A[n]=t[n]/32768;return this.audioData=A,A}getRawData(e){return this.dataOverridden||this.compressedData?super.getRawData(e):this.s16leData??new Uint8Array(0)}};function bs(e,A,t=!0){let n=[],s=0;for(;e.data.length>e.data.currentIndex;){let a=pi(s,e.data,A);n.push(a),s++}return n.pop(),t&&n.forEach(a=>a.getLinkedSample(n)),n}function pi(e,A,t){let n=hA(A,20),s=N(A,4)*2,a=N(A,4)*2,i=N(A,4),I=N(A,4),o=N(A,4),g=A[A.currentIndex++];g>127&&(g=60);let B=qa(A[A.currentIndex++]),d=N(A,2),h=N(A,2);return new Si(n,s,a,i,I,o,g,B,d,h,t,e)}function yi(e,A,t){let s=46*(e.samples.length+1),a=new Y(s),i=new Y(s),I=0;e.samples.forEach((B,d)=>{kA(a,B.name.substring(0,20),20),kA(i,B.name.substring(20),20);let h=A[d];gA(a,h),i.currentIndex+=4;let C=t[d];gA(a,C),i.currentIndex+=4;let Q=B.loopStart+h,m=B.loopEnd+h;B.isCompressed&&(Q-=h,m-=h),gA(a,Q),gA(a,m),gA(a,B.sampleRate),a[a.currentIndex++]=B.originalKey,a[a.currentIndex++]=B.pitchCorrection,i.currentIndex+=14;let y=B.linkedSample?e.samples.indexOf(B.linkedSample):0;J(a,Math.max(0,y)&65535),J(i,Math.max(0,y)>>16),I=Math.max(I,y);let F=B.sampleType;B.isCompressed&&(F|=Vn),J(a,F),i.currentIndex+=2}),kA(a,"EOS",46),kA(i,"EOS",46);let o=cA("shdr",a),g=cA("shdr",i);return{pdta:o,xdta:g}}function vs(e,A=!1){let t=A?e.presets:e.instruments,n=A?"pgen":"igen",s=A?"pmod":"imod",a=A?"pbag":"ibag",i=A?"phdr":"inst",I=A?da:la,o=t.map(k=>(k instanceof pe,k.getSize())),g=o.reduce((k,D)=>k+D.gen,0)+Ct,B=new Y(g),d=o.reduce((k,D)=>k+D.mod,0)+me,h=new Y(d),C=o.reduce((k,D)=>k+D.bag,0)+Jt,Q={pdta:new Y(C),xdta:new Y(C)},m=o.reduce((k,D)=>D.hdr+k,0)+I,y={pdta:new Y(m),xdta:new Y(m)},F={gen:0,bag:0,mod:0,hdr:0};return t.forEach(k=>{k instanceof pe,k.write(B,h,Q,y,F,e)}),A?(kA(y.pdta,"EOP",20),y.pdta.currentIndex+=4,J(y.pdta,F.hdr&65535),y.pdta.currentIndex+=12,kA(y.xdta,"",20),y.xdta.currentIndex+=4,J(y.xdta,F.hdr>>16),y.xdta.currentIndex+=12):(kA(y.pdta,"EOI",20),kA(y.xdta,"",20),J(y.pdta,F.hdr&65535),J(y.xdta,F.hdr>>16)),J(Q.pdta,F.gen&65535),J(Q.xdta,F.gen>>16),J(Q.pdta,F.mod&65535),J(Q.xdta,F.mod>>16),{writeXdta:Math.max(g/Ct,d/me,C/Jt,m/I)>65535,gen:{pdta:cA(n,B),xdta:cA(s,new Y(Ct))},mod:{pdta:cA(s,h),xdta:cA(s,new Y(me))},bag:{pdta:cA(a,Q.pdta),xdta:cA(a,Q.xdta)},hdr:{pdta:cA(i,y.pdta),xdta:cA(i,y.xdta)}}}var Xn={compress:!1,compressionFunction:void 0,progressFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0,decompress:!1};async function ki(e,A=Xn){let t=$n(A,Xn);if(t?.compress){if(typeof t?.compressionFunction!="function")throw new Error("No compression function supplied but compression enabled.");if(t?.decompress)throw new Error("Decompressed and compressed at the same time.")}bA("%cSaving soundbank...",c.info),p(`%cCompression: %c${t?.compress||"false"}%c`,c.info,c.recognized,c.info,c.recognized),OA("%cWriting INFO...",c.info);let n=[];e.soundBankInfo.software="SpessaSynth",(t?.compress||e.samples.some(D=>D.isCompressed))&&(e.soundBankInfo.version.major=3,e.soundBankInfo.version.minor=0),t?.decompress&&(e.soundBankInfo.version.major=2,e.soundBankInfo.version.minor=4);let s=(D,v)=>{n.push(cA(D,ne(v,!0,!0)))},a=new Y(4);if(J(a,e.soundBankInfo.version.major),J(a,e.soundBankInfo.version.minor),n.push(cA("ifil",a)),e.soundBankInfo.romVersion){let D=new Y(4);J(D,e.soundBankInfo.romVersion.major),J(D,e.soundBankInfo.romVersion.minor),n.push(cA("iver",D))}let i=(e.soundBankInfo?.comment??"")+(e.soundBankInfo.subject?`
6
+ ${e.soundBankInfo.subject}`:"");for(let[D,v]of Object.entries(e.soundBankInfo)){let L=D,E=v;if(E)switch(L){case"name":s("INAM",E);break;case"comment":s("ICMT",i);break;case"copyright":s("ICOP",E);break;case"creationDate":s("ICRD",E.toISOString());break;case"engineer":s("IENG",E);break;case"product":s("IPRD",E);break;case"romInfo":s("irom",E);break;case"software":s("ISFT",E);break;case"soundEngine":s("isng",E);break;case"subject":break}}if(e.defaultModulators.some(D=>Ea.findIndex(v=>EA.isIdentical(v,D,!0))===-1)&&t?.writeDefaultModulators){let D=e.defaultModulators;p(`%cWriting %c${D.length}%c default modulators...`,c.info,c.recognized,c.info);let v=me+D.length*me,L=new Y(v);for(let E of D)E.write(L);ht(L,0,me),n.push(cA("DMOD",L))}Z(),p("%cWriting SDTA...",c.info);let o=[],g=[],B=await ui(e,o,g,t.compress,t.decompress,t?.compressionFunction,t?.progressFunction);p("%cWriting PDTA...",c.info),p("%cWriting SHDR...",c.info);let d=yi(e,o,g);OA("%cWriting instruments...",c.info);let h=vs(e,!1);Z(),OA("%cWriting presets...",c.info);let C=vs(e,!0);Z();let Q=[C.hdr,C.bag,C.mod,C.gen,h.hdr,h.bag,h.mod,h.gen,d],m=vA("pdta",Q.map(D=>D.pdta),!0);if(t.writeExtendedLimits&&(h.writeXdta||C.writeXdta||e.presets.some(D=>D.name.length>20)||e.instruments.some(D=>D.name.length>20)||e.samples.some(D=>D.name.length>20))){p("%cWriting the xdta chunk as writeExendedLimits is enabled and at least one condition was met.",c.info,c.value);let D=vA("xdta",Q.map(v=>v.xdta),!0);n.push(D)}let F=vA("INFO",n,!0);p("%cWriting the output file...",c.info);let k=vA("RIFF",[ne("sfbk"),F,B,m]);return p(`%cSaved succesfully! Final file size: %c${k.length}`,c.info,c.recognized),Z(),k.buffer}var je=class{static verifyHeader(e,...A){for(let t of A)if(e.header.toLowerCase()===t.toLowerCase())return;this.parsingError(`Invalid DLS chunk header! Expected "${A.join(", or ")}" got "${e.header.toLowerCase()}"`)}static verifyText(e,...A){for(let t of A)if(e.toLowerCase()===t.toLowerCase())return;this.parsingError(`FourCC error: Expected "${A.join(", or ")}" got "${e.toLowerCase()}"`)}static parsingError(e){throw Z(),new Error(`DLS parse error: ${e} The file may be corrupted.`)}static verifyAndReadList(e,...A){this.verifyHeader(e,"LIST"),e.data.currentIndex=0,this.verifyText(hA(e.data,4),...A);let t=[];for(;e.data.length>e.data.currentIndex;)t.push(iA(e.data));return t}},gt=20,kn=16,ze=class Bt extends je{gain=0;unityNote=60;fineTune=0;loops=new Array;fulOptions=2;static copyFrom(A){let t=new Bt;return t.unityNote=A.unityNote,t.gain=A.gain,t.fineTune=A.fineTune,t.loops=A.loops.map(n=>({...n})),t.fulOptions=A.fulOptions,t}static read(A){this.verifyHeader(A,"wsmp");let t=new Bt,n=N(A.data,4);if(n!==gt&&sA(`Wsmp cbSize mismatch: got ${n}, expected ${gt}.`),t.unityNote=N(A.data,2),t.fineTune=jn(A.data[A.data.currentIndex++],A.data[A.data.currentIndex++]),t.gain=N(A.data,4)|0,t.fulOptions=N(A.data,4),N(A.data,4)!==0){let a=N(A.data,4);a!==kn&&sA(`CbSize for loop in wsmp mismatch. Expected ${gt}, got ${a}.`);let i=N(A.data,4),I=N(A.data,4),o=N(A.data,4);t.loops.push({loopStart:I,loopLength:o,loopType:i})}return t}static fromSFSample(A){let t=new Bt;return t.unityNote=A.originalKey,t.fineTune=A.pitchCorrection,(A.loopEnd!==0||A.loopStart!==0)&&t.loops.push({loopStart:A.loopStart,loopLength:A.loopEnd-A.loopStart,loopType:ys.forward}),t}static fromSFZone(A){let t=new Bt;t.unityNote=A.getGenerator(r.overridingRootKey,A.sample.originalKey),A.getGenerator(r.scaleTuning,100)===0&&A.keyRange.max-A.keyRange.min===0&&(t.unityNote=A.keyRange.min),t.fineTune=A.fineTuning+A.sample.pitchCorrection;let n=A.getGenerator(r.initialAttenuation,0)*.4;t.gain=-n<<16;let s=A.getGenerator(r.sampleModes,0);if(s!==0){let a=A.sample.loopStart+A.getGenerator(r.startloopAddrsOffset,0)+A.getGenerator(r.startloopAddrsCoarseOffset,0)*32768,i=A.sample.loopEnd+A.getGenerator(r.endloopAddrsOffset,0)+A.getGenerator(r.endloopAddrsCoarseOffset,0)*32768,I;switch(s){case 1:default:I=0;break;case 3:I=1}t.loops.push({loopType:I,loopStart:a,loopLength:i-a})}return t}toSFZone(A,t){let n=0,s=this.loops[0];s&&(n=s.loopType===ys.loopAndRelease?3:1),n!==0&&A.setGenerator(r.sampleModes,n);let I=-(this.gain>>16)/.4;if(I!==0&&A.setGenerator(r.initialAttenuation,I),A.fineTuning=this.fineTune-t.pitchCorrection,this.unityNote!==t.originalKey&&A.setGenerator(r.overridingRootKey,this.unityNote),s){let o=s.loopStart-t.loopStart,B=s.loopStart+s.loopLength-t.loopEnd;if(o!==0){let d=o%32768;A.setGenerator(r.startloopAddrsOffset,d);let h=Math.trunc(o/32768);h!==0&&A.setGenerator(r.startloopAddrsCoarseOffset,h)}if(B!==0){let d=B%32768;A.setGenerator(r.endloopAddrsOffset,d);let h=Math.trunc(B/32768);h!==0&&A.setGenerator(r.endloopAddrsCoarseOffset,h)}}}write(){let A=new Y(gt+this.loops.length*kn);return gA(A,gt),J(A,this.unityNote),J(A,this.fineTune),gA(A,this.gain),gA(A,this.fulOptions),gA(A,this.loops.length),this.loops.forEach(t=>{gA(A,kn),gA(A,t.loopType),gA(A,t.loopStart),gA(A,t.loopLength)}),cA("wsmp",A)}},Dn={PCM:1,ALAW:6};function Di(e,A){let t=Math.pow(2,A*8-1),n=Math.pow(2,A*8),s,a=!1;A===1?(s=255,a=!0):s=t;let i=e.length/A,I=new Float32Array(i);if(A===2){let o=new Int16Array(e.buffer);for(let g=0;g<o.length;g++)I[g]=o[g]/32768}else for(let o=0;o<I.length;o++){let g=N(e,A);a?I[o]=g/s-.5:(g>=t&&(g-=n),I[o]=g/s)}return I}function wi(e,A){let t=e.length/A,n=new Float32Array(t);for(let s=0;s<n.length;s++){let a=N(e,A),i=a^85;i&=127;let I=i>>4,o=i&15;I>0&&(o+=16),o=(o<<4)+8,I>1&&(o=o<<I-1);let g=a>127?o:-o;n[s]=g/32678}return n}var Fi=class extends Zt{wFormatTag;bytesPerSample;rawData;constructor(e,A,t,n,s,a,i,I,o){super(e,A,t,n,wA.monoSample,s,a),this.dataOverridden=!1,this.rawData=i.data,this.wFormatTag=I,this.bytesPerSample=o}getAudioData(){if(!this.rawData)return new Float32Array(0);if(!this.audioData){let e;switch(this.wFormatTag){default:sA(`Failed to decode sample. Unknown wFormatTag: ${this.wFormatTag}`),e=new Float32Array(this.rawData.length/this.bytesPerSample);break;case Dn.PCM:e=Di(this.rawData,this.bytesPerSample);break;case Dn.ALAW:e=wi(this.rawData,this.bytesPerSample);break}this.setAudioData(e,this.sampleRate)}return this.audioData??new Float32Array(0)}getRawData(e){return this.dataOverridden||this.isCompressed?super.getRawData(e):this.wFormatTag===Dn.PCM&&this.bytesPerSample===2?this.rawData:this.encodeS16LE()}},Ls=class Zn extends je{waveSample=new ze;wFormatTag;bytesPerSample;sampleRate;dataChunk;name="Unnamed sample";constructor(A,t,n,s){super(),this.wFormatTag=A,this.bytesPerSample=t,this.sampleRate=n,this.dataChunk=s}static read(A){let t=this.verifyAndReadList(A,"wave"),n=t.find(C=>C.header==="fmt ");if(!n)throw new Error("No fmt chunk in the wave file!");let s=N(n.data,2),a=N(n.data,2);if(a!==1)throw new Error(`Only mono samples are supported. Fmt reports ${a} channels.`);let i=N(n.data,4);N(n.data,4),N(n.data,2);let o=N(n.data,2)/8,g=t.find(C=>C.header==="data");if(!g)throw new Error("No data chunk in the WAVE chunk!");let B=new Zn(s,o,i,g),d=fe(t,"INFO");if(d){let C=iA(d.data);for(;C.header!=="INAM"&&d.data.currentIndex<d.data.length;)C=iA(d.data);C.header==="INAM"&&(B.name=hA(C.data,C.size).trim())}let h=t.find(C=>C.header==="wsmp");return h&&(B.waveSample=ze.read(h)),B}static fromSFSample(A){let t=A.getRawData(!1),n=new Zn(1,2,A.sampleRate,new Hs("data",t.length,new Y(t.buffer)));return n.name=A.name,n.waveSample=ze.fromSFSample(A),n}toSFSample(A){let t=this.waveSample.unityNote,n=this.waveSample.fineTune,s=Math.trunc(n/100);t+=s,n-=s*100;let a=0,i=0,I=this.waveSample.loops?.[0];I&&(a=I.loopStart,i=I.loopStart+I.loopLength);let o=new Fi(this.name,this.sampleRate,t,n,a,i,this.dataChunk,this.wFormatTag,this.bytesPerSample);A.addSamples(o)}write(){let A=this.writeFmt(),t=this.waveSample.write(),n=cA("data",this.dataChunk.data),s=cA("INAM",ne(this.name,!0)),a=cA("INFO",s,!1,!0);return p(`%cSaved %c${this.name}%c successfully!`,c.recognized,c.value,c.recognized),vA("wave",[A,t,n,a],!0)}writeFmt(){let A=new Y(18);return J(A,this.wFormatTag),J(A,1),gA(A,this.sampleRate),gA(A,this.sampleRate*2),J(A,2),J(A,this.bytesPerSample*8),cA("fmt ",A)}},ya=new yA(219,0,r.reverbEffectsSend,1e3,0),ka=new yA(221,0,r.chorusEffectsSend,1e3,0),Gi=new yA(129,0,r.vibLfoToPitch,0,0),Ri=new yA(13,0,r.vibLfoToPitch,0,0),VA=class zn{source;transform;bipolar;invert;constructor(A=T.none,t=QA.linear,n=!1,s=!1){this.source=A,this.transform=t,this.bipolar=n,this.invert=s}get sourceName(){return Object.keys(T).find(A=>T[A]===this.source)??this.source.toString()}get transformName(){return Object.keys(QA).find(A=>QA[A]===this.transform)??this.transform.toString()}static copyFrom(A){return new zn(A.source,A.transform,A.bipolar,A.invert)}static fromSFSource(A){let t;if(A.isCC)switch(A.index){case S.modulationWheel:t=T.modulationWheel;break;case S.mainVolume:t=T.volume;break;case S.pan:t=T.pan;break;case S.expressionController:t=T.expression;break;case S.chorusDepth:t=T.chorus;break;case S.reverbDepth:t=T.reverb;break}else switch(A.index){case j.noController:t=T.none;break;case j.noteOnKeyNum:t=T.keyNum;break;case j.noteOnVelocity:t=T.velocity;break;case j.pitchWheel:t=T.pitchWheel;break;case j.pitchWheelRange:t=T.pitchWheelRange;break;case j.polyPressure:t=T.polyPressure;break;case j.channelPressure:t=T.channelPressure}if(t!==void 0)return new zn(t,A.curveType,A.isBipolar,A.isNegative)}toString(){return`${this.sourceName} ${this.transformName} ${this.bipolar?"bipolar":"unipolar"} ${this.invert?"inverted":"positive"}`}toTransformFlag(){return this.transform|(this.bipolar?1:0)<<4|(this.invert?1:0)<<5}toSFSource(){let A,t=!1;switch(this.source){default:case T.modLfo:case T.vibratoLfo:case T.coarseTune:case T.fineTune:case T.modEnv:return;case T.keyNum:A=j.noteOnKeyNum;break;case T.none:A=j.noController;break;case T.modulationWheel:A=S.modulationWheel,t=!0;break;case T.pan:A=S.pan,t=!0;break;case T.reverb:A=S.reverbDepth,t=!0;break;case T.chorus:A=S.chorusDepth,t=!0;break;case T.expression:A=S.expressionController,t=!0;break;case T.volume:A=S.mainVolume,t=!0;break;case T.velocity:A=j.noteOnVelocity;break;case T.polyPressure:A=j.polyPressure;break;case T.channelPressure:A=j.channelPressure;break;case T.pitchWheel:A=j.pitchWheel;break;case T.pitchWheelRange:A=j.pitchWheelRange;break}if(A!==void 0)return new XA(A,this.transform,t,this.bipolar,this.invert)}},Mi=new Set([r.sampleModes,r.initialAttenuation,r.keyRange,r.velRange,r.sampleID,r.fineTune,r.coarseTune,r.startAddrsOffset,r.startAddrsCoarseOffset,r.endAddrOffset,r.endAddrsCoarseOffset,r.startloopAddrsOffset,r.startloopAddrsCoarseOffset,r.endloopAddrsOffset,r.endloopAddrsCoarseOffset,r.overridingRootKey,r.exclusiveClass]),ct=class Re{source;control;destination;scale;transform;constructor(A=new VA,t=new VA,n,s,a){this.source=A,this.control=t,this.destination=n,this.transform=s,this.scale=a}get isStaticParameter(){return this.source.source===T.none&&this.control.source===T.none}get shortScale(){return this.scale>>16}get transformName(){return Object.keys(QA).find(A=>QA[A]===this.transform)??this.transform.toString()}get destinationName(){return Object.keys(R).find(A=>R[A]===this.destination)??this.destination.toString()}static read(A){let t=N(A,2),n=N(A,2),s=N(A,2),a=N(A,2),i=N(A,4)|0,I=a&15,o=a>>4&15,g=Me(a,8),B=Me(a,9),d=new VA(n,o,g,B),h=a>>10&15,C=Me(a,14),Q=Me(a,15),m=new VA(t,h,C,Q);return new Re(m,d,s,I,i)}static fromSFModulator(A,t){let n=B=>{sA(`Failed converting SF modulator into DLS:
7
7
  ${A.toString()}
8
- (${B})`)};if(A.transformType!==0){n("Absolute transform type is not supported");return}if(cA.isIdentical(A,ka,!0)||cA.isIdentical(A,ya,!0))return;let s=VA.fromSFSource(A.primarySource);if(!s){n("Invalid primary source");return}let a=VA.fromSFSource(A.secondarySource);if(!a){n("Invalid secondary source");return}let i=Re.fromSFDestination(A.destination,A.transformAmount);if(i===void 0){n("Invalid destination");return}let I=A.transformAmount,o;if(typeof i=="number")o=i;else if(o=i.destination,I=i.amount,i.source!==T.none){if(a.source!==T.none&&s.source!==T.none){n("Articulation generators with secondary source are not supported");return}s.source!==T.none&&(a=s),s=new VA(i.source,QA.linear,i.isBipolar)}let g=new Re(s,a,o,0,I<<16);t.connectionBlocks.push(g)}static copyFrom(A){return new Re(VA.copyFrom(A.source),VA.copyFrom(A.control),A.destination,A.transform,A.scale)}static fromSFGenerator(A,t){if(Mi.has(A.generatorType))return;let n=o=>{sA(`Failed converting SF2 generator into DLS:
8
+ (${B})`)};if(A.transformType!==0){n("Absolute transform type is not supported");return}if(EA.isIdentical(A,ka,!0)||EA.isIdentical(A,ya,!0))return;let s=VA.fromSFSource(A.primarySource);if(!s){n("Invalid primary source");return}let a=VA.fromSFSource(A.secondarySource);if(!a){n("Invalid secondary source");return}let i=Re.fromSFDestination(A.destination,A.transformAmount);if(i===void 0){n("Invalid destination");return}let I=A.transformAmount,o;if(typeof i=="number")o=i;else if(o=i.destination,I=i.amount,i.source!==T.none){if(a.source!==T.none&&s.source!==T.none){n("Articulation generators with secondary source are not supported");return}s.source!==T.none&&(a=s),s=new VA(i.source,QA.linear,i.isBipolar)}let g=new Re(s,a,o,0,I<<16);t.connectionBlocks.push(g)}static copyFrom(A){return new Re(VA.copyFrom(A.source),VA.copyFrom(A.control),A.destination,A.transform,A.scale)}static fromSFGenerator(A,t){if(Mi.has(A.generatorType))return;let n=o=>{sA(`Failed converting SF2 generator into DLS:
9
9
  ${A.toString()}
10
10
  (${o})`)},s=Re.fromSFDestination(A.generatorType,A.generatorValue);if(s===void 0){n("Invalid type");return}let a=new VA,i,I=A.generatorValue;typeof s=="number"?i=s:(i=s.destination,I=s.amount,a.source=s.source,a.bipolar=s.isBipolar),t.connectionBlocks.push(new Re(a,new VA,i,0,I<<16))}static fromSFDestination(A,t){switch(A){default:return;case r.initialAttenuation:return{destination:R.gain,amount:-t,isBipolar:!1,source:T.none};case r.fineTune:return R.pitch;case r.pan:return R.pan;case r.keyNum:return R.keyNum;case r.reverbEffectsSend:return R.reverbSend;case r.chorusEffectsSend:return R.chorusSend;case r.freqModLFO:return R.modLfoFreq;case r.delayModLFO:return R.modLfoDelay;case r.delayVibLFO:return R.vibLfoDelay;case r.freqVibLFO:return R.vibLfoFreq;case r.delayVolEnv:return R.volEnvDelay;case r.attackVolEnv:return R.volEnvAttack;case r.holdVolEnv:return R.volEnvHold;case r.decayVolEnv:return R.volEnvDecay;case r.sustainVolEnv:return{destination:R.volEnvSustain,amount:1e3-t,isBipolar:!1,source:T.none};case r.releaseVolEnv:return R.volEnvRelease;case r.delayModEnv:return R.modEnvDelay;case r.attackModEnv:return R.modEnvAttack;case r.holdModEnv:return R.modEnvHold;case r.decayModEnv:return R.modEnvDecay;case r.sustainModEnv:return{destination:R.modEnvSustain,amount:1e3-t,isBipolar:!1,source:T.none};case r.releaseModEnv:return R.modEnvRelease;case r.initialFilterFc:return R.filterCutoff;case r.initialFilterQ:return R.filterQ;case r.modEnvToFilterFc:return{source:T.modEnv,destination:R.filterCutoff,amount:t,isBipolar:!1};case r.modEnvToPitch:return{source:T.modEnv,destination:R.pitch,amount:t,isBipolar:!1};case r.modLfoToFilterFc:return{source:T.modLfo,destination:R.filterCutoff,amount:t,isBipolar:!0};case r.modLfoToVolume:return{source:T.modLfo,destination:R.gain,amount:t,isBipolar:!0};case r.modLfoToPitch:return{source:T.modLfo,destination:R.pitch,amount:t,isBipolar:!0};case r.vibLfoToPitch:return{source:T.vibratoLfo,destination:R.pitch,amount:t,isBipolar:!0};case r.keyNumToVolEnvHold:return{source:T.keyNum,destination:R.volEnvHold,amount:t,isBipolar:!0};case r.keyNumToVolEnvDecay:return{source:T.keyNum,destination:R.volEnvDecay,amount:t,isBipolar:!0};case r.keyNumToModEnvHold:return{source:T.keyNum,destination:R.modEnvHold,amount:t,isBipolar:!0};case r.keyNumToModEnvDecay:return{source:T.keyNum,destination:R.modEnvDecay,amount:t,isBipolar:!0};case r.scaleTuning:return{source:T.keyNum,destination:R.pitch,amount:t*128,isBipolar:!1}}}toString(){return`Source: ${this.source.toString()},
11
11
  Control: ${this.control.toString()},
12
12
  Scale: ${this.scale} >> 16 = ${this.shortScale},
13
13
  Output transform: ${this.transformName}
14
- Destination: ${this.destinationName}`}write(){let A=new P(12);J(A,this.source.source),J(A,this.control.source),J(A,this.destination);let t=this.transform|this.control.toTransformFlag()<<4|this.source.toTransformFlag()<<10;return J(A,t),IA(A,this.scale),A}toSFGenerator(A){let t=this.destination,n=this.shortScale;switch(t){default:p(`%cFailed converting DLS articulator into SF generator: %c${this.toString()}%c
14
+ Destination: ${this.destinationName}`}write(){let A=new Y(12);J(A,this.source.source),J(A,this.control.source),J(A,this.destination);let t=this.transform|this.control.toTransformFlag()<<4|this.source.toTransformFlag()<<10;return J(A,t),gA(A,this.scale),A}toSFGenerator(A){let t=this.destination,n=this.shortScale;switch(t){default:p(`%cFailed converting DLS articulator into SF generator: %c${this.toString()}%c
15
15
  (invalid destination)`,c.warn,c.value,c.unrecognized);return;case R.pan:A.setGenerator(r.pan,n);break;case R.gain:A.addToGenerator(r.initialAttenuation,-n/.4);break;case R.filterCutoff:A.setGenerator(r.initialFilterFc,n);break;case R.filterQ:A.setGenerator(r.initialFilterQ,n);break;case R.modLfoFreq:A.setGenerator(r.freqModLFO,n);break;case R.modLfoDelay:A.setGenerator(r.delayModLFO,n);break;case R.vibLfoFreq:A.setGenerator(r.freqVibLFO,n);break;case R.vibLfoDelay:A.setGenerator(r.delayVibLFO,n);break;case R.volEnvDelay:A.setGenerator(r.delayVolEnv,n);break;case R.volEnvAttack:A.setGenerator(r.attackVolEnv,n);break;case R.volEnvHold:A.setGenerator(r.holdVolEnv,n);break;case R.volEnvDecay:A.setGenerator(r.decayVolEnv,n);break;case R.volEnvRelease:A.setGenerator(r.releaseVolEnv,n);break;case R.volEnvSustain:A.setGenerator(r.sustainVolEnv,1e3-n);break;case R.modEnvDelay:A.setGenerator(r.delayModEnv,n);break;case R.modEnvAttack:A.setGenerator(r.attackModEnv,n);break;case R.modEnvHold:A.setGenerator(r.holdModEnv,n);break;case R.modEnvDecay:A.setGenerator(r.decayModEnv,n);break;case R.modEnvRelease:A.setGenerator(r.releaseModEnv,n);break;case R.modEnvSustain:A.setGenerator(r.sustainModEnv,1e3-n);break;case R.reverbSend:A.setGenerator(r.reverbEffectsSend,n);break;case R.chorusSend:A.setGenerator(r.chorusEffectsSend,n);break;case R.pitch:A.fineTuning+=n;break}}toSFModulator(A){let t=this.shortScale,n,s,a=new XA,i=g=>{p(`%cFailed converting DLS articulator into SF2:
16
16
  %c${this.toString()}%c
17
- (${g})`,c.warn,c.value,c.unrecognized)},I=this.toCombinedSFDestination();if(I){n=I;let g=this.control.toSFSource();if(!g){i("Invalid control");return}s=g}else{let g=this.toSFDestination();if(!g){i("Invalid destination");return}typeof g=="object"?(t=g.newAmount,n=g.gen):n=g;let B=this.source.toSFSource();if(!B){i("Invalid source");return}s=B;let d=this.control.toSFSource();if(!d){i("Invalid control");return}a=d}this.transform!==QA.linear&&s.curveType===QA.linear&&(s.curveType=this.transform),n===r.initialAttenuation&&((this.source.source===T.velocity||this.source.source===T.volume||this.source.source===T.expression)&&(s.isNegative=!0),t=Math.min(960,Math.max(0,t)));let o=new cA(s,a,n,t,0);A.addModulators(o)}toCombinedSFDestination(){let A=this.source.source,t=this.destination;return A===T.vibratoLfo&&t===R.pitch?r.vibLfoToPitch:A===T.modLfo&&t===R.pitch?r.modLfoToPitch:A===T.modLfo&&t===R.filterCutoff?r.modLfoToFilterFc:A===T.modLfo&&t===R.gain?r.modLfoToVolume:A===T.modEnv&&t===R.filterCutoff?r.modEnvToFilterFc:A===T.modEnv&&t===R.pitch?r.modEnvToPitch:void 0}toSFDestination(){let A=this.shortScale;switch(this.destination){default:case R.none:return;case R.pan:return r.pan;case R.gain:return{gen:r.initialAttenuation,newAmount:-A};case R.pitch:return r.fineTune;case R.keyNum:return r.overridingRootKey;case R.volEnvDelay:return r.delayVolEnv;case R.volEnvAttack:return r.attackVolEnv;case R.volEnvHold:return r.holdVolEnv;case R.volEnvDecay:return r.decayVolEnv;case R.volEnvSustain:return{gen:r.sustainVolEnv,newAmount:1e3-A};case R.volEnvRelease:return r.releaseVolEnv;case R.modEnvDelay:return r.delayModEnv;case R.modEnvAttack:return r.attackModEnv;case R.modEnvHold:return r.holdModEnv;case R.modEnvDecay:return r.decayModEnv;case R.modEnvSustain:return{gen:r.sustainModEnv,newAmount:1e3-A};case R.modEnvRelease:return r.releaseModEnv;case R.filterCutoff:return r.initialFilterFc;case R.filterQ:return r.initialFilterQ;case R.chorusSend:return r.chorusEffectsSend;case R.reverbSend:return r.reverbEffectsSend;case R.modLfoFreq:return r.freqModLFO;case R.modLfoDelay:return r.delayModLFO;case R.vibLfoFreq:return r.freqVibLFO;case R.vibLfoDelay:return r.delayVibLFO}}},Da=class Wn extends je{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(A){this.mode=A.mode,A.connectionBlocks.forEach(t=>{this.connectionBlocks.push(ct.copyFrom(t))})}fromSFZone(A){this.mode="dls2";let t=new Vt;t.copyFrom(A);for(let n of t.generators){let s;switch(n.generatorType){default:continue;case r.keyNumToVolEnvDecay:s=r.decayVolEnv;break;case r.keyNumToVolEnvHold:s=r.holdVolEnv;break;case r.keyNumToModEnvDecay:s=r.decayModEnv;break;case r.keyNumToModEnvHold:s=r.holdModEnv}let a=t.getGenerator(s,void 0),i=n.generatorValue*-128;if(a===void 0)continue;let I=60/128*i,o=a-I;t.setGenerator(n.generatorType,i,!1),t.setGenerator(s,o,!1)}for(let n of t.generators)ct.fromSFGenerator(n,this);for(let n of t.modulators)ct.fromSFModulator(n,this)}read(A){let t=fe(A,"lart"),n=fe(A,"lar2");if(t)for(this.mode="dls1";t.data.currentIndex<t.data.length;){let s=oA(t.data);Wn.verifyHeader(s,"art1");let a=s.data,i=N(a,4);i!==8&&sA(`CbSize in articulation mismatch. Expected 8, got ${i}`);let I=N(a,4);for(let o=0;o<I;o++)this.connectionBlocks.push(ct.read(a))}else if(n)for(this.mode="dls2";n.data.currentIndex<n.data.length;){let s=oA(n.data);Wn.verifyHeader(s,"art2");let a=s.data,i=N(a,4);i!==8&&sA(`CbSize in articulation mismatch. Expected 8, got ${i}`);let I=N(a,4);for(let o=0;o<I;o++)this.connectionBlocks.push(ct.read(a))}}write(){let A=new P(8);IA(A,8),IA(A,this.connectionBlocks.length);let t=this.connectionBlocks.map(s=>s.write()),n=bA(this.mode==="dls2"?"art2":"art1",[A,...t]);return gA(this.mode==="dls2"?"lar2":"lart",n,!1,!0)}toSFZone(A){let t=(n,s,a,i)=>{let I=n/-128;if(A.setGenerator(s,I),I<=120){let o=Math.round(.46875*n),g=this.connectionBlocks.find(B=>B.isStaticParameter&&B.destination===i);g&&A.setGenerator(a,o+g.shortScale)}};for(let n of this.connectionBlocks){let s=n.shortScale,a=n.source.source,i=n.control.source,I=n.destination;if(n.isStaticParameter){n.toSFGenerator(A);continue}if(i===T.none)if(a===T.keyNum){if(I===R.pitch){A.setGenerator(r.scaleTuning,s/128);continue}if(I===R.modEnvHold||I===R.modEnvDecay||I===R.volEnvHold||I==R.volEnvDecay)continue}else{let o=n.toCombinedSFDestination();if(o){A.setGenerator(o,s);continue}}n.toSFModulator(A)}this.mode==="dls1"&&A.addModulators(cA.copyFrom(Gi),cA.copyFrom(Ri));for(let n of this.connectionBlocks){if(n.source.source!==T.keyNum)continue;let s=n.shortScale;switch(n.destination){default:continue;case R.volEnvHold:t(s,r.keyNumToVolEnvHold,r.holdVolEnv,R.volEnvHold);break;case R.volEnvDecay:t(s,r.keyNumToVolEnvDecay,r.decayVolEnv,R.volEnvDecay);break;case R.modEnvHold:t(s,r.keyNumToModEnvHold,r.holdModEnv,R.modEnvHold);break;case R.modEnvDecay:t(s,r.keyNumToModEnvDecay,r.decayModEnv,R.modEnvDecay);break}}}},wn=class Ut{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(A){this.tableIndex=A}static copyFrom(A){let t=new Ut(A.tableIndex);return t.channel=A.channel,t.phaseGroup=A.phaseGroup,t.fusOptions=A.fusOptions,t}static read(A){let t=N(A.data,2),n=N(A.data,2),s=N(A.data,4),a=N(A.data,4),i=new Ut(a);return i.channel=s,i.fusOptions=t,i.phaseGroup=n,i}static fromSFZone(A,t){let n=A.indexOf(t.sample);if(n<0)throw new Error(`Wave link error: Sample ${t.sample.name} does not exist in the sample list.`);let s=new Ut(n);switch(t.sample.sampleType){default:case DA.leftSample:case DA.monoSample:s.channel=1;break;case DA.rightSample:s.channel=2}return s}write(){let A=new P(12);return J(A,this.fusOptions),J(A,this.phaseGroup),IA(A,this.channel),IA(A,this.tableIndex),gA("wlnk",A)}},Tt=class Ve extends je{articulation=new Da;keyRange={min:0,max:127};velRange={min:0,max:127};keyGroup=0;fusOptions=0;usLayer=0;waveSample;waveLink;constructor(A,t){super(),this.waveSample=t,this.waveLink=A}static copyFrom(A){let t=new Ve(wn.copyFrom(A.waveLink),ze.copyFrom(A.waveSample));return t.keyGroup=A.keyGroup,t.keyRange={...A.keyRange},t.velRange={...A.velRange},t.usLayer=A.usLayer,t.fusOptions=A.fusOptions,t.articulation.copyFrom(A.articulation),t}static read(A,t){let n=this.verifyAndReadList(t,"rgn ","rgn2"),s=n.find(m=>m.header==="wsmp"),a=s?ze.read(s):void 0,i=n.find(m=>m.header==="wlnk");if(!i){sA("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let I=wn.read(i),o=n.find(m=>m.header==="rgnh");if(!o){sA("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let g=A[I.tableIndex];g||Ve.parsingError(`Invalid sample index: ${I.tableIndex}. Samples available: ${A.length}`),a??=g.waveSample;let B=new Ve(I,a),d=N(o.data,2),C=N(o.data,2),h=N(o.data,2),u=N(o.data,2);return h===0&&u===0&&(u=127,h=0),B.keyRange.max=C,B.keyRange.min=d,B.velRange.max=u,B.velRange.min=h,B.fusOptions=N(o.data,2),B.keyGroup=N(o.data,2),o.data.length-o.data.currentIndex>=2&&(B.usLayer=N(o.data,2)),B.articulation.read(n),B}static fromSFZone(A,t){let n=ze.fromSFZone(A),s=wn.fromSFZone(t,A),a=new Ve(s,n);return a.keyRange.min=Math.max(A.keyRange.min,0),a.keyRange.max=A.keyRange.max,a.velRange.min=Math.max(A.velRange.min,0),a.velRange.max=A.velRange.max,a.keyGroup=A.getGenerator(r.exclusiveClass,0),a.articulation.fromSFZone(A),a}write(){let A=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),this.articulation.write()];return bA("rgn2",A,!0)}toSFZone(A,t){let n=t[this.waveLink.tableIndex];n||Ve.parsingError(`Invalid sample index: ${this.waveLink.tableIndex}`);let s=A.createZone(n);return s.keyRange=this.keyRange,s.velRange=this.velRange,this.keyRange.max===127&&this.keyRange.min===0&&(s.keyRange.min=-1),this.velRange.max===127&&this.velRange.min===0&&(s.velRange.min=-1),this.keyGroup!==0&&s.setGenerator(r.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(s,n),this.articulation.toSFZone(s),s.generators=s.generators.filter(a=>a.generatorValue!==H[a.generatorType].def),s}writeHeader(){let A=new P(12);return J(A,Math.max(this.keyRange.min,0)),J(A,this.keyRange.max),J(A,Math.max(this.velRange.min,0)),J(A,this.velRange.max),J(A,this.fusOptions),J(A,this.keyGroup),J(A,this.usLayer),gA("rgnh",A)}},Fn=class xt extends je{articulation=new Da;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(A){let t=new xt;return t.name=A.name,t.isGMGSDrum=A.isGMGSDrum,t.bankMSB=A.bankMSB,t.bankLSB=A.bankLSB,t.program=A.program,t.articulation.copyFrom(A.articulation),A.regions.forEach(n=>{t.regions.push(Tt.copyFrom(n))}),t}static read(A,t){let n=this.verifyAndReadList(t,"ins "),s=n.find(C=>C.header==="insh");if(!s)throw X(),new Error("No instrument header!");let a="",i=fe(n,"INFO");if(i){let C=oA(i.data);for(;C.header!=="INAM";)C=oA(i.data);a=CA(C.data,C.data.length).trim()}a.length<1&&(a="Unnamed Instrument");let I=new xt;I.name=a;let o=N(s.data,4),g=N(s.data,4),B=N(s.data,4);I.program=B&127,I.bankMSB=g>>>8&127,I.bankLSB=g&127,I.isGMGSDrum=g>>>31>0,MA(`%cParsing %c"${a}"%c...`,c.info,c.recognized,c.info);let d=fe(n,"lrgn");if(!d)throw X(),new Error("No region list!");I.articulation.read(n);for(let C=0;C<o;C++){let h=oA(d.data);this.verifyHeader(h,"LIST");let u=CA(h.data,4);u!=="rgn "&&u!=="rgn2"&&(X(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${u}"`));let m=Tt.read(A,h);m&&I.regions.push(m)}return X(),I}static fromSFPreset(A,t){let n=new xt;return n.name=A.name,n.bankLSB=A.bankLSB,n.bankMSB=A.bankMSB,n.program=A.program,n.isGMGSDrum=A.isGMGSDrum,OA(`%cConverting %c${A.toString()}%c to DLS...`,c.info,c.value,c.info),A.toFlattenedInstrument().zones.forEach(a=>{n.regions.push(Tt.fromSFZone(a,t))}),X(),n}write(){MA(`%cWriting %c${this.name}%c...`,c.info,c.recognized,c.info);let A=[this.writeHeader()],t=this.regions.map(s=>s.write());A.push(bA("lrgn",t,!0)),this.articulation.length>0&&A.push(this.articulation.write());let n=gA("INAM",ne(this.name,!0));return A.push(gA("INFO",n,!1,!0)),X(),bA("ins ",A,!0)}toSFPreset(A){let t=new pe(A);t.name=this.name,t.bankMSB=this.bankMSB,t.bankLSB=this.bankLSB,t.isGMGSDrum=this.isGMGSDrum,t.program=this.program;let n=new dt;n.name=this.name,t.createZone(n),this.articulation.toSFZone(n.globalZone),this.regions.forEach(s=>s.toSFZone(n,A.samples)),n.globalize(),n.globalZone.modulators.find(s=>s.destination===r.reverbEffectsSend)===void 0&&n.globalZone.addModulators(cA.copyFrom(ya)),n.globalZone.modulators.find(s=>s.destination===r.chorusEffectsSend)===void 0&&n.globalZone.addModulators(cA.copyFrom(ka)),n.globalZone.generators=n.globalZone.generators.filter(s=>s.generatorValue!==H[s.generatorType].def),A.addPresets(t),A.addInstruments(n)}writeHeader(){let A=new P(12);IA(A,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),IA(A,t),IA(A,this.program&127),gA("insh",A)}},wa={progressFunction:void 0},Fa=class _n extends je{samples=new Array;instruments=new Array;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"DLS Level 2.2",version:{major:2,minor:4}};static read(A){if(!A)throw new Error("No data provided!");let t=new P(A);OA("%cParsing DLS file...",c.info);let n=oA(t,!1);this.verifyHeader(n,"RIFF"),this.verifyText(CA(t,4).toLowerCase(),"dls ");let s=[];for(;t.currentIndex<t.length;)s.push(oA(t));let a=new _n;a.soundBankInfo.name="Unnamed DLS",a.soundBankInfo.product="SpessaSynth DLS",a.soundBankInfo.comment="(no description)";let i=fe(s,"INFO");if(i)for(;i.data.currentIndex<i.data.length;){let u=oA(i.data),m=u.header,y=CA(u.data,u.size);switch(m){case"INAM":a.soundBankInfo.name=y;break;case"ICRD":a.soundBankInfo.creationDate=ts(y);break;case"ICMT":a.soundBankInfo.comment=y;break;case"ISBJ":a.soundBankInfo.subject=y;break;case"ICOP":a.soundBankInfo.copyright=y;break;case"IENG":a.soundBankInfo.engineer=y;break;case"IPRD":a.soundBankInfo.product=y;break;case"ISFT":a.soundBankInfo.software=y}}this.printInfo(a);let I=s.find(u=>u.header==="colh");if(!I)return this.parsingError("No colh chunk!"),5;let o=N(I.data,4);p(`%cInstruments amount: %c${o}`,c.info,c.recognized);let g=fe(s,"wvpl");if(!g)return this.parsingError("No wvpl chunk!"),5;this.verifyAndReadList(g,"wvpl").forEach(u=>{a.samples.push(Ls.read(u))});let d=fe(s,"lins");if(!d)return this.parsingError("No lins chunk!"),5;let C=this.verifyAndReadList(d,"lins");MA("%cLoading instruments...",c.info),C.length!==o&&sA(`Colh reported invalid amount of instruments. Detected ${C.length}, expected ${o}`),C.forEach(u=>{a.instruments.push(Fn.read(a.samples,u))}),X();let h=s.find(u=>u.header==="pgal");if(h){p("%cFound the instrument aliasing chunk!",c.recognized);let u=h.data;u[0]===2&&u[1]+u[2]+u[3]===0&&(u.currentIndex+=4);let m=a.instruments.find(F=>dA.isXGDrums(F.bankMSB)||F.isGMGSDrum);if(!m)return sA("MobileBAE aliasing chunk without a drum preset. Aborting!"),a;let y=u.slice(u.currentIndex,u.currentIndex+128);u.currentIndex+=128;for(let F=0;F<128;F++){let k=y[F];if(k===F)continue;let D=m.regions.find(L=>L.keyRange.max===k&&L.keyRange.min===k);if(!D){sA(`Invalid drum alias ${F} to ${k}: region does not exist.`);continue}let v=Tt.copyFrom(D);v.keyRange.max=F,v.keyRange.min=F,m.regions.push(v)}for(u.currentIndex+=4;u.currentIndex<u.length;){let F=N(u,2),k=F&127,D=F>>7&127,v=u[u.currentIndex++],L=u[u.currentIndex++];L!==0&&sA(`Invalid alias byte. Expected 0, got ${L}`);let E=N(u,2),V=E&127,K=E>>7&127,nA=u[u.currentIndex++];L=u[u.currentIndex++],L!==0&&sA(`Invalid alias header. Expected 0, got ${L}`);let j=a.instruments.find(q=>q.bankLSB===V&&q.bankMSB===K&&q.program===nA&&!q.isGMGSDrum);if(!j){sA(`Invalid alias. Missing instrument: ${V}:${K}:${nA}`);continue}let O=Fn.copyFrom(j);O.bankMSB=D,O.bankLSB=k,O.program=v,a.instruments.push(O)}}return p(`%cParsing finished! %c"${a.soundBankInfo.name||"UNNAMED"}"%c has %c${a.instruments.length}%c instruments and %c${a.samples.length}%c samples.`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info),X(),a}static fromSF(A){MA("%cSaving SF2 to DLS level 2...",c.info);let t=new _n;return t.soundBankInfo={...A.soundBankInfo},t.soundBankInfo.comment=(t.soundBankInfo.comment??"(No description)")+`
18
- Converted from SF2 to DLS with SpessaSynth`,A.samples.forEach(n=>{t.samples.push(Ls.fromSFSample(n))}),A.presets.forEach(n=>{t.instruments.push(Fn.fromSFPreset(n,A.samples))}),p("%cConversion complete!",c.recognized),X(),t}static printInfo(A){for(let[t,n]of Object.entries(A.soundBankInfo)){if(typeof n=="object"&&"major"in n){let s=n;p(`%c${t}: %c"${s.major}.${s.minor}"`,c.info,c.recognized)}p(`%c${t}: %c${n.toLocaleString()}`,c.info,c.recognized)}}async write(A=wa){MA("%cSaving DLS...",c.info);let t=new P(4);IA(t,this.instruments.length);let n=gA("colh",t);MA("%cWriting instruments...",c.info);let s=bA("lins",this.instruments.map(y=>y.write()),!0);p("%cSuccess!",c.recognized),X(),MA("%cWriting WAVE samples...",c.info);let a=0,i=[],I=[],o=0;for(let y of this.samples){let F=y.write();await A?.progressFunction?.(y.name,o,this.samples.length),i.push(a),a+=F.length,I.push(F),o++}let g=bA("wvpl",I,!0);p("%cSucceeded!",c.recognized);let B=new P(8+4*i.length);IA(B,8),IA(B,i.length);for(let y of i)IA(B,y);let d=gA("ptbl",B);this.soundBankInfo.software="SpessaSynth";let C=[],h=(y,F)=>{C.push(gA(y,ne(F,!0)))};for(let[y,F]of Object.entries(this.soundBankInfo)){let k=y,D=F;if(D)switch(k){case"name":h("INAM",D);break;case"comment":h("ICMT",D);break;case"copyright":h("ICOP",D);break;case"creationDate":h("ICRD",D.toISOString());break;case"engineer":h("IENG",D);break;case"product":h("IPRD",D);break;case"romVersion":case"version":case"soundEngine":case"romInfo":break;case"software":h("ISFT",D);break;case"subject":h("ISBJ",D)}}let u=bA("INFO",C,!0);p("%cCombining everything...");let m=bA("RIFF",[ne("DLS "),n,s,d,g,u]);return p("%cSaved successfully!",c.recognized),X(),m.buffer}toSF(){OA("%cConverting DLS to SF2...",c.info);let A=new Ga;return A.soundBankInfo.version.minor=4,A.soundBankInfo.version.major=2,A.soundBankInfo={...this.soundBankInfo},A.soundBankInfo.comment=(A.soundBankInfo.comment??"(No description)")+`
19
- Converted from DLS to SF2 with SpessaSynth`,this.samples.forEach(t=>{t.toSFSample(A)}),this.instruments.forEach(t=>{t.toSFPreset(A)}),A.flush(),p("%cConversion complete!",c.recognized),X(),A}},Ga=class Ht{static isSF3DecoderReady=Ot.isInitialized;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=Ea.map(cA.copyFrom.bind(cA));customDefaultModulators=!1;_isXGBank=!1;get isXGBank(){return this._isXGBank}static mergeSoundBanks(...A){let t=A.shift();if(!t)throw new Error("No sound banks provided!");let n=t.presets;for(;A.length;){let a=A?.shift()?.presets;a&&a.forEach(i=>{n.find(I=>i.matches(I))===void 0&&n.push(i)})}let s=new Ht;return s.addCompletePresets(n),s.soundBankInfo={...t.soundBankInfo},s}static async getSampleSoundBankFile(){let A=new Ht,t=new Float32Array(128);for(let I=0;I<128;I++)t[I]=I/128*2-1;let n=new mi;n.name="Saw",n.originalKey=65,n.pitchCorrection=20,n.loopEnd=127,n.setAudioData(t,44100),A.addSamples(n);let s=new dt;s.name="Saw Wave",s.globalZone.addGenerators(new wA(r.initialAttenuation,375),new wA(r.releaseVolEnv,-1e3),new wA(r.sampleModes,1)),s.createZone(n),s.createZone(n).addGenerators(new wA(r.fineTune,-9)),A.addInstruments(s);let i=new pe(A);return i.name="Saw Wave",i.createZone(s),A.addPresets(i),A.soundBankInfo.name="Dummy",A.flush(),await A.writeSF2()}static copyFrom(A){let t=new Ht;return A.presets.forEach(n=>t.clonePreset(n)),t.soundBankInfo={...A.soundBankInfo},t}addCompletePresets(A){this.addPresets(...A);let t=[];for(let s of A)for(let a of s.zones)a.instrument&&!t.includes(a.instrument)&&t.push(a.instrument);this.addInstruments(...t);let n=[];for(let s of t)for(let a of s.zones)a.sample&&!n.includes(a.sample)&&n.push(a.sample);this.addSamples(...n)}async writeDLS(A=wa){return Fa.fromSF(this).write(A)}async writeSF2(A=Xn){return ki(this,A)}addPresets(...A){this.presets.push(...A)}addInstruments(...A){this.instruments.push(...A)}addSamples(...A){this.samples.push(...A)}cloneSample(A){let t=this.samples.find(s=>s.name===A.name);if(t)return t;let n=new Zt(A.name,A.sampleRate,A.originalKey,A.pitchCorrection,A.sampleType,A.loopStart,A.loopEnd);if(A.isCompressed?n.setCompressedData(A.getRawData(!0)):n.setAudioData(A.getAudioData(),A.sampleRate),this.addSamples(n),A.linkedSample){let s=this.cloneSample(A.linkedSample);s.linkedSample||n.setLinkedSample(s,n.sampleType)}return n}cloneInstrument(A){let t=this.instruments.find(s=>s.name===A.name);if(t)return t;let n=new dt;n.name=A.name,n.globalZone.copyFrom(A.globalZone);for(let s of A.zones)n.createZone(this.cloneSample(s.sample)).copyFrom(s);return this.addInstruments(n),n}clonePreset(A){let t=this.presets.find(s=>s.name===A.name);if(t)return t;let n=new pe(this);n.name=A.name,n.bankMSB=A.bankMSB,n.bankLSB=A.bankLSB,n.isGMGSDrum=A.isGMGSDrum,n.program=A.program,n.library=A.library,n.genre=A.genre,n.morphology=A.morphology,n.globalZone.copyFrom(A.globalZone);for(let s of A.zones)n.createZone(this.cloneInstrument(s.instrument)).copyFrom(s);return this.addPresets(n),n}flush(){this.presets.sort(te.sorter.bind(te)),this.parseInternal()}trimSoundBank(A){let t=(s,a)=>{let i=0;for(let I=0;I<s.zones.length;I++){let o=s.zones[I],g=o.keyRange,B=o.velRange,d=!1;for(let C of a)if(C.key>=g.min&&C.key<=g.max&&C.velocity>=B.min&&C.velocity<=B.max){d=!0;break}!d&&o.sample&&(p(`%c${o.sample.name}%c removed from %c${s.name}%c.`,c.recognized,c.info,c.recognized,c.info),s.deleteZone(I)&&(i++,I--,p(`%c${o.sample.name}%c deleted`,c.recognized,c.info)),o.sample.useCount<1&&this.deleteSample(o.sample))}return i};OA("%cTrimming sound bank...",c.info);let n=A.getUsedProgramsAndKeys(this);MA("%cModifying sound bank...",c.info),p("Detected keys for midi:",n);for(let s=0;s<this.presets.length;s++){let a=this.presets[s],i=n.get(a);if(i===void 0)p(`%cDeleting preset %c${a.name}%c and its zones`,c.info,c.recognized,c.info),this.deletePreset(a),s--;else{let I=[...i].map(g=>{let B=g.split("-");return{key:parseInt(B[0]),velocity:parseInt(B[1])}});MA(`%cTrimming %c${a.name}`,c.info,c.recognized),p(`Keys for ${a.name}:`,I);let o=0;for(let g=0;g<a.zones.length;g++){let B=a.zones[g],d=B.keyRange,C=B.velRange,h=!1;for(let u of I)if(u.key>=d.min&&u.key<=d.max&&u.velocity>=C.min&&u.velocity<=C.max&&B.instrument){h=!0;let m=t(B.instrument,I);p(`%cTrimmed off %c${m}%c zones from %c${B.instrument.name}`,c.info,c.recognized,c.info,c.recognized);break}!h&&B.instrument&&(o++,a.deleteZone(g),B.instrument.useCount<1&&this.deleteInstrument(B.instrument),g--)}p(`%cTrimmed off %c${o}%c zones from %c${a.name}`,c.info,c.recognized,c.info,c.recognized),X()}}this.removeUnusedElements(),p("%cSound bank modified!",c.recognized),X(),X()}removeUnusedElements(){this.instruments=this.instruments.filter(A=>{A.deleteUnusedZones();let t=A.useCount<1;return t&&A.delete(),!t}),this.samples=this.samples.filter(A=>{let t=A.useCount<1;return t&&A.unlinkSample(),!t})}deleteInstrument(A){A.delete(),this.instruments.splice(this.instruments.indexOf(A),1)}deletePreset(A){A.delete(),this.presets.splice(this.presets.indexOf(A),1)}deleteSample(A){A.unlinkSample(),this.samples.splice(this.samples.indexOf(A),1)}getPreset(A,t){return Qa(this.presets,A,t)}destroySoundBank(){this.presets.length=0,this.instruments.length=0,this.samples.length=0}parsingError(A){throw new Error(`SF parsing error: ${A} The file may be corrupted.`)}parseInternal(){this._isXGBank=!1;let A=new Set([0,1,2,3,4,5,6,7,8,9,16,17,24,25,26,27,28,29,30,31,32,33,40,41,48,56,57,58,64,65,66,126,127]);for(let t of this.presets)if(dA.isXGDrums(t.bankMSB)&&(this._isXGBank=!0,!A.has(t.program))){this._isXGBank=!1,p(`%cThis bank is not valid XG. Preset %c${t.toString()}%c is not a valid XG drum. XG mode will use presets on bank 128.`,c.info,c.value,c.info);break}}printInfo(){for(let[A,t]of Object.entries(this.soundBankInfo)){if(typeof t=="object"&&"major"in t){let n=t;p(`%c${A}: %c"${n.major}.${n.minor}"`,c.info,c.recognized)}p(`%c${A}: %c${t.toLocaleString()}`,c.info,c.recognized)}}},bi=class extends wA{constructor(e){let A=e.currentIndex,t=e[A+1]<<8|e[A],n=jn(e[A+2],e[A+3]);e.currentIndex+=4,super(t,n,!1)}};function Ns(e){let A=[];for(;e.data.length>e.data.currentIndex;)A.push(new bi(e.data));return A.pop(),A}var vi=class extends Ca{constructor(e,A,t,n){let s=t.find(i=>i.generatorType===r.instrument),a;if(s)a=n[s.generatorValue];else throw new Error("No instrument ID found in preset zone.");super(e,a),this.addGenerators(...t),this.addModulators(...A)}};function Li(e,A,t,n,s){let a=e.gen,i=e.mod,I=0,o=0;for(let g of s)for(let B=0;B<g.zonesCount;B++){let d=a[o++],C=a[o],h=A.slice(d,C),u=i[I++],m=i[I],y=t.slice(u,m);h.find(F=>F.generatorType===r.instrument)!==void 0?g.createSoundFontZone(y,h,n):(g.globalZone.addGenerators(...h),g.globalZone.addModulators(...y))}}var Ni=class extends pe{zoneStartIndex;zonesCount=0;constructor(e,A){super(A),this.name=CA(e.data,20).replace(/\d{3}:\d{3}/,""),this.program=N(e.data,2);let t=N(e.data,2);this.bankMSB=t&127,this.isGMGSDrum=(t&128)>0,this.bankLSB=t>>8,this.zoneStartIndex=N(e.data,2),this.library=N(e.data,4),this.genre=N(e.data,4),this.morphology=N(e.data,4)}createSoundFontZone(e,A,t){let n=new vi(this,e,A,t);return this.zones.push(n),n}};function Us(e,A){let t=[];for(;e.data.length>e.data.currentIndex;){let n=new Ni(e,A);if(t.length>0){let s=t[t.length-1];s.zonesCount=n.zoneStartIndex-s.zoneStartIndex}t.push(n)}return t.pop(),t}var Ui=class extends ha{constructor(e,A,t,n){let s=t.find(i=>i.generatorType===r.sampleID),a;if(s)a=n[s.generatorValue];else throw new Error("No sample ID found in instrument zone.");super(e,a),this.addGenerators(...t),this.addModulators(...A)}};function Ti(e,A,t,n,s){let a=e.gen,i=e.mod,I=0,o=0;for(let g of s)for(let B=0;B<g.zonesCount;B++){let d=a[o++],C=a[o],h=A.slice(d,C),u=i[I++],m=i[I],y=t.slice(u,m);h.find(F=>F.generatorType===r.sampleID)?g.createSoundFontZone(y,h,n):(g.globalZone.addGenerators(...h),g.globalZone.addModulators(...y))}}var xi=class extends dt{zoneStartIndex;zonesCount=0;constructor(e){super(),this.name=CA(e.data,20),this.zoneStartIndex=N(e.data,2)}createSoundFontZone(e,A,t){let n=new Ui(this,e,A,t);return this.zones.push(n),n}};function Ts(e){let A=[];for(;e.data.length>e.data.currentIndex;){let t=new xi(e);if(A.length>0){let n=A[A.length-1];n.zonesCount=t.zoneStartIndex-n.zoneStartIndex}A.push(t)}return A.pop(),A}function Gn(e){let A=[];for(;e.data.length>e.data.currentIndex;){let t=e.data,n=N(t,2),s=N(t,2),a=jn(t[t.currentIndex++],t[t.currentIndex++]),i=N(t,2),I=N(t,2);A.push(new pA(n,i,s,a,I))}return A.pop(),A}function bt(e){let A=[],t=[];for(;e.data.length>e.data.currentIndex;)t.push(N(e.data,2)),A.push(N(e.data,2));return{mod:A,gen:t}}var Hi=class extends Ga{sampleDataStartIndex=0;constructor(e,A=!0){if(super(),A)throw new Error("Using the constructor directly is deprecated. Use SoundBankLoader.fromArrayBuffer() instead.");let t=new P(e);OA("%cParsing a SoundFont2 file...",c.info),t||(X(),this.parsingError("No data provided!"));let n=oA(t,!1);this.verifyHeader(n,"riff");let s=CA(t,4).toLowerCase();if(s!=="sfbk"&&s!=="sfpk")throw X(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${s}"`);let a=s==="sfpk",i=oA(t);this.verifyHeader(i,"list");let I=CA(i.data,4);if(I!=="INFO")throw X(),new SyntaxError(`Invalid soundFont! Expected "INFO" or "${I}"`);let o;for(;i.data.length>i.data.currentIndex;){let G=oA(i.data),M=ee(G.data,G.data.length),x=G.header;switch(x){case"ifil":case"iver":let AA=N(G.data,2),tA=N(G.data,2);x==="ifil"?this.soundBankInfo.version={major:AA,minor:tA}:this.soundBankInfo.romVersion={major:AA,minor:tA};break;case"DMOD":{this.defaultModulators=Gn(G),this.customDefaultModulators=!0;break}case"LIST":{CA(G.data,4)==="xdta"&&(p("%cExtended SF2 found!",c.recognized),o=G);break}case"ICRD":this.soundBankInfo.creationDate=ts(CA(G.data,G.data.length));break;case"ISFT":this.soundBankInfo.software=M;break;case"IPRD":this.soundBankInfo.product=M;break;case"IENG":this.soundBankInfo.engineer=M;break;case"ICOP":this.soundBankInfo.copyright=M;break;case"INAM":this.soundBankInfo.name=M;break;case"ICMT":this.soundBankInfo.comment=M;break;case"irom":this.soundBankInfo.romInfo=M;break;case"isng":this.soundBankInfo.soundEngine=M}}this.printInfo();let g={};o!==void 0&&(g.phdr=oA(o.data),g.pbag=oA(o.data),g.pmod=oA(o.data),g.pgen=oA(o.data),g.inst=oA(o.data),g.ibag=oA(o.data),g.imod=oA(o.data),g.igen=oA(o.data),g.shdr=oA(o.data));let B=oA(t,!1);this.verifyHeader(B,"list"),this.verifyText(CA(t,4),"sdta"),p("%cVerifying smpl chunk...",c.warn);let d=oA(t,!1);this.verifyHeader(d,"smpl");let C;if(a){p("%cSF2Pack detected, attempting to decode the smpl chunk...",c.info);try{C=Ot.decode(t.buffer.slice(t.currentIndex,t.currentIndex+B.size-12)).data[0]}catch(G){throw X(),new Error(`SF2Pack Ogg Vorbis decode error: ${G}`)}p(`%cDecoded the smpl chunk! Length: %c${C.length}`,c.info,c.value)}else C=t,this.sampleDataStartIndex=t.currentIndex;p(`%cSkipping sample chunk, length: %c${B.size-12}`,c.info,c.value),t.currentIndex+=B.size-12,p("%cLoading preset data chunk...",c.warn);let h=oA(t);this.verifyHeader(h,"list"),CA(h.data,4);let u=oA(h.data);this.verifyHeader(u,"phdr");let m=oA(h.data);this.verifyHeader(m,"pbag");let y=oA(h.data);this.verifyHeader(y,"pmod");let F=oA(h.data);this.verifyHeader(F,"pgen");let k=oA(h.data);this.verifyHeader(k,"inst");let D=oA(h.data);this.verifyHeader(D,"ibag");let v=oA(h.data);this.verifyHeader(v,"imod");let L=oA(h.data);this.verifyHeader(L,"igen");let E=oA(h.data);this.verifyHeader(E,"shdr"),p("%cParsing samples...",c.info),t.currentIndex=this.sampleDataStartIndex;let V=bs(E,C,o===void 0);if(o&&g.shdr){let G=bs(g.shdr,new Float32Array(1),!1);G.length===V.length&&V.forEach((M,x)=>{M.name+=G[x].name,M.linkedSampleIndex|=G[x].linkedSampleIndex<<16})}V.forEach(G=>G.name=G.name.trim()),this.samples.push(...V);let K=Ns(L),nA=Gn(v),j=Ts(k);if(o&&g.inst){let G=Ts(g.inst);G.length===j.length&&(j.forEach((M,x)=>{M.name+=G[x].name,M.zoneStartIndex|=G[x].zoneStartIndex}),j.forEach((M,x)=>{x<j.length-1&&(M.zonesCount=j[x+1].zoneStartIndex-M.zoneStartIndex)}))}j.forEach(G=>G.name=G.name.trim()),this.instruments.push(...j);let O=bt(D);if(o&&g.ibag){let G=bt(g.ibag);for(let M=0;M<O.mod.length;M++)O.mod[M]|=G.mod[M]<<16;for(let M=0;M<O.gen.length;M++)O.gen[M]|=G.gen[M]<<16}Ti(O,K,nA,this.samples,j);let q=Ns(F),Z=Gn(y),eA=Us(u,this);if(o&&g.phdr){let G=Us(g.phdr,this);G.length===eA.length&&(eA.forEach((M,x)=>{M.name+=G[x].name,M.zoneStartIndex|=G[x].zoneStartIndex}),eA.forEach((M,x)=>{x<eA.length-1&&(M.zonesCount=eA[x+1].zoneStartIndex-M.zoneStartIndex)}))}eA.forEach(G=>G.name===G.name.trim()),this.addPresets(...eA);let iA=bt(m);if(o&&g.pbag){let G=bt(g.pbag);for(let M=0;M<iA.mod.length;M++)iA.mod[M]|=G.mod[M]<<16;for(let M=0;M<iA.gen.length;M++)iA.gen[M]|=G.gen[M]<<16}if(Li(iA,q,Z,this.instruments,eA),!this.presets.some(G=>G.bankLSB>0)){p("%cCopying MSB to LSBs...",c.info);for(let G of this.presets)dA.isValidXGMSB(G.bankMSB)||(G.bankLSB=G.bankMSB)}this.flush(),p(`%cParsing finished! %c"${this.soundBankInfo.name}"%c has %c${this.presets.length}%c presets,
20
- %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info),X()}verifyHeader(e,A){e.header.toLowerCase()!==A.toLowerCase()&&(X(),this.parsingError(`Invalid chunk header! Expected "${A.toLowerCase()}" got "${e.header.toLowerCase()}"`))}verifyText(e,A){e.toLowerCase()!==A.toLowerCase()&&(X(),this.parsingError(`Invalid FourCC: Expected "${A.toLowerCase()}" got "${e.toLowerCase()}"\``))}},ut=class{static fromArrayBuffer(e){let A=e.slice(8,12),t=new P(A);return CA(t,4).toLowerCase()==="dls "?this.loadDLS(e):new Hi(e,!1)}static loadDLS(e){return Fa.read(e).toSF()}},Ra=class{soundBankManager=new Po(this.updatePresetList.bind(this));midiChannels=[];keyModifierManager=new Ai;totalVoicesAmount=0;processorInitialized=Ot.isInitialized;currentSynthTime=0;sampleRate;enableEffects=!0;enableEventSystem;onEventCall;systemExclusive=$o.bind(this);resetAllControllers=So.bind(this);setMasterParameter=vo.bind(this);getMasterParameter=Lo.bind(this);getAllMasterParameters=No.bind(this);getVoicesForPreset=_o.bind(this);killVoices=Zo.bind(this);getVoices=jo.bind(this);privateProps;savedSnapshot;eventQueue=[];sampleTime;constructor(e,A=Fs){let t=$n(A,Fs);if(this.enableEffects=t.enableEffects,this.enableEventSystem=t.enableEventSystem,this.currentSynthTime=t.initialTime,this.sampleRate=e,this.sampleTime=1/e,isNaN(t.initialTime)||isNaN(e))throw new Error("Initial time or sample rate is NaN!");this.privateProps=new ti(this.callEvent.bind(this),this.getVoices.bind(this),this.killVoices.bind(this),Mo*(44100/e),Jo*(44100/e),Vo*(44100/e));for(let n=0;n<Rn;n++)this.createMIDIChannelInternal(!1);this.processorInitialized.then(()=>{p("%cSpessaSynth is ready!",c.recognized)})}applySynthesizerSnapshot(e){this.savedSnapshot=e,e.apply(this),p("%cFinished applying snapshot!",c.info),this.resetAllControllers()}getSnapshot(){return is.create(this)}setEmbeddedSoundBank(e,A){let t=ut.fromArrayBuffer(e);this.soundBankManager.addSoundBank(t,Rt,A);let n=this.soundBankManager.priorityOrder;n.pop(),n.unshift(Rt),this.soundBankManager.priorityOrder=n,this.savedSnapshot!==void 0&&this.applySynthesizerSnapshot(this.savedSnapshot),p(`%cEmbedded sound bank set at offset %c${A}`,c.recognized,c.value)}clearEmbeddedBank(){this.soundBankManager.soundBankList.some(e=>e.id===Rt)&&this.soundBankManager.deleteSoundBank(Rt)}createMIDIChannel(){this.createMIDIChannelInternal(!0)}stopAllChannels(e=!1){p("%cStop all received!",c.info);for(let A of this.midiChannels)A.stopAllNotes(e)}renderAudio(e,A,t,n=0,s=0){this.renderAudioSplit(A,t,Array(16).fill(e),n,s)}renderAudioSplit(e,A,t,n=0,s=0){let a=this.currentSynthTime;for(;this.eventQueue[0]?.time<=a;)this.eventQueue.shift()?.callback();let i=e[0],I=e[1],o=A[0],g=A[1];n=Math.max(n,0);let B=s||t[0][0].length-n;this.totalVoicesAmount=0,this.midiChannels.forEach((d,C)=>{if(d.voices.length<1||d.isMuted)return;let h=d.voices.length,u=C%16;d.renderAudio(t[u][0],t[u][1],i,I,o,g,n,B),this.totalVoicesAmount+=d.voices.length,d.voices.length!==h&&d.sendChannelProperty()}),this.currentSynthTime+=B*this.sampleTime}destroySynthProcessor(){this.midiChannels.forEach(e=>{e.voices.length=0,e.sustainedVoices.length=0,e.lockedControllers=[],e.preset=void 0}),this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}controllerChange(e,A,t){this.midiChannels[e].controllerChange(A,t)}noteOn(e,A,t){this.midiChannels[e].noteOn(A,t)}noteOff(e,A){this.midiChannels[e].noteOff(A)}polyPressure(e,A,t){this.midiChannels[e].polyPressure(A,t)}channelPressure(e,A){this.midiChannels[e].channelPressure(A)}pitchWheel(e,A){this.midiChannels[e].pitchWheel(A)}programChange(e,A){this.midiChannels[e].programChange(A)}processMessage(e,A=0,t=!1,n=Za){let s=()=>{let i=As(e[0]),I=i.channel+A;switch(i.status){case b.noteOn:{let o=e[2];o>0?this.noteOn(I,e[1],o):this.noteOff(I,e[1]);break}case b.noteOff:t?this.midiChannels[I].killNote(e[1]):this.noteOff(I,e[1]);break;case b.pitchWheel:this.pitchWheel(I,e[2]<<7|e[1]);break;case b.controllerChange:this.controllerChange(I,e[1],e[2]);break;case b.programChange:this.programChange(I,e[1]);break;case b.polyPressure:this.polyPressure(I,e[0],e[1]);break;case b.channelPressure:this.channelPressure(I,e[1]);break;case b.systemExclusive:this.systemExclusive(new P(e.slice(1)),A);break;case b.reset:this.stopAllChannels(!0),this.resetAllControllers();break;default:break}},a=n.time;a>this.currentSynthTime?(this.eventQueue.push({callback:s.bind(this),time:a}),this.eventQueue.sort((i,I)=>i.time-I.time)):s()}clearCache(){this.privateProps.cachedVoices=[]}setMIDIVolume(e){this.privateProps.midiVolume=Math.pow(e,Math.E)}setMasterTuning(e){e=Math.round(e);for(let A of this.midiChannels)A.setCustomController(rA.masterTuning,e)}callEvent(e,A){this.onEventCall?.({type:e,data:A})}getCachedVoice(e,A,t){let n=e.bankMSB,s=e.bankLSB,{isGMGSDrum:a,program:i}=e;return a&&(n=128,s=0),this.privateProps.cachedVoices?.[n]?.[s]?.[i]?.[A]?.[t]}setCachedVoice(e,A,t,n){let s=e.bankMSB,a=e.bankLSB,{isGMGSDrum:i,program:I}=e;i&&(s=128,a=0),this.privateProps.cachedVoices[s]||(this.privateProps.cachedVoices[s]=[]),this.privateProps.cachedVoices[s][a]||(this.privateProps.cachedVoices[s][a]=[]),this.privateProps.cachedVoices[s][a][I]||(this.privateProps.cachedVoices[s][a][I]=[]),this.privateProps.cachedVoices[s][a][I][A]||(this.privateProps.cachedVoices[s][a][I][A]=[]),this.privateProps.cachedVoices[s][a][I][A][t]=n}createMIDIChannelInternal(e){let A=new Qi(this,this.privateProps,this.privateProps.defaultPreset,this.midiChannels.length);this.midiChannels.push(A),e&&(this.callEvent("newChannel",void 0),A.sendChannelProperty(),this.midiChannels[this.midiChannels.length-1].setDrums(!0))}updatePresetList(){let e=this.soundBankManager.presetList;this.clearCache(),this.privateProps.callEvent("presetListChange",e),this.getDefaultPresets(),this.midiChannels.forEach(A=>{A.setPresetLock(!1)}),this.resetAllControllers(!1)}getDefaultPresets(){this.privateProps.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.privateProps.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}};var zt=Ee.consoleColors;var Ma="spessasynth-worklet-processor";function ba(e,A){return{...A,...e??{}}}var va={skipToFirstNoteOn:!0,initialPlaybackRate:1};var rs=class extends Kt{events=[];constructor(A){super(),super.copyFrom(A),this.events=[]}},Wt=class extends Le{tracks;embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(A){super(),super.copyMetadataFrom(A),this.tracks=A.tracks.map(t=>new rs(t)),this.embeddedSoundBankSize=A?.embeddedSoundBank?.byteLength}};var _t={shuffleOn:1,shuffleOff:2,index:3};var jt=class{synthesizer;sequencer;post;alive=!1;constructor(A,t,n){this.synthesizer=new Ra(A,t),this.sequencer=new sa(this.synthesizer),this.post=n,this.synthesizer.onEventCall=s=>{this.post({type:"eventCall",data:s,currentTime:this.synthesizer.currentSynthTime})},this.sequencer.onEventCall=s=>{if(s.type==="songListChange"){let i=s.data.newSongList.map(I=>new Wt(I));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:i}},currentTime:this.synthesizer.currentSynthTime});return}this.post({type:"sequencerReturn",data:s,currentTime:this.synthesizer.currentSynthTime})}}postReady(A,t,n=[]){this.post({type:"isFullyInitialized",data:{type:A,data:t},currentTime:this.synthesizer.currentSynthTime},n)}postProgress(A,t){this.post({type:"renderingProgress",data:{type:A,data:t},currentTime:this.synthesizer.currentSynthTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencer}handleMessage(A){let t=A.channelNumber,n;if(t>=0&&(n=this.synthesizer.midiChannels[t],n===void 0)){Ee.SpessaSynthWarn(`Trying to access channel ${t} which does not exist... ignoring!`);return}switch(A.type){case"midiMessage":this.synthesizer.processMessage(A.data.messageData,A.data.channelOffset,A.data.force,A.data.options);break;case"customCcChange":n?.setCustomController(A.data.ccNumber,A.data.ccValue);break;case"ccReset":t===Be?this.synthesizer.resetAllControllers():n?.resetControllers();break;case"setChannelVibrato":if(t===Be)for(let s of this.synthesizer.midiChannels)A.data.rate===Be?s.disableAndLockGSNRPN():s.setVibrato(A.data.depth,A.data.rate,A.data.delay);else A.data.rate===Be?n?.disableAndLockGSNRPN():n?.setVibrato(A.data.depth,A.data.rate,A.data.delay);break;case"stopAll":t===Be?this.synthesizer.stopAllChannels(A.data===1):n?.stopAllNotes(A.data===1);break;case"killNotes":this.synthesizer.killVoices(A.data);break;case"muteChannel":n?.muteChannel(A.data);break;case"addNewChannel":this.synthesizer.createMIDIChannel();break;case"setMasterParameter":this.synthesizer.setMasterParameter(A.data.type,A.data.data);break;case"setDrums":n?.setDrums(A.data);break;case"transposeChannel":n?.transposeChannel(A.data.semitones,A.data.force);break;case"lockController":if(A.data.controllerNumber===Be)n?.setPresetLock(A.data.isLocked);else{if(!n)return;n.lockedControllers[A.data.controllerNumber]=A.data.isLocked}break;case"sequencerSpecific":{if(!this.sequencer)return;let s=this.sequencer,a=A.data;switch(a.type){default:break;case"loadNewSongList":try{let I=a.data.map(o=>"duration"in o?Le.copyFrom(o):Le.fromArrayBuffer(o.binary,o.fileName));s.loadNewSongList(I)}catch(i){console.error(i),this.post({type:"sequencerReturn",data:{type:"midiError",data:i},currentTime:this.synthesizer.currentSynthTime})}break;case"pause":s.pause();break;case"play":s.play();break;case"setTime":s.currentTime=a.data;break;case"changeMIDIMessageSending":s.externalMIDIPlayback=a.data;break;case"setPlaybackRate":s.playbackRate=a.data;break;case"setLoopCount":s.loopCount=a.data;break;case"changeSong":switch(a.data.changeType){case _t.shuffleOff:s.shuffleMode=!1;break;case _t.shuffleOn:s.shuffleMode=!0;break;case _t.index:a.data.data!==void 0&&(console.log("INDEX",a.data),s.songIndex=a.data.data);break}break;case"getMIDI":if(!s.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:s.midiData},currentTime:this.synthesizer.currentSynthTime});break;case"setSkipToFirstNote":s.skipToFirstNoteOn=a.data;break}break}case"soundBankManager":try{let s=this.synthesizer.soundBankManager,a=A.data,i;switch(a.type){case"addSoundBank":i=ut.fromArrayBuffer(a.data.soundBankBuffer),s.addSoundBank(i,a.data.id,a.data.bankOffset),this.postReady("soundBankManager",null);break;case"deleteSoundBank":s.deleteSoundBank(a.data),this.postReady("soundBankManager",null);break;case"rearrangeSoundBanks":s.priorityOrder=a.data,this.postReady("soundBankManager",null)}}catch(s){this.post({type:"soundBankError",data:s,currentTime:this.synthesizer.currentSynthTime})}break;case"keyModifierManager":{let s=A.data,a=this.synthesizer.keyModifierManager;switch(s.type){default:return;case"addMapping":a.addMapping(s.data.channel,s.data.midiNote,s.data.mapping);break;case"clearMappings":a.clearMappings();break;case"deleteMapping":a.deleteMapping(s.data.channel,s.data.midiNote)}break}case"requestSynthesizerSnapshot":{let s=is.create(this.synthesizer);this.postReady("synthesizerSnapshot",s);break}case"setLogLevel":Ks(A.data.enableInfo,A.data.enableWarning,A.data.enableGroup);break;case"destroyWorklet":this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break;default:Ee.SpessaSynthWarn("Unrecognized event!",A);break}}};var $t=class extends jt{alive=!0;oneOutputMode;port;constructor(A,t,n,s){super(A,{enableEffects:!s.oneOutput,enableEventSystem:s?.enableEventSystem,initialTime:t},(a,i)=>{n.postMessage(a,i)}),this.port=n,this.oneOutputMode=s.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=a=>this.handleMessage(a.data),this.postReady("sf3Decoder",null)})}process(A,t){if(!this.alive)return!1;if(this.sequencer.processTick(),this.oneOutputMode){let n=t[0],s=[];for(let a=0;a<32;a+=2)s.push([n[a],n[a+1]]);this.synthesizer.renderAudioSplit([],[],s)}else this.synthesizer.renderAudioSplit(t[0],t[1],t.slice(2));return!0}handleMessage(A){if(A.type==="startOfflineRender"){this.startOfflineRender(A.data);return}super.handleMessage(A)}startOfflineRender(A){if(!this.sequencer)return;A.soundBankList.forEach((n,s)=>{try{this.synthesizer.soundBankManager.addSoundBank(ut.fromArrayBuffer(n.soundBankBuffer),`bank-${s}`,n.bankOffset)}catch(a){this.post({type:"soundBankError",data:a,currentTime:this.synthesizer.currentSynthTime})}}),A.snapshot!==void 0&&this.synthesizer.applySynthesizerSnapshot(A.snapshot),Ee.SpessaSynthInfo("%cRendering enabled! Starting render.",zt.info),this.sequencer.loopCount=A.loopCount,this.synthesizer.setMasterParameter("voiceCap",1/0);let t=ba(A.sequencerOptions,va);this.sequencer.skipToFirstNoteOn=t.skipToFirstNoteOn,this.sequencer.playbackRate=t.initialPlaybackRate;try{this.sequencer.loadNewSongList([Le.copyFrom(A.midiSequence)]),this.sequencer.play()}catch(n){console.error(n),this.post({type:"sequencerReturn",data:{type:"midiError",data:n},currentTime:this.synthesizer.currentSynthTime})}this.postReady("startOfflineRender",null)}};var Is=class extends AudioWorkletProcessor{process;core;constructor(A){super(),this.core=new $t(sampleRate,currentTime,this.port,A.processorOptions),this.process=this.core.process.bind(this.core)}};registerProcessor(Ma,Is);Ee.SpessaSynthInfo("%cProcessor successfully registered!",zt.recognized);
17
+ (${g})`,c.warn,c.value,c.unrecognized)},I=this.toCombinedSFDestination();if(I){n=I;let g=this.control.toSFSource();if(!g){i("Invalid control");return}s=g}else{let g=this.toSFDestination();if(!g){i("Invalid destination");return}typeof g=="object"?(t=g.newAmount,n=g.gen):n=g;let B=this.source.toSFSource();if(!B){i("Invalid source");return}s=B;let d=this.control.toSFSource();if(!d){i("Invalid control");return}a=d}this.transform!==QA.linear&&s.curveType===QA.linear&&(s.curveType=this.transform),n===r.initialAttenuation&&((this.source.source===T.velocity||this.source.source===T.volume||this.source.source===T.expression)&&(s.isNegative=!0),t=Math.min(960,Math.max(0,t)));let o=new EA(s,a,n,t,0);A.addModulators(o)}toCombinedSFDestination(){let A=this.source.source,t=this.destination;return A===T.vibratoLfo&&t===R.pitch?r.vibLfoToPitch:A===T.modLfo&&t===R.pitch?r.modLfoToPitch:A===T.modLfo&&t===R.filterCutoff?r.modLfoToFilterFc:A===T.modLfo&&t===R.gain?r.modLfoToVolume:A===T.modEnv&&t===R.filterCutoff?r.modEnvToFilterFc:A===T.modEnv&&t===R.pitch?r.modEnvToPitch:void 0}toSFDestination(){let A=this.shortScale;switch(this.destination){default:case R.none:return;case R.pan:return r.pan;case R.gain:return{gen:r.initialAttenuation,newAmount:-A};case R.pitch:return r.fineTune;case R.keyNum:return r.overridingRootKey;case R.volEnvDelay:return r.delayVolEnv;case R.volEnvAttack:return r.attackVolEnv;case R.volEnvHold:return r.holdVolEnv;case R.volEnvDecay:return r.decayVolEnv;case R.volEnvSustain:return{gen:r.sustainVolEnv,newAmount:1e3-A};case R.volEnvRelease:return r.releaseVolEnv;case R.modEnvDelay:return r.delayModEnv;case R.modEnvAttack:return r.attackModEnv;case R.modEnvHold:return r.holdModEnv;case R.modEnvDecay:return r.decayModEnv;case R.modEnvSustain:return{gen:r.sustainModEnv,newAmount:1e3-A};case R.modEnvRelease:return r.releaseModEnv;case R.filterCutoff:return r.initialFilterFc;case R.filterQ:return r.initialFilterQ;case R.chorusSend:return r.chorusEffectsSend;case R.reverbSend:return r.reverbEffectsSend;case R.modLfoFreq:return r.freqModLFO;case R.modLfoDelay:return r.delayModLFO;case R.vibLfoFreq:return r.freqVibLFO;case R.vibLfoDelay:return r.delayVibLFO}}},Da=class Wn extends je{connectionBlocks=new Array;mode="dls2";get length(){return this.connectionBlocks.length}copyFrom(A){this.mode=A.mode,A.connectionBlocks.forEach(t=>{this.connectionBlocks.push(ct.copyFrom(t))})}fromSFZone(A){this.mode="dls2";let t=new Vt;t.copyFrom(A);for(let n of t.generators){let s;switch(n.generatorType){default:continue;case r.keyNumToVolEnvDecay:s=r.decayVolEnv;break;case r.keyNumToVolEnvHold:s=r.holdVolEnv;break;case r.keyNumToModEnvDecay:s=r.decayModEnv;break;case r.keyNumToModEnvHold:s=r.holdModEnv}let a=t.getGenerator(s,void 0),i=n.generatorValue*-128;if(a===void 0)continue;let I=60/128*i,o=a-I;t.setGenerator(n.generatorType,i,!1),t.setGenerator(s,o,!1)}for(let n of t.generators)ct.fromSFGenerator(n,this);for(let n of t.modulators)ct.fromSFModulator(n,this)}read(A){let t=fe(A,"lart"),n=fe(A,"lar2");if(t)for(this.mode="dls1";t.data.currentIndex<t.data.length;){let s=iA(t.data);Wn.verifyHeader(s,"art1");let a=s.data,i=N(a,4);i!==8&&sA(`CbSize in articulation mismatch. Expected 8, got ${i}`);let I=N(a,4);for(let o=0;o<I;o++)this.connectionBlocks.push(ct.read(a))}else if(n)for(this.mode="dls2";n.data.currentIndex<n.data.length;){let s=iA(n.data);Wn.verifyHeader(s,"art2");let a=s.data,i=N(a,4);i!==8&&sA(`CbSize in articulation mismatch. Expected 8, got ${i}`);let I=N(a,4);for(let o=0;o<I;o++)this.connectionBlocks.push(ct.read(a))}}write(){let A=new Y(8);gA(A,8),gA(A,this.connectionBlocks.length);let t=this.connectionBlocks.map(s=>s.write()),n=vA(this.mode==="dls2"?"art2":"art1",[A,...t]);return cA(this.mode==="dls2"?"lar2":"lart",n,!1,!0)}toSFZone(A){let t=(n,s,a,i)=>{let I=n/-128;if(A.setGenerator(s,I),I<=120){let o=Math.round(.46875*n),g=this.connectionBlocks.find(B=>B.isStaticParameter&&B.destination===i);g&&A.setGenerator(a,o+g.shortScale)}};for(let n of this.connectionBlocks){let s=n.shortScale,a=n.source.source,i=n.control.source,I=n.destination;if(n.isStaticParameter){n.toSFGenerator(A);continue}if(i===T.none)if(a===T.keyNum){if(I===R.pitch){A.setGenerator(r.scaleTuning,s/128);continue}if(I===R.modEnvHold||I===R.modEnvDecay||I===R.volEnvHold||I==R.volEnvDecay)continue}else{let o=n.toCombinedSFDestination();if(o){A.setGenerator(o,s);continue}}n.toSFModulator(A)}this.mode==="dls1"&&A.addModulators(EA.copyFrom(Gi),EA.copyFrom(Ri));for(let n of this.connectionBlocks){if(n.source.source!==T.keyNum)continue;let s=n.shortScale;switch(n.destination){default:continue;case R.volEnvHold:t(s,r.keyNumToVolEnvHold,r.holdVolEnv,R.volEnvHold);break;case R.volEnvDecay:t(s,r.keyNumToVolEnvDecay,r.decayVolEnv,R.volEnvDecay);break;case R.modEnvHold:t(s,r.keyNumToModEnvHold,r.holdModEnv,R.modEnvHold);break;case R.modEnvDecay:t(s,r.keyNumToModEnvDecay,r.decayModEnv,R.modEnvDecay);break}}}},wn=class Ut{channel=1;tableIndex;fusOptions=0;phaseGroup=0;constructor(A){this.tableIndex=A}static copyFrom(A){let t=new Ut(A.tableIndex);return t.channel=A.channel,t.phaseGroup=A.phaseGroup,t.fusOptions=A.fusOptions,t}static read(A){let t=N(A.data,2),n=N(A.data,2),s=N(A.data,4),a=N(A.data,4),i=new Ut(a);return i.channel=s,i.fusOptions=t,i.phaseGroup=n,i}static fromSFZone(A,t){let n=A.indexOf(t.sample);if(n<0)throw new Error(`Wave link error: Sample ${t.sample.name} does not exist in the sample list.`);let s=new Ut(n);switch(t.sample.sampleType){default:case wA.leftSample:case wA.monoSample:s.channel=1;break;case wA.rightSample:s.channel=2}return s}write(){let A=new Y(12);return J(A,this.fusOptions),J(A,this.phaseGroup),gA(A,this.channel),gA(A,this.tableIndex),cA("wlnk",A)}},Tt=class Ve extends je{articulation=new Da;keyRange={min:0,max:127};velRange={min:0,max:127};keyGroup=0;fusOptions=0;usLayer=0;waveSample;waveLink;constructor(A,t){super(),this.waveSample=t,this.waveLink=A}static copyFrom(A){let t=new Ve(wn.copyFrom(A.waveLink),ze.copyFrom(A.waveSample));return t.keyGroup=A.keyGroup,t.keyRange={...A.keyRange},t.velRange={...A.velRange},t.usLayer=A.usLayer,t.fusOptions=A.fusOptions,t.articulation.copyFrom(A.articulation),t}static read(A,t){let n=this.verifyAndReadList(t,"rgn ","rgn2"),s=n.find(m=>m.header==="wsmp"),a=s?ze.read(s):void 0,i=n.find(m=>m.header==="wlnk");if(!i){sA("Invalid DLS region: missing 'wlnk' chunk! Discarding...");return}let I=wn.read(i),o=n.find(m=>m.header==="rgnh");if(!o){sA("Invalid DLS region: missing 'rgnh' chunk! Discarding...");return}let g=A[I.tableIndex];g||Ve.parsingError(`Invalid sample index: ${I.tableIndex}. Samples available: ${A.length}`),a??=g.waveSample;let B=new Ve(I,a),d=N(o.data,2),h=N(o.data,2),C=N(o.data,2),Q=N(o.data,2);return C===0&&Q===0&&(Q=127,C=0),B.keyRange.max=h,B.keyRange.min=d,B.velRange.max=Q,B.velRange.min=C,B.fusOptions=N(o.data,2),B.keyGroup=N(o.data,2),o.data.length-o.data.currentIndex>=2&&(B.usLayer=N(o.data,2)),B.articulation.read(n),B}static fromSFZone(A,t){let n=ze.fromSFZone(A),s=wn.fromSFZone(t,A),a=new Ve(s,n);return a.keyRange.min=Math.max(A.keyRange.min,0),a.keyRange.max=A.keyRange.max,a.velRange.min=Math.max(A.velRange.min,0),a.velRange.max=A.velRange.max,a.keyGroup=A.getGenerator(r.exclusiveClass,0),a.articulation.fromSFZone(A),a}write(){let A=[this.writeHeader(),this.waveSample.write(),this.waveLink.write(),this.articulation.write()];return vA("rgn2",A,!0)}toSFZone(A,t){let n=t[this.waveLink.tableIndex];n||Ve.parsingError(`Invalid sample index: ${this.waveLink.tableIndex}`);let s=A.createZone(n);return s.keyRange=this.keyRange,s.velRange=this.velRange,this.keyRange.max===127&&this.keyRange.min===0&&(s.keyRange.min=-1),this.velRange.max===127&&this.velRange.min===0&&(s.velRange.min=-1),this.keyGroup!==0&&s.setGenerator(r.exclusiveClass,this.keyGroup),this.waveSample.toSFZone(s,n),this.articulation.toSFZone(s),s.generators=s.generators.filter(a=>a.generatorValue!==x[a.generatorType].def),s}writeHeader(){let A=new Y(12);return J(A,Math.max(this.keyRange.min,0)),J(A,this.keyRange.max),J(A,Math.max(this.velRange.min,0)),J(A,this.velRange.max),J(A,this.fusOptions),J(A,this.keyGroup),J(A,this.usLayer),cA("rgnh",A)}},Fn=class xt extends je{articulation=new Da;regions=new Array;name="Unnamed";bankLSB=0;bankMSB=0;isGMGSDrum=!1;program=0;static copyFrom(A){let t=new xt;return t.name=A.name,t.isGMGSDrum=A.isGMGSDrum,t.bankMSB=A.bankMSB,t.bankLSB=A.bankLSB,t.program=A.program,t.articulation.copyFrom(A.articulation),A.regions.forEach(n=>{t.regions.push(Tt.copyFrom(n))}),t}static read(A,t){let n=this.verifyAndReadList(t,"ins "),s=n.find(h=>h.header==="insh");if(!s)throw Z(),new Error("No instrument header!");let a="",i=fe(n,"INFO");if(i){let h=iA(i.data);for(;h.header!=="INAM";)h=iA(i.data);a=hA(h.data,h.data.length).trim()}a.length<1&&(a="Unnamed Instrument");let I=new xt;I.name=a;let o=N(s.data,4),g=N(s.data,4),B=N(s.data,4);I.program=B&127,I.bankMSB=g>>>8&127,I.bankLSB=g&127,I.isGMGSDrum=g>>>31>0,bA(`%cParsing %c"${a}"%c...`,c.info,c.recognized,c.info);let d=fe(n,"lrgn");if(!d)throw Z(),new Error("No region list!");I.articulation.read(n);for(let h=0;h<o;h++){let C=iA(d.data);this.verifyHeader(C,"LIST");let Q=hA(C.data,4);Q!=="rgn "&&Q!=="rgn2"&&(Z(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${Q}"`));let m=Tt.read(A,C);m&&I.regions.push(m)}return Z(),I}static fromSFPreset(A,t){let n=new xt;return n.name=A.name,n.bankLSB=A.bankLSB,n.bankMSB=A.bankMSB,n.program=A.program,n.isGMGSDrum=A.isGMGSDrum,OA(`%cConverting %c${A.toString()}%c to DLS...`,c.info,c.value,c.info),A.toFlattenedInstrument().zones.forEach(a=>{n.regions.push(Tt.fromSFZone(a,t))}),Z(),n}write(){bA(`%cWriting %c${this.name}%c...`,c.info,c.recognized,c.info);let A=[this.writeHeader()],t=this.regions.map(s=>s.write());A.push(vA("lrgn",t,!0)),this.articulation.length>0&&A.push(this.articulation.write());let n=cA("INAM",ne(this.name,!0));return A.push(cA("INFO",n,!1,!0)),Z(),vA("ins ",A,!0)}toSFPreset(A){let t=new pe(A);t.name=this.name,t.bankMSB=this.bankMSB,t.bankLSB=this.bankLSB,t.isGMGSDrum=this.isGMGSDrum,t.program=this.program;let n=new dt;n.name=this.name,t.createZone(n),this.articulation.toSFZone(n.globalZone),this.regions.forEach(s=>s.toSFZone(n,A.samples)),n.globalize(),n.globalZone.modulators.find(s=>s.destination===r.reverbEffectsSend)===void 0&&n.globalZone.addModulators(EA.copyFrom(ya)),n.globalZone.modulators.find(s=>s.destination===r.chorusEffectsSend)===void 0&&n.globalZone.addModulators(EA.copyFrom(ka)),n.globalZone.generators=n.globalZone.generators.filter(s=>s.generatorValue!==x[s.generatorType].def),A.addPresets(t),A.addInstruments(n)}writeHeader(){let A=new Y(12);gA(A,this.regions.length);let t=(this.bankMSB&127)<<8|this.bankLSB&127;return this.isGMGSDrum&&(t|=1<<31),gA(A,t),gA(A,this.program&127),cA("insh",A)}},wa={progressFunction:void 0},Fa=class _n extends je{samples=new Array;instruments=new Array;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"DLS Level 2.2",version:{major:2,minor:4}};static read(A){if(!A)throw new Error("No data provided!");let t=new Y(A);OA("%cParsing DLS file...",c.info);let n=iA(t,!1);this.verifyHeader(n,"RIFF"),this.verifyText(hA(t,4).toLowerCase(),"dls ");let s=[];for(;t.currentIndex<t.length;)s.push(iA(t));let a=new _n;a.soundBankInfo.name="Unnamed DLS",a.soundBankInfo.product="SpessaSynth DLS",a.soundBankInfo.comment="(no description)";let i=fe(s,"INFO");if(i)for(;i.data.currentIndex<i.data.length;){let Q=iA(i.data),m=Q.header,y=hA(Q.data,Q.size);switch(m){case"INAM":a.soundBankInfo.name=y;break;case"ICRD":a.soundBankInfo.creationDate=ts(y);break;case"ICMT":a.soundBankInfo.comment=y;break;case"ISBJ":a.soundBankInfo.subject=y;break;case"ICOP":a.soundBankInfo.copyright=y;break;case"IENG":a.soundBankInfo.engineer=y;break;case"IPRD":a.soundBankInfo.product=y;break;case"ISFT":a.soundBankInfo.software=y}}this.printInfo(a);let I=s.find(Q=>Q.header==="colh");if(!I)return this.parsingError("No colh chunk!"),5;let o=N(I.data,4);p(`%cInstruments amount: %c${o}`,c.info,c.recognized);let g=fe(s,"wvpl");if(!g)return this.parsingError("No wvpl chunk!"),5;this.verifyAndReadList(g,"wvpl").forEach(Q=>{a.samples.push(Ls.read(Q))});let d=fe(s,"lins");if(!d)return this.parsingError("No lins chunk!"),5;let h=this.verifyAndReadList(d,"lins");bA("%cLoading instruments...",c.info),h.length!==o&&sA(`Colh reported invalid amount of instruments. Detected ${h.length}, expected ${o}`),h.forEach(Q=>{a.instruments.push(Fn.read(a.samples,Q))}),Z();let C=s.find(Q=>Q.header==="pgal");if(C){p("%cFound the instrument aliasing chunk!",c.recognized);let Q=C.data;Q[0]===2&&Q[1]+Q[2]+Q[3]===0&&(Q.currentIndex+=4);let m=a.instruments.find(F=>fA.isXGDrums(F.bankMSB)||F.isGMGSDrum);if(!m)return sA("MobileBAE aliasing chunk without a drum preset. Aborting!"),a;let y=Q.slice(Q.currentIndex,Q.currentIndex+128);Q.currentIndex+=128;for(let F=0;F<128;F++){let k=y[F];if(k===F)continue;let D=m.regions.find(L=>L.keyRange.max===k&&L.keyRange.min===k);if(!D){sA(`Invalid drum alias ${F} to ${k}: region does not exist.`);continue}let v=Tt.copyFrom(D);v.keyRange.max=F,v.keyRange.min=F,m.regions.push(v)}for(Q.currentIndex+=4;Q.currentIndex<Q.length;){let F=N(Q,2),k=F&127,D=F>>7&127,v=Q[Q.currentIndex++],L=Q[Q.currentIndex++];L!==0&&sA(`Invalid alias byte. Expected 0, got ${L}`);let E=N(Q,2),X=E&127,O=E>>7&127,nA=Q[Q.currentIndex++];L=Q[Q.currentIndex++],L!==0&&sA(`Invalid alias header. Expected 0, got ${L}`);let $=a.instruments.find(q=>q.bankLSB===X&&q.bankMSB===O&&q.program===nA&&!q.isGMGSDrum);if(!$){sA(`Invalid alias. Missing instrument: ${X}:${O}:${nA}`);continue}let V=Fn.copyFrom($);V.bankMSB=D,V.bankLSB=k,V.program=v,a.instruments.push(V)}}return p(`%cParsing finished! %c"${a.soundBankInfo.name||"UNNAMED"}"%c has %c${a.instruments.length}%c instruments and %c${a.samples.length}%c samples.`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info),Z(),a}static fromSF(A){bA("%cSaving SF2 to DLS level 2...",c.info);let t=new _n;return t.soundBankInfo={...A.soundBankInfo},t.soundBankInfo.comment=(t.soundBankInfo.comment??"(No description)")+`
18
+ Converted from SF2 to DLS with SpessaSynth`,A.samples.forEach(n=>{t.samples.push(Ls.fromSFSample(n))}),A.presets.forEach(n=>{t.instruments.push(Fn.fromSFPreset(n,A.samples))}),p("%cConversion complete!",c.recognized),Z(),t}static printInfo(A){for(let[t,n]of Object.entries(A.soundBankInfo)){if(typeof n=="object"&&"major"in n){let s=n;p(`%c${t}: %c"${s.major}.${s.minor}"`,c.info,c.recognized)}p(`%c${t}: %c${n.toLocaleString()}`,c.info,c.recognized)}}async write(A=wa){bA("%cSaving DLS...",c.info);let t=new Y(4);gA(t,this.instruments.length);let n=cA("colh",t);bA("%cWriting instruments...",c.info);let s=vA("lins",this.instruments.map(y=>y.write()),!0);p("%cSuccess!",c.recognized),Z(),bA("%cWriting WAVE samples...",c.info);let a=0,i=[],I=[],o=0;for(let y of this.samples){let F=y.write();await A?.progressFunction?.(y.name,o,this.samples.length),i.push(a),a+=F.length,I.push(F),o++}let g=vA("wvpl",I,!0);p("%cSucceeded!",c.recognized);let B=new Y(8+4*i.length);gA(B,8),gA(B,i.length);for(let y of i)gA(B,y);let d=cA("ptbl",B);this.soundBankInfo.software="SpessaSynth";let h=[],C=(y,F)=>{h.push(cA(y,ne(F,!0)))};for(let[y,F]of Object.entries(this.soundBankInfo)){let k=y,D=F;if(D)switch(k){case"name":C("INAM",D);break;case"comment":C("ICMT",D);break;case"copyright":C("ICOP",D);break;case"creationDate":C("ICRD",D.toISOString());break;case"engineer":C("IENG",D);break;case"product":C("IPRD",D);break;case"romVersion":case"version":case"soundEngine":case"romInfo":break;case"software":C("ISFT",D);break;case"subject":C("ISBJ",D)}}let Q=vA("INFO",h,!0);p("%cCombining everything...");let m=vA("RIFF",[ne("DLS "),n,s,d,g,Q]);return p("%cSaved successfully!",c.recognized),Z(),m.buffer}toSF(){OA("%cConverting DLS to SF2...",c.info);let A=new Ga;return A.soundBankInfo.version.minor=4,A.soundBankInfo.version.major=2,A.soundBankInfo={...this.soundBankInfo},A.soundBankInfo.comment=(A.soundBankInfo.comment??"(No description)")+`
19
+ Converted from DLS to SF2 with SpessaSynth`,this.samples.forEach(t=>{t.toSFSample(A)}),this.instruments.forEach(t=>{t.toSFPreset(A)}),A.flush(),p("%cConversion complete!",c.recognized),Z(),A}},Ga=class Ht{static isSF3DecoderReady=Ot.isInitialized;soundBankInfo={name:"Unnamed",creationDate:new Date,software:"SpessaSynth",soundEngine:"E-mu 10K2",version:{major:2,minor:4}};presets=[];samples=[];instruments=[];defaultModulators=Ea.map(EA.copyFrom.bind(EA));customDefaultModulators=!1;_isXGBank=!1;get isXGBank(){return this._isXGBank}static mergeSoundBanks(...A){let t=A.shift();if(!t)throw new Error("No sound banks provided!");let n=t.presets;for(;A.length;){let a=A?.shift()?.presets;a&&a.forEach(i=>{n.find(I=>i.matches(I))===void 0&&n.push(i)})}let s=new Ht;return s.addCompletePresets(n),s.soundBankInfo={...t.soundBankInfo},s}static async getSampleSoundBankFile(){let A=new Ht,t=new Float32Array(128);for(let I=0;I<128;I++)t[I]=I/128*2-1;let n=new mi;n.name="Saw",n.originalKey=65,n.pitchCorrection=20,n.loopEnd=127,n.setAudioData(t,44100),A.addSamples(n);let s=new dt;s.name="Saw Wave",s.globalZone.addGenerators(new FA(r.initialAttenuation,375),new FA(r.releaseVolEnv,-1e3),new FA(r.sampleModes,1)),s.createZone(n),s.createZone(n).addGenerators(new FA(r.fineTune,-9)),A.addInstruments(s);let i=new pe(A);return i.name="Saw Wave",i.createZone(s),A.addPresets(i),A.soundBankInfo.name="Dummy",A.flush(),await A.writeSF2()}static copyFrom(A){let t=new Ht;return A.presets.forEach(n=>t.clonePreset(n)),t.soundBankInfo={...A.soundBankInfo},t}addCompletePresets(A){this.addPresets(...A);let t=[];for(let s of A)for(let a of s.zones)a.instrument&&!t.includes(a.instrument)&&t.push(a.instrument);this.addInstruments(...t);let n=[];for(let s of t)for(let a of s.zones)a.sample&&!n.includes(a.sample)&&n.push(a.sample);this.addSamples(...n)}async writeDLS(A=wa){return Fa.fromSF(this).write(A)}async writeSF2(A=Xn){return ki(this,A)}addPresets(...A){this.presets.push(...A)}addInstruments(...A){this.instruments.push(...A)}addSamples(...A){this.samples.push(...A)}cloneSample(A){let t=this.samples.find(s=>s.name===A.name);if(t)return t;let n=new Zt(A.name,A.sampleRate,A.originalKey,A.pitchCorrection,A.sampleType,A.loopStart,A.loopEnd);if(A.isCompressed?n.setCompressedData(A.getRawData(!0)):n.setAudioData(A.getAudioData(),A.sampleRate),this.addSamples(n),A.linkedSample){let s=this.cloneSample(A.linkedSample);s.linkedSample||n.setLinkedSample(s,n.sampleType)}return n}cloneInstrument(A){let t=this.instruments.find(s=>s.name===A.name);if(t)return t;let n=new dt;n.name=A.name,n.globalZone.copyFrom(A.globalZone);for(let s of A.zones)n.createZone(this.cloneSample(s.sample)).copyFrom(s);return this.addInstruments(n),n}clonePreset(A){let t=this.presets.find(s=>s.name===A.name);if(t)return t;let n=new pe(this);n.name=A.name,n.bankMSB=A.bankMSB,n.bankLSB=A.bankLSB,n.isGMGSDrum=A.isGMGSDrum,n.program=A.program,n.library=A.library,n.genre=A.genre,n.morphology=A.morphology,n.globalZone.copyFrom(A.globalZone);for(let s of A.zones)n.createZone(this.cloneInstrument(s.instrument)).copyFrom(s);return this.addPresets(n),n}flush(){this.presets.sort(te.sorter.bind(te)),this.parseInternal()}trimSoundBank(A){let t=(s,a)=>{let i=0;for(let I=0;I<s.zones.length;I++){let o=s.zones[I],g=o.keyRange,B=o.velRange,d=!1;for(let h of a)if(h.key>=g.min&&h.key<=g.max&&h.velocity>=B.min&&h.velocity<=B.max){d=!0;break}!d&&o.sample&&(p(`%c${o.sample.name}%c removed from %c${s.name}%c.`,c.recognized,c.info,c.recognized,c.info),s.deleteZone(I)&&(i++,I--,p(`%c${o.sample.name}%c deleted`,c.recognized,c.info)),o.sample.useCount<1&&this.deleteSample(o.sample))}return i};OA("%cTrimming sound bank...",c.info);let n=A.getUsedProgramsAndKeys(this);bA("%cModifying sound bank...",c.info),p("Detected keys for midi:",n);for(let s=0;s<this.presets.length;s++){let a=this.presets[s],i=n.get(a);if(i===void 0)p(`%cDeleting preset %c${a.name}%c and its zones`,c.info,c.recognized,c.info),this.deletePreset(a),s--;else{let I=[...i].map(g=>{let B=g.split("-");return{key:parseInt(B[0]),velocity:parseInt(B[1])}});bA(`%cTrimming %c${a.name}`,c.info,c.recognized),p(`Keys for ${a.name}:`,I);let o=0;for(let g=0;g<a.zones.length;g++){let B=a.zones[g],d=B.keyRange,h=B.velRange,C=!1;for(let Q of I)if(Q.key>=d.min&&Q.key<=d.max&&Q.velocity>=h.min&&Q.velocity<=h.max&&B.instrument){C=!0;let m=t(B.instrument,I);p(`%cTrimmed off %c${m}%c zones from %c${B.instrument.name}`,c.info,c.recognized,c.info,c.recognized);break}!C&&B.instrument&&(o++,a.deleteZone(g),B.instrument.useCount<1&&this.deleteInstrument(B.instrument),g--)}p(`%cTrimmed off %c${o}%c zones from %c${a.name}`,c.info,c.recognized,c.info,c.recognized),Z()}}this.removeUnusedElements(),p("%cSound bank modified!",c.recognized),Z(),Z()}removeUnusedElements(){this.instruments=this.instruments.filter(A=>{A.deleteUnusedZones();let t=A.useCount<1;return t&&A.delete(),!t}),this.samples=this.samples.filter(A=>{let t=A.useCount<1;return t&&A.unlinkSample(),!t})}deleteInstrument(A){A.delete(),this.instruments.splice(this.instruments.indexOf(A),1)}deletePreset(A){A.delete(),this.presets.splice(this.presets.indexOf(A),1)}deleteSample(A){A.unlinkSample(),this.samples.splice(this.samples.indexOf(A),1)}getPreset(A,t){return Qa(this.presets,A,t)}destroySoundBank(){this.presets.length=0,this.instruments.length=0,this.samples.length=0}parsingError(A){throw new Error(`SF parsing error: ${A} The file may be corrupted.`)}parseInternal(){this._isXGBank=!1;let A=new Set([0,1,2,3,4,5,6,7,8,9,16,17,24,25,26,27,28,29,30,31,32,33,40,41,48,56,57,58,64,65,66,126,127]);for(let t of this.presets)if(fA.isXGDrums(t.bankMSB)&&(this._isXGBank=!0,!A.has(t.program))){this._isXGBank=!1,p(`%cThis bank is not valid XG. Preset %c${t.toString()}%c is not a valid XG drum. XG mode will use presets on bank 128.`,c.info,c.value,c.info);break}}printInfo(){for(let[A,t]of Object.entries(this.soundBankInfo)){if(typeof t=="object"&&"major"in t){let n=t;p(`%c${A}: %c"${n.major}.${n.minor}"`,c.info,c.recognized)}p(`%c${A}: %c${t.toLocaleString()}`,c.info,c.recognized)}}},bi=class extends FA{constructor(e){let A=e.currentIndex,t=e[A+1]<<8|e[A],n=jn(e[A+2],e[A+3]);e.currentIndex+=4,super(t,n,!1)}};function Ns(e){let A=[];for(;e.data.length>e.data.currentIndex;)A.push(new bi(e.data));return A.pop(),A}var vi=class extends Ca{constructor(e,A,t,n){let s=t.find(i=>i.generatorType===r.instrument),a;if(s)a=n[s.generatorValue];else throw new Error("No instrument ID found in preset zone.");super(e,a),this.addGenerators(...t),this.addModulators(...A)}};function Li(e,A,t,n,s){let a=e.gen,i=e.mod,I=0,o=0;for(let g of s)for(let B=0;B<g.zonesCount;B++){let d=a[o++],h=a[o],C=A.slice(d,h),Q=i[I++],m=i[I],y=t.slice(Q,m);C.find(F=>F.generatorType===r.instrument)!==void 0?g.createSoundFontZone(y,C,n):(g.globalZone.addGenerators(...C),g.globalZone.addModulators(...y))}}var Ni=class extends pe{zoneStartIndex;zonesCount=0;constructor(e,A){super(A),this.name=hA(e.data,20).replace(/\d{3}:\d{3}/,""),this.program=N(e.data,2);let t=N(e.data,2);this.bankMSB=t&127,this.isGMGSDrum=(t&128)>0,this.bankLSB=t>>8,this.zoneStartIndex=N(e.data,2),this.library=N(e.data,4),this.genre=N(e.data,4),this.morphology=N(e.data,4)}createSoundFontZone(e,A,t){let n=new vi(this,e,A,t);return this.zones.push(n),n}};function Us(e,A){let t=[];for(;e.data.length>e.data.currentIndex;){let n=new Ni(e,A);if(t.length>0){let s=t[t.length-1];s.zonesCount=n.zoneStartIndex-s.zoneStartIndex}t.push(n)}return t.pop(),t}var Ui=class extends ha{constructor(e,A,t,n){let s=t.find(i=>i.generatorType===r.sampleID),a;if(s)a=n[s.generatorValue];else throw new Error("No sample ID found in instrument zone.");super(e,a),this.addGenerators(...t),this.addModulators(...A)}};function Ti(e,A,t,n,s){let a=e.gen,i=e.mod,I=0,o=0;for(let g of s)for(let B=0;B<g.zonesCount;B++){let d=a[o++],h=a[o],C=A.slice(d,h),Q=i[I++],m=i[I],y=t.slice(Q,m);C.find(F=>F.generatorType===r.sampleID)?g.createSoundFontZone(y,C,n):(g.globalZone.addGenerators(...C),g.globalZone.addModulators(...y))}}var xi=class extends dt{zoneStartIndex;zonesCount=0;constructor(e){super(),this.name=hA(e.data,20),this.zoneStartIndex=N(e.data,2)}createSoundFontZone(e,A,t){let n=new Ui(this,e,A,t);return this.zones.push(n),n}};function Ts(e){let A=[];for(;e.data.length>e.data.currentIndex;){let t=new xi(e);if(A.length>0){let n=A[A.length-1];n.zonesCount=t.zoneStartIndex-n.zoneStartIndex}A.push(t)}return A.pop(),A}function Gn(e){let A=[];for(;e.data.length>e.data.currentIndex;){let t=e.data,n=N(t,2),s=N(t,2),a=jn(t[t.currentIndex++],t[t.currentIndex++]),i=N(t,2),I=N(t,2);A.push(new yA(n,i,s,a,I))}return A.pop(),A}function bt(e){let A=[],t=[];for(;e.data.length>e.data.currentIndex;)t.push(N(e.data,2)),A.push(N(e.data,2));return{mod:A,gen:t}}var Hi=class extends Ga{sampleDataStartIndex=0;constructor(e,A=!0){if(super(),A)throw new Error("Using the constructor directly is deprecated. Use SoundBankLoader.fromArrayBuffer() instead.");let t=new Y(e);OA("%cParsing a SoundFont2 file...",c.info),t||(Z(),this.parsingError("No data provided!"));let n=iA(t,!1);this.verifyHeader(n,"riff");let s=hA(t,4).toLowerCase();if(s!=="sfbk"&&s!=="sfpk")throw Z(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${s}"`);let a=s==="sfpk",i=iA(t);this.verifyHeader(i,"list");let I=hA(i.data,4);if(I!=="INFO")throw Z(),new SyntaxError(`Invalid soundFont! Expected "INFO" or "${I}"`);let o;for(;i.data.length>i.data.currentIndex;){let P=iA(i.data),G=ee(P.data,P.data.length),b=P.header;switch(b){case"ifil":case"iver":let K=N(P.data,2),eA=N(P.data,2);b==="ifil"?this.soundBankInfo.version={major:K,minor:eA}:this.soundBankInfo.romVersion={major:K,minor:eA};break;case"DMOD":{this.defaultModulators=Gn(P),this.customDefaultModulators=!0;break}case"LIST":{hA(P.data,4)==="xdta"&&(p("%cExtended SF2 found!",c.recognized),o=P);break}case"ICRD":this.soundBankInfo.creationDate=ts(hA(P.data,P.data.length));break;case"ISFT":this.soundBankInfo.software=G;break;case"IPRD":this.soundBankInfo.product=G;break;case"IENG":this.soundBankInfo.engineer=G;break;case"ICOP":this.soundBankInfo.copyright=G;break;case"INAM":this.soundBankInfo.name=G;break;case"ICMT":this.soundBankInfo.comment=G;break;case"irom":this.soundBankInfo.romInfo=G;break;case"isng":this.soundBankInfo.soundEngine=G}}this.printInfo();let g={};o!==void 0&&(g.phdr=iA(o.data),g.pbag=iA(o.data),g.pmod=iA(o.data),g.pgen=iA(o.data),g.inst=iA(o.data),g.ibag=iA(o.data),g.imod=iA(o.data),g.igen=iA(o.data),g.shdr=iA(o.data));let B=iA(t,!1);this.verifyHeader(B,"list"),this.verifyText(hA(t,4),"sdta"),p("%cVerifying smpl chunk...",c.warn);let d=iA(t,!1);this.verifyHeader(d,"smpl");let h;if(a){p("%cSF2Pack detected, attempting to decode the smpl chunk...",c.info);try{h=Ot.decode(t.buffer.slice(t.currentIndex,t.currentIndex+B.size-12)).data[0]}catch(P){throw Z(),new Error(`SF2Pack Ogg Vorbis decode error: ${P}`)}p(`%cDecoded the smpl chunk! Length: %c${h.length}`,c.info,c.value)}else h=t,this.sampleDataStartIndex=t.currentIndex;p(`%cSkipping sample chunk, length: %c${B.size-12}`,c.info,c.value),t.currentIndex+=B.size-12,p("%cLoading preset data chunk...",c.warn);let C=iA(t);this.verifyHeader(C,"list"),hA(C.data,4);let Q=iA(C.data);this.verifyHeader(Q,"phdr");let m=iA(C.data);this.verifyHeader(m,"pbag");let y=iA(C.data);this.verifyHeader(y,"pmod");let F=iA(C.data);this.verifyHeader(F,"pgen");let k=iA(C.data);this.verifyHeader(k,"inst");let D=iA(C.data);this.verifyHeader(D,"ibag");let v=iA(C.data);this.verifyHeader(v,"imod");let L=iA(C.data);this.verifyHeader(L,"igen");let E=iA(C.data);this.verifyHeader(E,"shdr"),p("%cParsing samples...",c.info),t.currentIndex=this.sampleDataStartIndex;let X=bs(E,h,o===void 0);if(o&&g.shdr){let P=bs(g.shdr,new Float32Array(1),!1);P.length===X.length&&X.forEach((G,b)=>{G.name+=P[b].name,G.linkedSampleIndex|=P[b].linkedSampleIndex<<16})}X.forEach(P=>P.name=P.name.trim()),this.samples.push(...X);let O=Ns(L),nA=Gn(v),$=Ts(k);if(o&&g.inst){let P=Ts(g.inst);P.length===$.length&&($.forEach((G,b)=>{G.name+=P[b].name,G.zoneStartIndex|=P[b].zoneStartIndex}),$.forEach((G,b)=>{b<$.length-1&&(G.zonesCount=$[b+1].zoneStartIndex-G.zoneStartIndex)}))}$.forEach(P=>P.name=P.name.trim()),this.instruments.push(...$);let V=bt(D);if(o&&g.ibag){let P=bt(g.ibag);for(let G=0;G<V.mod.length;G++)V.mod[G]|=P.mod[G]<<16;for(let G=0;G<V.gen.length;G++)V.gen[G]|=P.gen[G]<<16}Ti(V,O,nA,this.samples,$);let q=Ns(F),z=Gn(y),tA=Us(Q,this);if(o&&g.phdr){let P=Us(g.phdr,this);P.length===tA.length&&(tA.forEach((G,b)=>{G.name+=P[b].name,G.zoneStartIndex|=P[b].zoneStartIndex}),tA.forEach((G,b)=>{b<tA.length-1&&(G.zonesCount=tA[b+1].zoneStartIndex-G.zoneStartIndex)}))}tA.forEach(P=>P.name===P.name.trim()),this.addPresets(...tA);let rA=bt(m);if(o&&g.pbag){let P=bt(g.pbag);for(let G=0;G<rA.mod.length;G++)rA.mod[G]|=P.mod[G]<<16;for(let G=0;G<rA.gen.length;G++)rA.gen[G]|=P.gen[G]<<16}Li(rA,q,z,this.instruments,tA),this.flush(),p(`%cParsing finished! %c"${this.soundBankInfo.name}"%c has %c${this.presets.length}%c presets,
20
+ %c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info,c.recognized,c.info),Z()}verifyHeader(e,A){e.header.toLowerCase()!==A.toLowerCase()&&(Z(),this.parsingError(`Invalid chunk header! Expected "${A.toLowerCase()}" got "${e.header.toLowerCase()}"`))}verifyText(e,A){e.toLowerCase()!==A.toLowerCase()&&(Z(),this.parsingError(`Invalid FourCC: Expected "${A.toLowerCase()}" got "${e.toLowerCase()}"\``))}},ut=class{static fromArrayBuffer(e){let A=e.slice(8,12),t=new Y(A);return hA(t,4).toLowerCase()==="dls "?this.loadDLS(e):new Hi(e,!1)}static loadDLS(e){return Fa.read(e).toSF()}},Ra=class{soundBankManager=new Po(this.updatePresetList.bind(this));midiChannels=[];keyModifierManager=new Ai;totalVoicesAmount=0;processorInitialized=Ot.isInitialized;currentSynthTime=0;sampleRate;enableEffects=!0;enableEventSystem;onEventCall;systemExclusive=$o.bind(this);resetAllControllers=So.bind(this);setMasterParameter=vo.bind(this);getMasterParameter=Lo.bind(this);getAllMasterParameters=No.bind(this);getVoicesForPreset=_o.bind(this);killVoices=Zo.bind(this);getVoices=jo.bind(this);privateProps;savedSnapshot;eventQueue=[];sampleTime;constructor(e,A=Fs){let t=$n(A,Fs);if(this.enableEffects=t.enableEffects,this.enableEventSystem=t.enableEventSystem,this.currentSynthTime=t.initialTime,this.sampleRate=e,this.sampleTime=1/e,isNaN(t.initialTime)||isNaN(e))throw new Error("Initial time or sample rate is NaN!");this.privateProps=new ti(this.callEvent.bind(this),this.getVoices.bind(this),this.killVoices.bind(this),Mo*(44100/e),Jo*(44100/e),Vo*(44100/e));for(let n=0;n<Rn;n++)this.createMIDIChannelInternal(!1);this.processorInitialized.then(()=>{p("%cSpessaSynth is ready!",c.recognized)})}applySynthesizerSnapshot(e){this.savedSnapshot=e,e.apply(this),p("%cFinished applying snapshot!",c.info),this.resetAllControllers()}getSnapshot(){return is.create(this)}setEmbeddedSoundBank(e,A){let t=ut.fromArrayBuffer(e);this.soundBankManager.addSoundBank(t,Rt,A);let n=this.soundBankManager.priorityOrder;n.pop(),n.unshift(Rt),this.soundBankManager.priorityOrder=n,this.savedSnapshot!==void 0&&this.applySynthesizerSnapshot(this.savedSnapshot),p(`%cEmbedded sound bank set at offset %c${A}`,c.recognized,c.value)}clearEmbeddedBank(){this.soundBankManager.soundBankList.some(e=>e.id===Rt)&&this.soundBankManager.deleteSoundBank(Rt)}createMIDIChannel(){this.createMIDIChannelInternal(!0)}stopAllChannels(e=!1){p("%cStop all received!",c.info);for(let A of this.midiChannels)A.stopAllNotes(e)}renderAudio(e,A,t,n=0,s=0){this.renderAudioSplit(A,t,Array(16).fill(e),n,s)}renderAudioSplit(e,A,t,n=0,s=0){let a=this.currentSynthTime;for(;this.eventQueue[0]?.time<=a;)this.eventQueue.shift()?.callback();let i=e[0],I=e[1],o=A[0],g=A[1];n=Math.max(n,0);let B=s||t[0][0].length-n;this.totalVoicesAmount=0,this.midiChannels.forEach((d,h)=>{if(d.voices.length<1||d.isMuted)return;let C=d.voices.length,Q=h%16;d.renderAudio(t[Q][0],t[Q][1],i,I,o,g,n,B),this.totalVoicesAmount+=d.voices.length,d.voices.length!==C&&d.sendChannelProperty()}),this.currentSynthTime+=B*this.sampleTime}destroySynthProcessor(){this.midiChannels.forEach(e=>{e.voices.length=0,e.sustainedVoices.length=0,e.lockedControllers=[],e.preset=void 0}),this.clearCache(),this.midiChannels.length=0,this.soundBankManager.destroy()}controllerChange(e,A,t){this.midiChannels[e].controllerChange(A,t)}noteOn(e,A,t){this.midiChannels[e].noteOn(A,t)}noteOff(e,A){this.midiChannels[e].noteOff(A)}polyPressure(e,A,t){this.midiChannels[e].polyPressure(A,t)}channelPressure(e,A){this.midiChannels[e].channelPressure(A)}pitchWheel(e,A){this.midiChannels[e].pitchWheel(A)}programChange(e,A){this.midiChannels[e].programChange(A)}processMessage(e,A=0,t=!1,n=Za){let s=()=>{let i=As(e[0]),I=i.channel+A;switch(i.status){case M.noteOn:{let o=e[2];o>0?this.noteOn(I,e[1],o):this.noteOff(I,e[1]);break}case M.noteOff:t?this.midiChannels[I].killNote(e[1]):this.noteOff(I,e[1]);break;case M.pitchWheel:this.pitchWheel(I,e[2]<<7|e[1]);break;case M.controllerChange:this.controllerChange(I,e[1],e[2]);break;case M.programChange:this.programChange(I,e[1]);break;case M.polyPressure:this.polyPressure(I,e[0],e[1]);break;case M.channelPressure:this.channelPressure(I,e[1]);break;case M.systemExclusive:this.systemExclusive(new Y(e.slice(1)),A);break;case M.reset:this.stopAllChannels(!0),this.resetAllControllers();break;default:break}},a=n.time;a>this.currentSynthTime?(this.eventQueue.push({callback:s.bind(this),time:a}),this.eventQueue.sort((i,I)=>i.time-I.time)):s()}clearCache(){this.privateProps.cachedVoices=[]}setMIDIVolume(e){this.privateProps.midiVolume=Math.pow(e,Math.E)}setMasterTuning(e){e=Math.round(e);for(let A of this.midiChannels)A.setCustomController(IA.masterTuning,e)}callEvent(e,A){this.onEventCall?.({type:e,data:A})}getCachedVoice(e,A,t){let n=e.bankMSB,s=e.bankLSB,{isGMGSDrum:a,program:i}=e;return a&&(n=128,s=0),this.privateProps.cachedVoices?.[n]?.[s]?.[i]?.[A]?.[t]}setCachedVoice(e,A,t,n){let s=e.bankMSB,a=e.bankLSB,{isGMGSDrum:i,program:I}=e;i&&(s=128,a=0),this.privateProps.cachedVoices[s]||(this.privateProps.cachedVoices[s]=[]),this.privateProps.cachedVoices[s][a]||(this.privateProps.cachedVoices[s][a]=[]),this.privateProps.cachedVoices[s][a][I]||(this.privateProps.cachedVoices[s][a][I]=[]),this.privateProps.cachedVoices[s][a][I][A]||(this.privateProps.cachedVoices[s][a][I][A]=[]),this.privateProps.cachedVoices[s][a][I][A][t]=n}createMIDIChannelInternal(e){let A=new Qi(this,this.privateProps,this.privateProps.defaultPreset,this.midiChannels.length);this.midiChannels.push(A),e&&(this.callEvent("newChannel",void 0),A.sendChannelProperty(),this.midiChannels[this.midiChannels.length-1].setDrums(!0))}updatePresetList(){let e=this.soundBankManager.presetList;this.clearCache(),this.privateProps.callEvent("presetListChange",e),this.getDefaultPresets(),this.midiChannels.forEach(A=>{A.setPresetLock(!1)}),this.resetAllControllers(!1)}getDefaultPresets(){this.privateProps.defaultPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!1},"xg"),this.privateProps.drumPreset=this.soundBankManager.getPreset({bankLSB:0,bankMSB:0,program:0,isGMGSDrum:!0},"gs")}};var zt=Ee.consoleColors;var Ma="spessasynth-worklet-processor";function ba(e,A){return{...A,...e??{}}}var va={skipToFirstNoteOn:!0,initialPlaybackRate:1};var rs=class extends Kt{events=[];constructor(A){super(),super.copyFrom(A),this.events=[]}},Wt=class extends Le{tracks;embeddedSoundBank=void 0;embeddedSoundBankSize;constructor(A){super(),super.copyMetadataFrom(A),this.tracks=A.tracks.map(t=>new rs(t)),this.embeddedSoundBankSize=A?.embeddedSoundBank?.byteLength}};var _t={shuffleOn:1,shuffleOff:2,index:3};var jt=class{synthesizer;sequencer;post;alive=!1;constructor(A,t,n){this.synthesizer=new Ra(A,t),this.sequencer=new sa(this.synthesizer),this.post=n,this.synthesizer.onEventCall=s=>{this.post({type:"eventCall",data:s,currentTime:this.synthesizer.currentSynthTime})},this.sequencer.onEventCall=s=>{if(s.type==="songListChange"){let i=s.data.newSongList.map(I=>new Wt(I));this.post({type:"sequencerReturn",data:{type:s.type,data:{newSongList:i}},currentTime:this.synthesizer.currentSynthTime});return}this.post({type:"sequencerReturn",data:s,currentTime:this.synthesizer.currentSynthTime})}}postReady(A,t,n=[]){this.post({type:"isFullyInitialized",data:{type:A,data:t},currentTime:this.synthesizer.currentSynthTime},n)}postProgress(A,t){this.post({type:"renderingProgress",data:{type:A,data:t},currentTime:this.synthesizer.currentSynthTime})}destroy(){this.synthesizer.destroySynthProcessor(),delete this.synthesizer,delete this.sequencer}handleMessage(A){let t=A.channelNumber,n;if(t>=0&&(n=this.synthesizer.midiChannels[t],n===void 0)){Ee.SpessaSynthWarn(`Trying to access channel ${t} which does not exist... ignoring!`);return}switch(A.type){case"midiMessage":this.synthesizer.processMessage(A.data.messageData,A.data.channelOffset,A.data.force,A.data.options);break;case"customCcChange":n?.setCustomController(A.data.ccNumber,A.data.ccValue);break;case"ccReset":t===Be?this.synthesizer.resetAllControllers():n?.resetControllers();break;case"setChannelVibrato":if(t===Be)for(let s of this.synthesizer.midiChannels)A.data.rate===Be?s.disableAndLockGSNRPN():s.setVibrato(A.data.depth,A.data.rate,A.data.delay);else A.data.rate===Be?n?.disableAndLockGSNRPN():n?.setVibrato(A.data.depth,A.data.rate,A.data.delay);break;case"stopAll":t===Be?this.synthesizer.stopAllChannels(A.data===1):n?.stopAllNotes(A.data===1);break;case"killNotes":this.synthesizer.killVoices(A.data);break;case"muteChannel":n?.muteChannel(A.data);break;case"addNewChannel":this.synthesizer.createMIDIChannel();break;case"setMasterParameter":this.synthesizer.setMasterParameter(A.data.type,A.data.data);break;case"setDrums":n?.setDrums(A.data);break;case"transposeChannel":n?.transposeChannel(A.data.semitones,A.data.force);break;case"lockController":if(A.data.controllerNumber===Be)n?.setPresetLock(A.data.isLocked);else{if(!n)return;n.lockedControllers[A.data.controllerNumber]=A.data.isLocked}break;case"sequencerSpecific":{if(!this.sequencer)return;let s=this.sequencer,a=A.data;switch(a.type){default:break;case"loadNewSongList":try{let I=a.data.map(o=>"duration"in o?Le.copyFrom(o):Le.fromArrayBuffer(o.binary,o.fileName));s.loadNewSongList(I)}catch(i){console.error(i),this.post({type:"sequencerReturn",data:{type:"midiError",data:i},currentTime:this.synthesizer.currentSynthTime})}break;case"pause":s.pause();break;case"play":s.play();break;case"setTime":s.currentTime=a.data;break;case"changeMIDIMessageSending":s.externalMIDIPlayback=a.data;break;case"setPlaybackRate":s.playbackRate=a.data;break;case"setLoopCount":s.loopCount=a.data;break;case"changeSong":switch(a.data.changeType){case _t.shuffleOff:s.shuffleMode=!1;break;case _t.shuffleOn:s.shuffleMode=!0;break;case _t.index:a.data.data!==void 0&&(console.log("INDEX",a.data),s.songIndex=a.data.data);break}break;case"getMIDI":if(!s.midiData)throw new Error("No MIDI is loaded!");this.post({type:"sequencerReturn",data:{type:"getMIDI",data:s.midiData},currentTime:this.synthesizer.currentSynthTime});break;case"setSkipToFirstNote":s.skipToFirstNoteOn=a.data;break}break}case"soundBankManager":try{let s=this.synthesizer.soundBankManager,a=A.data,i;switch(a.type){case"addSoundBank":i=ut.fromArrayBuffer(a.data.soundBankBuffer),s.addSoundBank(i,a.data.id,a.data.bankOffset),this.postReady("soundBankManager",null);break;case"deleteSoundBank":s.deleteSoundBank(a.data),this.postReady("soundBankManager",null);break;case"rearrangeSoundBanks":s.priorityOrder=a.data,this.postReady("soundBankManager",null)}}catch(s){this.post({type:"soundBankError",data:s,currentTime:this.synthesizer.currentSynthTime})}break;case"keyModifierManager":{let s=A.data,a=this.synthesizer.keyModifierManager;switch(s.type){default:return;case"addMapping":a.addMapping(s.data.channel,s.data.midiNote,s.data.mapping);break;case"clearMappings":a.clearMappings();break;case"deleteMapping":a.deleteMapping(s.data.channel,s.data.midiNote)}break}case"requestSynthesizerSnapshot":{let s=is.create(this.synthesizer);this.postReady("synthesizerSnapshot",s);break}case"setLogLevel":Ks(A.data.enableInfo,A.data.enableWarning,A.data.enableGroup);break;case"destroyWorklet":this.alive=!1,this.synthesizer.destroySynthProcessor(),this.destroy();break;default:Ee.SpessaSynthWarn("Unrecognized event!",A);break}}};var $t=class extends jt{alive=!0;oneOutputMode;port;constructor(A,t,n,s){super(A,{enableEffects:!s.oneOutput,enableEventSystem:s?.enableEventSystem,initialTime:t},(a,i)=>{n.postMessage(a,i)}),this.port=n,this.oneOutputMode=s.oneOutput,this.synthesizer.processorInitialized.then(()=>{this.port.onmessage=a=>this.handleMessage(a.data),this.postReady("sf3Decoder",null)})}process(A,t){if(!this.alive)return!1;if(this.sequencer.processTick(),this.oneOutputMode){let n=t[0],s=[];for(let a=0;a<32;a+=2)s.push([n[a],n[a+1]]);this.synthesizer.renderAudioSplit([],[],s)}else this.synthesizer.renderAudioSplit(t[0],t[1],t.slice(2));return!0}handleMessage(A){if(A.type==="startOfflineRender"){this.startOfflineRender(A.data);return}super.handleMessage(A)}startOfflineRender(A){if(!this.sequencer)return;A.soundBankList.forEach((n,s)=>{try{this.synthesizer.soundBankManager.addSoundBank(ut.fromArrayBuffer(n.soundBankBuffer),`bank-${s}`,n.bankOffset)}catch(a){this.post({type:"soundBankError",data:a,currentTime:this.synthesizer.currentSynthTime})}}),A.snapshot!==void 0&&this.synthesizer.applySynthesizerSnapshot(A.snapshot),Ee.SpessaSynthInfo("%cRendering enabled! Starting render.",zt.info),this.sequencer.loopCount=A.loopCount,this.synthesizer.setMasterParameter("voiceCap",1/0);let t=ba(A.sequencerOptions,va);this.sequencer.skipToFirstNoteOn=t.skipToFirstNoteOn,this.sequencer.playbackRate=t.initialPlaybackRate;try{this.sequencer.loadNewSongList([Le.copyFrom(A.midiSequence)]),this.sequencer.play()}catch(n){console.error(n),this.post({type:"sequencerReturn",data:{type:"midiError",data:n},currentTime:this.synthesizer.currentSynthTime})}this.postReady("startOfflineRender",null)}};var Is=class extends AudioWorkletProcessor{process;core;constructor(A){super(),this.core=new $t(sampleRate,currentTime,this.port,A.processorOptions),this.process=this.core.process.bind(this.core)}};registerProcessor(Ma,Is);Ee.SpessaSynthInfo("%cProcessor successfully registered!",zt.recognized);
21
21
  //# sourceMappingURL=spessasynth_processor.min.js.map