/*!{"author_url":"https://rvklein.me/","modified":"2020-12-01T06:00:00Z"}!*/
function Rando ($$)
{
function Rando ()
{
}
var $={};
$.timeNow=function()
{
return(1*(new Date()));
};
$.arrayPickItems=function(x,y)
{
var i=0,k=0,j=x.length,z=[];
while(j>k++)
{
if(true===x[k])
{
z[i++]=y[k];
}
}
return(z);
};
$.arrayFilledBoolTrue=function(n)
{
var i=0,z=[];
while(n>i++)
{
z[i]=true;
}
return(z);
};
$.arrayOfI32SplitBytes=function(a)
{
var j=(a.length),i=0,z=[];
var h=(4*j),k=0;
while(h>i&&j>k)
{
z[i]=((a[k]>>24)&0xFF);
z[i+1]=((a[k]>>16)&0xFF);
z[i+2]=((a[k]>>8)&0xFF);
z[i+3]=((a[k])&0xFF);
i=(i+4);
k++;
}
return(z);
};
$.numI32Reverse=function(n)
{
return(
( (((n>> 0)&1)<<31)|(((n>> 1)&1)<<30)
| (((n>> 2)&1)<<29)|(((n>> 3)&1)<<28)
| (((n>> 4)&1)<<27)|(((n>> 5)&1)<<26)
| (((n>> 6)&1)<<25)|(((n>> 7)&1)<<24)
| (((n>> 8)&1)<<23)|(((n>> 9)&1)<<22)
| (((n>>10)&1)<<21)|(((n>>11)&1)<<20)
| (((n>>12)&1)<<19)|(((n>>13)&1)<<18)
| (((n>>14)&1)<<17)|(((n>>15)&1)<<16)
| (((n>>16)&1)<<15)|(((n>>17)&1)<<14)
| (((n>>18)&1)<<13)|(((n>>19)&1)<<12)
| (((n>>20)&1)<<11)|(((n>>21)&1)<<10)
| (((n>>22)&1)<< 9)|(((n>>23)&1)<< 8)
| (((n>>24)&1)<< 7)|(((n>>25)&1)<< 6)
| (((n>>26)&1)<< 5)|(((n>>27)&1)<< 4)
| (((n>>28)&1)<< 3)|(((n>>29)&1)<< 2)
| (((n>>30)&1)<< 1)|(((n>>31)&1)<< 0)
)
);
};
$.lcgpm31=function(s)
{
return(
function()
{
s=(s%0x7FFFFFFF);
if(0>=s){s+=0x7FFFFFFE;}
s=((s*0xBC8F)%0x7FFFFFFF);
return(s);
}
);
};
$.mb32=function(a)
{
var t=((a+1831565813)|0);
t=(Math.imul((t^t>>>15),(1|t)));
t=(t+Math.imul(t^t>>>7,61|t)^t);
t=((t^t>>>14)>>>0);
return(t);
};
$.getTimeStartHash=function(t)
{
var f=($.mb32),r=($.numI32Reverse);
var u=0xFFFFFFFF;
var g=0x5A827999F;
var k=(0^(0-g));
var b=(t%u),a=(t>>>31),i=0;
var s=((t%g)^k);
while(u<(t>>>i++)){}
return(f(f((f(f(r(u-b))^a^(t>>>i))+1)^(31-i))^(r(f(t-1)-1))^(f(f(s)))));
};
$.timedContentionIterator=function()
{
var t=($.timeNow);
var f=($.mb32);
var i=0,k=0,w=[],z=[];
var a=(t());
var g=($.lcgpm31($.getTimeStartHash(a)));
var x=(t()),y=(t());
if(x!=y)
{
x=(t());
y=(t());
}
while(x==y)
{
w[i++]=(f(g()+f(i)));
y=(t());
}
var d=(y-x);
var h=(Math.floor(i/d));
while(h>k)
{
z[k++]=(f(f(w[((k%h)+(k*h))])+g()));
}
return( [d,i,z] );
};
$.collectEntropy=function(n)
{
var k=0,i=0,c=0,d=0,r=[],q=[],p=[],z=[],h=null;
while(p.length<=n)
{
h=($.timedContentionIterator());
r[k]=h[0];
q[k]=h[1];
p=(p.concat(h[2].slice()));
k++;
}
d=((p.length)-n);
h=0;
var x=($.arrayFilledBoolTrue(p.length));
while(d>c)
{
h=((h+d)%n);
if(x[h]===true)
{
x[h]=false;
c++;
}
else
{
h++;
}
}
z=($.arrayPickItems(x,p));
return([r,q,z]);
};
$.createCSPRNG=function()
{
var c=768;
var e=($.collectEntropy(c));
var a=($.arrayOfI32SplitBytes(e[2]).reverse());
var h=($$.SHA3._384.digest(a));
var k=(new Uint8Array(h.slice(1,33)));
var n=(new Uint8Array(h.slice(36,48)));
return(new $$.ChaCha20(k,n));
};
Rando.prototype.timedContentionIterator=($.timedContentionIterator);
Rando.prototype.collectEntropy=($.collectEntropy);
Rando.prototype.createCSPRNG=($.createCSPRNG);
return(new Rando());
}
var rando=(Rando({"SHA3":SHA3,"ChaCha20":ChaCha20}));
/**/
/*
// console.log( rando.collectEntropy(768) );
*/
/**/
🐇