document.write('<div class="javascript" style="font-family: monospace;"><br />');
document.write('<br />');
document.write('&lt;script language=<span style="color: #3366CC;">&quot;javascript&quot;</span> type=<span style="color: #3366CC;">&quot;text/javascript&quot;</span> runat=<span style="color: #3366CC;">&quot;server&quot;</span>&gt;<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined<br />');
document.write('&nbsp;* in FIPS PUB 180-1<br />');
document.write('&nbsp;* Version 2.1a Copyright Paul Johnston 2000 - 2002.<br />');
document.write('&nbsp;* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet<br />');
document.write('&nbsp;* Distributed under the BSD License<br />');
document.write('&nbsp;* See http://pajhome.org.uk/crypt/md5 for details.<br />');
document.write('&nbsp;*/</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* Configurable variables. You may need to tweak these to be compatible with<br />');
document.write('&nbsp;* the server-side, but the defaults work in most cases.<br />');
document.write('&nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">var</span> hexcase = <span style="color: #CC0000;">0</span>;&nbsp; <span style="color: #009900; font-style: italic;">/* hex output format. 0 - lowercase; 1 - uppercase&nbsp; &nbsp; &nbsp; &nbsp; */</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">var</span> b64pad&nbsp; = <span style="color: #3366CC;">&quot;=&quot;</span>; <span style="color: #009900; font-style: italic;">/* base-64 pad character. &quot;=&quot; for strict RFC compliance&nbsp; &nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">var</span> chrsz&nbsp; &nbsp;= <span style="color: #CC0000;">8</span>;&nbsp; <span style="color: #009900; font-style: italic;">/* bits per input character. 8 - ASCII; 16 - Unicode&nbsp; &nbsp; &nbsp; */</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* These are the functions you\'ll usually want to call<br />');
document.write('&nbsp;* They take string arguments and return either hex or base-64 encoded strings<br />');
document.write('&nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> hex_sha1<span style="color: #66cc66;">&#40;</span>s<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #000066; font-weight: bold;">return</span> binb2hex<span style="color: #66cc66;">&#40;</span>core_sha1<span style="color: #66cc66;">&#40;</span>str2binb<span style="color: #66cc66;">&#40;</span>s<span style="color: #66cc66;">&#41;</span>,s.<span style="color: #006600;">length</span> * chrsz<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #66cc66;">&#125;</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> b64_sha1<span style="color: #66cc66;">&#40;</span>s<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #000066; font-weight: bold;">return</span> binb2b64<span style="color: #66cc66;">&#40;</span>core_sha1<span style="color: #66cc66;">&#40;</span>str2binb<span style="color: #66cc66;">&#40;</span>s<span style="color: #66cc66;">&#41;</span>,s.<span style="color: #006600;">length</span> * chrsz<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #66cc66;">&#125;</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> str_sha1<span style="color: #66cc66;">&#40;</span>s<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #000066; font-weight: bold;">return</span> binb2str<span style="color: #66cc66;">&#40;</span>core_sha1<span style="color: #66cc66;">&#40;</span>str2binb<span style="color: #66cc66;">&#40;</span>s<span style="color: #66cc66;">&#41;</span>,s.<span style="color: #006600;">length</span> * chrsz<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #66cc66;">&#125;</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> hex_hmac_sha1<span style="color: #66cc66;">&#40;</span>key, data<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> binb2hex<span style="color: #66cc66;">&#40;</span>core_hmac_sha1<span style="color: #66cc66;">&#40;</span>key, data<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #66cc66;">&#125;</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> b64_hmac_sha1<span style="color: #66cc66;">&#40;</span>key, data<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> binb2b64<span style="color: #66cc66;">&#40;</span>core_hmac_sha1<span style="color: #66cc66;">&#40;</span>key, data<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #66cc66;">&#125;</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> str_hmac_sha1<span style="color: #66cc66;">&#40;</span>key, data<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> binb2str<span style="color: #66cc66;">&#40;</span>core_hmac_sha1<span style="color: #66cc66;">&#40;</span>key, data<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* Perform a simple self-test to see if the VM is working<br />');
document.write('&nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> sha1_vm_test<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />');
document.write('<span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">return</span> hex_sha1<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;abc&quot;</span><span style="color: #66cc66;">&#41;</span> == <span style="color: #3366CC;">&quot;a9993e364706816aba3e25717850c26c9cd0d89d&quot;</span>;<br />');
document.write('<span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* Calculate the SHA-1 of an array of big-endian words, and a bit length<br />');
document.write('&nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> core_sha1<span style="color: #66cc66;">&#40;</span>x, len<span style="color: #66cc66;">&#41;</span><br />');
document.write('<span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; <span style="color: #009900; font-style: italic;">/* append padding */</span><br />');
document.write('&nbsp; x<span style="color: #66cc66;">&#91;</span>len &gt;&gt; <span style="color: #CC0000;">5</span><span style="color: #66cc66;">&#93;</span> |= 0x80 &lt;&lt; <span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">24</span> - len % <span style="color: #CC0000;">32</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; x<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>len + <span style="color: #CC0000;">64</span> &gt;&gt; <span style="color: #CC0000;">9</span><span style="color: #66cc66;">&#41;</span> &lt;&lt; <span style="color: #CC0000;">4</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #CC0000;">15</span><span style="color: #66cc66;">&#93;</span> = len;<br />');
document.write('<br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> w = Array<span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">80</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> a =&nbsp; <span style="color: #CC0000;">1732584193</span>;<br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> b = <span style="color: #CC0000;">-271733879</span>;<br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> c = <span style="color: #CC0000;">-1732584194</span>;<br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> d =&nbsp; <span style="color: #CC0000;">271733878</span>;<br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> e = <span style="color: #CC0000;">-1009589776</span>;<br />');
document.write('<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i = <span style="color: #CC0000;">0</span>; i &lt; x.<span style="color: #006600;">length</span>; i += <span style="color: #CC0000;">16</span><span style="color: #66cc66;">&#41;</span><br />');
document.write('&nbsp; <span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> olda = a;<br />');
document.write('&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> oldb = b;<br />');
document.write('&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> oldc = c;<br />');
document.write('&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> oldd = d;<br />');
document.write('&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> olde = e;<br />');
document.write('<br />');
document.write('&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> j = <span style="color: #CC0000;">0</span>; j &lt; <span style="color: #CC0000;">80</span>; j++<span style="color: #66cc66;">&#41;</span><br />');
document.write('&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>j &lt; <span style="color: #CC0000;">16</span><span style="color: #66cc66;">&#41;</span> w<span style="color: #66cc66;">&#91;</span>j<span style="color: #66cc66;">&#93;</span> = x<span style="color: #66cc66;">&#91;</span>i + j<span style="color: #66cc66;">&#93;</span>;<br />');
document.write('&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">else</span> w<span style="color: #66cc66;">&#91;</span>j<span style="color: #66cc66;">&#93;</span> = rol<span style="color: #66cc66;">&#40;</span>w<span style="color: #66cc66;">&#91;</span>j<span style="color: #CC0000;">-3</span><span style="color: #66cc66;">&#93;</span> ^ w<span style="color: #66cc66;">&#91;</span>j<span style="color: #CC0000;">-8</span><span style="color: #66cc66;">&#93;</span> ^ w<span style="color: #66cc66;">&#91;</span>j<span style="color: #CC0000;">-14</span><span style="color: #66cc66;">&#93;</span> ^ w<span style="color: #66cc66;">&#91;</span>j<span style="color: #CC0000;">-16</span><span style="color: #66cc66;">&#93;</span>, <span style="color: #CC0000;">1</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> t = safe_add<span style="color: #66cc66;">&#40;</span>safe_add<span style="color: #66cc66;">&#40;</span>rol<span style="color: #66cc66;">&#40;</span>a, <span style="color: #CC0000;">5</span><span style="color: #66cc66;">&#41;</span>, sha1_ft<span style="color: #66cc66;">&#40;</span>j, b, c, d<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>,<br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;safe_add<span style="color: #66cc66;">&#40;</span>safe_add<span style="color: #66cc66;">&#40;</span>e, w<span style="color: #66cc66;">&#91;</span>j<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>, sha1_kt<span style="color: #66cc66;">&#40;</span>j<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; &nbsp; &nbsp; e = d;<br />');
document.write('&nbsp; &nbsp; &nbsp; d = c;<br />');
document.write('&nbsp; &nbsp; &nbsp; c = rol<span style="color: #66cc66;">&#40;</span>b, <span style="color: #CC0000;">30</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; &nbsp; &nbsp; b = a;<br />');
document.write('&nbsp; &nbsp; &nbsp; a = t;<br />');
document.write('&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('&nbsp; &nbsp; a = safe_add<span style="color: #66cc66;">&#40;</span>a, olda<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; &nbsp; b = safe_add<span style="color: #66cc66;">&#40;</span>b, oldb<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; &nbsp; c = safe_add<span style="color: #66cc66;">&#40;</span>c, oldc<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; &nbsp; d = safe_add<span style="color: #66cc66;">&#40;</span>d, oldd<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; &nbsp; e = safe_add<span style="color: #66cc66;">&#40;</span>e, olde<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; <span style="color: #66cc66;">&#125;</span><br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">return</span> Array<span style="color: #66cc66;">&#40;</span>a, b, c, d, e<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('<br />');
document.write('<span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* Perform the appropriate triplet combination function for the current<br />');
document.write('&nbsp;* iteration<br />');
document.write('&nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> sha1_ft<span style="color: #66cc66;">&#40;</span>t, b, c, d<span style="color: #66cc66;">&#41;</span><br />');
document.write('<span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>t &lt; <span style="color: #CC0000;">20</span><span style="color: #66cc66;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #66cc66;">&#40;</span>b &amp; c<span style="color: #66cc66;">&#41;</span> | <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>~b<span style="color: #66cc66;">&#41;</span> &amp; d<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>t &lt; <span style="color: #CC0000;">40</span><span style="color: #66cc66;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> b ^ c ^ d;<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>t &lt; <span style="color: #CC0000;">60</span><span style="color: #66cc66;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #66cc66;">&#40;</span>b &amp; c<span style="color: #66cc66;">&#41;</span> | <span style="color: #66cc66;">&#40;</span>b &amp; d<span style="color: #66cc66;">&#41;</span> | <span style="color: #66cc66;">&#40;</span>c &amp; d<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">return</span> b ^ c ^ d;<br />');
document.write('<span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* Determine the appropriate additive constant for the current iteration<br />');
document.write('&nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> sha1_kt<span style="color: #66cc66;">&#40;</span>t<span style="color: #66cc66;">&#41;</span><br />');
document.write('<span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #66cc66;">&#40;</span>t &lt; <span style="color: #CC0000;">20</span><span style="color: #66cc66;">&#41;</span> ?&nbsp; <span style="color: #CC0000;">1518500249</span> : <span style="color: #66cc66;">&#40;</span>t &lt; <span style="color: #CC0000;">40</span><span style="color: #66cc66;">&#41;</span> ?&nbsp; <span style="color: #CC0000;">1859775393</span> :<br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span>t &lt; <span style="color: #CC0000;">60</span><span style="color: #66cc66;">&#41;</span> ? <span style="color: #CC0000;">-1894007588</span> : <span style="color: #CC0000;">-899497514</span>;<br />');
document.write('<span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* Calculate the HMAC-SHA1 of a key and some data<br />');
document.write('&nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> core_hmac_sha1<span style="color: #66cc66;">&#40;</span>key, data<span style="color: #66cc66;">&#41;</span><br />');
document.write('<span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> bkey = str2binb<span style="color: #66cc66;">&#40;</span>key<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>bkey.<span style="color: #006600;">length</span> &gt; <span style="color: #CC0000;">16</span><span style="color: #66cc66;">&#41;</span> bkey = core_sha1<span style="color: #66cc66;">&#40;</span>bkey, key.<span style="color: #006600;">length</span> * chrsz<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('<br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> ipad = Array<span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">16</span><span style="color: #66cc66;">&#41;</span>, opad = Array<span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">16</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i = <span style="color: #CC0000;">0</span>; i &lt; <span style="color: #CC0000;">16</span>; i++<span style="color: #66cc66;">&#41;</span><br />');
document.write('&nbsp; <span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; &nbsp; ipad<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span> = bkey<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span> ^ 0x36363636;<br />');
document.write('&nbsp; &nbsp; opad<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span> = bkey<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span> ^ 0x5C5C5C5C;<br />');
document.write('&nbsp; <span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> hash = core_sha1<span style="color: #66cc66;">&#40;</span>ipad.<span style="color: #006600;">concat</span><span style="color: #66cc66;">&#40;</span>str2binb<span style="color: #66cc66;">&#40;</span>data<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #CC0000;">512</span> + data.<span style="color: #006600;">length</span> * chrsz<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">return</span> core_sha1<span style="color: #66cc66;">&#40;</span>opad.<span style="color: #006600;">concat</span><span style="color: #66cc66;">&#40;</span>hash<span style="color: #66cc66;">&#41;</span>, <span style="color: #CC0000;">512</span> + <span style="color: #CC0000;">160</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('<span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* Add integers, wrapping at 2^32. This uses 16-bit operations internally<br />');
document.write('&nbsp;* to work around bugs in some JS interpreters.<br />');
document.write('&nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> safe_add<span style="color: #66cc66;">&#40;</span>x, y<span style="color: #66cc66;">&#41;</span><br />');
document.write('<span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> lsw = <span style="color: #66cc66;">&#40;</span>x &amp; 0xFFFF<span style="color: #66cc66;">&#41;</span> + <span style="color: #66cc66;">&#40;</span>y &amp; 0xFFFF<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> msw = <span style="color: #66cc66;">&#40;</span>x &gt;&gt; <span style="color: #CC0000;">16</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #66cc66;">&#40;</span>y &gt;&gt; <span style="color: #CC0000;">16</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #66cc66;">&#40;</span>lsw &gt;&gt; <span style="color: #CC0000;">16</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #66cc66;">&#40;</span>msw &lt;&lt; <span style="color: #CC0000;">16</span><span style="color: #66cc66;">&#41;</span> | <span style="color: #66cc66;">&#40;</span>lsw &amp; 0xFFFF<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('<span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* Bitwise rotate a 32-bit number to the left.<br />');
document.write('&nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> rol<span style="color: #66cc66;">&#40;</span>num, cnt<span style="color: #66cc66;">&#41;</span><br />');
document.write('<span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #66cc66;">&#40;</span>num &lt;&lt; cnt<span style="color: #66cc66;">&#41;</span> | <span style="color: #66cc66;">&#40;</span>num &gt;&gt;&gt; <span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">32</span> - cnt<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('<span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* Convert an 8-bit or 16-bit string to an array of big-endian words<br />');
document.write('&nbsp;* In 8-bit function, characters &gt;255 have their hi-byte silently ignored.<br />');
document.write('&nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> str2binb<span style="color: #66cc66;">&#40;</span>str<span style="color: #66cc66;">&#41;</span><br />');
document.write('<span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> bin = Array<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> mask = <span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">1</span> &lt;&lt; chrsz<span style="color: #66cc66;">&#41;</span> - <span style="color: #CC0000;">1</span>;<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i = <span style="color: #CC0000;">0</span>; i &lt; str.<span style="color: #006600;">length</span> * chrsz; i += chrsz<span style="color: #66cc66;">&#41;</span><br />');
document.write('&nbsp; &nbsp; bin<span style="color: #66cc66;">&#91;</span>i&gt;&gt;<span style="color: #CC0000;">5</span><span style="color: #66cc66;">&#93;</span> |= <span style="color: #66cc66;">&#40;</span>str.<span style="color: #006600;">charCodeAt</span><span style="color: #66cc66;">&#40;</span>i / chrsz<span style="color: #66cc66;">&#41;</span> &amp; mask<span style="color: #66cc66;">&#41;</span> &lt;&lt; <span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">32</span> - chrsz - i%<span style="color: #CC0000;">32</span><span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">return</span> bin;<br />');
document.write('<span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* Convert an array of big-endian words to a string<br />');
document.write('&nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> binb2str<span style="color: #66cc66;">&#40;</span>bin<span style="color: #66cc66;">&#41;</span><br />');
document.write('<span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> str = <span style="color: #3366CC;">&quot;&quot;</span>;<br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> mask = <span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">1</span> &lt;&lt; chrsz<span style="color: #66cc66;">&#41;</span> - <span style="color: #CC0000;">1</span>;<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i = <span style="color: #CC0000;">0</span>; i &lt; bin.<span style="color: #006600;">length</span> * <span style="color: #CC0000;">32</span>; i += chrsz<span style="color: #66cc66;">&#41;</span><br />');
document.write('&nbsp; &nbsp; str += String.<span style="color: #006600;">fromCharCode</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>bin<span style="color: #66cc66;">&#91;</span>i&gt;&gt;<span style="color: #CC0000;">5</span><span style="color: #66cc66;">&#93;</span> &gt;&gt;&gt; <span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">32</span> - chrsz - i%<span style="color: #CC0000;">32</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> &amp; mask<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">return</span> str;<br />');
document.write('<span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* Convert an array of big-endian words to a hex string.<br />');
document.write('&nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> binb2hex<span style="color: #66cc66;">&#40;</span>binarray<span style="color: #66cc66;">&#41;</span><br />');
document.write('<span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> hex_tab = hexcase ? <span style="color: #3366CC;">&quot;0123456789ABCDEF&quot;</span> : <span style="color: #3366CC;">&quot;0123456789abcdef&quot;</span>;<br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> str = <span style="color: #3366CC;">&quot;&quot;</span>;<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i = <span style="color: #CC0000;">0</span>; i &lt; binarray.<span style="color: #006600;">length</span> * <span style="color: #CC0000;">4</span>; i++<span style="color: #66cc66;">&#41;</span><br />');
document.write('&nbsp; <span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; &nbsp; str += hex_tab.<span style="color: #006600;">charAt</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>binarray<span style="color: #66cc66;">&#91;</span>i&gt;&gt;<span style="color: #CC0000;">2</span><span style="color: #66cc66;">&#93;</span> &gt;&gt; <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">3</span> - i%<span style="color: #CC0000;">4</span><span style="color: #66cc66;">&#41;</span>*<span style="color: #CC0000;">8</span><span style="color: #CC0000;">+4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> &amp; 0xF<span style="color: #66cc66;">&#41;</span> +<br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hex_tab.<span style="color: #006600;">charAt</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>binarray<span style="color: #66cc66;">&#91;</span>i&gt;&gt;<span style="color: #CC0000;">2</span><span style="color: #66cc66;">&#93;</span> &gt;&gt; <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">3</span> - i%<span style="color: #CC0000;">4</span><span style="color: #66cc66;">&#41;</span>*<span style="color: #CC0000;">8</span>&nbsp; <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> &amp; 0xF<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; <span style="color: #66cc66;">&#125;</span><br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">return</span> str;<br />');
document.write('<span style="color: #66cc66;">&#125;</span><br />');
document.write('<br />');
document.write('<span style="color: #009900; font-style: italic;">/*<br />');
document.write('&nbsp;* Convert an array of big-endian words to a base-64 string<br />');
document.write('&nbsp;*/</span><br />');
document.write('<span style="color: #003366; font-weight: bold;">function</span> binb2b64<span style="color: #66cc66;">&#40;</span>binarray<span style="color: #66cc66;">&#41;</span><br />');
document.write('<span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> tab = <span style="color: #3366CC;">&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&quot;</span>;<br />');
document.write('&nbsp; <span style="color: #003366; font-weight: bold;">var</span> str = <span style="color: #3366CC;">&quot;&quot;</span>;<br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i = <span style="color: #CC0000;">0</span>; i &lt; binarray.<span style="color: #006600;">length</span> * <span style="color: #CC0000;">4</span>; i += <span style="color: #CC0000;">3</span><span style="color: #66cc66;">&#41;</span><br />');
document.write('&nbsp; <span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> triplet = <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>binarray<span style="color: #66cc66;">&#91;</span>i&nbsp; &nbsp;&gt;&gt; <span style="color: #CC0000;">2</span><span style="color: #66cc66;">&#93;</span> &gt;&gt; <span style="color: #CC0000;">8</span> * <span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">3</span> -&nbsp; i&nbsp; &nbsp;%<span style="color: #CC0000;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> &amp; 0xFF<span style="color: #66cc66;">&#41;</span> &lt;&lt; <span style="color: #CC0000;">16</span><span style="color: #66cc66;">&#41;</span><br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>binarray<span style="color: #66cc66;">&#91;</span>i<span style="color: #CC0000;">+1</span> &gt;&gt; <span style="color: #CC0000;">2</span><span style="color: #66cc66;">&#93;</span> &gt;&gt; <span style="color: #CC0000;">8</span> * <span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">3</span> - <span style="color: #66cc66;">&#40;</span>i<span style="color: #CC0000;">+1</span><span style="color: #66cc66;">&#41;</span>%<span style="color: #CC0000;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> &amp; 0xFF<span style="color: #66cc66;">&#41;</span> &lt;&lt; <span style="color: #CC0000;">8</span> <span style="color: #66cc66;">&#41;</span><br />');
document.write('&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>binarray<span style="color: #66cc66;">&#91;</span>i<span style="color: #CC0000;">+2</span> &gt;&gt; <span style="color: #CC0000;">2</span><span style="color: #66cc66;">&#93;</span> &gt;&gt; <span style="color: #CC0000;">8</span> * <span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">3</span> - <span style="color: #66cc66;">&#40;</span>i<span style="color: #CC0000;">+2</span><span style="color: #66cc66;">&#41;</span>%<span style="color: #CC0000;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> &amp; 0xFF<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> j = <span style="color: #CC0000;">0</span>; j &lt; <span style="color: #CC0000;">4</span>; j++<span style="color: #66cc66;">&#41;</span><br />');
document.write('&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />');
document.write('&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>i * <span style="color: #CC0000;">8</span> + j * <span style="color: #CC0000;">6</span> &gt; binarray.<span style="color: #006600;">length</span> * <span style="color: #CC0000;">32</span><span style="color: #66cc66;">&#41;</span> str += b64pad;<br />');
document.write('&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">else</span> str += tab.<span style="color: #006600;">charAt</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>triplet &gt;&gt; <span style="color: #CC0000;">6</span>*<span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">3</span>-j<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> &amp; 0x3F<span style="color: #66cc66;">&#41;</span>;<br />');
document.write('&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />');
document.write('&nbsp; <span style="color: #66cc66;">&#125;</span><br />');
document.write('&nbsp; <span style="color: #000066; font-weight: bold;">return</span> str;<br />');
document.write('<span style="color: #66cc66;">&#125;</span><br />');
document.write('&lt;/script&gt;<br />');
document.write('<br />');
document.write('&nbsp;</div>');
document.write('<br />&nbsp;<br /><div style="font-size: 12px">Brought to you by the community at <a href="http://www.bytemycode.com/snippets/snippet/797/1/" target="_blank">byteMyCode</a>.</div>');
