summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorausiv4 <ausiv4@eb105b4a-77de-11de-a249-6bf219df57d5>2009-08-04 17:16:05 +0000
committerausiv4 <ausiv4@eb105b4a-77de-11de-a249-6bf219df57d5>2009-08-04 17:16:05 +0000
commit5469dcca8ff6406cf2ef6b6ce6f5b1b1b204566a (patch)
treed98893834e496be3152cc3a4c6a95338d240b1c8
parentca28a1b9dccdd1037714bb238cffa86db302ab5c (diff)
Improved documentation for srp.js.
Made srpPath a part of the SRP object to reduce namespace clutter.
-rw-r--r--javascript/jsPacker/srp.min.js2
-rw-r--r--javascript/srp.js60
2 files changed, 49 insertions, 13 deletions
diff --git a/javascript/jsPacker/srp.min.js b/javascript/jsPacker/srp.min.js
index 6e18207..23446a3 100644
--- a/javascript/jsPacker/srp.min.js
+++ b/javascript/jsPacker/srp.min.js
@@ -1 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('E 1G(s){C 2s=8;C 7e=0;E 1e(x,y){C 4l=(x&4k)+(y&4k);C 7m=(x>>16)+(y>>16)+(4l>>16);F(7m<<16)|(4l&4k)}E S(X,n){F(X>>>n)|(X<<(32-n))}E R(X,n){F(X>>>n)}E 7i(x,y,z){F((x&y)^((~x)&z))}E 7g(x,y,z){F((x&y)^(x&z)^(y&z))}E 7h(x){F(S(x,2)^S(x,13)^S(x,22))}E 7j(x){F(S(x,6)^S(x,11)^S(x,25))}E 7k(x){F(S(x,7)^S(x,18)^R(x,3))}E 7l(x){F(S(x,17)^S(x,19)^R(x,10))}E 7a(m,l){C K=V 1z(b1,b0,aZ,aY,aX,aW,aV,aU,aT,aS,aR,aQ,aP,aO,aN,aM,aL,aK,aJ,aI,aH,aG,aF,aE,aD,aC,aB,aA,az,ay,ax,aw,av,au,at,as,ar,aq,ap,ao,an,al,ak,aj,ai,ah,ag,af,ae,ad,ab,aa,a9,a8,a7,a6,a5,a4,a3,a2,a1,a0,9Z,9Y);C 1a=V 1z(9X,9W,9V,9U,9T,9S,9R,9Q);C W=V 1z(64);C a,b,c,d,e,f,g,h,i,j;C 3p,4j;m[l>>5]|=2N<<(24-l%32);m[((l+64>>9)<<4)+15]=l;P(C i=0;i<m.T;i+=16){a=1a[0];b=1a[1];c=1a[2];d=1a[3];e=1a[4];f=1a[5];g=1a[6];h=1a[7];P(C j=0;j<64;j++){D(j<16)W[j]=m[j+i];J W[j]=1e(1e(1e(7l(W[j-2]),W[j-7]),7k(W[j-15])),W[j-16]);3p=1e(1e(1e(1e(h,7j(e)),7i(e,f,g)),K[j]),W[j]);4j=1e(7h(a),7g(a,b,c));h=g;g=f;f=e;e=1e(d,3p);d=c;c=b;b=a;a=1e(3p,4j)}1a[0]=1e(a,1a[0]);1a[1]=1e(b,1a[1]);1a[2]=1e(c,1a[2]);1a[3]=1e(d,1a[3]);1a[4]=1e(e,1a[4]);1a[5]=1e(f,1a[5]);1a[6]=1e(g,1a[6]);1a[7]=1e(h,1a[7])}F 1a}E 78(1Q){C 4i=1z();C 7f=(1<<2s)-1;P(C i=0;i<1Q.T*2s;i+=2s){4i[i>>5]|=(1Q.2a(i/2s)&7f)<<(24-i%32)}F 4i}E 7c(2r){2r=2r.9P(/\\r\\n/g,"\\n");C 1U="";P(C n=0;n<2r.T;n++){C c=2r.2a(n);D(c<3o){1U+=2u.2t(c)}J D((c>5R)&&(c<9O)){1U+=2u.2t((c>>6)|9N);1U+=2u.2t((c&63)|3o)}J{1U+=2u.2t((c>>12)|9M);1U+=2u.2t(((c>>6)&63)|3o);1U+=2u.2t((c&63)|3o)}}F 1U}E 7b(3n){C 4h=7e?"9L":"9K";C 1Q="";P(C i=0;i<3n.T*4;i++){1Q+=4h.2P((3n[i>>2]>>((3-i%4)*8+4))&7d)+4h.2P((3n[i>>2]>>((3-i%4)*8))&7d)}F 1Q}s=7c(s);F 7b(7a(78(s),s.T*2s))}E 3m(){o.i=0;o.j=0;o.S=V 1z()}E 77(2x){C i,j,t;P(i=0;i<1T;++i)o.S[i]=i;j=0;P(i=0;i<1T;++i){j=(j+o.S[i]+2x[i%2x.T])&1F;t=o.S[i];o.S[i]=o.S[j];o.S[j]=t}o.i=0;o.j=0}E 76(){C t;o.i=(o.i+1)&1F;o.j=(o.j+o.S[o.i])&1F;t=o.S[o.i];o.S[o.i]=o.S[o.j];o.S[o.j]=t;F o.S[(t+o.S[o.i])&1F]}3m.H.6Z=77;3m.H.6Y=76;E 70(){F V 3m()}C 3l=1T;C 2T;C 1r;C 1f;E 75(x){1r[1f++]^=x&1F;1r[1f++]^=(x>>8)&1F;1r[1f++]^=(x>>16)&1F;1r[1f++]^=(x>>24)&1F;D(1f>=3l)1f-=3l}E 4g(){75(V 9J().9I())}D(1r==Z){1r=V 1z();1f=0;C t;D(3k.4c=="6S"&&3k.9H<"5"&&2w.74){C z=2w.74.72(32);P(t=0;t<z.T;++t)1r[1f++]=z.2a(t)&1F}L(1f<3l){t=1d.20(9G*1d.72());1r[1f++]=t>>>8;1r[1f++]=t&1F}1f=0;4g();}E 6X(){D(2T==Z){4g();2T=70();2T.6Z(1r);P(1f=0;1f<1r.T;++1f)1r[1f]=0;1f=0;}F 2T.6Y()}E 6W(4f){C i;P(i=0;i<4f.T;++i)4f[i]=6X()}E 3K(){}3K.H.66=6W;C 1N;C 6V=9F;C 4d=((6V&9E)==9D);E G(a,b,c){D(a!=Z)D("68"==2V a)o.3O(a,b,c);J D(b==Z&&"2r"!=2V a)o.3f(a,1T);J o.3f(a,b)}E Q(){F V G(Z)}E 6R(i,x,w,j,c,n){L(--n>=0){C v=x*o[i++]+w[j]+c;c=1d.20(v/9C);w[j++]=v&9B}F c}E 6T(i,x,w,j,c,n){C 2q=x&2Q,2p=x>>15;L(--n>=0){C l=o[i]&2Q;C h=o[i++]>>15;C m=2p*l+h*2q;l=2q*l+((m&2Q)<<15)+w[j]+(c&6U);c=(l>>>30)+(m>>>15)+2p*h+(c>>>30);w[j++]=l&6U}F c}E 6Q(i,x,w,j,c,n){C 2q=x&4e,2p=x>>14;L(--n>=0){C l=o[i]&4e;C h=o[i++]>>14;C m=2p*l+h*2q;l=2q*l+((m&4e)<<14)+w[j]+c;c=(l>>28)+(m>>14)+2p*h;w[j++]=l&9A}F c}D(4d&&(3k.4c=="4I 9z 9y")){G.H.am=6T;1N=30}J D(4d&&(3k.4c!="6S")){G.H.am=6R;1N=26}J{G.H.am=6Q;1N=28}G.H.O=1N;G.H.1h=((1<<1N)-1);G.H.1l=(1<<1N);C 3j=52;G.H.6O=1d.2D(2,3j);G.H.4a=3j-1N;G.H.46=2*1N-3j;C 6P="9x";C 2S=V 1z();C 2b,1q;2b="0".2a(0);P(1q=0;1q<=9;++1q)2S[2b++]=1q;2b="a".2a(0);P(1q=10;1q<36;++1q)2S[2b++]=1q;2b="A".2a(0);P(1q=10;1q<36;++1q)2S[2b++]=1q;E 4b(n){F 6P.2P(n)}E 40(s,i){C c=2S[s.2a(i)];F(c==Z)?-1:c}E 6w(r){P(C i=o.t-1;i>=0;--i)r[i]=o[i];r.t=o.t;r.s=o.s}E 6v(x){o.t=1;o.s=(x<0)?-1:0;D(x>0)o[0]=x;J D(x<-1)o[0]=x+1l;J o.t=0}E 1K(i){C r=Q();r.2g(i);F r}E 6u(s,b){C k;D(b==16)k=4;J D(b==8)k=3;J D(b==1T)k=8;J D(b==2)k=1;J D(b==32)k=5;J D(b==4)k=2;J{o.5L(s,b);F}o.t=0;o.s=0;C i=s.T,21=1n,1p=0;L(--i>=0){C x=(k==8)?s[i]&2M:40(s,i);D(x<0){D(s.2P(i)=="-")21=1B;69}21=1n;D(1p==0)o[o.t++]=x;J D(1p+k>o.O){o[o.t-1]|=(x&((1<<(o.O-1p))-1))<<1p;o[o.t++]=(x>>(o.O-1p))}J o[o.t-1]|=x<<1p;1p+=k;D(1p>=o.O)1p-=o.O}D(k==8&&(s[0]&2N)!=0){o.s=-1;D(1p>0)o[o.t-1]|=((1<<(o.O-1p))-1)<<1p}o.1m();D(21)G.1y.Y(o,o)}E 6t(){C c=o.s&o.1h;L(o.t>0&&o[o.t-1]==c)--o.t}E 6g(b){D(o.s<0)F"-"+o.2G().1w(b);C k;D(b==16)k=4;J D(b==8)k=3;J D(b==2)k=1;J D(b==32)k=5;J D(b==4)k=2;J F o.5N(b);C 2I=(1<<k)-1,d,m=1n,r="",i=o.t;C p=o.O-(i*o.O)%k;D(i-->0){D(p<o.O&&(d=o[i]>>p)>0){m=1B;r=4b(d)}L(i>=0){D(p<k){d=(o[i]&((1<<p)-1))<<(k-p);d|=o[--i]>>(p+=o.O-k)}J{d=(o[i]>>(p-=k))&2I;D(p<=0){p+=o.O;--i}}D(d>0)m=1B;D(m)r+=4b(d)}}F m?r:"0"}E 6f(){C r=Q();G.1y.Y(o,r);F r}E 6e(){F(o.s<0)?o.2G():o}E 6d(a){C r=o.s-a.s;D(r!=0)F r;C i=o.t;r=i-a.t;D(r!=0)F r;L(--i>=0)D((r=o[i]-a[i])!=0)F r;F 0}E 2J(x){C r=1,t;D((t=x>>>16)!=0){x=t;r+=16}D((t=x>>8)!=0){x=t;r+=8}D((t=x>>4)!=0){x=t;r+=4}D((t=x>>2)!=0){x=t;r+=2}D((t=x>>1)!=0){x=t;r+=1}F r}E 6c(){D(o.t<=0)F 0;F o.O*(o.t-1)+2J(o[o.t-1]^(o.s&o.1h))}E 6s(n,r){C i;P(i=o.t-1;i>=0;--i)r[i+n]=o[i];P(i=n-1;i>=0;--i)r[i]=0;r.t=o.t+n;r.s=o.s}E 6r(n,r){P(C i=n;i<o.t;++i)r[i-n]=o[i];r.t=1d.3L(o.t-n,0);r.s=o.s}E 6q(n,r){C 1E=n%o.O;C 2o=o.O-1E;C 2R=(1<<2o)-1;C 1o=1d.20(n/o.O),c=(o.s<<1E)&o.1h,i;P(i=o.t-1;i>=0;--i){r[i+1o+1]=(o[i]>>2o)|c;c=(o[i]&2R)<<1E}P(i=1o-1;i>=0;--i)r[i]=0;r[1o]=c;r.t=o.t+1o+1;r.s=o.s;r.1m()}E 6p(n,r){r.s=o.s;C 1o=1d.20(n/o.O);D(1o>=o.t){r.t=0;F}C 1E=n%o.O;C 2o=o.O-1E;C 2R=(1<<1E)-1;r[0]=o[1o]>>1E;P(C i=1o+1;i<o.t;++i){r[i-1o-1]|=(o[i]&2R)<<2o;r[i-1o]=o[i]>>1E}D(1E>0)r[o.t-1o-1]|=(o.s&2R)<<2o;r.t=o.t-1o;r.1m()}E 6o(a,r){C i=0,c=0,m=1d.1P(a.t,o.t);L(i<m){c+=o[i]-a[i];r[i++]=c&o.1h;c>>=o.O}D(a.t<o.t){c-=a.s;L(i<o.t){c+=o[i];r[i++]=c&o.1h;c>>=o.O}c+=o.s}J{c+=o.s;L(i<a.t){c-=a[i];r[i++]=c&o.1h;c>>=o.O}c-=a.s}r.s=(c<0)?-1:0;D(c<-1)r[i++]=o.1l+c;J D(c>0)r[i++]=c;r.t=i;r.1m()}E 6n(a,r){C x=o.1J(),y=a.1J();C i=x.t;r.t=i+y.t;L(--i>=0)r[i]=0;P(i=0;i<y.t;++i)r[i+x.t]=x.am(0,y[i],r,i,0,x.t);r.s=0;r.1m();D(o.s!=a.s)G.1y.Y(r,r)}E 6m(r){C x=o.1J();C i=r.t=2*x.t;L(--i>=0)r[i]=0;P(i=0;i<x.t-1;++i){C c=x.am(i,x[i],r,2*i,0,1);D((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1))>=x.1l){r[i+x.t]-=x.1l;r[i+x.t+1]=1}}D(r.t>0)r[r.t-1]+=x.am(i,x[i],r,2*i,0,1);r.s=0;r.1m()}E 6l(m,q,r){C 27=m.1J();D(27.t<=0)F;C 3i=o.1J();D(3i.t<27.t){D(q!=Z)q.2g(0);D(r!=Z)o.1L(r);F}D(r==Z)r=Q();C y=Q(),45=o.s,6L=m.s;C 2n=o.O-2J(27[27.t-1]);D(2n>0){27.2h(2n,y);3i.2h(2n,r)}J{27.1L(y);3i.1L(r)}C 1D=y.t;C 3h=y[1D-1];D(3h==0)F;C 49=3h*(1<<o.4a)+((1D>1)?y[1D-2]>>o.46:0);C 6N=o.6O/49,6M=(1<<o.4a)/49,e=1<<o.46;C i=r.t,j=i-1D,t=(q==Z)?Q():q;y.2l(j,t);D(r.1c(t)>=0){r[r.t++]=1;r.Y(t,r)}G.1x.2l(1D,t);t.Y(y,y);L(y.t<1D)y[y.t++]=0;L(--j>=0){C 3g=(r[--i]==3h)?o.1h:1d.20(r[i]*6N+(r[i-1]+e)*6M);D((r[i]+=y.am(0,3g,r,j,0,1D))<3g){y.2l(j,t);r.Y(t,r);L(r[i]<--3g)r.Y(t,r)}}D(q!=Z){r.2L(1D,q);D(45!=6L)G.1y.Y(q,q)}r.t=1D;r.1m();D(2n>0)r.1i(2n,r);D(45<0)G.1y.Y(r,r)}E 6b(a){C r=Q();o.1J().1M(a,Z,r);D(o.s<0&&r.1c(G.1y)>0)a.Y(r,r);F r}E 1S(m){o.m=m}E 6K(x){D(x.s<0||x.1c(o.m)>=0)F x.3U(o.m);J F x}E 6J(x){F x}E 6I(x){x.1M(o.m,Z,x)}E 6H(x,y,r){x.2k(y,r);o.1A(r)}E 6G(x,r){x.2K(r);o.1A(r)}1S.H.2j=6K;1S.H.2i=6J;1S.H.1A=6I;1S.H.1X=6H;1S.H.1C=6G;E 6j(){D(o.t<1)F 0;C x=o[0];D((x&1)==0)F 0;C y=x&3;y=(y*(2-(x&3Z)*y))&3Z;y=(y*(2-(x&2M)*y))&2M;y=(y*(2-(((x&3e)*y)&3e)))&3e;y=(y*(2-x*y%o.1l))%o.1l;F(y>0)?o.1l-y:-y}E 1R(m){o.m=m;o.44=m.6k();o.42=o.44&2Q;o.6E=o.44>>15;o.6D=(1<<(m.O-15))-1;o.6F=2*m.t}E 6B(x){C r=Q();x.1J().2l(o.m.t,r);r.1M(o.m,Z,r);D(x.s<0&&r.1c(G.1y)>0)o.m.Y(r,r);F r}E 6A(x){C r=Q();x.1L(r);o.1A(r);F r}E 6z(x){L(x.t<=o.6F)x[x.t++]=0;P(C i=0;i<o.m.t;++i){C j=x[i]&2Q;C 6C=(j*o.42+(((j*o.6E+(x[i]>>15)*o.42)&o.6D)<<15))&x.1h;j=i+o.m.t;x[j]+=o.m.am(0,6C,x,i,0,o.m.t);L(x[j]>=x.1l){x[j]-=x.1l;x[++j]++}}x.1m();x.2L(o.m.t,x);D(x.1c(o.m)>=0)x.Y(o.m,x)}E 6x(x,r){x.2K(r);o.1A(r)}E 6y(x,y,r){x.2k(y,r);o.1A(r)}1R.H.2j=6B;1R.H.2i=6A;1R.H.1A=6z;1R.H.1X=6y;1R.H.1C=6x;E 6i(){F((o.t>0)?(o[0]&1):o.s)==0}E 6h(e,z){D(e>9w||e<1)F G.1x;C r=Q(),1b=Q(),g=z.2j(o),i=2J(e)-1;g.1L(r);L(--i>=0){z.1C(r,1b);D((e&(1<<i))>0)z.1X(1b,g,r);J{C t=r;r=1b;1b=t}}F z.2i(r)}E 6a(e,m){C z;D(e<1T||m.1k())z=V 1S(m);J z=V 1R(m);F o.3V(e,z)}G.H.1L=6w;G.H.2g=6v;G.H.3f=6u;G.H.1m=6t;G.H.2l=6s;G.H.2L=6r;G.H.2h=6q;G.H.1i=6p;G.H.Y=6o;G.H.2k=6n;G.H.2K=6m;G.H.1M=6l;G.H.6k=6j;G.H.1k=6i;G.H.3V=6h;G.H.1w=6g;G.H.2G=6f;G.H.1J=6e;G.H.1c=6d;G.H.3S=6c;G.H.3U=6b;G.H.5P=6a;G.1y=1K(0);G.1x=1K(1);E 5v(){C r=Q();o.1L(r);F r}E 5u(){D(o.s<0){D(o.t==1)F o[0]-o.1l;J D(o.t==0)F-1}J D(o.t==1)F o[0];J D(o.t==0)F 0;F((o[1]&((1<<(32-o.O))-1))<<o.O)|o[0]}E 5t(){F(o.t==0)?o.s:(o[0]<<24)>>24}E 5s(){F(o.t==0)?o.s:(o[0]<<16)>>16}E 5O(r){F 1d.20(1d.9v*o.O/1d.9u(r))}E 5r(){D(o.s<0)F-1;J D(o.t<=0||(o.t==1&&o[0]<=0))F 0;J F 1}E 5M(b){D(b==Z)b=10;D(o.1I()==0||b<2||b>36)F"0";C 2O=o.3P(b);C a=1d.2D(b,2O);C d=1K(a),y=Q(),z=Q(),r="";o.1M(d,y,z);L(y.1I()>0){r=(a+z.3M()).1w(b).9t(1)+r;y.1M(d,y,z)}F z.3M().1w(b)+r}E 5K(s,b){o.2g(0);D(b==Z)b=10;C 2O=o.3P(b);C d=1d.2D(b,2O),21=1n,j=0,w=0;P(C i=0;i<s.T;++i){C x=40(s,i);D(x<0){D(s.2P(i)=="-"&&o.1I()==0)21=1B;69}w=b*w+x;D(++j>=2O){o.3N(d);o.2e(w,0);j=0;w=0}}D(j>0){o.3N(1d.2D(b,j));o.2e(w,0)}D(21)G.1y.Y(o,o)}E 5J(a,b,c){D("68"==2V b){D(a<2)o.2g(1);J{o.3O(a,c);D(!o.5c(a-1))o.1W(G.1x.3b(a-1),3d,o);D(o.1k())o.2e(1,0);L(!o.4T(b)){o.2e(2,0);D(o.3S()>a)o.Y(G.1x.3b(a-1),o)}}}J{C x=V 1z(),t=a&7;x.T=(a>>3)+1;b.66(x);D(t>0)x[0]&=((1<<t)-1);J x[0]=0;o.3f(x,1T)}}E 5q(){C i=o.t,r=V 1z();r[0]=o.s;C p=o.O-(i*o.O)%8,d,k=0;D(i-->0){D(p<o.O&&(d=o[i]>>p)!=(o.s&o.1h)>>p)r[k++]=d|(o.s<<(o.O-p));L(i>=0){D(p<8){d=(o[i]&((1<<p)-1))<<(8-p);d|=o[--i]>>(p+=o.O-8)}J{d=(o[i]>>(p-=8))&2M;D(p<=0){p+=o.O;--i}}D((d&2N)!=0)d|=-1T;D(k==0&&(o.s&2N)!=(d&2N))++k;D(k>0||d!=o.s)r[k++]=d}}F r}E 5p(a){F(o.1c(a)==0)}E 5o(a){F(o.1c(a)<0)?o:a}E 5n(a){F(o.1c(a)>0)?o:a}E 5I(a,1Z,r){C i,f,m=1d.1P(a.t,o.t);P(i=0;i<m;++i)r[i]=1Z(o[i],a[i]);D(a.t<o.t){f=a.s&o.1h;P(i=m;i<o.t;++i)r[i]=1Z(o[i],f);r.t=o.t}J{f=o.s&o.1h;P(i=m;i<a.t;++i)r[i]=1Z(f,a[i]);r.t=a.t}r.s=1Z(o.s,a.s);r.1m()}E 65(x,y){F x&y}E 5m(a){C r=Q();o.1W(a,65,r);F r}E 3d(x,y){F x|y}E 5l(a){C r=Q();o.1W(a,3d,r);F r}E 3X(x,y){F x^y}E 5k(a){C r=Q();o.1W(a,3X,r);F r}E 3Y(x,y){F x&~y}E 5j(a){C r=Q();o.1W(a,3Y,r);F r}E 5i(){C r=Q();P(C i=0;i<o.t;++i)r[i]=o.1h&~o[i];r.t=o.t;r.s=~o.s;F r}E 5h(n){C r=Q();D(n<0)o.1i(-n,r);J o.2h(n,r);F r}E 5f(n){C r=Q();D(n<0)o.2h(-n,r);J o.1i(n,r);F r}E 62(x){D(x==0)F-1;C r=0;D((x&3e)==0){x>>=16;r+=16}D((x&2M)==0){x>>=8;r+=8}D((x&3Z)==0){x>>=4;r+=4}D((x&3)==0){x>>=2;r+=2}D((x&1)==0)++r;F r}E 5e(){P(C i=0;i<o.t;++i)D(o[i]!=0)F i*o.O+62(o[i]);D(o.s<0)F o.t*o.O;F-1}E 60(x){C r=0;L(x!=0){x&=x-1;++r}F r}E 5d(){C r=0,x=o.s&o.1h;P(C i=0;i<o.t;++i)r+=60(o[i]^x);F r}E 5b(n){C j=1d.20(n/o.O);D(j>=o.t)F(o.s!=0);F((o[j]&(1<<(n%o.O)))!=0)}E 5H(n,1Z){C r=G.1x.3b(n);o.1W(r,1Z,r);F r}E 5a(n){F o.3c(n,3d)}E 58(n){F o.3c(n,3Y)}E 57(n){F o.3c(n,3X)}E 5G(a,r){C i=0,c=0,m=1d.1P(a.t,o.t);L(i<m){c+=o[i]+a[i];r[i++]=c&o.1h;c>>=o.O}D(a.t<o.t){c+=a.s;L(i<o.t){c+=o[i];r[i++]=c&o.1h;c>>=o.O}c+=o.s}J{c+=o.s;L(i<a.t){c+=a[i];r[i++]=c&o.1h;c>>=o.O}c+=a.s}r.s=(c<0)?-1:0;D(c>0)r[i++]=c;J D(c<-1)r[i++]=o.1l+c;r.t=i;r.1m()}E 56(a){C r=Q();o.2F(a,r);F r}E 55(a){C r=Q();o.Y(a,r);F r}E 54(a){C r=Q();o.2k(a,r);F r}E 50(a){C r=Q();o.1M(a,r,Z);F r}E 4Z(a){C r=Q();o.1M(a,Z,r);F r}E 4Y(a){C q=Q(),r=Q();o.1M(a,q,r);F V 1z(q,r)}E 5F(n){o[o.t]=o.am(0,n-1,o,0,0,o.t);++o.t;o.1m()}E 5E(n,w){L(o.t<=w)o[o.t++]=0;o[w]+=n;L(o[w]>=o.1l){o[w]-=o.1l;D(++w>=o.t)o[o.t++]=0;++o[w]}}E 2m(){}E 3W(x){F x}E 5Z(x,y,r){x.2k(y,r)}E 5Y(x,r){x.2K(r)}2m.H.2j=3W;2m.H.2i=3W;2m.H.1X=5Z;2m.H.1C=5Y;E 4V(e){F o.3V(e,V 2m())}E 5C(a,n,r){C i=1d.1P(o.t+a.t,n);r.s=0;r.t=i;L(i>0)r[--i]=0;C j;P(j=r.t-o.t;i<j;++i)r[i+o.t]=o.am(0,a[i],r,i,0,o.t);P(j=1d.1P(a.t,n);i<j;++i)o.am(0,a[i],r,i,0,n-i);r.1m()}E 5A(a,n,r){--n;C i=r.t=o.t+a.t-n;r.s=0;L(--i>=0)r[i]=0;P(i=1d.3L(n-o.t,0);i<a.t;++i)r[o.t+i-n]=o.am(n-i,a[i],r,0,0,o.t+i-n);r.1m();r.2L(1,r)}E 1Y(m){o.1b=Q();o.3T=Q();G.1x.2l(2*m.t,o.1b);o.5X=o.1b.51(m);o.m=m}E 5W(x){D(x.s<0||x.t>2*o.m.t)F x.3U(o.m);J D(x.1c(o.m)<0)F x;J{C r=Q();x.1L(r);o.1A(r);F r}}E 5V(x){F x}E 5U(x){x.2L(o.m.t-1,o.1b);D(x.t>o.m.t+1){x.t=o.m.t+1;x.1m()}o.5X.5B(o.1b,o.m.t+1,o.3T);o.m.5D(o.3T,o.m.t+1,o.1b);L(x.1c(o.1b)<0)x.2e(1,o.m.t+1);x.Y(o.1b,x);L(x.1c(o.m)>=0)x.Y(o.m,x)}E 5S(x,r){x.2K(r);o.1A(r)}E 5T(x,y,r){x.2k(y,r);o.1A(r)}1Y.H.2j=5W;1Y.H.2i=5V;1Y.H.1A=5U;1Y.H.1X=5T;1Y.H.1C=5S;E 4X(e,m){C i=e.3S(),k,r=1K(1),z;D(i<=0)F r;J D(i<18)k=1;J D(i<48)k=3;J D(i<9s)k=4;J D(i<9r)k=5;J k=6;D(i<8)z=V 1S(m);J D(m.1k())z=V 1Y(m);J z=V 1R(m);C g=V 1z(),n=3,2H=k-1,2I=(1<<k)-1;g[1]=z.2j(o);D(k>1){C 3R=Q();z.1C(g[1],3R);L(n<=2I){g[n]=Q();z.1X(3R,g[n-2],g[n]);n+=2}}C j=e.t-1,w,3Q=1B,1b=Q(),t;i=2J(e[j])-1;L(j>=0){D(i>=2H)w=(e[j]>>(i-2H))&2I;J{w=(e[j]&((1<<(i+1))-1))<<(2H-i);D(j>0)w|=e[j-1]>>(o.O+i-2H)}n=k;L((w&1)==0){w>>=1;--n}D((i-=n)<0){i+=o.O;--j}D(3Q){g[w].1L(r);3Q=1n}J{L(n>1){z.1C(r,1b);z.1C(1b,r);n-=2}D(n>0)z.1C(r,1b);J{t=r;r=1b;1b=t}z.1X(1b,g[w],r)}L(j>=0&&(e[j]&(1<<i))==0){z.1C(r,1b);t=r;r=1b;1b=t;D(--i<0){i=o.O-1;--j}}}F z.2i(r)}E 4U(a){C x=(o.s<0)?o.2G():o.2E();C y=(a.s<0)?a.2G():a.2E();D(x.1c(y)<0){C t=x;x=y;y=t}C i=x.2d(),g=y.2d();D(g<0)F x;D(i<g)g=i;D(g>0){x.1i(g,x);y.1i(g,y)}L(x.1I()>0){D((i=x.2d())>0)x.1i(i,x);D((i=y.2d())>0)y.1i(i,y);D(x.1c(y)>=0){x.Y(y,x);x.1i(1,x)}J{y.Y(x,y);y.1i(1,y)}}D(g>0)y.2h(g,y);F y}E 5y(n){D(n<=0)F 0;C d=o.1l%n,r=(o.s<0)?n-1:0;D(o.t>0)D(d==0)r=o[0]%n;J P(C i=o.t-1;i>=0;--i)r=(d*r+o[i])%n;F r}E 4W(m){C ac=m.1k();D((o.1k()&&ac)||m.1I()==0)F G.1y;C u=m.2E(),v=o.2E();C a=1K(1),b=1K(0),c=1K(0),d=1K(1);L(u.1I()!=0){L(u.1k()){u.1i(1,u);D(ac){D(!a.1k()||!b.1k()){a.2F(o,a);b.Y(m,b)}a.1i(1,a)}J D(!b.1k())b.Y(m,b);b.1i(1,b)}L(v.1k()){v.1i(1,v);D(ac){D(!c.1k()||!d.1k()){c.2F(o,c);d.Y(m,d)}c.1i(1,c)}J D(!d.1k())d.Y(m,d);d.1i(1,d)}D(u.1c(v)>=0){u.Y(v,u);D(ac)a.Y(c,a);b.Y(d,b)}J{v.Y(u,v);D(ac)c.Y(a,c);d.Y(b,d)}}D(v.1c(G.1x)!=0)F G.1y;D(d.1c(m)>=0)F d.39(m);D(d.1I()<0)d.2F(m,d);J F d;D(d.1I()<0)F d.3B(m);J F d}C 1j=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,9q,9p,9o,9n,9m,5R,9l,9k,9j,9i,9h,9g,9f,9e,9d,9c,9b,9a,99,98,96,95,94,93,92,91,90,8Z,8Y,8X,8W,8V,8U,8T,8S,8R,8Q,8P,8O,8N,8M,8L,8K,8J,8I,8H,8G,8F,8E,8D,8C,8B,8A,8z,8y,8x,8w,8v,8u,8t,8s,8r,8q,8p,8o,8n,8m,8l,8k,8j,8i,8h];C 5Q=(1<<26)/1j[1j.T-1];E 4S(t){C i,x=o.1J();D(x.t==1&&x[0]<=1j[1j.T-1]){P(i=0;i<1j.T;++i)D(x[0]==1j[i])F 1B;F 1n}D(x.1k())F 1n;i=1;L(i<1j.T){C m=1j[i],j=i+1;L(j<1j.T&&m<5Q)m*=1j[j++];m=x.5z(m);L(i<j)D(m%1j[i++]==0)F 1n}F x.5x(t)}E 5w(t){C 2f=o.39(G.1x);C k=2f.2d();D(k<=0)F 1n;C r=2f.5g(k);t=(t+1)>>1;D(t>1j.T)t=1j.T;C a=Q();P(C i=0;i<t;++i){a.2g(1j[i]);C y=a.2c(r,o);D(y.1c(G.1x)!=0&&y.1c(2f)!=0){C j=1;L(j++<k&&y.1c(2f)!=0){y=y.5P(2,o);D(y.1c(G.1x)==0)F 1n}D(y.1c(2f)!=0)F 1n}}F 1B}G.H.3P=5O;G.H.5N=5M;G.H.5L=5K;G.H.3O=5J;G.H.1W=5I;G.H.3c=5H;G.H.2F=5G;G.H.3N=5F;G.H.2e=5E;G.H.5D=5C;G.H.5B=5A;G.H.5z=5y;G.H.5x=5w;G.H.2E=5v;G.H.3M=5u;G.H.8g=5t;G.H.8f=5s;G.H.1I=5r;G.H.8e=5q;G.H.8d=5p;G.H.1P=5o;G.H.3L=5n;G.H.8c=5m;G.H.8b=5l;G.H.8a=5k;G.H.88=5j;G.H.2X=5i;G.H.3b=5h;G.H.5g=5f;G.H.2d=5e;G.H.87=5d;G.H.5c=5b;G.H.86=5a;G.H.85=58;G.H.84=57;G.H.3B=56;G.H.39=55;G.H.3A=54;G.H.51=50;G.H.82=4Z;G.H.81=4Y;G.H.2c=4X;G.H.80=4W;G.H.2D=4V;G.H.7Z=4U;G.H.4T=4S;E 7Y(4P,4O,4M,4N){C 4R="7X";C N=V G(4R,16);C g=V G("2");C k=V G("7W",16);C 4Q=V 3K();C a=V G(32,4Q);C A=g.2c(a,N);C 3D=A.1w(16);C B=Z;C 3C=Z;C I=4P;C u=Z;C p=4O;C x=Z;C S=Z;C K=Z;C M=Z;C 3z=Z;C U=Z;C 2C=4N;C 4L=4M;C 1s=o;C 2W=1n;C 7V=1n;E 2B(1Q){D(4L=="7U"){F 1Q}};E 2A(4G,1v,4H){D(2w.4K)U=V 4K();J D(2w.4J){7T{U=V 4J("4I.7S")}7R(e){}}J{1s.1V("4E 2X 7Q.");F}D(U){U.7P=4H;U.7O("7N",4G,1B);U.3J("4F-2Z","7M/x-7L-7K-7J");U.3J("4F-T",1v.T);U.3J("7I","7H");U.7G(1v)}J{1s.1V("4E 7F.")}};o.3H=E(){C 3a=2C+2B("3H/3I/");C 1v="I="+I;2A(3a,1v,4D)};E 4D(){D(U.35==4&&U.34==33){D(U.1u.1g("3I").T>0){C s=2z(U.1u.1g("3I")[0]);x=V G(1G(s+1G(I+":"+p)),16);C v=g.2c(x,N);4C(v.1w(16))}J D(U.1u.1g("2y").T>0){1s.1V(2z(U.1u.1g("2y")[0]))}}};E 4C(v){C 1v="v="+v;C 38=2C+2B("3H/7E/");2A(38,1v,4B)};E 4B(){D(U.35==4&&U.34==33){D(U.1u.1g("7D").T>0){1s.3F()}}};E 2z(4A){F 4A.7C.7B};o.3F=E(){C 3a=2C+2B("7A/");C 1v="I="+I+"&A="+3D;2A(3a,1v,4z)};E 4z(){D(U.35==4&&U.34==33){D(U.1u.1g("r").T>0){C 3G=U.1u.1g("r")[0];4y(3G.3q("s"),3G.3q("B"))}J D(U.1u.1g("2y").T>0){1s.3F()}}};E 4y(s,3E){B=V G(3E,16);3C=3E;u=V G(1G(3D+3C),16);x=V G(1G(s+1G(I+":"+p)),16);C 4x=k.3A(g.2c(x,N));C 4w=a.3B(u.3A(x));S=B.39(4x).2c(4w,N);C 4v=A.1w(16)+B.1w(16)+S.1w(16);M=1G(4v);3z=1G(A.1w(16)+M+S.1w(16));4u(M);};E 4u(M){C 1v="M="+M;C 38=2C+2B("7z/");2A(38,1v,4t)};E 4t(){D(U.35==4&&U.34==33){D(U.1u.1g("M").T>0){D(2z(U.1u.1g("M")[0])==3z){4s();1s.4p();2W=1B}J 1s.1V("7y 2x 7x 2X 7w")}J D(U.1u.1g("2y").T>0){1s.1V(2z(U.1u.1g("2y")[0]))}}};E 4s(){D(1s.3r("4q")&&1s.3r("4r"))F;C 1H=4m.7v("/");D(1H[1H.T-1]=="7u.1P.2Y"){C 1t=1O.3y(\'2v\');1t.2Z=\'3x/3w\';1t.2U=1H.3v(0,1H.T-1).3u("/")+"/7t.1P.2Y";1O.1g(\'3t\')[0].3s(1t)}J{C 1t=1O.3y(\'2v\');1t.2Z=\'3x/3w\';1t.2U=1H.3v(0,1H.T-1).3u("/")+"/4r.2Y";1O.1g(\'3t\')[0].3s(1t);1t=1O.3y(\'2v\');1t.2Z=\'3x/3w\';1t.2U=1H.3v(0,1H.T-1).3u("/")+"/4q.2Y";1O.1g(\'3t\')[0].3s(1t)}}o.2x=E(){D(K==Z)D(2W){K=1G(S);F K}J 1s.1V("7s 7r 2X 7q 2W.");J F K};o.4p=E(){4o("7p 7o.")};o.1V=E(t){4o(t)};o.3r=E(4n){F(2V(2w[4n])=="7n")?1n:1B}};C 4m=1O.1g(\'2v\')[1O.1g(\'2v\').T-1].3q("2U");',62,684,'||||||||||||||||||||||||this||||||||||||||var|if|function|return|BigInteger|prototype||else||while|||DB|for|nbi|||length|xhr|new|||subTo|null|||||||||||HASH|r2|compareTo|Math|safe_add|rng_pptr|getElementsByTagName|DM|rShiftTo|lowprimes|isEven|DV|clamp|false|ds|sh|vv|rng_pool|that|scriptElt|responseXML|params|toString|ONE|ZERO|Array|reduce|true|sqrTo|ys|bs|255|SHA256|arr|signum|abs|nbv|copyTo|divRemTo|dbits|document|min|str|Montgomery|Classic|256|utftext|error_message|bitwiseTo|mulTo|Barrett|op|floor|mi||||||pm|||charCodeAt|rr|modPow|getLowestSetBit|dAddOffset|n1|fromInt|lShiftTo|revert|convert|multiplyTo|dlShiftTo|NullExp|nsh|cbs|xh|xl|string|chrsz|fromCharCode|String|script|window|key|error|innerxml|ajaxRequest|paths|url|pow|clone|addTo|negate|k1|km|nbits|squareTo|drShiftTo|0xff|0x80|cs|charAt|0x7fff|bm|BI_RC|rng_state|src|typeof|authenticated|not|js|type||||200|status|readyState|||auth_url|subtract|handshake_url|shiftLeft|changeBit|op_or|0xffff|fromString|qd|y0|pt|BI_FP|navigator|rng_psize|Arcfour|binarray|128|T1|getAttribute|isdefined|appendChild|head|join|slice|javascript|text|createElement|M2|multiply|add|Bstr|Astr|ephemeral|identify|response|register|salt|setRequestHeader|SecureRandom|max|intValue|dMultiply|fromNumber|chunkSize|is1|g2|bitLength|q3|mod|exp|nNop|op_xor|op_andnot|0xf|intAt||mpl||mp|ts|F2|||yt|F1|int2char|appName|j_lm|0x3fff|ba|rng_seed_time|hex_tab|bin|T2|0xFFFF|lsw|srpPath|variable|alert|success|SHA1|MD5|import_hashes|confirm_authentication|send_hash|Mstr|aux|kgx|calculations|receive_salts|node|register_user|register_send_verifier|register_receive_salt|Ajax|Content|full_url|callback|Microsoft|ActiveXObject|XMLHttpRequest|server|ser|base_url|password|username|rng|Nstr|bnIsProbablePrime|isProbablePrime|bnGCD|bnPow|bnModInverse|bnModPow|bnDivideAndRemainder|bnRemainder|bnDivide|divide|||bnMultiply|bnSubtract|bnAdd|bnFlipBit|bnClearBit||bnSetBit|bnTestBit|testBit|bnBitCount|bnGetLowestSetBit|bnShiftRight|shiftRight|bnShiftLeft|bnNot|bnAndNot|bnXor|bnOr|bnAnd|bnMax|bnMin|bnEquals|bnToByteArray|bnSigNum|bnShortValue|bnByteValue|bnIntValue|bnClone|bnpMillerRabin|millerRabin|bnpModInt|modInt|bnpMultiplyUpperTo|multiplyUpperTo|bnpMultiplyLowerTo|multiplyLowerTo|bnpDAddOffset|bnpDMultiply|bnpAddTo|bnpChangeBit|bnpBitwiseTo|bnpFromNumber|bnpFromRadix|fromRadix|bnpToRadix|toRadix|bnpChunkSize|modPowInt|lplim|127|barrettSqrTo|barrettMulTo|barrettReduce|barrettRevert|barrettConvert|mu|nSqrTo|nMulTo|cbit||lbit|||op_and|nextBytes||number|continue|bnModPowInt|bnMod|bnBitLength|bnCompareTo|bnAbs|bnNegate|bnToString|bnpExp|bnpIsEven|bnpInvDigit|invDigit|bnpDivRemTo|bnpSquareTo|bnpMultiplyTo|bnpSubTo|bnpRShiftTo|bnpLShiftTo|bnpDRShiftTo|bnpDLShiftTo|bnpClamp|bnpFromString|bnpFromInt|bnpCopyTo|montSqrTo|montMulTo|montReduce|montRevert|montConvert|u0|um|mph|mt2|cSqrTo|cMulTo|cReduce|cRevert|cConvert|ms|d2|d1|FV|BI_RM|am3|am1|Netscape|am2|0x3fffffff|canary|rng_get_bytes|rng_get_byte|next|init|prng_newstate||random||crypto|rng_seed_int|ARC4next|ARC4init|str2binb||core_sha256|binb2hex|Utf8Encode|0xF|hexcase|mask|Maj|Sigma0256|Ch|Sigma1256|Gamma0256|Gamma1256|msw|undefined|successful|Authentication|been|has|User|hash|srp|split|match|does|Server|authenticate|handshake|nodeValue|firstChild|ok|user|failed|send|close|Connection|urlencoded|form|www|application|POST|open|onreadystatechange|supported|catch|XMLHTTP|try|django|hash_import|c46d46600d87fef149bd79b81119842f3c20241fda67d06ef412d8f6d9479c58|115b8b692e0e045692cf280b436735c77a5a9e8a9e7ed56c965f87db5b2a2ece3|SRP|gcd|modInverse|divideAndRemainder|remainder||flipBit|clearBit|setBit|bitCount|andNot||xor|or|and|equals|toByteArray|shortValue|byteValue|509|503|499|491|487|479|467|463|461|457|449|443|439|433|431|421|419|409|401|397|389|383|379|373|367|359|353|349|347|337|331|317|313|311|307|293|283|281|277|271|269|263|257|251|241|239|233|229|227|223|211|199||197|193|191|181|179|173|167|163|157|151|149|139|137|131|113|109|107|103|101|768|144|substr|log|LN2|0xffffffff|0123456789abcdefghijklmnopqrstuvwxyz|Explorer|Internet|0xfffffff|0x3ffffff|0x4000000|0xefcafe|0xffffff|0xdeadbeefcafe|65536|appVersion|getTime|Date|0123456789abcdef|0123456789ABCDEF|224|192|2048|replace|0x5BE0CD19|0x1F83D9AB|0x9B05688C|0x510E527F|0xA54FF53A|0x3C6EF372|0xBB67AE85|0x6A09E667|0xC67178F2|0xBEF9A3F7|0xA4506CEB|0x90BEFFFA|0x8CC70208|0x84C87814|0x78A5636F|0x748F82EE|0x682E6FF3|0x5B9CCA4F|0x4ED8AA4A|0x391C0CB3|0x34B0BCB5|0x2748774C||0x1E376C08|0x19A4C116|0x106AA070|0xF40E3585|0xD6990624|0xD192E819|0xC76C51A3|0xC24B8B70|0xA81A664B||0xA2BFE8A1|0x92722C85|0x81C2C92E|0x766A0ABB|0x650A7354|0x53380D13|0x4D2C6DFC|0x2E1B2138|0x27B70A85|0x14292967|0x6CA6351|0xD5A79147|0xC6E00BF3|0xBF597FC7|0xB00327C8|0xA831C66D|0x983E5152|0x76F988DA|0x5CB0A9DC|0x4A7484AA|0x2DE92C6F|0x240CA1CC|0xFC19DC6|0xEFBE4786|0xE49B69C1|0xC19BF174|0x9BDC06A7|0x80DEB1FE|0x72BE5D74|0x550C7DC3|0x243185BE|0x12835B01|0xD807AA98|0xAB1C5ED5|0x923F82A4|0x59F111F1|0x3956C25B|0xE9B5DBA5|0xB5C0FBCF|0x71374491|0x428A2F98'.split('|'),0,{}))
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('E 1F(s){C 2r=8;C 7d=0;E 1e(x,y){C 4m=(x&4l)+(y&4l);C 7l=(x>>16)+(y>>16)+(4m>>16);F(7l<<16)|(4m&4l)}E S(X,n){F(X>>>n)|(X<<(32-n))}E R(X,n){F(X>>>n)}E 7h(x,y,z){F((x&y)^((~x)&z))}E 7f(x,y,z){F((x&y)^(x&z)^(y&z))}E 7g(x){F(S(x,2)^S(x,13)^S(x,22))}E 7i(x){F(S(x,6)^S(x,11)^S(x,25))}E 7j(x){F(S(x,7)^S(x,18)^R(x,3))}E 7k(x){F(S(x,17)^S(x,19)^R(x,10))}E 78(m,l){C K=V 1z(b2,b1,b0,aZ,aY,aX,aW,aV,aU,aT,aS,aR,aQ,aP,aO,aN,aM,aL,aK,aJ,aI,aH,aG,aF,aE,aD,aC,aB,aA,az,ay,ax,aw,av,au,at,as,ar,aq,ap,ao,an,al,ak,aj,ai,ah,ag,af,ae,ad,ab,aa,a9,a8,a7,a6,a5,a4,a3,a2,a1,a0,9Z);C 1a=V 1z(9Y,9X,9W,9V,9U,9T,9S,9R);C W=V 1z(64);C a,b,c,d,e,f,g,h,i,j;C 3q,4k;m[l>>5]|=2N<<(24-l%32);m[((l+64>>9)<<4)+15]=l;P(C i=0;i<m.T;i+=16){a=1a[0];b=1a[1];c=1a[2];d=1a[3];e=1a[4];f=1a[5];g=1a[6];h=1a[7];P(C j=0;j<64;j++){D(j<16)W[j]=m[j+i];J W[j]=1e(1e(1e(7k(W[j-2]),W[j-7]),7j(W[j-15])),W[j-16]);3q=1e(1e(1e(1e(h,7i(e)),7h(e,f,g)),K[j]),W[j]);4k=1e(7g(a),7f(a,b,c));h=g;g=f;f=e;e=1e(d,3q);d=c;c=b;b=a;a=1e(3q,4k)}1a[0]=1e(a,1a[0]);1a[1]=1e(b,1a[1]);1a[2]=1e(c,1a[2]);1a[3]=1e(d,1a[3]);1a[4]=1e(e,1a[4]);1a[5]=1e(f,1a[5]);1a[6]=1e(g,1a[6]);1a[7]=1e(h,1a[7])}F 1a}E 77(1P){C 4j=1z();C 7e=(1<<2r)-1;P(C i=0;i<1P.T*2r;i+=2r){4j[i>>5]|=(1P.27(i/2r)&7e)<<(24-i%32)}F 4j}E 7b(2q){2q=2q.9Q(/\\r\\n/g,"\\n");C 1T="";P(C n=0;n<2q.T;n++){C c=2q.27(n);D(c<3p){1T+=2t.2s(c)}J D((c>5Q)&&(c<9P)){1T+=2t.2s((c>>6)|9O);1T+=2t.2s((c&63)|3p)}J{1T+=2t.2s((c>>12)|9N);1T+=2t.2s(((c>>6)&63)|3p);1T+=2t.2s((c&63)|3p)}}F 1T}E 7a(3o){C 4i=7d?"9M":"9L";C 1P="";P(C i=0;i<3o.T*4;i++){1P+=4i.2P((3o[i>>2]>>((3-i%4)*8+4))&7c)+4i.2P((3o[i>>2]>>((3-i%4)*8))&7c)}F 1P}s=7b(s);F 7a(78(77(s),s.T*2r))}E 3n(){o.i=0;o.j=0;o.S=V 1z()}E 76(2v){C i,j,t;P(i=0;i<1S;++i)o.S[i]=i;j=0;P(i=0;i<1S;++i){j=(j+o.S[i]+2v[i%2v.T])&1E;t=o.S[i];o.S[i]=o.S[j];o.S[j]=t}o.i=0;o.j=0}E 75(){C t;o.i=(o.i+1)&1E;o.j=(o.j+o.S[o.i])&1E;t=o.S[o.i];o.S[o.i]=o.S[o.j];o.S[o.j]=t;F o.S[(t+o.S[o.i])&1E]}3n.H.6Y=76;3n.H.6X=75;E 6Z(){F V 3n()}C 3m=1S;C 2T;C 1s;C 1f;E 74(x){1s[1f++]^=x&1E;1s[1f++]^=(x>>8)&1E;1s[1f++]^=(x>>16)&1E;1s[1f++]^=(x>>24)&1E;D(1f>=3m)1f-=3m}E 4h(){74(V 9K().9J())}D(1s==Z){1s=V 1z();1f=0;C t;D(3l.4d=="6R"&&3l.9I<"5"&&2C.72){C z=2C.72.70(32);P(t=0;t<z.T;++t)1s[1f++]=z.27(t)&1E}L(1f<3m){t=1d.1Z(9H*1d.70());1s[1f++]=t>>>8;1s[1f++]=t&1E}1f=0;4h();}E 6W(){D(2T==Z){4h();2T=6Z();2T.6Y(1s);P(1f=0;1f<1s.T;++1f)1s[1f]=0;1f=0;}F 2T.6X()}E 6V(4g){C i;P(i=0;i<4g.T;++i)4g[i]=6W()}E 3L(){}3L.H.65=6V;C 1M;C 6U=9G;C 4e=((6U&9F)==9E);E G(a,b,c){D(a!=Z)D("66"==3b a)o.3P(a,b,c);J D(b==Z&&"2q"!=3b a)o.3g(a,1S);J o.3g(a,b)}E Q(){F V G(Z)}E 6Q(i,x,w,j,c,n){L(--n>=0){C v=x*o[i++]+w[j]+c;c=1d.1Z(v/9D);w[j++]=v&9C}F c}E 6S(i,x,w,j,c,n){C 2p=x&2Q,2o=x>>15;L(--n>=0){C l=o[i]&2Q;C h=o[i++]>>15;C m=2o*l+h*2p;l=2p*l+((m&2Q)<<15)+w[j]+(c&6T);c=(l>>>30)+(m>>>15)+2o*h+(c>>>30);w[j++]=l&6T}F c}E 6P(i,x,w,j,c,n){C 2p=x&4f,2o=x>>14;L(--n>=0){C l=o[i]&4f;C h=o[i++]>>14;C m=2o*l+h*2p;l=2p*l+((m&4f)<<14)+w[j]+c;c=(l>>28)+(m>>14)+2o*h;w[j++]=l&9B}F c}D(4e&&(3l.4d=="4H 9A 9z")){G.H.am=6S;1M=30}J D(4e&&(3l.4d!="6R")){G.H.am=6Q;1M=26}J{G.H.am=6P;1M=28}G.H.O=1M;G.H.1h=((1<<1M)-1);G.H.1l=(1<<1M);C 3k=52;G.H.6N=1d.2D(2,3k);G.H.4b=3k-1M;G.H.49=2*1M-3k;C 6O="9y";C 2S=V 1z();C 2a,1r;2a="0".27(0);P(1r=0;1r<=9;++1r)2S[2a++]=1r;2a="a".27(0);P(1r=10;1r<36;++1r)2S[2a++]=1r;2a="A".27(0);P(1r=10;1r<36;++1r)2S[2a++]=1r;E 4c(n){F 6O.2P(n)}E 42(s,i){C c=2S[s.27(i)];F(c==Z)?-1:c}E 6v(r){P(C i=o.t-1;i>=0;--i)r[i]=o[i];r.t=o.t;r.s=o.s}E 6u(x){o.t=1;o.s=(x<0)?-1:0;D(x>0)o[0]=x;J D(x<-1)o[0]=x+1l;J o.t=0}E 1J(i){C r=Q();r.2f(i);F r}E 6t(s,b){C k;D(b==16)k=4;J D(b==8)k=3;J D(b==1S)k=8;J D(b==2)k=1;J D(b==32)k=5;J D(b==4)k=2;J{o.5K(s,b);F}o.t=0;o.s=0;C i=s.T,20=1o,1q=0;L(--i>=0){C x=(k==8)?s[i]&2M:42(s,i);D(x<0){D(s.2P(i)=="-")20=1G;68}20=1o;D(1q==0)o[o.t++]=x;J D(1q+k>o.O){o[o.t-1]|=(x&((1<<(o.O-1q))-1))<<1q;o[o.t++]=(x>>(o.O-1q))}J o[o.t-1]|=x<<1q;1q+=k;D(1q>=o.O)1q-=o.O}D(k==8&&(s[0]&2N)!=0){o.s=-1;D(1q>0)o[o.t-1]|=((1<<(o.O-1q))-1)<<1q}o.1m();D(20)G.1y.Y(o,o)}E 6s(){C c=o.s&o.1h;L(o.t>0&&o[o.t-1]==c)--o.t}E 6f(b){D(o.s<0)F"-"+o.2G().1w(b);C k;D(b==16)k=4;J D(b==8)k=3;J D(b==2)k=1;J D(b==32)k=5;J D(b==4)k=2;J F o.5M(b);C 2I=(1<<k)-1,d,m=1o,r="",i=o.t;C p=o.O-(i*o.O)%k;D(i-->0){D(p<o.O&&(d=o[i]>>p)>0){m=1G;r=4c(d)}L(i>=0){D(p<k){d=(o[i]&((1<<p)-1))<<(k-p);d|=o[--i]>>(p+=o.O-k)}J{d=(o[i]>>(p-=k))&2I;D(p<=0){p+=o.O;--i}}D(d>0)m=1G;D(m)r+=4c(d)}}F m?r:"0"}E 6e(){C r=Q();G.1y.Y(o,r);F r}E 6d(){F(o.s<0)?o.2G():o}E 6c(a){C r=o.s-a.s;D(r!=0)F r;C i=o.t;r=i-a.t;D(r!=0)F r;L(--i>=0)D((r=o[i]-a[i])!=0)F r;F 0}E 2J(x){C r=1,t;D((t=x>>>16)!=0){x=t;r+=16}D((t=x>>8)!=0){x=t;r+=8}D((t=x>>4)!=0){x=t;r+=4}D((t=x>>2)!=0){x=t;r+=2}D((t=x>>1)!=0){x=t;r+=1}F r}E 6b(){D(o.t<=0)F 0;F o.O*(o.t-1)+2J(o[o.t-1]^(o.s&o.1h))}E 6r(n,r){C i;P(i=o.t-1;i>=0;--i)r[i+n]=o[i];P(i=n-1;i>=0;--i)r[i]=0;r.t=o.t+n;r.s=o.s}E 6q(n,r){P(C i=n;i<o.t;++i)r[i-n]=o[i];r.t=1d.3M(o.t-n,0);r.s=o.s}E 6p(n,r){C 1D=n%o.O;C 2n=o.O-1D;C 2R=(1<<2n)-1;C 1p=1d.1Z(n/o.O),c=(o.s<<1D)&o.1h,i;P(i=o.t-1;i>=0;--i){r[i+1p+1]=(o[i]>>2n)|c;c=(o[i]&2R)<<1D}P(i=1p-1;i>=0;--i)r[i]=0;r[1p]=c;r.t=o.t+1p+1;r.s=o.s;r.1m()}E 6o(n,r){r.s=o.s;C 1p=1d.1Z(n/o.O);D(1p>=o.t){r.t=0;F}C 1D=n%o.O;C 2n=o.O-1D;C 2R=(1<<1D)-1;r[0]=o[1p]>>1D;P(C i=1p+1;i<o.t;++i){r[i-1p-1]|=(o[i]&2R)<<2n;r[i-1p]=o[i]>>1D}D(1D>0)r[o.t-1p-1]|=(o.s&2R)<<2n;r.t=o.t-1p;r.1m()}E 6n(a,r){C i=0,c=0,m=1d.1O(a.t,o.t);L(i<m){c+=o[i]-a[i];r[i++]=c&o.1h;c>>=o.O}D(a.t<o.t){c-=a.s;L(i<o.t){c+=o[i];r[i++]=c&o.1h;c>>=o.O}c+=o.s}J{c+=o.s;L(i<a.t){c-=a[i];r[i++]=c&o.1h;c>>=o.O}c-=a.s}r.s=(c<0)?-1:0;D(c<-1)r[i++]=o.1l+c;J D(c>0)r[i++]=c;r.t=i;r.1m()}E 6m(a,r){C x=o.1I(),y=a.1I();C i=x.t;r.t=i+y.t;L(--i>=0)r[i]=0;P(i=0;i<y.t;++i)r[i+x.t]=x.am(0,y[i],r,i,0,x.t);r.s=0;r.1m();D(o.s!=a.s)G.1y.Y(r,r)}E 6l(r){C x=o.1I();C i=r.t=2*x.t;L(--i>=0)r[i]=0;P(i=0;i<x.t-1;++i){C c=x.am(i,x[i],r,2*i,0,1);D((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1))>=x.1l){r[i+x.t]-=x.1l;r[i+x.t+1]=1}}D(r.t>0)r[r.t-1]+=x.am(i,x[i],r,2*i,0,1);r.s=0;r.1m()}E 6k(m,q,r){C 21=m.1I();D(21.t<=0)F;C 3j=o.1I();D(3j.t<21.t){D(q!=Z)q.2f(0);D(r!=Z)o.1K(r);F}D(r==Z)r=Q();C y=Q(),46=o.s,6K=m.s;C 2m=o.O-2J(21[21.t-1]);D(2m>0){21.2g(2m,y);3j.2g(2m,r)}J{21.1K(y);3j.1K(r)}C 1C=y.t;C 3i=y[1C-1];D(3i==0)F;C 4a=3i*(1<<o.4b)+((1C>1)?y[1C-2]>>o.49:0);C 6M=o.6N/4a,6L=(1<<o.4b)/4a,e=1<<o.49;C i=r.t,j=i-1C,t=(q==Z)?Q():q;y.2k(j,t);D(r.1c(t)>=0){r[r.t++]=1;r.Y(t,r)}G.1x.2k(1C,t);t.Y(y,y);L(y.t<1C)y[y.t++]=0;L(--j>=0){C 3h=(r[--i]==3i)?o.1h:1d.1Z(r[i]*6M+(r[i-1]+e)*6L);D((r[i]+=y.am(0,3h,r,j,0,1C))<3h){y.2k(j,t);r.Y(t,r);L(r[i]<--3h)r.Y(t,r)}}D(q!=Z){r.2L(1C,q);D(46!=6K)G.1y.Y(q,q)}r.t=1C;r.1m();D(2m>0)r.1i(2m,r);D(46<0)G.1y.Y(r,r)}E 6a(a){C r=Q();o.1I().1L(a,Z,r);D(o.s<0&&r.1c(G.1y)>0)a.Y(r,r);F r}E 1R(m){o.m=m}E 6J(x){D(x.s<0||x.1c(o.m)>=0)F x.3V(o.m);J F x}E 6I(x){F x}E 6H(x){x.1L(o.m,Z,x)}E 6G(x,y,r){x.2j(y,r);o.1A(r)}E 6F(x,r){x.2K(r);o.1A(r)}1R.H.2i=6J;1R.H.2h=6I;1R.H.1A=6H;1R.H.1W=6G;1R.H.1B=6F;E 6i(){D(o.t<1)F 0;C x=o[0];D((x&1)==0)F 0;C y=x&3;y=(y*(2-(x&40)*y))&40;y=(y*(2-(x&2M)*y))&2M;y=(y*(2-(((x&3f)*y)&3f)))&3f;y=(y*(2-x*y%o.1l))%o.1l;F(y>0)?o.1l-y:-y}E 1Q(m){o.m=m;o.45=m.6j();o.44=o.45&2Q;o.6D=o.45>>15;o.6C=(1<<(m.O-15))-1;o.6E=2*m.t}E 6A(x){C r=Q();x.1I().2k(o.m.t,r);r.1L(o.m,Z,r);D(x.s<0&&r.1c(G.1y)>0)o.m.Y(r,r);F r}E 6z(x){C r=Q();x.1K(r);o.1A(r);F r}E 6y(x){L(x.t<=o.6E)x[x.t++]=0;P(C i=0;i<o.m.t;++i){C j=x[i]&2Q;C 6B=(j*o.44+(((j*o.6D+(x[i]>>15)*o.44)&o.6C)<<15))&x.1h;j=i+o.m.t;x[j]+=o.m.am(0,6B,x,i,0,o.m.t);L(x[j]>=x.1l){x[j]-=x.1l;x[++j]++}}x.1m();x.2L(o.m.t,x);D(x.1c(o.m)>=0)x.Y(o.m,x)}E 6w(x,r){x.2K(r);o.1A(r)}E 6x(x,y,r){x.2j(y,r);o.1A(r)}1Q.H.2i=6A;1Q.H.2h=6z;1Q.H.1A=6y;1Q.H.1W=6x;1Q.H.1B=6w;E 6h(){F((o.t>0)?(o[0]&1):o.s)==0}E 6g(e,z){D(e>9x||e<1)F G.1x;C r=Q(),1b=Q(),g=z.2i(o),i=2J(e)-1;g.1K(r);L(--i>=0){z.1B(r,1b);D((e&(1<<i))>0)z.1W(1b,g,r);J{C t=r;r=1b;1b=t}}F z.2h(r)}E 69(e,m){C z;D(e<1S||m.1k())z=V 1R(m);J z=V 1Q(m);F o.3W(e,z)}G.H.1K=6v;G.H.2f=6u;G.H.3g=6t;G.H.1m=6s;G.H.2k=6r;G.H.2L=6q;G.H.2g=6p;G.H.1i=6o;G.H.Y=6n;G.H.2j=6m;G.H.2K=6l;G.H.1L=6k;G.H.6j=6i;G.H.1k=6h;G.H.3W=6g;G.H.1w=6f;G.H.2G=6e;G.H.1I=6d;G.H.1c=6c;G.H.3T=6b;G.H.3V=6a;G.H.5O=69;G.1y=1J(0);G.1x=1J(1);E 5u(){C r=Q();o.1K(r);F r}E 5t(){D(o.s<0){D(o.t==1)F o[0]-o.1l;J D(o.t==0)F-1}J D(o.t==1)F o[0];J D(o.t==0)F 0;F((o[1]&((1<<(32-o.O))-1))<<o.O)|o[0]}E 5s(){F(o.t==0)?o.s:(o[0]<<24)>>24}E 5r(){F(o.t==0)?o.s:(o[0]<<16)>>16}E 5N(r){F 1d.1Z(1d.9w*o.O/1d.9v(r))}E 5q(){D(o.s<0)F-1;J D(o.t<=0||(o.t==1&&o[0]<=0))F 0;J F 1}E 5L(b){D(b==Z)b=10;D(o.1H()==0||b<2||b>36)F"0";C 2O=o.3Q(b);C a=1d.2D(b,2O);C d=1J(a),y=Q(),z=Q(),r="";o.1L(d,y,z);L(y.1H()>0){r=(a+z.3N()).1w(b).9u(1)+r;y.1L(d,y,z)}F z.3N().1w(b)+r}E 5J(s,b){o.2f(0);D(b==Z)b=10;C 2O=o.3Q(b);C d=1d.2D(b,2O),20=1o,j=0,w=0;P(C i=0;i<s.T;++i){C x=42(s,i);D(x<0){D(s.2P(i)=="-"&&o.1H()==0)20=1G;68}w=b*w+x;D(++j>=2O){o.3O(d);o.2d(w,0);j=0;w=0}}D(j>0){o.3O(1d.2D(b,j));o.2d(w,0)}D(20)G.1y.Y(o,o)}E 5I(a,b,c){D("66"==3b b){D(a<2)o.2f(1);J{o.3P(a,c);D(!o.5b(a-1))o.1V(G.1x.3c(a-1),3e,o);D(o.1k())o.2d(1,0);L(!o.4S(b)){o.2d(2,0);D(o.3T()>a)o.Y(G.1x.3c(a-1),o)}}}J{C x=V 1z(),t=a&7;x.T=(a>>3)+1;b.65(x);D(t>0)x[0]&=((1<<t)-1);J x[0]=0;o.3g(x,1S)}}E 5p(){C i=o.t,r=V 1z();r[0]=o.s;C p=o.O-(i*o.O)%8,d,k=0;D(i-->0){D(p<o.O&&(d=o[i]>>p)!=(o.s&o.1h)>>p)r[k++]=d|(o.s<<(o.O-p));L(i>=0){D(p<8){d=(o[i]&((1<<p)-1))<<(8-p);d|=o[--i]>>(p+=o.O-8)}J{d=(o[i]>>(p-=8))&2M;D(p<=0){p+=o.O;--i}}D((d&2N)!=0)d|=-1S;D(k==0&&(o.s&2N)!=(d&2N))++k;D(k>0||d!=o.s)r[k++]=d}}F r}E 5o(a){F(o.1c(a)==0)}E 5n(a){F(o.1c(a)<0)?o:a}E 5m(a){F(o.1c(a)>0)?o:a}E 5H(a,1Y,r){C i,f,m=1d.1O(a.t,o.t);P(i=0;i<m;++i)r[i]=1Y(o[i],a[i]);D(a.t<o.t){f=a.s&o.1h;P(i=m;i<o.t;++i)r[i]=1Y(o[i],f);r.t=o.t}J{f=o.s&o.1h;P(i=m;i<a.t;++i)r[i]=1Y(f,a[i]);r.t=a.t}r.s=1Y(o.s,a.s);r.1m()}E 62(x,y){F x&y}E 5l(a){C r=Q();o.1V(a,62,r);F r}E 3e(x,y){F x|y}E 5k(a){C r=Q();o.1V(a,3e,r);F r}E 3Y(x,y){F x^y}E 5j(a){C r=Q();o.1V(a,3Y,r);F r}E 3Z(x,y){F x&~y}E 5i(a){C r=Q();o.1V(a,3Z,r);F r}E 5h(){C r=Q();P(C i=0;i<o.t;++i)r[i]=o.1h&~o[i];r.t=o.t;r.s=~o.s;F r}E 5g(n){C r=Q();D(n<0)o.1i(-n,r);J o.2g(n,r);F r}E 5e(n){C r=Q();D(n<0)o.2g(-n,r);J o.1i(n,r);F r}E 60(x){D(x==0)F-1;C r=0;D((x&3f)==0){x>>=16;r+=16}D((x&2M)==0){x>>=8;r+=8}D((x&40)==0){x>>=4;r+=4}D((x&3)==0){x>>=2;r+=2}D((x&1)==0)++r;F r}E 5d(){P(C i=0;i<o.t;++i)D(o[i]!=0)F i*o.O+60(o[i]);D(o.s<0)F o.t*o.O;F-1}E 5Z(x){C r=0;L(x!=0){x&=x-1;++r}F r}E 5c(){C r=0,x=o.s&o.1h;P(C i=0;i<o.t;++i)r+=5Z(o[i]^x);F r}E 5a(n){C j=1d.1Z(n/o.O);D(j>=o.t)F(o.s!=0);F((o[j]&(1<<(n%o.O)))!=0)}E 5G(n,1Y){C r=G.1x.3c(n);o.1V(r,1Y,r);F r}E 58(n){F o.3d(n,3e)}E 57(n){F o.3d(n,3Z)}E 56(n){F o.3d(n,3Y)}E 5F(a,r){C i=0,c=0,m=1d.1O(a.t,o.t);L(i<m){c+=o[i]+a[i];r[i++]=c&o.1h;c>>=o.O}D(a.t<o.t){c+=a.s;L(i<o.t){c+=o[i];r[i++]=c&o.1h;c>>=o.O}c+=o.s}J{c+=o.s;L(i<a.t){c+=a[i];r[i++]=c&o.1h;c>>=o.O}c+=a.s}r.s=(c<0)?-1:0;D(c>0)r[i++]=c;J D(c<-1)r[i++]=o.1l+c;r.t=i;r.1m()}E 55(a){C r=Q();o.2F(a,r);F r}E 54(a){C r=Q();o.Y(a,r);F r}E 51(a){C r=Q();o.2j(a,r);F r}E 4Z(a){C r=Q();o.1L(a,r,Z);F r}E 4Y(a){C r=Q();o.1L(a,Z,r);F r}E 4X(a){C q=Q(),r=Q();o.1L(a,q,r);F V 1z(q,r)}E 5E(n){o[o.t]=o.am(0,n-1,o,0,0,o.t);++o.t;o.1m()}E 5D(n,w){L(o.t<=w)o[o.t++]=0;o[w]+=n;L(o[w]>=o.1l){o[w]-=o.1l;D(++w>=o.t)o[o.t++]=0;++o[w]}}E 2l(){}E 3X(x){F x}E 5Y(x,y,r){x.2j(y,r)}E 5X(x,r){x.2K(r)}2l.H.2i=3X;2l.H.2h=3X;2l.H.1W=5Y;2l.H.1B=5X;E 4U(e){F o.3W(e,V 2l())}E 5B(a,n,r){C i=1d.1O(o.t+a.t,n);r.s=0;r.t=i;L(i>0)r[--i]=0;C j;P(j=r.t-o.t;i<j;++i)r[i+o.t]=o.am(0,a[i],r,i,0,o.t);P(j=1d.1O(a.t,n);i<j;++i)o.am(0,a[i],r,i,0,n-i);r.1m()}E 5z(a,n,r){--n;C i=r.t=o.t+a.t-n;r.s=0;L(--i>=0)r[i]=0;P(i=1d.3M(n-o.t,0);i<a.t;++i)r[o.t+i-n]=o.am(n-i,a[i],r,0,0,o.t+i-n);r.1m();r.2L(1,r)}E 1X(m){o.1b=Q();o.3U=Q();G.1x.2k(2*m.t,o.1b);o.5W=o.1b.50(m);o.m=m}E 5V(x){D(x.s<0||x.t>2*o.m.t)F x.3V(o.m);J D(x.1c(o.m)<0)F x;J{C r=Q();x.1K(r);o.1A(r);F r}}E 5U(x){F x}E 5T(x){x.2L(o.m.t-1,o.1b);D(x.t>o.m.t+1){x.t=o.m.t+1;x.1m()}o.5W.5A(o.1b,o.m.t+1,o.3U);o.m.5C(o.3U,o.m.t+1,o.1b);L(x.1c(o.1b)<0)x.2d(1,o.m.t+1);x.Y(o.1b,x);L(x.1c(o.m)>=0)x.Y(o.m,x)}E 5R(x,r){x.2K(r);o.1A(r)}E 5S(x,y,r){x.2j(y,r);o.1A(r)}1X.H.2i=5V;1X.H.2h=5U;1X.H.1A=5T;1X.H.1W=5S;1X.H.1B=5R;E 4W(e,m){C i=e.3T(),k,r=1J(1),z;D(i<=0)F r;J D(i<18)k=1;J D(i<48)k=3;J D(i<9t)k=4;J D(i<9s)k=5;J k=6;D(i<8)z=V 1R(m);J D(m.1k())z=V 1X(m);J z=V 1Q(m);C g=V 1z(),n=3,2H=k-1,2I=(1<<k)-1;g[1]=z.2i(o);D(k>1){C 3S=Q();z.1B(g[1],3S);L(n<=2I){g[n]=Q();z.1W(3S,g[n-2],g[n]);n+=2}}C j=e.t-1,w,3R=1G,1b=Q(),t;i=2J(e[j])-1;L(j>=0){D(i>=2H)w=(e[j]>>(i-2H))&2I;J{w=(e[j]&((1<<(i+1))-1))<<(2H-i);D(j>0)w|=e[j-1]>>(o.O+i-2H)}n=k;L((w&1)==0){w>>=1;--n}D((i-=n)<0){i+=o.O;--j}D(3R){g[w].1K(r);3R=1o}J{L(n>1){z.1B(r,1b);z.1B(1b,r);n-=2}D(n>0)z.1B(r,1b);J{t=r;r=1b;1b=t}z.1W(1b,g[w],r)}L(j>=0&&(e[j]&(1<<i))==0){z.1B(r,1b);t=r;r=1b;1b=t;D(--i<0){i=o.O-1;--j}}}F z.2h(r)}E 4T(a){C x=(o.s<0)?o.2G():o.2E();C y=(a.s<0)?a.2G():a.2E();D(x.1c(y)<0){C t=x;x=y;y=t}C i=x.2c(),g=y.2c();D(g<0)F x;D(i<g)g=i;D(g>0){x.1i(g,x);y.1i(g,y)}L(x.1H()>0){D((i=x.2c())>0)x.1i(i,x);D((i=y.2c())>0)y.1i(i,y);D(x.1c(y)>=0){x.Y(y,x);x.1i(1,x)}J{y.Y(x,y);y.1i(1,y)}}D(g>0)y.2g(g,y);F y}E 5x(n){D(n<=0)F 0;C d=o.1l%n,r=(o.s<0)?n-1:0;D(o.t>0)D(d==0)r=o[0]%n;J P(C i=o.t-1;i>=0;--i)r=(d*r+o[i])%n;F r}E 4V(m){C ac=m.1k();D((o.1k()&&ac)||m.1H()==0)F G.1y;C u=m.2E(),v=o.2E();C a=1J(1),b=1J(0),c=1J(0),d=1J(1);L(u.1H()!=0){L(u.1k()){u.1i(1,u);D(ac){D(!a.1k()||!b.1k()){a.2F(o,a);b.Y(m,b)}a.1i(1,a)}J D(!b.1k())b.Y(m,b);b.1i(1,b)}L(v.1k()){v.1i(1,v);D(ac){D(!c.1k()||!d.1k()){c.2F(o,c);d.Y(m,d)}c.1i(1,c)}J D(!d.1k())d.Y(m,d);d.1i(1,d)}D(u.1c(v)>=0){u.Y(v,u);D(ac)a.Y(c,a);b.Y(d,b)}J{v.Y(u,v);D(ac)c.Y(a,c);d.Y(b,d)}}D(v.1c(G.1x)!=0)F G.1y;D(d.1c(m)>=0)F d.39(m);D(d.1H()<0)d.2F(m,d);J F d;D(d.1H()<0)F d.3C(m);J F d}C 1j=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,9r,9q,9p,9o,9n,5Q,9m,9l,9k,9j,9i,9h,9g,9f,9e,9d,9c,9b,9a,99,98,96,95,94,93,92,91,90,8Z,8Y,8X,8W,8V,8U,8T,8S,8R,8Q,8P,8O,8N,8M,8L,8K,8J,8I,8H,8G,8F,8E,8D,8C,8B,8A,8z,8y,8x,8w,8v,8u,8t,8s,8r,8q,8p,8o,8n,8m,8l,8k,8j,8i];C 5P=(1<<26)/1j[1j.T-1];E 4R(t){C i,x=o.1I();D(x.t==1&&x[0]<=1j[1j.T-1]){P(i=0;i<1j.T;++i)D(x[0]==1j[i])F 1G;F 1o}D(x.1k())F 1o;i=1;L(i<1j.T){C m=1j[i],j=i+1;L(j<1j.T&&m<5P)m*=1j[j++];m=x.5y(m);L(i<j)D(m%1j[i++]==0)F 1o}F x.5w(t)}E 5v(t){C 2e=o.39(G.1x);C k=2e.2c();D(k<=0)F 1o;C r=2e.5f(k);t=(t+1)>>1;D(t>1j.T)t=1j.T;C a=Q();P(C i=0;i<t;++i){a.2f(1j[i]);C y=a.2b(r,o);D(y.1c(G.1x)!=0&&y.1c(2e)!=0){C j=1;L(j++<k&&y.1c(2e)!=0){y=y.5O(2,o);D(y.1c(G.1x)==0)F 1o}D(y.1c(2e)!=0)F 1o}}F 1G}G.H.3Q=5N;G.H.5M=5L;G.H.5K=5J;G.H.3P=5I;G.H.1V=5H;G.H.3d=5G;G.H.2F=5F;G.H.3O=5E;G.H.2d=5D;G.H.5C=5B;G.H.5A=5z;G.H.5y=5x;G.H.5w=5v;G.H.2E=5u;G.H.3N=5t;G.H.8h=5s;G.H.8g=5r;G.H.1H=5q;G.H.8f=5p;G.H.8e=5o;G.H.1O=5n;G.H.3M=5m;G.H.8d=5l;G.H.8c=5k;G.H.8b=5j;G.H.8a=5i;G.H.2W=5h;G.H.3c=5g;G.H.5f=5e;G.H.2c=5d;G.H.88=5c;G.H.5b=5a;G.H.87=58;G.H.86=57;G.H.85=56;G.H.3C=55;G.H.39=54;G.H.3B=51;G.H.50=4Z;G.H.84=4Y;G.H.82=4X;G.H.2b=4W;G.H.81=4V;G.H.2D=4U;G.H.80=4T;G.H.4S=4R;E 4n(4O,4N,4L,4M){C 4Q="7Z";C N=V G(4Q,16);C g=V G("2");C k=V G("7Y",16);C 4P=V 3L();C a=V G(32,4P);C A=g.2b(a,N);C 3E=A.1w(16);C B=Z;C 3D=Z;C I=4O;C u=Z;C p=4N;C x=Z;C S=Z;C K=Z;C M=Z;C 3A=Z;C U=Z;C 2B=4M;C 4K=4L;C 1n=o;C 2V=1o;C 7X=1o;E 2A(1P){D(4K=="7W"){F 1P}};E 2z(4F,1v,4G){D(2C.4J)U=V 4J();J D(2C.4I){7V{U=V 4I("4H.7U")}7T(e){}}J{1n.1U("4D 2W 7S.");F}D(U){U.7R=4G;U.7Q("7P",4F,1G);U.3K("4E-2Z","7O/x-7N-7M-7L");U.3K("4E-T",1v.T);U.3K("7K","7J");U.7I(1v)}J{1n.1U("4D 7H.")}};E 2y(4C){F 4C.7G.7F};E 3z(4B){F(3b(2C[4B])!="7E")};o.3I=E(){C 3a=2B+2A("3I/3J/");C 1v="I="+I;2z(3a,1v,4A)};E 4A(){D(U.35==4&&U.34==33){D(U.1u.1g("3J").T>0){C s=2y(U.1u.1g("3J")[0]);x=V G(1F(s+1F(I+":"+p)),16);C v=g.2b(x,N);4z(v.1w(16))}J D(U.1u.1g("2x").T>0){1n.1U(2y(U.1u.1g("2x")[0]))}}};E 4z(v){C 1v="v="+v;C 38=2B+2A("3I/7D/");2z(38,1v,4y)};E 4y(){D(U.35==4&&U.34==33){D(U.1u.1g("7C").T>0){1n.3G()}}};o.3G=E(){C 3a=2B+2A("7B/");C 1v="I="+I+"&A="+3E;2z(3a,1v,4x)};E 4x(){D(U.35==4&&U.34==33){D(U.1u.1g("r").T>0){C 3H=U.1u.1g("r")[0];4w(3H.3r("s"),3H.3r("B"))}J D(U.1u.1g("2x").T>0){1n.3G()}}};E 4w(s,3F){B=V G(3F,16);3D=3F;u=V G(1F(3E+3D),16);x=V G(1F(s+1F(I+":"+p)),16);C 4v=k.3B(g.2b(x,N));C 4u=a.3C(u.3B(x));S=B.39(4v).2b(4u,N);C 4t=A.1w(16)+B.1w(16)+S.1w(16);M=1F(4t);3A=1F(A.1w(16)+M+S.1w(16));4s(M);};E 4s(M){C 1v="M="+M;C 38=2B+2A("7A/");2z(38,1v,4r)};E 4r(){D(U.35==4&&U.34==33){D(U.1u.1g("M").T>0){D(2y(U.1u.1g("M")[0])==3A){3t(1n.3s);1n.4o();2V=1G}J 1n.1U("7z 2v 7y 2W 7x")}J D(U.1u.1g("2x").T>0){1n.1U(2y(U.1u.1g("2x")[0]))}}};E 7w(){D(1n.3z("4p")&&1n.3z("4q"))F;C 2w=1n.3s.7v("/");C 2Y=2w.7u(0,2w.T-1).7t("/");D(2w[2w.T-1]=="7s.1O.2X"){C 1t=1N.3y(\'2u\');1t.2Z=\'3x/3w\';1t.2U=2Y+"/7r.1O.2X";1N.1g(\'3v\')[0].3u(1t)}J{C 1t=1N.3y(\'2u\');1t.2Z=\'3x/3w\';1t.2U=2Y+"/4q.2X";1N.1g(\'3v\')[0].3u(1t);1t=1N.3y(\'2u\');1t.2Z=\'3x/3w\';1t.2U=2Y+"/4p.2X";1N.1g(\'3v\')[0].3u(1t)}}o.2v=E(){D(K==Z)D(2V){K=1F(S);F K}J 1n.1U("7q 7p 2W 7o 2V.");J F K};o.4o=E(){3t("7n 7m.")};o.1U=E(t){3t(t)}};4n.H.3s=1N.1g(\'2u\')[1N.1g(\'2u\').T-1].3r("2U");',62,685,'||||||||||||||||||||||||this||||||||||||||var|if|function|return|BigInteger|prototype||else||while|||DB|for|nbi|||length|xhr|new|||subTo|null|||||||||||HASH|r2|compareTo|Math|safe_add|rng_pptr|getElementsByTagName|DM|rShiftTo|lowprimes|isEven|DV|clamp|that|false|ds|sh|vv|rng_pool|scriptElt|responseXML|params|toString|ONE|ZERO|Array|reduce|sqrTo|ys|bs|255|SHA256|true|signum|abs|nbv|copyTo|divRemTo|dbits|document|min|str|Montgomery|Classic|256|utftext|error_message|bitwiseTo|mulTo|Barrett|op|floor|mi|pm||||||charCodeAt|||rr|modPow|getLowestSetBit|dAddOffset|n1|fromInt|lShiftTo|revert|convert|multiplyTo|dlShiftTo|NullExp|nsh|cbs|xh|xl|string|chrsz|fromCharCode|String|script|key|arr|error|innerxml|ajaxRequest|paths|url|window|pow|clone|addTo|negate|k1|km|nbits|squareTo|drShiftTo|0xff|0x80|cs|charAt|0x7fff|bm|BI_RC|rng_state|src|authenticated|not|js|path|type||||200|status|readyState|||auth_url|subtract|handshake_url|typeof|shiftLeft|changeBit|op_or|0xffff|fromString|qd|y0|pt|BI_FP|navigator|rng_psize|Arcfour|binarray|128|T1|getAttribute|srpPath|alert|appendChild|head|javascript|text|createElement|isdefined|M2|multiply|add|Bstr|Astr|ephemeral|identify|response|register|salt|setRequestHeader|SecureRandom|max|intValue|dMultiply|fromNumber|chunkSize|is1|g2|bitLength|q3|mod|exp|nNop|op_xor|op_andnot|0xf||intAt||mpl|mp|ts|||F2|yt|F1|int2char|appName|j_lm|0x3fff|ba|rng_seed_time|hex_tab|bin|T2|0xFFFF|lsw|SRP|success|SHA1|MD5|confirm_authentication|send_hash|Mstr|aux|kgx|calculations|receive_salts|register_user|register_send_verifier|register_receive_salt|variable|node|Ajax|Content|full_url|callback|Microsoft|ActiveXObject|XMLHttpRequest|server|ser|base_url|password|username|rng|Nstr|bnIsProbablePrime|isProbablePrime|bnGCD|bnPow|bnModInverse|bnModPow|bnDivideAndRemainder|bnRemainder|bnDivide|divide|bnMultiply|||bnSubtract|bnAdd|bnFlipBit|bnClearBit|bnSetBit||bnTestBit|testBit|bnBitCount|bnGetLowestSetBit|bnShiftRight|shiftRight|bnShiftLeft|bnNot|bnAndNot|bnXor|bnOr|bnAnd|bnMax|bnMin|bnEquals|bnToByteArray|bnSigNum|bnShortValue|bnByteValue|bnIntValue|bnClone|bnpMillerRabin|millerRabin|bnpModInt|modInt|bnpMultiplyUpperTo|multiplyUpperTo|bnpMultiplyLowerTo|multiplyLowerTo|bnpDAddOffset|bnpDMultiply|bnpAddTo|bnpChangeBit|bnpBitwiseTo|bnpFromNumber|bnpFromRadix|fromRadix|bnpToRadix|toRadix|bnpChunkSize|modPowInt|lplim|127|barrettSqrTo|barrettMulTo|barrettReduce|barrettRevert|barrettConvert|mu|nSqrTo|nMulTo|cbit|lbit||op_and|||nextBytes|number||continue|bnModPowInt|bnMod|bnBitLength|bnCompareTo|bnAbs|bnNegate|bnToString|bnpExp|bnpIsEven|bnpInvDigit|invDigit|bnpDivRemTo|bnpSquareTo|bnpMultiplyTo|bnpSubTo|bnpRShiftTo|bnpLShiftTo|bnpDRShiftTo|bnpDLShiftTo|bnpClamp|bnpFromString|bnpFromInt|bnpCopyTo|montSqrTo|montMulTo|montReduce|montRevert|montConvert|u0|um|mph|mt2|cSqrTo|cMulTo|cReduce|cRevert|cConvert|ms|d2|d1|FV|BI_RM|am3|am1|Netscape|am2|0x3fffffff|canary|rng_get_bytes|rng_get_byte|next|init|prng_newstate|random||crypto||rng_seed_int|ARC4next|ARC4init|str2binb|core_sha256||binb2hex|Utf8Encode|0xF|hexcase|mask|Maj|Sigma0256|Ch|Sigma1256|Gamma0256|Gamma1256|msw|successful|Authentication|been|has|User|hash|srp|join|slice|split|import_hashes|match|does|Server|authenticate|handshake|ok|user|undefined|nodeValue|firstChild|failed|send|close|Connection|urlencoded|form|www|application|POST|open|onreadystatechange|supported|catch|XMLHTTP|try|django|hash_import|c46d46600d87fef149bd79b81119842f3c20241fda67d06ef412d8f6d9479c58|115b8b692e0e045692cf280b436735c77a5a9e8a9e7ed56c965f87db5b2a2ece3|gcd|modInverse|divideAndRemainder||remainder|flipBit|clearBit|setBit|bitCount||andNot|xor|or|and|equals|toByteArray|shortValue|byteValue|509|503|499|491|487|479|467|463|461|457|449|443|439|433|431|421|419|409|401|397|389|383|379|373|367|359|353|349|347|337|331|317|313|311|307|293|283|281|277|271|269|263|257|251|241|239|233|229|227|223|211||199|197|193|191|181|179|173|167|163|157|151|149|139|137|131|113|109|107|103|101|768|144|substr|log|LN2|0xffffffff|0123456789abcdefghijklmnopqrstuvwxyz|Explorer|Internet|0xfffffff|0x3ffffff|0x4000000|0xefcafe|0xffffff|0xdeadbeefcafe|65536|appVersion|getTime|Date|0123456789abcdef|0123456789ABCDEF|224|192|2048|replace|0x5BE0CD19|0x1F83D9AB|0x9B05688C|0x510E527F|0xA54FF53A|0x3C6EF372|0xBB67AE85|0x6A09E667|0xC67178F2|0xBEF9A3F7|0xA4506CEB|0x90BEFFFA|0x8CC70208|0x84C87814|0x78A5636F|0x748F82EE|0x682E6FF3|0x5B9CCA4F|0x4ED8AA4A|0x391C0CB3|0x34B0BCB5||0x2748774C|0x1E376C08|0x19A4C116|0x106AA070|0xF40E3585|0xD6990624|0xD192E819|0xC76C51A3|0xC24B8B70||0xA81A664B|0xA2BFE8A1|0x92722C85|0x81C2C92E|0x766A0ABB|0x650A7354|0x53380D13|0x4D2C6DFC|0x2E1B2138|0x27B70A85|0x14292967|0x6CA6351|0xD5A79147|0xC6E00BF3|0xBF597FC7|0xB00327C8|0xA831C66D|0x983E5152|0x76F988DA|0x5CB0A9DC|0x4A7484AA|0x2DE92C6F|0x240CA1CC|0xFC19DC6|0xEFBE4786|0xE49B69C1|0xC19BF174|0x9BDC06A7|0x80DEB1FE|0x72BE5D74|0x550C7DC3|0x243185BE|0x12835B01|0xD807AA98|0xAB1C5ED5|0x923F82A4|0x59F111F1|0x3956C25B|0xE9B5DBA5|0xB5C0FBCF|0x71374491|0x428A2F98'.split('|'),0,{}))
diff --git a/javascript/srp.js b/javascript/srp.js
index 07f5206..48b6b71 100644
--- a/javascript/srp.js
+++ b/javascript/srp.js
@@ -1,5 +1,6 @@
function SRP(username, password, ser, base_url)
{
+ // Variables that will be used in the SRP protocol
var Nstr = "115b8b692e0e045692cf280b436735c77a5a9e8a9e7ed56c965f87db5b2a2ece3";
var N = new BigInteger(Nstr, 16);
var g = new BigInteger("2");
@@ -34,6 +35,8 @@ function SRP(username, password, ser, base_url)
return str;
}
};
+ // Perform ajax requests at the specified url, with the specified parameters
+ // Calling back the specified function.
function ajaxRequest(full_url, params, callback)
{
if( window.XMLHttpRequest)
@@ -61,13 +64,28 @@ function SRP(username, password, ser, base_url)
that.error_message("Ajax failed.");
}
};
-
+
+ // Get the text content of an XML node
+ function innerxml (node)
+ {
+ return node.firstChild.nodeValue;
+ };
+
+ // Check whether or not a variable is defined
+ function isdefined ( variable)
+ {
+ return (typeof(window[variable]) != "undefined");
+ };
+
+ // Initiate the registration process
this.register = function()
{
var handshake_url = url + paths("register/salt/");
var params = "I="+I;
ajaxRequest(handshake_url, params, register_receive_salt);
};
+
+ // Receive the salt for registration
function register_receive_salt()
{
if(xhr.readyState == 4 && xhr.status == 200) {
@@ -84,12 +102,14 @@ function SRP(username, password, ser, base_url)
}
}
};
+ // Send the verifier to the server
function register_send_verifier(v)
{
var params = "v="+v;
var auth_url = url + paths("register/user/");
ajaxRequest(auth_url, params, register_user);
};
+ // The user has been registered successfully, now login
function register_user()
{
if(xhr.readyState == 4 && xhr.status == 200) {
@@ -100,16 +120,15 @@ function SRP(username, password, ser, base_url)
}
};
- function innerxml (node)
- {
- return node.firstChild.nodeValue;
- };
+ // Start the login process by identifying the user
this.identify = function()
{
var handshake_url = url + paths("handshake/");
var params = "I="+I+"&A="+Astr;
ajaxRequest(handshake_url, params, receive_salts);
};
+
+ // Receive login salts from the server, start calculations
function receive_salts()
{
if(xhr.readyState == 4 && xhr.status == 200) {
@@ -126,6 +145,8 @@ function SRP(username, password, ser, base_url)
}
}
};
+
+ // Calculate S, M, and M2
function calculations(s, ephemeral)
{
//S -> C: s | B
@@ -146,12 +167,15 @@ function SRP(username, password, ser, base_url)
send_hash(M);
//M2 = H(A, M, K)
};
+
+ // Send M to the server
function send_hash(M)
{
var params = "M="+M;
var auth_url = url+paths("authenticate/");
ajaxRequest(auth_url, params, confirm_authentication);
};
+ // Receive M2 from the server and verify it
function confirm_authentication()
{
if(xhr.readyState == 4 && xhr.status == 200) {
@@ -159,7 +183,7 @@ function SRP(username, password, ser, base_url)
{
if(innerxml(xhr.responseXML.getElementsByTagName("M")[0]) == M2)
{
- import_hashes();
+ alert(that.srpPath);
that.success();
authenticated = true;
}
@@ -172,11 +196,15 @@ function SRP(username, password, ser, base_url)
}
}
};
+ // If we need SHA1 or MD5, we need to load the javascript files
function import_hashes()
{
+ // First check that the functions aren't already loaded
if(that.isdefined("SHA1") && that.isdefined("MD5")) return;
- var arr=srpPath.split("/");
+ // Get the directory that this javascript file was loaded from
+ var arr=that.srpPath.split("/");
var path = arr.slice(0, arr.length-1).join("/");
+ // If this file is called srp.min.js, we will load the packed hash file
if(arr[arr.length-1] == "srp.min.js")
{
var scriptElt = document.createElement('script');
@@ -184,6 +212,7 @@ function SRP(username, password, ser, base_url)
scriptElt.src = path+"/hash.min.js";
document.getElementsByTagName('head')[0].appendChild(scriptElt);
}
+ // Otherwise, this file is presumably srp.js, and we will load individual hash files
else
{
var scriptElt = document.createElement('script');
@@ -197,6 +226,8 @@ function SRP(username, password, ser, base_url)
}
}
+ // If someone wants to use the session key for encrypting traffic, they can
+ // access the key with this function.
this.key = function()
{
if(K == null)
@@ -210,17 +241,22 @@ function SRP(username, password, ser, base_url)
else
return K;
};
+
+ // This function is called when authentication is successful.
+ // Developers can set this to other functions in specific implementations
+ // and change the functionality.
this.success = function()
{
alert("Authentication successful.");
};
+ // If an error occurs, raise it as an alert.
+ // Developers can set this to an alternative function to handle erros differently.
this.error_message = function(t)
{
alert(t);
};
- this.isdefined = function ( variable)
- {
- return (typeof(window[variable]) == "undefined")? false: true;
- };
};
-var srpPath = document.getElementsByTagName('script')[document.getElementsByTagName('script').length-1].getAttribute("src");
+// This line is run while the document is loading
+// It gets a list of all <script> tags and finds the last instance.
+// The path to this script is the "src" attribute of that tag.
+SRP.prototype.srpPath = document.getElementsByTagName('script')[document.getElementsByTagName('script').length-1].getAttribute("src");