(function(){ const IV=[0x6A09E667,0xBB67AE85,0x3C6EF372,0xA54FF53A,0x510E527F,0x9B05688C,0x1F83D9AB,0x5BE0CD19]; const PERM=[2,6,3,10,7,0,4,13,1,11,12,5,9,14,15,8]; const CS=1, CE=2, PAR=4, ROOT=8; function rotr(x,n){return ((x>>>n)|(x<<(32-n)))>>>0;} function G(s,a,b,c,d,mx,my){ s[a]=(s[a]+s[b]+mx)>>>0; s[d]=rotr((s[d]^s[a])>>>0,16); s[c]=(s[c]+s[d])>>>0; s[b]=rotr((s[b]^s[c])>>>0,12); s[a]=(s[a]+s[b]+my)>>>0; s[d]=rotr((s[d]^s[a])>>>0,8); s[c]=(s[c]+s[d])>>>0; s[b]=rotr((s[b]^s[c])>>>0,7); } function rnd(s,m){ G(s,0,4,8,12,m[0],m[1]); G(s,1,5,9,13,m[2],m[3]); G(s,2,6,10,14,m[4],m[5]); G(s,3,7,11,15,m[6],m[7]); G(s,0,5,10,15,m[8],m[9]); G(s,1,6,11,12,m[10],m[11]); G(s,2,7,8,13,m[12],m[13]); G(s,3,4,9,14,m[14],m[15]); } function compress(cv,block,counter,blockLen,flags){ const s=[cv[0],cv[1],cv[2],cv[3],cv[4],cv[5],cv[6],cv[7], IV[0],IV[1],IV[2],IV[3], counter>>>0, Math.floor(counter/4294967296)>>>0, blockLen, flags]; let m=block.slice(); for(let r=0;r<7;r++){ rnd(s,m); if(r<6){ const p=new Array(16); for(let i=0;i<16;i++) p[i]=m[PERM[i]]; m=p; } } const out=new Array(16); for(let i=0;i<8;i++){ out[i]=(s[i]^s[i+8])>>>0; out[i+8]=(s[i+8]^cv[i])>>>0; } return out; } function readBlock(b,off,len){ const w=new Array(16).fill(0); for(let i=0;i>2] |= b[off+i] << (8*(i&3)); for(let i=0;i<16;i++) w[i]=w[i]>>>0; return w; } function chunkOut(b,start,end,ci){ let cv=IV.slice(); const len=end-start, nB=Math.max(1,Math.ceil(len/64)); for(let i=0;i>=1; } stack.push(cv); } let out=last; for(let i=stack.length-1;i>=0;i--) out=parentObj(stack[i], cvOf(out)); const w=compress(out.cv,out.block,out.counter,out.blockLen,out.flags|ROOT); let hex=''; for(let i=0;i<8;i++){ const v=w[i]; for(let j=0;j<4;j++) hex += (((v>>>(8*j))&255)+256).toString(16).slice(1); } return hex; } function utf8(s){ return new TextEncoder().encode(s); } window.__b3 = b3bytes; window.__b3s = function(s){ return b3bytes(utf8(s)); }; window.__b64enc = function(s){ const u=utf8(s); let bin=''; for(let i=0;i