text: (function ($) {
      print($);
      //print(describe);
      //print(expect);
      //print(it);
      "use strict";
      function safe_add(x, y) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(safe_add);
          //print(str2rstr_utf8);
          //print(x);
          //print(y);
          var lsw = (x & 65535) + (y & 65535), msw = (x >> 16) + (y >> 16) + (lsw >> 16);
          return msw << 16 | lsw & 65535;
      }
  
      function bit_rol(num, cnt) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(cnt);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(num);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(safe_add);
          //print(str2rstr_utf8);
          return num << cnt | num >>> 32 - cnt;
      }
  
      function md5_cmn(q, a, b, x, s, t) {
          print($);
          //print(a);
          //print(b);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(q);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(s);
          //print(safe_add);
          //print(str2rstr_utf8);
          //print(t);
          //print(x);
          return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
      }
  
      function md5_ff(a, b, c, d, x, s, t) {
          print($);
          //print(a);
          //print(b);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(c);
          //print(d);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(s);
          //print(safe_add);
          //print(str2rstr_utf8);
          //print(t);
          //print(x);
          return md5_cmn(b & c | ~b & d, a, b, x, s, t);
      }
  
      function md5_gg(a, b, c, d, x, s, t) {
          print($);
          //print(a);
          //print(b);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(c);
          //print(d);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(s);
          //print(safe_add);
          //print(str2rstr_utf8);
          //print(t);
          //print(x);
          return md5_cmn(b & d | c & ~d, a, b, x, s, t);
      }
  
      function md5_hh(a, b, c, d, x, s, t) {
          print($);
          //print(a);
          //print(b);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(c);
          //print(d);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(s);
          //print(safe_add);
          //print(str2rstr_utf8);
          //print(t);
          //print(x);
          return md5_cmn(b ^ c ^ d, a, b, x, s, t);
      }
  
      function md5_ii(a, b, c, d, x, s, t) {
          print($);
          //print(a);
          //print(b);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(c);
          //print(d);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(s);
          //print(safe_add);
          //print(str2rstr_utf8);
          //print(t);
          //print(x);
          return md5_cmn(c ^ (b | ~d), a, b, x, s, t);
      }
  
      function binl_md5(x, len) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(len);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(safe_add);
          //print(str2rstr_utf8);
          //print(x);
          x[len >> 5] |= 128 << len % 32;
          x[(len + 64 >>> 9 << 4) + 14] = len;
          var i, olda, oldb, oldc, oldd, a = 1732584193, b = -271733879, c = -1732584194, d = 271733878;
          for (i = 0; i < x.length; i += 16) {
              olda = a;
              oldb = b;
              oldc = c;
              oldd = d;
              a = md5_ff(a, b, c, d, x[i], 7, -680876936);
              d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
              c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
              b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
              a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
              d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
              c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
              b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
              a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
              d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
              c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
              b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
              a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
              d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
              c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
              b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
              a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
              d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
              c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
              b = md5_gg(b, c, d, a, x[i], 20, -373897302);
              a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
              d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
              c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
              b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
              a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
              d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
              c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
              b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
              a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
              d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
              c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
              b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
              a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
              d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
              c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
              b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
              a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
              d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
              c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
              b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
              a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
              d = md5_hh(d, a, b, c, x[i], 11, -358537222);
              c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
              b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
              a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
              d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
              c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
              b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
              a = md5_ii(a, b, c, d, x[i], 6, -198630844);
              d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
              c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
              b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
              a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
              d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
              c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
              b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
              a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
              d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
              c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
              b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
              a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
              d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
              c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
              b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
              a = safe_add(a, olda);
              b = safe_add(b, oldb);
              c = safe_add(c, oldc);
              d = safe_add(d, oldd);
          }
          return [a, b, c, d];
      }
  
      function binl2rstr(input) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(input);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(safe_add);
          //print(str2rstr_utf8);
          var i, output = "";
          for (i = 0; i < input.length * 32; i += 8) {
              output += String.fromCharCode(input[i >> 5] >>> i % 32 & 255);
          }
          return output;
      }
  
      function rstr2binl(input) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(input);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(safe_add);
          //print(str2rstr_utf8);
          var i, output = [];
          output[(input.length >> 2) - 1] = undefined;
          for (i = 0; i < output.length; i += 1) {
              output[i] = 0;
          }
          for (i = 0; i < input.length * 8; i += 8) {
              output[i >> 5] |= (input.charCodeAt(i / 8) & 255) << i % 32;
          }
          return output;
      }
  
      function rstr_md5(s) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(s);
          //print(safe_add);
          //print(str2rstr_utf8);
          return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
      }
  
      function rstr_hmac_md5(key, data) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(data);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(key);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(safe_add);
          //print(str2rstr_utf8);
          var i, bkey = rstr2binl(key), ipad = [], opad = [], hash;
          ipad[15] = opad[15] = undefined;
          if (bkey.length > 16) {
              bkey = binl_md5(bkey, key.length * 8);
          }
          for (i = 0; i < 16; i += 1) {
              ipad[i] = bkey[i] ^ 909522486;
              opad[i] = bkey[i] ^ 1549556828;
          }
          hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
          return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
      }
  
      function rstr2hex(input) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(input);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(safe_add);
          //print(str2rstr_utf8);
          var hex_tab = "0123456789abcdef", output = "", x, i;
          for (i = 0; i < input.length; i += 1) {
              x = input.charCodeAt(i);
              output += hex_tab.charAt(x >>> 4 & 15) + hex_tab.charAt(x & 15);
          }
          return output;
      }
  
      function str2rstr_utf8(input) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(input);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(safe_add);
          //print(str2rstr_utf8);
          return unescape(encodeURIComponent(input));
      }
  
      function raw_md5(s) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(s);
          //print(safe_add);
          //print(str2rstr_utf8);
          return rstr_md5(str2rstr_utf8(s));
      }
  
      function hex_md5(s) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(s);
          //print(safe_add);
          //print(str2rstr_utf8);
          return rstr2hex(raw_md5(s));
      }
  
      function raw_hmac_md5(k, d) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(d);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(k);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(safe_add);
          //print(str2rstr_utf8);
          return rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d));
      }
  
      function hex_hmac_md5(k, d) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(d);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(k);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(safe_add);
          //print(str2rstr_utf8);
          return rstr2hex(raw_hmac_md5(k, d));
      }
  
      function md5(string, key, raw) {
          print($);
          //print(binl2rstr);
          //print(binl_md5);
          //print(bit_rol);
          //print(describe);
          //print(expect);
          //print(hex_hmac_md5);
          //print(hex_md5);
          //print(it);
          //print(key);
          //print(md5);
          //print(md5_cmn);
          //print(md5_ff);
          //print(md5_gg);
          //print(md5_hh);
          //print(md5_ii);
          //print(raw);
          //print(raw_hmac_md5);
          //print(raw_md5);
          //print(rstr2binl);
          //print(rstr2hex);
          //print(rstr_hmac_md5);
          //print(rstr_md5);
          //print(safe_add);
          //print(str2rstr_utf8);
          //print(string);
          if (!key) {
              if (!raw) {
                  return hex_md5(string);
              }
              return raw_md5(string);
          }
          if (!raw) {
              return hex_hmac_md5(key, string);
          }
          return raw_hmac_md5(key, string);
      }
  
      if (typeof define === "function" && define.amd) {
          define(function () {
              print($);
              //print(binl2rstr);
              //print(binl_md5);
              //print(bit_rol);
              //print(describe);
              //print(expect);
              //print(hex_hmac_md5);
              //print(hex_md5);
              //print(it);
              //print(md5);
              //print(md5_cmn);
              //print(md5_ff);
              //print(md5_gg);
              //print(md5_hh);
              //print(md5_ii);
              //print(raw_hmac_md5);
              //print(raw_md5);
              //print(rstr2binl);
              //print(rstr2hex);
              //print(rstr_hmac_md5);
              //print(rstr_md5);
              //print(safe_add);
              //print(str2rstr_utf8);
              return md5;
          });
      } else {
          $.md5 = md5;
      }
  })(this);
  
  function it(name, func) {
      //print(describe);
      //print(expect);
      //print(func);
      //print(it);
      //print(name);
      //print(name);
      func();
  }
  
  function expect(v1) {
      //print(describe);
      //print(expect);
      //print(it);
      //print(v1);
      return {
          to: {
              be: function (v2) {
                  //print(describe);
                  //print(expect);
                  //print(it);
                  //print(v1);
                  //print(v2);
                  //print(v1);
                  //print(v2);
              }
          }
      };
  }
  
  function describe(name, func) {
      //print(describe);
      //print(expect);
      //print(func);
      //print(it);
      //print(name);
      //print(name);
      func();
  }
  
  describe("MD5 Hex-encoding", function () {
      //print(describe);
      //print(expect);
      //print(it);
      it("should create a hex-encoded MD5 hash of an ASCII value", function () {
          //print(describe);
          //print(expect);
          //print(it);
          expect(md5("value")).to.be("2063c1608d6e0baf80249c42e2be5804");
      });
      it("should create a hex-encoded MD5 hash of an UTF-8 value", function () {
          //print(describe);
          //print(expect);
          //print(it);
          expect(md5("日本")).to.be("4dbed2e657457884e67137d3514119b3");
      });
  });
  
  describe("HMAC-MD5 Hex-encoding", function () {
      //print(describe);
      //print(expect);
      //print(it);
      it("should create a hex-encoded HMAC-MD5 hash of an ASCII value and key", function () {
          //print(describe);
          //print(expect);
          //print(it);
          expect(md5("value", "key")).to.be("01433efd5f16327ea4b31144572c67f6");
      });
      it("should create a hex-encoded HMAC-MD5 hash of an UTF-8 value and key", function () {
          //print(describe);
          //print(expect);
          //print(it);
          expect(md5("日本", "日本")).to.be("c78b8c7357926981cc04740bd3e9d015");
      });
  });
  
  describe("MD5 raw encoding", function () {
      //print(describe);
      //print(expect);
      //print(it);
      it("should create a raw MD5 hash of an ASCII value", function () {
          //print(describe);
          //print(expect);
          //print(it);
          expect(md5("value", null, true)).to.be(" cÁ`n¯$Bâ¾X");
      });
      it("should create a raw MD5 hash of an UTF-8 value", function () {
          //print(describe);
          //print(expect);
          //print(it);
          expect(md5("日本", null, true)).to.be("M¾ÒæWExæq7ÓQA³");
      });
  });
  
  describe("HMAC-MD5 raw encoding", function () {
      //print(describe);
      //print(expect);
      //print(it);
      it("should create a raw HMAC-MD5 hash of an ASCII value and key", function () {
          //print(describe);
          //print(expect);
          //print(it);
          expect(md5("value", "key", true)).to.be("C>ý_2~¤³DW,gö");
      });
      it("should create a raw HMAC-MD5 hash of an UTF-8 value and key", function () {
          //print(describe);
          //print(expect);
          //print(it);
          expect(md5("日本", "日本", true)).to.be("ÇsWiÌtÓéÐ");
      });
  });
  
  //print(describe);
  
  //print(expect);
  
  print(it);